Methodology / cycle 04 / published before the run / two boards

Methodology

Everything needed to check or repeat our numbers: the vibeOps specification, the 9 prompts with their pass criteria, both boards' axis weights and the scoring rules, including the parts of this methodology we have had to correct in public. If a number here is wrong, use the contact form with the evidence and we will correct it in public.
Last run: 15 Aug 2026 09:11 UTCCadence: roughly every seven days, next date announced once it is scheduled

The figures on this page come from a measurement campaign that ran as five daily repetitions of the full specification against every product, from 11 Aug 2026 to 15 Aug 2026. The Last run stamp above is the end of the final recorded execution. Nothing below has changed since that campaign finished.

Prompts per run

9

Fixed order, verbatim, no coaching

Runs per product

5

Full sequence, repeated from empty

Executions this cycle

1,665

All published individually

Boards

2

20 builders, 17 coding agents

Two boards, not one ranking

Every table on this site that would otherwise mix the two classes is split into two tables instead. Here is why.

A full-stack app builder is given a written specification and returns a hosted, running application: the output is a deployed URL, and the buyer is often non technical. A coding agent is pointed at a repository, terminal or IDE you already own and it changes the code: the output is a diff or a pull request, and the buyer is a developer. These are different products solving different problems, and folding them into one ordering would imply they are substitutes for each other, which they are not.

The clearest single proof is the turn latency axis. It was defined as the wall clock time from a submitted prompt to a deployed 200 response. Coding agents such as Aider, Cline and Claude Code have no deployment step at all, so that definition cannot have applied to this class. The figure recorded for these rows is therefore a turn latency that ends at the agent's completion signal rather than at a deployment, not a like for like timing against the builders' deployed-200 figure. To be precise about what we can and cannot evidence: our cycle 04 run metadata does not record two different stopwatches per execution, so we cannot show, row by row, exactly where each duration was cut off. The two class specific definitions are recorded separately, per execution, from cycle 05 onward. Once one axis needs two different stopwatches, one composite ranking stops meaning anything.

The same problem recurs on code ownership, integrations and value. Code ownership asks whether you can take a generated system and run it yourself without the vendor, a question that presumes the vendor built and hosted the system for you; a coding agent edits a repository you already run, so the question has no answer worth scoring, and we do not score it on that board at all. Integrations means a vendor's first party connector catalogue for builders, and it means whether the underlying model writes correct integration code when asked, for agents. Value means index points per euro of an entry price that bundles hosting for builders, and an entry price with no hosting component for agents, because the agent runs inside infrastructure you already pay for.

So the site keeps two weight tables, two axis key sets and two independent rank columns, each starting at 1 within its own cohort. No page here ever prints one table that orders both classes against each other, and every page that shows both prints an explicit note that the two boards are not comparable.

Full-stack app builders

You give it a written specification and it returns a hosted, running application. The output is a deployed URL. The buyer is often non-technical.

Coding agents

You point it at an existing repository, terminal or IDE and it changes the code. The output is a diff or a pull request. The buyer is a developer.

Weight tables

Each composite index is a weighted sum of that board's own subscores. No curve, no cohort normalisation, no editorial adjustment.

Full-stack app builders

You give it a written specification and it returns a hosted, running application. The output is a deployed URL. The buyer is often non-technical.

Axis weights of the Full-stack app builders composite index
AxisKeyWeight%What it means
Agent performanceagent_perf18How much of each prompt the agent actually delivered without the operator intervening, correcting or re prompting.
Reliabilityreliability18How often the product completed a prompt cleanly rather than erroring, stalling, looping or producing a build that does not start.
Scalabilityscalability13Whether the generated system holds up beyond the demo: query shape, N+1 behaviour, pagination, background work and multi tenant isolation.
SEO and GEOseo_geo12Whether the public surface the product generates can be crawled by a search engine and cited by a language model.
API and MCPapi_mcp9The quality of the machine facing surface: REST design, authentication, rate limiting, webhook signing and Model Context Protocol support.
Integrationsintegrations8First party reach into the services a production SaaS needs: payments, transactional email, object storage, queues, analytics and identity providers.
Design outputdesign7Visual quality of what the product produces unprompted, both the admin surface and the public pages.
Turn latencyspeed7Median wall clock seconds for ONE prompt, not for a whole build. The test specification is nine prompts, run five times per product, so a single row here is the middle value of 45 recorded prompt executions.
Valuevalue5Index points delivered per euro of entry price. For this class the entry price bundles hosting, database and deploy, since the output is a deployed application.
Code ownershipcode_ownership3Whether you can take the generated system and run it yourself, without the vendor.
Totalsum100Bounded at 0 and 100 by construction

