[object Object]

← back to Model Arena

author five detailed Model Arena challenges

7394085aa2b236d5b0484e8f9977082ef292aae6 · 2026-08-31 14:05:14 -0700 · Steve Abrams

Files touched

Diff

commit 7394085aa2b236d5b0484e8f9977082ef292aae6
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 31 14:05:14 2026 -0700

    author five detailed Model Arena challenges
---
 data/five-detailed-challenges.json | 27 ++++++++++++++++++++++++
 scripts/create-five-detailed.js    | 43 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 70 insertions(+)

diff --git a/data/five-detailed-challenges.json b/data/five-detailed-challenges.json
new file mode 100644
index 0000000..9e05b6f
--- /dev/null
+++ b/data/five-detailed-challenges.json
@@ -0,0 +1,27 @@
+[
+  {
+    "title": "Margin Intelligence Command Center",
+    "category": "Real Work",
+    "prompt": "Build a single-file executive margin-intelligence workspace for a premium interiors distributor. The audience is an owner deciding what to promote, reprice, or pause before Monday’s buying meeting. Show six realistic product families with revenue, units, gross margin, sample-conversion rate, return rate, and inventory cover. Include a date-range switcher, channel and vendor filters, a sortable opportunity table, and a contribution-margin waterfall. Selecting a row must update a side panel with trend, diagnosis, and a recommended action whose assumptions are editable. Flag contradictory signals such as high revenue with negative contribution. Provide loading, no-results, and stale-data states. Use restrained editorial typography, dense but calm information design, visible keyboard focus, semantic labels, and responsive behavior at 390px and 1440px. Success: a first-time operator can identify the largest recoverable margin leak, explain why it matters, model one change, and see the projected impact without instructions."
+  },
+  {
+    "title": "Afterlight Exhibition Story",
+    "category": "Editorial",
+    "prompt": "Create a single-file digital exhibition for an imaginary museum show titled ‘Afterlight: Rooms Remember.’ The experience should guide design-literate visitors through five objects spanning 1928–2040, each with a curator note, material provenance, conservation status, and one short audio-transcript excerpt. Open with a cinematic but accessible title sequence, then provide chapter navigation, an object index, and an optional compare mode that places two works side by side. Scrolling should reveal relationships through typography, scale, color, and restrained motion—not generic cards or decorative gradients. Add a reading-progress indicator, reduced-motion behavior, a high-contrast toggle, and a useful fallback when media is unavailable. All content must be invented but plausible. At 390px, preserve the narrative order and comparison utility. Success: a visitor can understand the curatorial thesis, inspect any object, compare two material histories, and return to their prior reading position using only keyboard controls."
+  },
+  {
+    "title": "Atelier Sample Configurator",
+    "category": "Commerce",
+    "prompt": "Build a single-file sample-order configurator for an architect specifying a hand-finished wallcovering called ‘Strata No. 7.’ Present four nuanced colorways, two grounds, three finish levels, lead-time ranges, memo pricing, and minimum-order rules. The primary journey is compare colorways, configure a memo, assign it to a project, and review a precise order summary before submission. Changing ground or finish must visibly update the material preview, availability, price, and care note; incompatible combinations should be prevented with a clear explanation. Include quantity controls, a project-name field, delivery urgency, saved configurations in localStorage, and a comparison tray for up to three variants. Invent credible product photography using layered CSS texture rather than empty placeholders. Handle out-of-stock, validation, and restored-session states. The visual language should feel like a quiet material library, not a generic shop. Success: a specifier can distinguish options, understand every cost and constraint, recover a saved configuration, and submit an error-free sample request on desktop or mobile."
+  },
+  {
+    "title": "Metro Disruption Decision Desk",
+    "category": "Decision Tools",
+    "prompt": "Design a single-file operations console for a transit controller managing a fictional city rail disruption during evening rush hour. Seed four lines, eight active incidents, passenger-load estimates, crew availability, and three competing recovery plans. The controller must filter incidents, inspect a timeline, change severity, assign a response team, and compare plans using weighted criteria for safety, passenger delay, cost, and network recovery. Reweighting criteria must recalculate the recommendation and explain which evidence changed the result. Include a schematic network map linked to the incident list, a confirmation step for consequential actions, an undoable simulation mode, and a timestamped decision log. Represent delayed telemetry, conflicting reports, no available crew, and a recovered state without blocking exploration. Use high-information-density design with strong hierarchy, color-blind-safe statuses, keyboard navigation, and an effective 390px command view. Success: an operator can locate the highest-risk incident, test two strategies, justify the recommended plan, and reconstruct the decision trail."
+  },
+  {
+    "title": "Orbital Freight Cooperative",
+    "category": "Games",
+    "prompt": "Create a polished single-file strategy game about coordinating freight among five orbital settlements before a solar storm closes the transfer windows. Each settlement has distinct demand, storage, trust, and production; the player has twelve turns to route water, medicine, reactor parts, and research samples using ships with different capacity and fuel costs. Build a readable star map, turn timeline, cargo planner, settlement detail view, and event log. Routes must animate clearly, consume resources, and resolve into meaningful consequences. Introduce at least three deterministic events, one negotiation choice, and a cascading shortage the player can anticipate from the data. Provide an interactive tutorial, pause/reset, difficulty selection, sound-off default, reduced-motion mode, and a complete win/loss summary that explains the decisive choices. The interface should evoke optimistic mission control rather than neon arcade clichés and remain playable by keyboard at 390px. Success: a new player understands the economy within two turns, can revise a plan before committing, and sees why the cooperative survived or failed."
+  }
+]
diff --git a/scripts/create-five-detailed.js b/scripts/create-five-detailed.js
new file mode 100644
index 0000000..f860df3
--- /dev/null
+++ b/scripts/create-five-detailed.js
@@ -0,0 +1,43 @@
+#!/usr/bin/env node
+const http = require('http');
+const challenges = require('../data/five-detailed-challenges.json');
+
+const BASE = process.env.BASE || 'http://127.0.0.1:9758';
+const AUTH = process.env.AUTH || 'admin:DW2024!';
+const MODELS = (process.env.MODELS || 'qwen3-14b,qwen25-7b,claude-code').split(',').filter(Boolean);
+
+function post(body) {
+  return new Promise((resolve, reject) => {
+    const url = new URL('/api/challenges', BASE);
+    const req = http.request(url, {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json',
+        Authorization: 'Basic ' + Buffer.from(AUTH).toString('base64'),
+      },
+    }, res => {
+      let raw = '';
+      res.on('data', chunk => raw += chunk);
+      res.on('end', () => {
+        let json;
+        try { json = JSON.parse(raw); } catch { return reject(new Error(`invalid response ${res.statusCode}: ${raw}`)); }
+        if (res.statusCode < 200 || res.statusCode >= 300) return reject(new Error(`create failed ${res.statusCode}: ${raw}`));
+        resolve(json);
+      });
+    });
+    req.on('error', reject);
+    req.end(JSON.stringify(body));
+  });
+}
+
+for (const item of challenges) {
+  if (item.prompt.length < 700 || item.prompt.length > 1300) throw new Error(`${item.title} prompt length ${item.prompt.length} outside 700-1300`);
+}
+
+if (process.env.PREVIEW === '1') {
+  console.log(JSON.stringify(challenges.map(item => ({ ...item, characters: item.prompt.length, models: MODELS })), null, 2));
+} else {
+  Promise.all(challenges.map(item => post({ ...item, models: MODELS })))
+    .then(created => console.log(JSON.stringify(created.map((item, i) => ({ id: item.id, title: challenges[i].title })), null, 2)))
+    .catch(error => { console.error(error.stack || error); process.exit(1); });
+}

← f50d818 record sophisticated brief verification  ·  back to Model Arena  ·  auto-data-snapshot: 2026-08-31T14:28:57 (12 data files) — da d4f3b79 →