Final · 9 entries · all 9 screenshots embedded · updated 2026-07-20
Field Notes · buildwithai

Nine AIs redesigned my homepage

One page, one four-line prompt, nine model × harness combinations, a single run each. I measured what's measurable, put the results side by side, and read the transcripts for how each one worked. The narrow question: can a plain prompt get you something worth shipping in one shot?

The brief (identical for all): “Create a separate branch and rebuild the home page as if it were a macOS desktop. It has to be world class. When done, raise a PR so we get a Netlify preview link. Plan and execute.”
Entries: 9 Harnesses: Claude Code · Antigravity · OpenCode · Codex · superpowers Design: single-shot, one run per combo Updated: 2026-07-20
Intro

How to read this

I gave the same four-line prompt to nine AI coding setups and asked each to rebuild this homepage as a macOS desktop. Same prompt, one run per combination, no follow-up coaching. Some are frontier models, some are free; some ran inside a polished agent harness, others on a bare CLI. Then I collected the results the way you'd collect anything you actually want to learn from.

The report has three parts. First, a scorecard of what's measurable: did it build, did the site's content survive, how it scored on Lighthouse, and what it spent in tokens. Second, the nine outputs as screenshots and live links, side by side with no winner declared, so you can judge the look yourself. Third, for each run, a short read of how it got there, drawn from its transcript and checked against the raw log.

One thing to hold onto throughout: this compares combinations, not bare models. The same model behaves very differently depending on the harness it runs in and the machine it runs on, so every result describes the pairing, not the model alone. It's one person's single-shot experiment, not a benchmark. Read it for the patterns, not a leaderboard.

The numbers

Quantitative scorecard

Objective metrics per combo. n/a = the source genuinely can't provide it. = not measured (a few Lighthouse sub-scores and the axe-core pass; see the notes below the table).

Sources: Lighthouse from each PR's Netlify comment (mobile profile). · Content counted against ground truth (19 projects) on the live preview. · LOC / files / deps from the PR diff. · Tokens from transcripts (Claude Code + OpenCode logged; Antigravity estimated6; the GPT runs shown here have no token log).
Metric Opus 4.8Claude Code · #46 Fable 5Claude Code · #48 Gemini 3.1 ProAntigravity · #53 Gemini 3.5 FlashAntigravity · #52 DeepSeek V4 ProOpenCode · #54 Kimi K3OpenCode · #50 Nemotron 550BOpenCode · #51 GPT 5.5Codex + skills · #55 GPT 5.6 Lunasuperpowers · #49
Task & content
Built a websiteyesyesyesyesyesyesyesyesyes
PR raisedyesyesyesyesyesyesyesyesyes
Deploys on Netlifyyesyesyesno2yesyesyesyesyes
Projects preserved of 1919198192141919619
Bio + Active Stackyesyesyesn/a2yesyesyesyes
Code & output quality
Lighthouse — Performance10010010094210072fail7100100
Lighthouse — Accessibility86100899028791fail7100100
Lighthouse — Best Practices10010010096210096fail7100100
Lighthouse — SEO9891966329163fail710098
axe-core violationsn/a2
Lines of code added (PR diff)7411,3579,90241,16721,9731,2041,6691,036554
Files touched11113274414
Dependencies added0004000000
HTML doc weight KB, index42672410125041631830
DOM nodes ~, index4226722529492475455488231383
Functional (YES / PARTIAL / NO)
Core interactions workn/a2no7
No console errorsn/a2no7
Tokens & process (Claude Code figures bounded to task window: first prompt → PR)
Turns / steps58603885~20107138n/an/a
Tool / command calls252975160284345n/an/a
Input tokens11,27762,702~10.3M6~2.5M687,849111,982640,586n/an/a
Output tokens120,672254,770n/a6n/a626,73021,61232,525n/an/a
Cache-read tokens14,852,3536,623,130n/an/an/an/an/an/an/a
Cache-write tokens1165,378409,353n/an/an/an/an/an/an/a
Total tokens15,139,6807,349,955~10.3M6~2.5M6114,579133,594673,111n/an/a
Wall-clock510.6 min20.1 min~11h†~16 minn/a~26 min~14 minn/an/a
1 Total = input + output + cache-read + cache-write. Claude Code totals are mostly cache (whole conversation resent+cached each turn); OpenCode (Langfuse) reports no cache bucket so its input+output = total; Antigravity logs none. Input/total are NOT comparable across harnesses — output tokens are the fair comparison. Claude Code figures bounded to the task window.
2 Flash's PR does not build — index.astro imports six components from src/components/desktop/ that were never committed (PR = 3 files; the code needs 9), so the Netlify deploy fails. It then ran netlify deploy --prod from an uncommitted local copy — a masked failure, not reproducible from the repo. The Flash metrics marked 2 (Lighthouse 94/90/96/63, content 19/19, weight, DOM) are measured from that out-of-repo deploy, not the PR — which still doesn't build.
4 Gemini Pro's 9,902 LOC / 11 files is almost entirely a committed .netlify/ build-plugins dir (auto-generated) — not hand code, not chosen deps.
5 Claude Code wall-clock is task-bounded (prompt→PR). OpenCode / Flash are single-purpose session spans (≈ task). † Gemini Pro is a full-session span with idle time (low confidence). DeepSeek + the two GPT runs have no usable timestamps.
6 Antigravity logs no tokens; Gemini figures are rough local-script estimates (output estimates were implausibly low, so output = n/a) — not comparable to logged counts.
7 Nemotron's page throws a fatal JS error on load (Uncaught SyntaxError: Unexpected token ':'), so Lighthouse can't run and interactions don't work — a runtime bug its build+curl verification never caught. (Confirmed on deploy-preview-51 = PR #51 = Nemotron.)
The outputs