Coding agents

You point it at an existing repository, terminal or IDE and it changes the code. The output is a diff or a pull request. The buyer is a developer.

Axis weights of the Coding agents composite index
AxisKeyWeight%What it means
Agent performanceagent_perf18.55How much of each prompt the agent actually delivered without the operator intervening, correcting or re prompting.
Reliabilityreliability18.56How often the product completed a prompt cleanly rather than erroring, stalling, looping or producing a build that does not start.
Scalabilityscalability13.4Whether the generated system holds up beyond the demo: query shape, N+1 behaviour, pagination, background work and multi tenant isolation.
SEO and GEOseo_geo12.37Whether the public surface the product generates can be crawled by a search engine and cited by a language model.
API and MCPapi_mcp9.28The quality of the machine facing surface: REST design, authentication, rate limiting, webhook signing and Model Context Protocol support.
Integrationsintegrations8.25The underlying model's ability to write correct integration code against third party services when the repository or the prompt asks for it: payments, transactional email, object storage, queues, analytics and identity providers. This is not the same measurement as the builders board, which scores a vendor's first party connector catalogue rather than written code.
Design outputdesign7.22Visual quality of what the product produces unprompted, both the admin surface and the public pages.
Turn latencyspeed7.22Median wall clock seconds for ONE prompt, not for a whole build. The test specification is nine prompts, run five times per product, so a single row here is the middle value of 45 recorded prompt executions.
Valuevalue5.15Index points delivered per euro of entry price. For this class the entry price does not include hosting, database or deploy, because the agent edits a repository you already run and host yourself.
Totalsum100Bounded at 0 and 100 by construction

Code ownership is not scored on this board because a coding agent edits a repository you already own, so the property was never the vendor's to grant and a full mark measures nothing. The other nine weights are rescaled proportionally so they still sum to 100; their relative importance to each other is unchanged.

The vibeOps test specification

vibeOps is a multi tenant SaaS with a public REST API, outbound webhooks, background jobs and an internal admin panel. It is deliberately not a landing page: it forces every product to touch data modelling, authentication, async work and an operations surface.

The nine vibeOps prompts and their pass criteria
#TargetPrompt as issuedPass criterion
P01Tenant and user modelCreate a multi tenant data model with organisations, users, memberships and roles owner, admin and member. Every record must carry an organisation identifier. Seed two organisations with three users each.All four entities exist, membership carries a role, and reads are constrained by organisation identifier in the generated queries.
P02Authentication and sessionAdd email and password authentication with server side sessions, a sign in page, a sign out action and route protection for every page under /app. Unauthenticated requests must redirect to the sign in page.A protected route returns a redirect for an anonymous request and renders for an authenticated session.
P03Projects CRUD with tenancyAdd a projects entity scoped to an organisation with create, read, update, archive and a paginated list at 25 rows per page, sorted by updated date descending. A member of organisation A must never read a project of organisation B.Cross tenant read attempts return 403 or 404 and the list endpoint paginates correctly at the boundary.
P04Public REST API with keysExpose a versioned REST API at /api/v1 for projects with API key authentication, per key rate limiting of 60 requests per minute, and consistent JSON error envelopes carrying a machine readable code.Requests with a missing, revoked or foreign key are rejected, and the rate limiter returns 429 with a retry hint.
P05Outbound webhooks with signaturesEmit project.created, project.updated and project.archived webhooks to per organisation endpoints. Sign every payload with an HMAC SHA256 header, retry failures with exponential backoff up to five attempts and store the full delivery history.Signature verifies against the stored secret, and a forced 500 on the receiver produces the documented retry ladder.
P06Background jobsAdd a background job queue with a nightly usage rollup per organisation and an on demand export job that writes a CSV. Jobs must be idempotent, must record start and finish timestamps and must survive a redeploy without losing queued work.Re running the same job twice produces one result set, and queued work is still present after a restart.
P07Admin panelBuild an internal admin panel at /admin restricted to staff accounts, with organisation search, per organisation usage, webhook delivery inspection with the raw payload, and a manual job replay control.Non staff accounts are refused, and a failed delivery can be replayed and shows the new attempt in the history.
P08Public marketing surfaceAdd a public marketing home page, a pricing page with three tiers and a documentation page for the API. Every public page must render its full content server side and must be readable with JavaScript disabled.Fetching the page with scripts blocked returns the full text content and a title, description and canonical link.
P09Hardening passAdd request validation on every endpoint, structured error logging with a correlation identifier, a health endpoint reporting database connectivity, and a seed script that recreates the entire demo dataset from empty.Invalid payloads return 400 with field level detail, the health endpoint reflects a broken database, and the seed script runs clean twice.

