← back to Model Arena
arena: add 'continue with battles' button + challenge-level iTerm2 build selector
ca53a7a8f255826e54ab47b3d3ed037adf5a28cc · 2026-07-23 08:52:50 -0700 · Steve
Files touched
Diff
commit ca53a7a8f255826e54ab47b3d3ed037adf5a28cc
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jul 23 08:52:50 2026 -0700
arena: add 'continue with battles' button + challenge-level iTerm2 build selector
---
public/index.html | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/public/index.html b/public/index.html
index b849f39..9cf6a4c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -188,6 +188,11 @@ tr.clk{cursor:pointer}tr.clk:hover td{background:rgba(0,229,255,.06)}
<span class="back" id="back">← back to challenges</span>
<a class="back" id="export" style="margin-left:16px" download>⬇ export battle as standalone HTML</a>
<button class="btn pink" id="rerun-all" style="margin-left:16px" title="Re-run EVERY model in this battle from scratch (re-spends any metered models)">↻ Re-run entire challenge</button>
+ <span id="d-buildbar" style="margin-left:16px;display:none">
+ <select id="d-build-pick" class="btn" title="Pick which model's artifact to build inside an iTerm2 Claude session"></select>
+ <button class="btn pink" id="d-build-go" title="Open an iTerm2 Claude session and build the selected model's artifact into a real project">⚒ Build in iTerm2</button>
+ </span>
+ <button class="btn" id="d-continue" style="margin-left:16px" title="Start another battle — jump to the New Battle form">⚔ Continue with battles</button>
<label class="blindtog"><input type="checkbox" id="blind"> 🕶 Blind judging — hide model names until a winner is crowned (kills brand bias)</label>
<h2 id="d-title"></h2>
<div class="meta" id="d-meta"></div>
@@ -408,6 +413,19 @@ async function renderDetail(id, statusOnly){
const bx=document.createElement('span'); bx.innerHTML=` · <button class="btn" id="bracket-btn">🏆 View bracket</button>`;
ai.appendChild(bx); $('#bracket-btn').onclick=()=>openBracket(c);
}
+ // Challenge-level iTerm2 build — pick which model's artifact to build INSIDE a Claude session
+ const doneRuns = c.runs.filter(r=>r.status==='done');
+ const bbar=$('#d-buildbar'), bpick=$('#d-build-pick'), bgo=$('#d-build-go');
+ if (bbar){
+ if (doneRuns.length){
+ bbar.style.display='';
+ const def = c.winner || c.aiPick || doneRuns[0].model;
+ bpick.innerHTML = doneRuns.map(r=>`<option value="${r.model}"${r.model===def?' selected':''}>${mLabel(r.model)}${r.model===c.winner?' 👑':(r.model===c.aiPick?' 🤖':'')}</option>`).join('');
+ bgo.onclick = ()=> buildInIterm(current.id, bgo, bpick.value);
+ } else { bbar.style.display='none'; }
+ }
+ // Continue with battles — jump to the New Battle form (mirrors the + New Battle nav)
+ { const cont=$('#d-continue'); if (cont) cont.onclick = ()=> show('new'); }
const arena = $('#d-arena');
const sig = c.runs.map(r=>r.model+':'+r.status+':'+(r.aiScore??'')+':'+(r.thumb?'t':'')).join('|') + '|' + c.winner + '|' + c.aiPick + '|' + c.judging;
if (statusOnly && arena.dataset.sig === sig) return c;
← 29978a5 auto-save: 2026-07-23T08:49:44 (8 files) — data/challenges.j
·
back to Model Arena
·
gemini image-gen fallback backend for the photoshop tool (Ad 19eb62d →