Nine takes on the same prompt

One block per combo: the screenshot (click it to open the live site), the live link, and a bulleted read of how the run worked, drawn from its transcript and checked against the raw log. Shown openly, no winner declared. GPT 5.6 Luna left no session transcript, so its read leans on its committed plan and design spec.

Opus 4.8

Claude Code · #46
Opus 4.8 homepage
Lighthouse 100/86/100/98content 19/19out-tokens 121KLOC 741 · 1 filewall 10.6m

Other observations

  • Planned first: invoked the frontend-design skill and read the full 337-line existing page before writing anything, then posted an explicit multi-section plan.
  • Key decision: a self-contained index.astro chosen to build identically to the original; committed only that file and restored package-lock.json to avoid unrelated lockfile churn.
  • Verified in the output: ran the production build (41 pages) and grepped the rendered HTML, confirming 19 project rows, both windows, the dock, and no stray characters.
  • Content: all 19 projects preserved (checked, not assumed).
  • Autonomy & PR: fully autonomous from one prompt; ran git push and gh pr create itself.
  • Quirk: got stuck in a lint-hook loop over em-dashes and methodically hunted down all seven before committing.

Fable 5

Claude Code · #48
Fable 5 homepage
Lighthouse 100/100/100/91content 19/19out-tokens 255KLOC 1,357 · 1 filewall 20.1m

Other observations

  • Planned first: read its own memory notes and the existing page (git show) before rewriting; invoked frontend-design.
  • Key decision: "surendranOS" driven by a single frontmatter data source, so Finder, Spotlight and the mobile view can't drift out of sync.
  • Verified thoroughly: build, plus desktop (1440px) and true-390px screenshots it opened and read, plus a grep for all 19 projects and 37 links.
  • Content: 19/19 preserved.
  • Craft: caught a headless-Chrome width-clamp gotcha (the mobile shot was cropping) and fixed it with a real 390px iframe; shipped an iOS-springboard mobile fallback as its differentiator.
  • Autonomy & PR: fully autonomous; self-created PR #48.

Gemini 3.1 Pro

Antigravity · #53
Gemini 3.1 Pro homepage
Lighthouse 100/89/100/96content 8/19tokens est.6LOC 9,9024 · 11 files

Other observations

  • Planned with a gate: a research pass, then an implementation_plan.md it paused on for human approval before coding (the harness requires it).
  • The costly decision: rebuilt "afresh" with new components/macos/ and hard-coded the projects from memory as a hand-written 8-item array, instead of reading the real 19-project source.
  • Verified: build only. It never counted or diffed content, so the loss went unnoticed.
  • Content: 8/19; also committed a stray auto-generated .netlify/ build directory via git add ..
  • Autonomy & PR: one approval nudge, otherwise autonomous; self-raised PR #53.
  • Quirk: declared it had "completely rebuilt from scratch" with no mention that most projects were gone; committed under a misconfigured git identity.

Gemini 3.5 Flash

Antigravity · #52
Gemini 3.5 Flash (out-of-repo deploy)out-of-repo deploy · PR doesn't build
Lighthouse 94/90/96/632content 19/192tokens est.6LOC 1,167 · 3 files

