How well frontier models design interfaces. Every model builds the same pages from the same briefs, and Rams grades each rendered page at desktop and phone size. It is our judge's opinion, held to a fixed method. Outside designers rank the same pages blind, and we publish how well they agree on Nov 6.
Too close to call at the top. GPT-6 Astra has the highest Index, 66.4, but it is not clearly ahead of Grok 4.7, GPT-6.1 Sol, Claude Sonnet 5.5, Gemini 4 Argon or Muse Wonder: the 95% interval on each gap includes zero, so their order is not proven. 37 of the 91 head-to-head pairs are clearly apart. The other 54 sit inside the noise.
Rows are numbered by Rams Index, 1 for the highest. Under each number is its range: every place the paired 95% intervals allow, from 1 plus the models clearly better to the total minus the models clearly worse.
Provisional: 1.0 judge passes per page, protocol 2
GPT-6 Astra: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Grok 4.7: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
GPT-6.1 Sol: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Claude Sonnet 5.5: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
GPT-6 Luna: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Gemini 4 Argon: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Muse Wonder: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Claude Opus 5.5: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.3 judge passes per page, protocol 2
GPT-5.6 Sol: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Claude Fable 5.1: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.3 judge passes per page, protocol 2
Claude Fable 5: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
Gemini 3.8 Flash: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.0 judge passes per page, protocol 2
DeepSeek V4 Pro: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Provisional: 1.3 judge passes per page, protocol 2
Claude Opus 4.8: grades, best and worst page
Cost and checks
How it ran
Index by brief
Grades by dimension, 1–5
Unranked · no scored page on every brief
3 of 10 pages were cut off before they finished. No Dashboard build finished, and a model needs a scored page on all five briefs to be ranked.
Qwen 3.8 Max: why it has no rank
How it ran
Index by brief
Cost
3 of 10 pages were cut off before they finished. No Dashboard build finished, and a model needs a scored page on all five briefs to be ranked.
How it ran
Index by brief
Cost
9 of 10 pages broke: 8 came back with no page and 1 was cut off before it finished. No Landing, Dashboard, Settings or Pricing build finished, and a model needs a scored page on all five briefs to be ranked.
How it ran
Index by brief
Cost
| 0–100 | 45–75 | Generation | Provider default | Median per page | Median (reasoning) | Pages | Share of pages | 7–35 | Index | Index | Index | Index | Index | Cross-judge | Secondary | Per page | Passes | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1, could be anywhere from 1–61 to 6 | GPT-6 AstraProvisional: 1.0 judge passes per page, protocol 2NewOpenAI · closed weights · 2026-09 | 66.4 | 57.7–75.0 | $0.43 | Default | 113s | 7.7k (0.5k) | 0 of 10 | 90% | 25.60 | 72.3 | 62.5 | 50.9 | 65.2 | 81.2 | 80.7 | 90.7 | 6.5 | 10 · 10 |
| 2, could be anywhere from 1–81 to 8 | Grok 4.7Provisional: 1.0 judge passes per page, protocol 2NewSpaceXSI · closed weights · 2026-09 | 66.1 | 58.6–72.0 | $0.13 | Default | 284s | 22.1k (13.1k) | 0 of 10 | 0% | 25.50 | 69.6 | 65.2 | 51.8 | 68.8 | 75.0 | 84.5 | 88.6 | 8.0 | 10 · 10 |
| 3, could be anywhere from 1–91 to 9 | GPT-6.1 SolProvisional: 1.0 judge passes per page, protocol 2OpenAI · closed weights · 2026-09 | 65.4 | 55.7–73.9 | $0.15 | Default | 102s | 7.2k (0.4k) | 0 of 10 | 80% | 25.30 | 70.5 | 68.8 | 47.3 | 61.6 | 78.6 | 79.8 | 88.8 | 5.2 | 10 · 10 |
| 4, could be anywhere from 1–111 to 11 | Claude Sonnet 5.5Provisional: 1.0 judge passes per page, protocol 2NewAnthropic · closed weights · 2026-09 | 61.8 | 56.1–70.0 | $0.14 | Default | 95s | 13.6k (2.7k) | 0 of 10 | 10% | 24.30 | 61.6 | 57.1 | 56.2 | 56.2 | 77.7 | 74.5 | 90.2 | 2.6 | 10 · 10 |
| 5, could be anywhere from 2–102 to 10 | GPT-6 LunaProvisional: 1.0 judge passes per page, protocol 2NewOpenAI · closed weights · 2026-09 | 61.8 | 54.5–69.5 | $0.005 | Default | 81s | 9.2k (0.8k) | 0 of 10 | 70% | 24.30 | 69.6 | 60.7 | 52.7 | 51.8 | 74.1 | 78.2 | 88.3 | 5.3 | 10 · 10 |
| 6, could be anywhere from 1–111 to 11 | Gemini 4 ArgonProvisional: 1.0 judge passes per page, protocol 2NewGoogle · closed weights · 2026-10 | 61.6 | 54.5–70.9 | $0.15 | Default | 171s | 15.7k (0.0k) | 0 of 10 | 50% | 24.25 | 66.1 | 54.5 | 53.6 | 56.2 | 77.7 | 76.1 | 86.4 | 3.1 | 10 · 10 |
| 7, could be anywhere from 1–121 to 12 | Muse WonderProvisional: 1.0 judge passes per page, protocol 2NewMeta · closed weights · 2026-10 | 60.5 | 53.2–68.9 | $0.25 | Default | 125s | 12.4k (1.1k) | 0 of 10 | 20% | 23.95 | 63.4 | 61.6 | 54.5 | 49.1 | 74.1 | 74.8 | 86.0 | 8.5 | 10 · 10 |
| 8, could be anywhere from 2–132 to 13 | Claude Opus 5.5Provisional: 1.0 judge passes per page, protocol 2Anthropic · closed weights · 2026-09 | 60.4 | 52.9–70.2 | $0.28 | Default (medium) | 102s | 13.2k (n/a) | 0 of 10 | 10% | 23.90 | 62.5 | 58.9 | 51.8 | 50.9 | 77.7 | 70.7 | 86.5 | 3.2 | 10 · 10 |
| 9, could be anywhere from 3–113 to 11 | GPT-5.6 SolProvisional: 1.3 judge passes per page, protocol 2OpenAI · closed weights · 2026-06 | 58.9 | 51.6–66.9 | $0.17 | Default | 57s | 8.5k (0.2k) | 0 of 15 | 33% | 23.50 | 67.0 | 52.1 | 52.7 | 51.2 | 71.7 | 79.3 | 88.6 | 4.7 | 15 · 20 |
| 10, could be anywhere from 5–135 to 13 | Claude Fable 5.1Provisional: 1.0 judge passes per page, protocol 2Anthropic · closed weights · 2026-08 | 58.9 | 52.0–65.9 | $0.87 | Default (always thinks) | 180s | 17.3k (n/a) | 0 of 10 | 30% | 23.50 | 67.9 | 58.0 | 50.9 | 50.0 | 67.9 | 77.1 | 88.5 | 3.8 | 10 · 10 |
| 11, could be anywhere from 5–135 to 13 | Claude Fable 5Provisional: 1.3 judge passes per page, protocol 2Anthropic · closed weights · 2026-06 | 57.6 | 51.0–67.0 | $0.53 | Default (always thinks) | 99s | 10.3k (n/a) | 0 of 15 | 20% | 23.13 | 59.5 | 56.0 | 49.4 | 49.7 | 73.5 | 74.5 | 88.7 | 3.2 | 15 · 20 |
| 12, could be anywhere from 8–148 to 14 | Gemini 3.8 FlashProvisional: 1.0 judge passes per page, protocol 2NewGoogle · closed weights · 2026-09 | 55.5 | 50.0–62.0 | $0.056 | Default | 94s | 14.4k (1.6k) | 0 of 10 | 40% | 22.55 | 64.3 | 50.0 | 50.0 | 50.0 | 63.4 | 69.6 | 84.2 | 5.0 | 10 · 10 |
| 13, could be anywhere from 8–148 to 14 | DeepSeek V4 ProProvisional: 1.0 judge passes per page, protocol 2NewDeepSeek · open weights for DeepSeek V4 Pro · 2026-08 | 54.6 | 48.9–61.4 | $0.032 | Default | 196s | 15.9k (5.8k) | 0 of 10 | 10% | 22.30 | 59.8 | 49.1 | 48.2 | 50.9 | 65.2 | 69.8 | 87.3 | 3.2 | 10 · 10 |
| 14, could be anywhere from 12–1412 to 14 | Claude Opus 4.8Provisional: 1.3 judge passes per page, protocol 2Anthropic · closed weights · 2026-05 | 52.9 | 48.0–60.5 | $0.15 | Default | 61s | 6.2k (n/a) | 0 of 15 | 33% | 21.80 | 51.5 | 48.8 | 47.3 | 49.1 | 67.6 | 69.5 | 85.2 | 2.5 | 15 · 20 |
| Unranked · no scored page on every brief, so no Index or interval | |||||||||||||||||||
| –Unranked | Qwen 3.8 MaxNewAlibaba · closed weights · 2026-093 of 10 pages were cut off before they finished. | – | – | $0.16 | Default | 645s | 25.0k (11.0k) | 3 of 10 | 43% (3 of 7) | – | 76.8 | Broken | 59.8 | 67.9 | 75.0 | – | – | – | 7 · – |
| –Unranked | Kimi K3NewMoonshot · open weights for Kimi K3 · 2026-073 of 10 pages were cut off before they finished. | – | – | $0.41 | Default | 721s | 28.4k (17.2k) | 3 of 10 | 0% (0 of 7) | – | 68.8 | Broken | 55.4 | 58.9 | 75.9 | – | – | – | 7 · – |
| –Unranked | GLM 5.3NewZhipu · open weights for GLM 5.3 · 2026-089 of 10 pages broke: 8 came back with no page and 1 was cut off before it finished. | – | – | $0.14 | Default | 542s | 32.0k (31.9k) | 9 of 10 | 0% (0 of 1) | – | Broken | Broken | Broken | Broken | 73.2 | – | – | – | 1 · – |
Rams Index against generation cost per page, log scale.
A model is on the frontier when no cheaper model is clearly better. Clearly better uses the same paired interval as the rank, so a cheaper model has to beat it outright, not by a point inside the noise.
Cost is what the model's API charged to build the page, from the run ledger at list price on run day. Judging cost is ours and stays out.
Row model against column model.Each model against every model below it. The number is the paired difference in Index points.
| GPT-6 Astra | Grok 4.7 | GPT-6.1 Sol | Sonnet 5.5 | GPT-6 Luna | Gemini 4 Argon | Muse Wonder | Opus 5.5 | GPT-5.6 Sol | Fable 5.1 | Fable 5 | Gemini 3.8 Flash | DeepSeek V4 Pro | Opus 4.8 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GPT-6 Astra | +0.4, inside the noise | +1.1, inside the noise | +4.6, inside the noise | +4.6, clearly better | +4.8, inside the noise | +5.9, inside the noise | +6.1, clearly better | +7.5, clearly better | +7.5, clearly better | +8.8, clearly better | +10.9, clearly better | +11.8, clearly better | +13.6, clearly better | |
| Grok 4.7 | -0.4, inside the noise | +0.7, inside the noise | +4.3, inside the noise | +4.3, inside the noise | +4.5, inside the noise | +5.5, inside the noise | +5.7, inside the noise | +7.1, clearly better | +7.1, clearly better | +8.5, clearly better | +10.5, clearly better | +11.4, clearly better | +13.2, clearly better | |
| GPT-6.1 Sol | -1.1, inside the noise | -0.7, inside the noise | +3.6, inside the noise | +3.6, inside the noise | +3.8, inside the noise | +4.8, inside the noise | +5.0, inside the noise | +6.4, inside the noise | +6.4, clearly better | +7.8, clearly better | +9.8, clearly better | +10.7, clearly better | +12.5, clearly better | |
| Claude Sonnet 5.5 | -4.6, inside the noise | -4.3, inside the noise | -3.6, inside the noise | 0.0, inside the noise | +0.2, inside the noise | +1.2, inside the noise | +1.4, inside the noise | +2.9, inside the noise | +2.9, inside the noise | +4.2, clearly better | +6.2, inside the noise | +7.1, clearly better | +8.9, clearly better | |
| GPT-6 Luna | -4.6, clearly behind | -4.3, inside the noise | -3.6, inside the noise | 0.0, inside the noise | +0.2, inside the noise | +1.2, inside the noise | +1.4, inside the noise | +2.9, inside the noise | +2.9, clearly better | +4.2, inside the noise | +6.2, clearly better | +7.1, clearly better | +8.9, clearly better | |
| Gemini 4 Argon | -4.8, inside the noise | -4.5, inside the noise | -3.8, inside the noise | -0.2, inside the noise | -0.2, inside the noise | +1.1, inside the noise | +1.2, inside the noise | +2.7, inside the noise | +2.7, inside the noise | +4.0, inside the noise | +6.1, clearly better | +7.0, clearly better | +8.8, clearly better | |
| Muse Wonder | -5.9, inside the noise | -5.5, inside the noise | -4.8, inside the noise | -1.2, inside the noise | -1.2, inside the noise | -1.1, inside the noise | +0.2, inside the noise | +1.6, inside the noise | +1.6, inside the noise | +2.9, inside the noise | +5.0, clearly better | +5.9, inside the noise | +7.7, clearly better | |
| Claude Opus 5.5 | -6.1, clearly behind | -5.7, inside the noise | -5.0, inside the noise | -1.4, inside the noise | -1.4, inside the noise | -1.2, inside the noise | -0.2, inside the noise | +1.4, inside the noise | +1.4, inside the noise | +2.8, inside the noise | +4.8, inside the noise | +5.7, inside the noise | +7.5, clearly better | |
| GPT-5.6 Sol | -7.5, clearly behind | -7.1, clearly behind | -6.4, inside the noise | -2.9, inside the noise | -2.9, inside the noise | -2.7, inside the noise | -1.6, inside the noise | -1.4, inside the noise | 0.0, inside the noise | +1.3, inside the noise | +3.4, clearly better | +4.3, clearly better | +6.1, clearly better | |
| Claude Fable 5.1 | -7.5, clearly behind | -7.1, clearly behind | -6.4, clearly behind | -2.9, inside the noise | -2.9, clearly behind | -2.7, inside the noise | -1.6, inside the noise | -1.4, inside the noise | 0.0, inside the noise | +1.3, inside the noise | +3.4, inside the noise | +4.3, inside the noise | +6.1, clearly better | |
| Claude Fable 5 | -8.8, clearly behind | -8.5, clearly behind | -7.8, clearly behind | -4.2, clearly behind | -4.2, inside the noise | -4.0, inside the noise | -2.9, inside the noise | -2.8, inside the noise | -1.3, inside the noise | -1.3, inside the noise | +2.1, inside the noise | +3.0, inside the noise | +4.8, clearly better | |
| Gemini 3.8 Flash | -10.9, clearly behind | -10.5, clearly behind | -9.8, clearly behind | -6.2, inside the noise | -6.2, clearly behind | -6.1, clearly behind | -5.0, clearly behind | -4.8, inside the noise | -3.4, clearly behind | -3.4, inside the noise | -2.1, inside the noise | +0.9, inside the noise | +2.7, inside the noise | |
| DeepSeek V4 Pro | -11.8, clearly behind | -11.4, clearly behind | -10.7, clearly behind | -7.1, clearly behind | -7.1, clearly behind | -7.0, clearly behind | -5.9, inside the noise | -5.7, inside the noise | -4.3, clearly behind | -4.3, inside the noise | -3.0, inside the noise | -0.9, inside the noise | +1.8, inside the noise | |
| Claude Opus 4.8 | -13.6, clearly behind | -13.2, clearly behind | -12.5, clearly behind | -8.9, clearly behind | -8.9, clearly behind | -8.8, clearly behind | -7.7, clearly behind | -7.5, clearly behind | -6.1, clearly behind | -6.1, clearly behind | -4.8, clearly behind | -2.7, inside the noise | -1.8, inside the noise |
The same pages through a second judge, GPT-5.6 Terra. The Index stays the Claude judge's score.
No sign the Claude judge favors Claude models. The Claude judge puts the Claude-built models 4.8 Index points behind the OpenAI-built ones. Terra puts them 4.3 Index points behind, on the same scale. The difference is -0.5 points (95% interval -4.0 to +3.2), so a lean of up to 4.0 points either way is not ruled out yet.
The two judges order the 14 models with a Kendall tau of 0.68 (95% interval 0.11 to 0.78). Across all 155 pages it is 0.57, and 0.36 within a brief, where the question is which build of the same page is better.
The widest split: Claude Sonnet 5.5 is fourth under the Claude judge and ninth under Terra.
| Model | Claude judge | Terra | Panel |
|---|---|---|---|
| GPT-6 Astra | 166.4 | 280.7 | 2+0.50 |
| Grok 4.7 | 266.1 | 184.5 | 1+0.61 |
| GPT-6.1 Sol | 365.4 | 379.8 | 3+0.42 |
| Claude Sonnet 5.5 | 461.8 | 974.5 | 7+0.06 |
| GPT-6 Luna | 461.8 | 578.2 | 4+0.19 |
| Gemini 4 Argon | 661.6 | 776.1 | 5+0.11 |
| Muse Wonder | 760.5 | 874.8 | 8+0.01 |
| Claude Opus 5.5 | 860.4 | 1170.7 | 10-0.14 |
| GPT-5.6 Sol | 958.9 | 479.3 | 6+0.08 |
| Claude Fable 5.1 | 958.9 | 677.1 | 8+0.01 |
| Claude Fable 5 | 1157.6 | 974.5 | 10-0.14 |
| Gemini 3.8 Flash | 1255.5 | 1369.6 | 12-0.41 |
| DeepSeek V4 Pro | 1354.6 | 1269.8 | 13-0.45 |
| Claude Opus 4.8 | 1452.9 | 1469.5 | 14-0.55 |
The seven grades behind the Index, on the 1–5 scale (axis zoomed to the range used), mean of desktop and phone. Pick up to four models.
The first track of the Index. Single-file pages built from written briefs, rendered and judged as a designer would see them.
5 public briefs in season 0.5. The private season-1 set (25 briefs plus these 5 as anchors) runs in v4.
Hierarchy, typography, spacing, color, components, composure, craft. Each graded 1–5 at desktop and at phone size.
How closely two judge passes on the same page agree, on 15 pages judged twice. Visual score 0.75, Terra grades 0.91.
Resamples briefs, builds within a brief and passes within a page, paired across models.
Everything the number depends on, stated once.
A leaderboard of how well models design interfaces. Each model builds the same pages from the same written briefs. Rams renders every page at 1440 and 390 px and grades it on seven dimensions a designer would look at. The Index is the sum of those grades, rescaled to 0–100.
Seven separate grades repeat better than a single verdict. On real webpages the grade sum separates design-led, typical and rough sites more clearly than our finding-based visual score, and two passes on the same page agree more often. The visual score is still shown, as a secondary column.
Rows are numbered by Rams Index, 1 for the highest. A model is clearly better than another when the paired 95% interval on the difference sits above zero. Each row also shows its rank range: every place those comparisons allow, from 1 plus the models clearly better to the total minus the models clearly worse. A wide range is a finding, not an omission: the board cannot order that model yet.
We run the same pages through GPT-5.6 Terra as a second judge and print it beside the score. No sign the Claude judge favors Claude models. The Claude judge puts the Claude-built models 4.8 Index points behind the OpenAI-built ones. Terra puts them 4.3 Index points behind, on the same scale. The difference is -0.5 points (95% interval -4.0 to +3.2), so a lean of up to 4.0 points either way is not ruled out yet. The Judges section of the Index shows each model's order under both. OpenAI Decisions (planned, v4) is the third judge from v4.
Designers. This is season 0.5, published before their read: working designers rank the same pages blind, and the read rule was fixed before any of their answers were opened. Until that read (2026-11-06), this is the judge's opinion: stable and repeatable, not yet validated by designers.
The brief texts of the season-1 set and the judge prompt. The method, the scores, the intervals and the sample pages are public. Five public briefs run alongside the private ones as anchors, so a model that overfits the public set shows up as a gap.
The full method, with every known weakness: How Rams measures design
The judge that graded these pages reviews the UI your agents write. Run it in Claude Code, Cursor or Codex while you build, or on every pull request.
Frameworks