[object Object]

← back to Model Arena

auto-save: 2026-07-30T07:15:28 (2 files) — data/challenges.json data/artifacts/40d4661c01ff/

69710ee0df44c41a3a5d5e09071ecbed945335c4 · 2026-07-30 07:15:41 -0700 · Steve Abrams

Files touched

Diff

commit 69710ee0df44c41a3a5d5e09071ecbed945335c4
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 30 07:15:41 2026 -0700

    auto-save: 2026-07-30T07:15:28 (2 files) — data/challenges.json data/artifacts/40d4661c01ff/
---
 data/artifacts/40d4661c01ff/qwen25-7b.html | 142 ++++++++++++++++++++
 data/artifacts/40d4661c01ff/qwen25-7b.png  | Bin 0 -> 2724 bytes
 data/artifacts/40d4661c01ff/qwen3-14b.html | 200 +++++++++++++++++++++++++++++
 data/artifacts/40d4661c01ff/qwen3-14b.png  | Bin 0 -> 3910 bytes
 data/challenges.json                       |  55 ++++++++
 5 files changed, 397 insertions(+)

diff --git a/data/artifacts/40d4661c01ff/qwen25-7b.html b/data/artifacts/40d4661c01ff/qwen25-7b.html
new file mode 100644
index 0000000..8ac3a01
--- /dev/null
+++ b/data/artifacts/40d4661c01ff/qwen25-7b.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Interactive Fireworks</title>
+    <style>
+        body {
+            margin: 0;
+            overflow: hidden;
+            background-color: black;
+        }
+        canvas {
+            display: block;
+        }
+    </style>
+</head>
+<body>
+    <canvas id="fireworkCanvas"></canvas>
+    <script>
+        const canvas = document.getElementById('fireworkCanvas');
+        canvas.width = window.innerWidth;
+        canvas.height = window.innerHeight;
+
+        function randomRange(min, max) {
+            return Math.random() * (max - min) + min;
+        }
+
+        class Particle {
+            constructor(x, y, size, color) {
+                this.x = x;
+                this.y = y;
+                this.size = size;
+                this.color = color;
+                this.velocityX = randomRange(-2, 2);
+                this.velocityY = -4;
+                this.lifespan = 50 + Math.random() * 30;
+            }
+            update() {
+                this.x += this.velocityX;
+                this.y += this.velocityY;
+                this.size -= 1;
+                this.lifespan -= 1;
+            }
+            draw(context) {
+                context.beginPath();
+                context.arc(this.x, this.y, this.size, 0, Math.PI * 2);
+                context.fillStyle = this.color;
+                context.fill();
+            }
+        }
+
+        class Firework {
+            constructor(x, y) {
+                this.x = x;
+                this.y = y;
+                this.angle = randomRange(0, 2 * Math.PI);
+                this.power = randomRange(30, 50);
+                this.particles = [];
+            }
+            launch() {
+                for (let i = 0; i < this.power / 10; i++) {
+                    let particle = new Particle(this.x, this.y + 20, 2, 'hsl(' + randomRange(0, 360) + ',95%,45%)');
+                    particle.velocityY = -this.power * Math.sin(this.angle);
+                    particle.velocityX = this.power * Math.cos(this.angle);
+                    this.particles.push(particle);
+                }
+            }
+            update() {
+                for (let i = 0; i < this.particles.length; i++) {
+                    let p = this.particles[i];
+                    if (p.lifespan > 0) {
+                        p.update();
+                    } else {
+                        this.particles.splice(i, 1);
+                    }
+                }
+            }
+            draw(context) {
+                context.beginPath();
+                context.arc(this.x, this.y, 20, 0, Math.PI * 2);
+                context.fillStyle = 'hsl(' + randomRange(0, 360) + ',95%,45%)';
+                context.fill();
+                for (let p of this.particles) {
+                    p.draw(context);
+                }
+            }
+        }
+
+        let rockets = [];
+        const showInterval = setInterval(() => {
+            if (rockets.length < 10) {
+                rockets.push(new Firework(randomRange(0, canvas.width), randomRange(-20, -5)));
+            }
+        }, 300);
+
+        function draw(context) {
+            context.clearRect(0, 0, canvas.width, canvas.height);
+            for (let r of rockets) {
+                r.update();
+                r.draw(context);
+            }
+            if (!canvas.onmousemove && !canvas.onclick) {
+                clearInterval(showInterval);
+                window.removeEventListener('click', launchRocket);
+                window.addEventListener('click', () => {});
+            }
+        }
+
+        function launchRocket(e) {
+            const rocket = new Firework(e.clientX, e.clientY - 50);
+            rockets.push(rocket);
+            rocket.launch();
+        }
+
+        canvas.onmousemove = (e) => {
+            launchRocket(e);
+        };
+        canvas.onclick = (e) => {
+            launchRocket(e);
+        };
+
+        function autoShow() {
+            let count = 0;
+            const autoInterval = setInterval(() => {
+                if (count < 10) {
+                    rockets.push(new Firework(randomRange(0, canvas.width), randomRange(-20, -5)));
+                    rockets[rockets.length - 1].launch();
+                    count++;
+                } else {
+                    clearInterval(autoInterval);
+                }
+            }, 300);
+        }
+
+        window.onload = () => {
+            draw(canvas.getContext('2d'));
+            setTimeout(autoShow, 5000);
+        };
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/data/artifacts/40d4661c01ff/qwen25-7b.png b/data/artifacts/40d4661c01ff/qwen25-7b.png
new file mode 100644
index 0000000..ad57eb4
Binary files /dev/null and b/data/artifacts/40d4661c01ff/qwen25-7b.png differ
diff --git a/data/artifacts/40d4661c01ff/qwen3-14b.html b/data/artifacts/40d4661c01ff/qwen3-14b.html
new file mode 100644
index 0000000..6c41b85
--- /dev/null
+++ b/data/artifacts/40d4661c01ff/qwen3-14b.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="UTF-8">
+  <title>Interactive Fireworks</title>
+  <style>
+    html, body {
+      margin: 0;
+      padding: 0;
+      overflow: hidden;
+      background: black;
+      height: 100%;
+      width: 100%;
+      cursor: crosshair;
+    }
+    canvas {
+      display: block;
+    }
+  </style>
+</head>
+<body>
+<canvas></canvas>
+<script>
+  const canvas = document.querySelector('canvas');
+  const ctx = canvas.getContext('2d');
+  let width, height;
+
+  function resize() {
+    width = canvas.width = window.innerWidth;
+    height = canvas.height = window.innerHeight;
+  }
+  window.addEventListener('resize', resize);
+  resize();
+
+  const particles = [];
+  const rockets = [];
+
+  class Particle {
+    constructor(x, y, color, vx, vy, trailLength = 5) {
+      this.x = x;
+      this.y = y;
+      this.color = color;
+      this.vx = vx;
+      this.vy = vy;
+      this.trail = [];
+      this.trailLength = trailLength;
+      this.alpha = 1;
+    }
+
+    update() {
+      this.x += this.vx;
+      this.y += this.vy;
+      this.vy += 0.1; // gravity
+      this.alpha -= 0.01;
+      this.trail.push({ x: this.x, y: this.y });
+      if (this.trail.length > this.trailLength) this.trail.shift();
+    }
+
+    draw(ctx) {
+      ctx.beginPath();
+      for (let i = 0; i < this.trail.length; i++) {
+        const point = this.trail[i];
+        const opacity = 1 - (i / this.trail.length);
+        ctx.globalAlpha = opacity * this.alpha;
+        ctx.fillStyle = this.color;
+        ctx.fillRect(point.x, point.y, 2, 2);
+      }
+      ctx.globalAlpha = 1;
+    }
+  }
+
+  class Rocket {
+    constructor(x, y, targetX, targetY, color) {
+      this.x = x;
+      this.y = y;
+      this.targetX = targetX;
+      this.targetY = targetY;
+      this.color = color;
+      this.exploded = false;
+      this.particles = [];
+      this.vx = 0;
+      this.vy = 0;
+      this.alpha = 1;
+    }
+
+    update() {
+      if (!this.exploded) {
+        const dx = this.targetX - this.x;
+        const dy = this.targetY - this.y;
+        const dist = Math.sqrt(dx * dx + dy * dy);
+        if (dist < 5) {
+          this.explode();
+          return;
+        }
+        this.vx = (dx / dist) * 2;
+        this.vy = (dy / dist) * 2;
+        this.x += this.vx;
+        this.y += this.vy;
+      } else {
+        this.alpha -= 0.01;
+        if (this.alpha <= 0) return;
+        for (let p of this.particles) {
+          p.update();
+        }
+      }
+    }
+
+    explode() {
+      const angleStep = (Math.PI * 2) / 36;
+      for (let i = 0; i < 36; i++) {
+        const angle = i * angleStep;
+        const speed = Math.random() * 4 + 2;
+        const px = this.x;
+        const py = this.y;
+        this.particles.push(
+          new Particle(px, py, this.color, Math.cos(angle) * speed, Math.sin(angle) * speed)
+        );
+      }
+      this.exploded = true;
+    }
+
+    draw(ctx) {
+      if (!this.exploded) {
+        ctx.beginPath();
+        ctx.arc(this.x, this.y, 4, 0, Math.PI * 2);
+        ctx.fillStyle = this.color;
+        ctx.fill();
+      } else {
+        for (let p of this.particles) {
+          p.draw(ctx);
+        }
+      }
+    }
+  }
+
+  function createRocket(x, y, color) {
+    const targetX = Math.random() * width;
+    const targetY = Math.random() * height / 2;
+    rockets.push(new Rocket(x, y, targetX, targetY, color));
+  }
+
+  function animate() {
+    ctx.fillStyle = 'rgba(0, 0, 0, 0.2)';
+    ctx.fillRect(0, 0, width, height);
+
+    for (let i = rockets.length - 1; i >= 0; i--) {
+      const rocket = rockets[i];
+      rocket.update();
+      if (rocket.alpha <= 0) {
+        rockets.splice(i, 1);
+        continue;
+      }
+      rocket.draw(ctx);
+    }
+
+    for (let i = particles.length - 1; i >= 0; i--) {
+      const p = particles[i];
+      p.update();
+      if (p.alpha <= 0) {
+        particles.splice(i, 1);
+        continue;
+      }
+      p.draw(ctx);
+    }
+
+    requestAnimationFrame(animate);
+  }
+
+  canvas.addEventListener('click', (e) => {
+    const rect = canvas.getBoundingClientRect();
+    const x = e.clientX - rect.left;
+    const y = e.clientY - rect.top;
+    createRocket(x, y, `hsl(${Math.random() * 360}, 100%, 70%)`);
+  });
+
+  let autoShowInterval = null;
+  function autoShow() {
+    const x = Math.random() * width;
+    const y = Math.random() * height;
+    createRocket(x, y, `hsl(${Math.random() * 360}, 100%, 70%)`);
+  }
+
+  function startAutoShow() {
+    if (autoShowInterval) return;
+    autoShowInterval = setInterval(autoShow, 1500);
+  }
+
+  function stopAutoShow() {
+    if (!autoShowInterval) return;
+    clearInterval(autoShowInterval);
+    autoShowInterval = null;
+  }
+
+  // Start auto-show mode
+  startAutoShow();
+
+  animate();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/data/artifacts/40d4661c01ff/qwen3-14b.png b/data/artifacts/40d4661c01ff/qwen3-14b.png
new file mode 100644
index 0000000..52cbafa
Binary files /dev/null and b/data/artifacts/40d4661c01ff/qwen3-14b.png differ
diff --git a/data/challenges.json b/data/challenges.json
index 57c9327..3ce2220 100644
--- a/data/challenges.json
+++ b/data/challenges.json
@@ -30914,5 +30914,60 @@
     "judging": false,
     "aiPick": "qwen25-7b",
     "judged_at": "2026-07-29T14:17:23.568Z"