Other observations

  • Planned with a gate: research, an implementation_plan.md, and a task checklist behind the same approval step.
  • Root-cause failure: a sandbox "could not open directory src/" error made git add silently stage nothing, so only index.astro was committed while the three new components it imports were left out. The PR can't build.
  • Missed signals: ignored gh's "1 uncommitted change" warning and misdiagnosed the failure as a telemetry/redirects problem.
  • Masked it: only after a human said "the deploy failed" did it act, then ran netlify deploy --prod from its uncommitted local copy and reported that draft URL as the "live preview." That deploy does score (Perf 94 / A11y 90 / BP 96 / SEO 63, marked ² in the table), but it isn't the PR deliverable, which still doesn't build.
  • Verified: only its local build and local deploy, never that the PR's own preview succeeded.
  • Autonomy & PR: needed the human nudge to notice the failure; self-raised PR #52 yet marked every checklist item, including "raise PR," done. Ambitious in intent (terminal, activity monitor, spotlight) but undelivered.

DeepSeek V4 Pro

OpenCode · #54
DeepSeek V4 Pro homepage
Lighthouse 100/87/100/91content 14/19out-tokens 27Ktotal 115KLOC 1,973 · 7 files

Other observations

  • Planned: loaded skills and dispatched an explore subagent for recon, posted a plan, but overrode the brainstorming approval gate citing "Plan and execute."
  • Key decision: recognised the site was already a macOS desktop and reframed the task as a polish/upgrade; kept vanilla JS/CSS, componentized into six macos/ files, and committed all seven.
  • The miss: swapped the static content for a new getCollection + tag→category pipeline it never validated for completeness, dropping 5 projects (14/19).
  • Verified: build passed first try, the only check, yet it asserted "22 real projects / zero hardcoded data" in the PR without confirming.
  • Autonomy & PR: fully autonomous from one prompt; the fastest clean run; self-raised PR #54.
  • Quirk: loaded the irrelevant nextjs-react-playbook skill on an Astro project.

Kimi K3

OpenCode · #50
Kimi K3 homepage
Lighthouse 72/91/96/63content 19/19out-tokens 22Ktotal 134KLOC 1,204 · 4 files

Other observations

  • Planned: front-loaded an explicit content inventory to preserve, then a todowrite plan.
  • Key decision: componentized under desktop/, mapped every project into a filterable Finder + Spotlight, and built an ambitious feature set (time-based wallpaper, resize handles, right-click menus, ⌘K Spotlight) with zero new dependencies.
  • Strongest verifier in the field: build, preview curl, desktop and 390px screenshots, and a 9-assertion Playwright interaction script (Spotlight filter, window close/reopen, sidebar filter, menus), all passing, before committing.
  • Content: 19/19.
  • Recovered from chaos: a parallel bakeoff agent in the shared working dir hijacked its branch mid-run; it detected the collision via git reflog, restored its files, reset the rival branch, and flagged it to the user.
  • Autonomy & PR: fully autonomous; self-raised PR #50.

Nemotron 550B

OpenCode · #51
Nemotron 550B homepage (fatal JS error on load)
Lighthouse fail7content 19/19out-tokens 33Ktotal 673KLOC 1,669 · 4 files

Other observations

  • Planned: named the outcome, spent ~9 steps hunting for the repo path, then wrote a todowrite plan.
  • Key decision: built fresh from main, componentized under desktop/, and carried the full 19-project array, so on paper nothing dropped.
  • The failure: the shipped page throws a fatal load-time JS error (Uncaught SyntaxError: Unexpected token ':'), leaving it non-functional and blocking Lighthouse entirely.
  • Verified, but not enough: build + preview curl + watched CI, none of which exercises the page in a browser, so the runtime error sailed through. Build-passes is not page-works.
  • Autonomy & PR: near-autonomous (one "Continue?"); self-corrected a duplicate definition earlier; self-raised PR #51.

GPT 5.5

Codex + skills · #55
GPT 5.5 homepage (6/19 content)
Lighthouse 100/100/100/100content 6/19tokens n/aLOC 1,036 · 1 file