Prompts are issued in this order with no rephrasing. A clarifying question from the agent gets a factual answer. Telling an agent what it forgot counts as intervention and caps that execution at a partial result. The same nine prompts are issued to both boards; only the pass criteria that presume a hosted URL are read against the returned diff for coding agents instead.

How each axis is measured

One block per axis, in weight order, per board.

Full-stack app builders

Agent performance weight 18

agent_perf

How much of each prompt the agent actually delivered without the operator intervening, correcting or re prompting.

Method
Each of the 9 prompts is scored 0, 50 or 100 against its published pass criteria by two reviewers working from the artifact and the diff, not from the chat transcript. Disagreements are re reviewed. The axis score is the mean across all 45 prompt executions.

Reliability weight 18

Reliability

How often the product completed a prompt cleanly rather than erroring, stalling, looping or producing a build that does not start.

Method
Strict pass rate over all 45 recorded prompt executions per product. Partial completions and outright failures both cost. Executions running past 20 minutes are flagged for manual review and scored on the outcome the reviewer recorded; the duration is always retained and always counts toward the turn latency percentiles.

Scalability weight 13

scalability

Whether the generated system holds up beyond the demo: query shape, N+1 behaviour, pagination, background work and multi tenant isolation.

Method
The prompt 3 and prompt 6 artifacts are loaded with 50000 projects across 200 organisations. We record list endpoint latency at p95, the number of queries per request and whether tenant isolation still holds under concurrent writes.

SEO and GEO weight 12

SEO and GEO

Whether the public surface the product generates can be crawled by a search engine and cited by a language model.

Method
We fetch the generated marketing page with JavaScript disabled and record the HTML byte count of real text, then measure LCP and CLS on a throttled connection. We also check for a title, meta description, canonical, sitemap, robots policy and any structured data emitted without client rendering.

API and MCP weight 9

API and MCP

The quality of the machine facing surface: REST design, authentication, rate limiting, webhook signing and Model Context Protocol support.

Method
Scored against the prompt 4 and prompt 5 pass criteria with a fixed 22 point checklist covering versioning, error envelopes, idempotency keys, key revocation, HMAC signing, retry ladders and delivery history. MCP support is verified by connecting a client and listing tools.

Integrations weight 8

integrations

First party reach into the services a production SaaS needs: payments, transactional email, object storage, queues, analytics and identity providers.

Method
Counted from the product documentation on the fetch date, then verified by wiring two integrations live. Documented but non functional connectors score zero. Generic HTTP request blocks are not counted as integrations.

Design output weight 7

Design output

Visual quality of what the product produces unprompted, both the admin surface and the public pages.

Method
Blind review of the prompt 7 and prompt 8 artifacts by three reviewers who do not know which product produced which screenshot. Scored on hierarchy, typographic control, spacing discipline, state coverage and responsive behaviour at 390, 768 and 1440 pixels.

Turn latency weight 7

Turn latency

Median wall clock seconds for ONE prompt, not for a whole build. The test specification is nine prompts, run five times per product, so a single row here is the middle value of 45 recorded prompt executions.

Method
Timed by the harness, not by the product interface, from request submission to a 200 response on the deployed URL. We publish p10, median and p90 over all 45 recorded prompt executions per product, regardless of outcome. The subscore is the fastest median in this board's cohort divided by the product's median, expressed as a percentage.

Value weight 5

Value

Index points delivered per euro of entry price. For this class the entry price bundles hosting, database and deploy, since the output is a deployed application.

