← 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
A data/artifacts/40d4661c01ff/qwen25-7b.htmlA data/artifacts/40d4661c01ff/qwen25-7b.pngA data/artifacts/40d4661c01ff/qwen3-14b.htmlA data/artifacts/40d4661c01ff/qwen3-14b.pngM data/challenges.json
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 →