+  },
+  {
+    "id": "40d4661c01ff",
+    "title": "Daily: Particle Fireworks",
+    "prompt": "Interactive fireworks in one HTML file: click to launch rockets that burst into physics particles with trails, gravity, glow; include an auto-show mode.",
+    "category": "Games",
+    "designTools": false,
+    "created_at": "2026-07-30T14:15:04.108Z",
+    "winner": null,
+    "runs": [
+      {
+        "model": "qwen3-14b",
+        "status": "done",
+        "error": null,
+        "seconds": 32,
+        "cost": 0,
+        "started_at": "2026-07-30T14:15:04.133Z",
+        "finished_at": "2026-07-30T14:15:35.860Z",
+        "queued_at": "2026-07-30T14:15:04.115Z",
+        "bytes": 4688,
+        "thumb": true
+      },
+      {
+        "model": "gemma3-12b",
+        "status": "running",
+        "error": null,
+        "seconds": null,
+        "cost": null,
+        "started_at": "2026-07-30T14:15:35.871Z",
+        "finished_at": null,
+        "queued_at": "2026-07-30T14:15:04.120Z"
+      },
+      {
+        "model": "hermes3-8b",
+        "status": "queued",
+        "error": null,
+        "seconds": null,
+        "cost": null,
+        "started_at": null,
+        "finished_at": null,
+        "queued_at": "2026-07-30T14:15:04.124Z"
+      },
+      {
+        "model": "qwen25-7b",
+        "status": "done",
+        "error": null,
+        "seconds": 25,
+        "cost": 0,
+        "started_at": "2026-07-30T14:15:04.138Z",
+        "finished_at": "2026-07-30T14:15:29.483Z",
+        "queued_at": "2026-07-30T14:15:04.129Z",
+        "bytes": 4571,
+        "thumb": true
+      }
+    ]
   }
 ]
\ No newline at end of file

← 078d994 auto-save: 2026-07-29T07:37:00 (3 files) — data/challenges.j  ·  back to Model Arena  ·  auto-save: 2026-07-30T07:45:45 (6 files) — data/challenges.j 2aa4931 →