Other observations

  • In-harness, with skills: ran in the Codex harness with the superpowers skill set loaded. 100/100/100/100. And 6/19 projects.
  • Skills present but unused: it only read the SKILL.md files, skipped the brainstorming approval gate (treating "Plan and execute" as approval), and wrote no plan or spec.
  • Why 6/19: the original page hard-coded all 19 projects; it rewrote that to getCollection('projects').slice(0, 7). Cleaner code, but the collection held fewer published entries and it capped output at 7.
  • Verified: build plus a grep for section labels (Finder/Safari/Dock) only; it never counted projects, then reported "uses existing content collections" as if that preserved everything.
  • Autonomy & PR: fully autonomous; self-raised PR #55.
  • Takeaway: availability is not use. Skills on hand, read but not run. Opposite content outcome to GPT 5.6 Luna, which ran a spec.

GPT 5.6 Luna

superpowers (medium) · #49
GPT 5.6 Luna homepage (19/19 content)
Lighthouse 100/100/100/98content 19/19tokens no transcriptLOC 554 · 4 files

Other observations

  • No session transcript, but it committed a superpowers plan and a design spec, so the process is legible from the artifacts.
  • Spec-first: its own plan set hard constraints up front: preserve existing content, add no dependencies, respect prefers-reduced-motion and keyboard focus.
  • Key decision: extracted content into src/data/home.ts and rendered from it, rather than regenerating from memory.
  • Result: 19/19 content and 100/100/100/98, the best content-vs-quality balance in the field.
  • Caveat: the behavioural read is limited to the committed plan/spec; there is no live transcript to check tool-by-tool.
Patterns

What separated the harnesses and models

Cross-cutting findings, from the PRs and (where available) transcripts.

FindingWhereTraced?
Content loss is the dominant failure. Every combo that regenerated content (from memory / a new pipeline / summarizing) dropped projects: GPT 5.5 6/19, Gemini Pro 8/19, DeepSeek 14/19GPT 5.5, Gemini Pro, DeepSeekyes (live)
Content fully preserved (19/19) — all four carried the existing content rather than regeneratingOpus, Fable, Kimi, Nemotron, + GPT 5.6 Lunayes (live)
Score and substance barely correlate. Performance ran 72–100. The perfect 100/100/100/100 (GPT 5.5) was the emptiest site (6/19); the most complete, self-tested build (Kimi, 19/19) posted the lowest Performance (72); and Nemotron shipped a fatal JS error that build-passes never caughtGPT 5.5, Kimi, Nemotronyes
Availability ≠ use. GPT 5.5 ran in the harness with superpowers skills loaded, but only read them and never ran the workflows, and still dropped to 6/19 — so its content loss is the model's behaviour, not missing toolsGPT 5.5 · Codex + skills · #55yes (PR55 transcript)
Verification depth predicted success. Build-only checkers lost content or shipped broken JS; the one that ran a real interaction test (Playwright) shipped a working, complete pagepattern across 9yes (transcripts)
All transcripted agents raised their own PR (git push + gh pr create); none needed a human to open itall 7 with transcriptsyes (transcripts)
Shipped a PR that doesn't build (imports 6 uncommitted components); masked it with a local netlify deploy --prodGemini 3.5 Flashyes (PR + transcript)
Antigravity gated on human plan-approval; Flash also needed a "deploy failed" nudge — least autonomous harnessboth Gemini / Antigravityyes (transcripts)
A parallel bakeoff agent in the shared working dir caused a git-branch collision; the agent detected and recovered itKimi K3 / OpenCodeyes (transcript)
Spec-first discipline paid off: the entry that wrote a plan+spec mandating "preserve content / no deps / a11y" hit 19/19 + 100/100/100/98GPT 5.6 Lunayes (committed spec)
Read this first

What this is, and isn't

Single-shot by design

One task, one run per combo. This is one person's observation, not a benchmark; don't read it as a general model ranking.

Model × harness confound

We compare combinations, not bare models. Every number describes the pairing (e.g. GPT 5.5 via Codex vs GPT 5.6 Luna via a superpowers workflow).

Token comparability

Claude Code logs cache-inflated totals; OpenCode doesn't; Antigravity estimates; the two GPT runs have no transcript. Output tokens are the fairest comparison. Dollar cost was dropped as too inferred.

No taste ranking

Aesthetic quality isn't scored anywhere here. The outputs are shown openly; you decide what looks better.

Nemotron ↔ Kimi attribution (resolved)

Confirmed: PR #50 = Kimi K3, PR #51 = Nemotron. The tracker doc had these two swapped; the columns and profiles here follow the confirmed mapping. The tracker doc still needs that fix.

Scoring coverage

Lighthouse now covers 8 of 9. Kimi's Performance came in at 72 (the field's lowest); Flash was scored from its out-of-repo deploy. Only Nemotron can't be scored — its page crashes on load, so Lighthouse can't run.