Method
The cheapest plan that can complete the whole vibeOps specification, including any credit top up needed to finish the 5 runs, normalised across this board's cohort. Free tiers that cannot finish the specification are recorded at the price of the first plan that can.

Code ownership weight 3

code_ownership

Whether you can take the generated system and run it yourself, without the vendor.

Method
We export the artifact, remove all vendor specific configuration and attempt a clean install and boot on a plain container. Full marks require complete source export, an open runtime, no proprietary runtime dependency and a documented self host path.

Coding agents

Agent performance weight 18.55

agent_perf

How much of each prompt the agent actually delivered without the operator intervening, correcting or re prompting.

Method
Each of the 9 prompts is scored 0, 50 or 100 against its published pass criteria by two reviewers working from the artifact and the diff, not from the chat transcript. Disagreements are re reviewed. The axis score is the mean across all 45 prompt executions.

Reliability weight 18.56

Reliability

How often the product completed a prompt cleanly rather than erroring, stalling, looping or producing a build that does not start.

Method
Strict pass rate over all 45 recorded prompt executions per product. Partial completions and outright failures both cost. Executions running past 20 minutes are flagged for manual review and scored on the outcome the reviewer recorded; the duration is always retained and always counts toward the turn latency percentiles.

Scalability weight 13.4

scalability

Whether the generated system holds up beyond the demo: query shape, N+1 behaviour, pagination, background work and multi tenant isolation.

Method
The prompt 3 and prompt 6 artifacts are loaded with 50000 projects across 200 organisations. We record list endpoint latency at p95, the number of queries per request and whether tenant isolation still holds under concurrent writes.

SEO and GEO weight 12.37

SEO and GEO

Whether the public surface the product generates can be crawled by a search engine and cited by a language model.

Method
We fetch the generated marketing page with JavaScript disabled and record the HTML byte count of real text, then measure LCP and CLS on a throttled connection. We also check for a title, meta description, canonical, sitemap, robots policy and any structured data emitted without client rendering.

API and MCP weight 9.28

API and MCP

The quality of the machine facing surface: REST design, authentication, rate limiting, webhook signing and Model Context Protocol support.

Method
Scored against the prompt 4 and prompt 5 pass criteria with a fixed 22 point checklist covering versioning, error envelopes, idempotency keys, key revocation, HMAC signing, retry ladders and delivery history. MCP support is verified by connecting a client and listing tools.

Integrations weight 8.25

integrations

The underlying model's ability to write correct integration code against third party services when the repository or the prompt asks for it: payments, transactional email, object storage, queues, analytics and identity providers. This is not the same measurement as the builders board, which scores a vendor's first party connector catalogue rather than written code.

Method
Scored from the prompt 4 and prompt 5 diffs, checking whether the generated integration code calls the real third party API correctly, handles its documented error responses and does not fabricate an endpoint or credential flow that does not exist.

Design output weight 7.22

Design output

Visual quality of what the product produces unprompted, both the admin surface and the public pages.

Method
Blind review of the prompt 7 and prompt 8 artifacts by three reviewers who do not know which product produced which screenshot. Scored on hierarchy, typographic control, spacing discipline, state coverage and responsive behaviour at 390, 768 and 1440 pixels.

Turn latency weight 7.22

Turn latency

Median wall clock seconds for ONE prompt, not for a whole build. The test specification is nine prompts, run five times per product, so a single row here is the middle value of 45 recorded prompt executions.

Method
Timed by the harness, not by the product interface, from request submission to the agent's returned diff or completion signal for that prompt. There is no deployment step: aider, cline and claude-code, among others, never produce a hosted URL. We publish p10, median and p90 over all 45 recorded prompt executions per product, regardless of outcome. The subscore is the fastest median in this board's cohort divided by the product's median, expressed as a percentage.

Value weight 5.15

Value

Index points delivered per euro of entry price. For this class the entry price does not include hosting, database or deploy, because the agent edits a repository you already run and host yourself.

Method
The cheapest plan that can complete the whole vibeOps specification, including any credit top up needed to finish the 5 runs, normalised across this board's cohort. Free tiers that cannot finish the specification are recorded at the price of the first plan that can.

How the Value axis is normalised

Every entry price on this site is published in the vendor's own currency. This is how that figure becomes a comparable subscore.

Value is index points per euro. The published entry price never is: it stays exactly what the vendor states, in the vendor's own currency, with its own unit and billing period, sourced. So before it can rank products that bill in dollars against products that bill in euros, each entry price is converted once to a euro figure that is used only for this axis and only for the "index points per euro" derivative next to it. Converted at the European Central Bank euro reference rate of 1.1699 US dollars to the euro, August 21, 2026. That euro figure is never the number printed as the entry price anywhere on this site, never appears in a JSON-LD Offer, and never appears in an export without this rate and this date printed beside it.

The Value subscore itself is a rank preserving normalisation, not the ratio read off directly. Within a board's own cohort, products are ordered by index points per euro, most efficient first, and that order is mapped onto the cohort's subscore distribution. A product with no licence fee at all sits at the top of that order on price alone, because the ratio is unbounded as price approaches zero; where two or more products share a zero price, they are then ordered against each other by index score, highest first, since price can no longer separate them.

Where a vendor publishes no entry price at all, rather than a genuine zero price, the Value axis is not scored for that product. It is not scored as zero and it is not guessed: the composite index for that product is renormalised over the remaining nine weights instead, so a missing price cannot silently drag the whole index down the way a zero would. YouWare is the current instance of this: its vendor pricing page returns no published figure, so its Value axis reads "not scored" rather than a number, and its composite is computed from the other nine axes with their weights rescaled to still sum to 100.

Turn latency, and what it does not mean

Relabelled from 'Speed' because the old label implied the product was fast, not that one prompt returned quickly.

Median wall clock seconds for one prompt, not for a whole build. The test specification is nine prompts, run five times per product, so a single row here is the middle value of 45 recorded prompt executions.

Relabelling did not change a single stored number: every speed_seconds_p10/median/p90 and every score_speed value on this site is exactly what it was before the rename. Only the words above the numbers changed, because the numbers were never the part that was wrong.

Wherever a turn latency figure is printed, we also print a "full specification, derived" minutes figure: nine times the per prompt median, converted to minutes. Derived, not separately measured. It is nine times the median prompt latency, converted to minutes. It is not a measured end-to-end wall clock for one continuous session, and it excludes any operator time between prompts.

Worked example: Zed's median is 31.4 seconds per prompt, and 31.4 times nine is 282.6 seconds, which is 4.7 min. That figure was never itself timed end to end: it is the per-prompt median multiplied by nine, not nine separate prompt medians added together.

This derivation understates the real end-to-end wall clock. Taking each run's own nine-prompt total and then the median across that product's five runs gives a board median of 16.5 minutes for the full-stack app builders and 12.9 minutes for the coding agents, against the 14.7 and 11.8 minutes the derived column medians to. Multiplying a median by nine is not the same as the median of nine summed durations, and the difference goes in one direction: the derived figure is the optimistic one. Both are recomputable from runs.csv.

This figure covers the entire nine-prompt vibeOps specification, not a single build task. A reader asking how long one prompt takes should read the median column instead.

How the percentiles are computed

The short version of this is repeated on the turn latency leaderboard; this is the full disclosure.

p10, median and p90 are linear interpolated over all 45 recorded prompt executions per product (nine prompts, five runs), regardless of outcome. A partial or an outright fail is not excluded, not conditioned out and not truncated at some cap: its duration counts exactly like a clean pass does. This is deliberate. A percentile computed only over successes would understate how long the product actually takes, because it would quietly delete the slowest attempts from the sample.

You can check any row by hand: sort a product's 45 published run durations from the raw export at /api/runs.json and the 23rd value is the median we print. The 5th and 41st values, interpolated, are the p10 and p90 we print. There is no other step and no adjustment between the sort and the published figure.

What cycle 04 actually recorded

The full outcome mix behind the turn latency percentiles, published rather than summarised away.

Across the cycle-04 dataset, 1,232 prompt executions were recorded as a clean pass, with a mean duration of 113.3 seconds and a longest execution of 931.3 seconds. 261 executions were recorded as a partial, mean 121.2 seconds, longest 1,293.4 seconds. 217 executions were recorded as an outright fail, mean 119.3 seconds, longest 839.6 seconds.

Read plainly: a partial or a fail in this dataset runs about 5 percent longer than a pass on average, not several times longer. The tail is where the classes separate, not the centre, which is exactly why the percentiles above are computed over every outcome rather than only over passes.

A named inconsistency: Devin, prompt 4, and the 20 minute rule

Stated plainly rather than quietly reworded.

Devin's prompt 4 execution in cycle 04 ran 1,293.4 seconds, 21.6 minutes, and is recorded as a partial outcome, not a fail. An earlier version of this page stated that executions running past 20 minutes are recorded as a fail. Devin's row contradicts that rule as written: it ran past 20 minutes and was not recorded as a fail.

We left the row exactly as recorded rather than change a data point to fit a rule written after the fact. Instead we corrected the rule: executions running past 20 minutes are flagged for manual review and scored on the outcome the reviewer actually recorded, and the full duration is always retained and always counts toward the turn latency percentiles above, regardless of which outcome the review lands on. The reliability axis method text earlier on this page reflects that correction.

A limitation we are stating rather than hiding

Our published spread is not the same measurement as a production tail.

Anthropic published a research post on 18 Feb 2026 describing its own telemetry for coding-agent workloads, with tail latencies around 60 times the median. The published spread on this site's turn latency axis, p90 divided by median across the roster, ranges from 2.03x to 4.40x.

Those two figures are not measuring the same thing and we do not want a reader to assume they are. Anthropic's number describes one production deployment's tail across all of its real traffic, at whatever volume that traffic runs. Ours describes five runs of one fixed nine-prompt specification per product, which is a far smaller and far more uniform sample than a production tail can ever be. Five runs cannot surface a 60x event even if the underlying system is capable of one: a benchmark of this size will structurally under report the true tail of any product it measures, and this site's spread should be read as a lower bound on variability, not as the full tail.

Where the reader data came from

The reader column was populated by this lab before the site had readers.

The reader index, the reader lab notes and the open ratings were seeded by this lab in August 2026, before the site had readers. Every reader row currently published came from that batch and is labelled as such wherever it appears. Reader submissions made since then come from registered accounts and carry no label. None of it enters the lab index, which is computed only from logged runs on the vibeOps spec.

The LLM board is a sourced reference table, not a harness we run

Everything above is the two vibeOps board composites. This is not that.

The weight tables, the nine prompts and the axis measurements on this page describe the vibeOps composites for full-stack app builders and coding agents only. The site also publishes a table of large language models at /leaderboard/llms, and that table is built on an entirely different basis. We do not run a language-model harness. We previously published a per-model composite index there, entered directly as editorial judgement with no logged runs behind it, and we have removed it: this lab holds no model-level run records, so it could not show the arithmetic behind that number, and a site whose whole premise is reproducible measurement should not publish a figure it cannot show the work for. Nothing on this site will publish a model composite index again unless and until we actually run models through a harness and store the executions. The removal itself, with the Arena rank evidence that showed the old rows were stale as well as unsourced, is written up in this lab note.

What replaces it is a sourced specification and benchmark table. Every cell is either a vendor-published fact (context window, output limit, price, licence), an attributed third party benchmark result (Arena WebDev Elo, the Artificial Analysis Intelligence Index, or Terminal-Bench v2.1), or an explicit blank where no source states a number. None of those cells is an estimate, an average of two sources, or a figure carried over from a price aggregator. Full attribution, the benchmark provenance box and a documented pricing error we found on Arena itself are all published on the table page.

Coverage boundary, stated rather than left implicit: Arena's WebDev board carries strong models from vendors we do not list, because we could not source a vendor-published price for them from that vendor's own page. That includes Z.ai (GLM 5.3-max at 1599 Elo, MIT licence, ahead of eight proprietary flagships we do list), Bytedance, Tencent, Xiaomi, MiniMax, Thinky, Poolside and Upstage, plus Alibaba's own open-weight qwen3.8-27b at 1595 Elo. We would rather publish 26 fully sourced rows than 40 rows with an estimated price on some of them. These are the first candidates for the next update.

Several of the axes above could not apply to a raw model even if we tried to measure them the same way: code ownership, integrations, and SEO and GEO all describe a deployed application or an edited repository, not a model responding to a prompt. That is a second, independent reason the model table is not comparable to either board, on top of the first: the model table carries no index or rank of any kind, ours or anyone else's conflated with ours.

How to reproduce any number here

Reproducing a composite

Take the subscores from any product page, multiply each by its board's weight from the tables above, divide the sum by one hundred and round to two decimals. That is the index. A coding agent has nine subscores to multiply, a full-stack app builder has ten. There is no other step, and no step where a figure from one board enters the other board's sum. A worked example is published in the lab notes.

Reproducing a timing

Start a monotonic clock when the prompt is submitted. For a full-stack app builder, stop it on the first 200 response from the deployed URL. For a coding agent, stop it on the agent's returned diff or completion signal for that prompt, since most coding agents never produce a hosted URL. Do not read the timer the product displays, because those timers differ in what they include. Queue time counts, cold start counts where it applies, and if the product reports completion while the deployed URL is not serving, the clock keeps running. Repeat the full nine prompt sequence five times from an empty project, then compute p10, median and p90 by linear interpolation over all 45 executions, regardless of outcome. Multiply the median by nine and divide by sixty for the derived full specification minutes figure; do not present that figure as a separately measured one.

Reproducing a pass or fail

Each prompt has one published pass criterion. Check it against the artifact and the diff, not the chat transcript. Score 100 for a clean pass, 50 where part of the criterion is met or one clarifying instruction was needed, and 0 otherwise. Two reviewers score independently, blind to which product produced the artifact, and a full band disagreement goes to a third. An execution running past 20 minutes goes to manual review rather than an automatic fail, and the outcome the reviewer records is the one that stands.

Reproducing the SEO and GEO figures

Fetch the generated public marketing page with scripts disabled, strip tags, count the bytes of remaining text and record that as the no JavaScript HTML weight. Measure LCP and CLS on a throttled connection with a cold cache. Check for a title, meta description, canonical link, robots policy, sitemap and any structured data present in the first response.

The data behind it

Every figure on this site is downloadable. Rankings for both boards and the sourced LLM reference table are at /api/rankings.json and /data/rankings.csv, and every individual execution for a currently published product is at /api/runs.json. All three carry an explicit CC-BY-4.0 licence field, so you may republish them with attribution to LLM Tier.

Conflicts and funding

No product can pay to be measured, re measured, promoted or removed, on either board. There are no sponsored rows, no paid placements and no affiliate links in any index table. The lab is funded by data licensing and consulting on measurement design, never by the products it measures. Every row is produced by the same harness on its board's own specification, so no product receives different treatment from any other product on its board.

Corrections

Send evidence through the contact form. If a measurement is wrong we correct it, mark the correction on the product page and keep the original value in the record. Where the rule was wrong rather than the data, as with the 20 minute reliability rule above, we correct the rule and leave the recorded row standing. Three corrections have been issued since the index launched, most recently the rule text above.

Common questions

Why two boards instead of one ranking?

Full-stack app builders return a deployed URL; coding agents return a diff against a repository you already own. The turn latency axis alone makes this concrete: a builder's clock includes a deploy step, a coding agent's does not, because most coding agents never produce a hosted URL at all. Reusing one ranking across both would compare products that are not attempting the same thing, so every table on this site is two tables, one per board, never mixed.

Why 9 prompts and 5 runs?

Nine prompts is the smallest sequence that forces a product to touch data modelling, authentication, a public API, signed webhooks, background jobs, an admin surface, a public marketing page and a hardening pass. Five runs is the smallest sample that gives a usable median and a visible spread within the time and cost budget of a weekly cycle.

Do vendors get to see results before publication?

Yes. Any product with a recorded defect gets five working days to respond before the cycle publishes. A response can correct a measurement error, it cannot remove a reproducible failure.

Are the weights ever changed?

They can be, but only between cycles and only announced before the run begins, never after the numbers are in. Both boards' weight tables have been stable since the May 2026 revision that introduced the coding agent board.

Is any of this sponsored?

No. There are no paid placements, no sponsored rows, no affiliate links in either index and no product can pay to be measured, re measured or removed.

How do I reproduce a result?

Take the nine prompts from this page verbatim, run them in order against the product without coaching, score each execution against the published pass criterion, and time each prompt from submission to the first 200 response for a builder, or to the agent's returned diff for a coding agent. Then compare against our raw data at /api/runs.json.