← Back to stats

Case study: anatomy of a failed build

Same prompt - build a complete, production-quality SaaS landing site - sent once to 10 different models. 50% actually finished. This isn't about which model is "best" - it's about the specific, different ways the rest failed. Some of them looked like they worked.

This task scaffolds a real multi-file Next.js app, not a single HTML file, so there's no screenshot for every run - but we rendered the one clean success below to see what it actually looks like.

The one clean success, rendered

poolside/laguna-xs-2.1:free build result
poolside/laguna-xs-2.1:freeFREE20 files · 2.8m · $0.023

50%

Finished with a real, working scaffold

1

Claimed their own todo list was 100% complete while shipping zero files

The exact prompt used

Build a single-page SaaS landing site using Next.js (App Router), TypeScript, and Tailwind CSS. It should feel like a premium startup site (Linear, Vercel, Stripe) - not a generic template.

## Design
Dark mode, near-black background (#080808), white text, electric lime + cyan + purple accents, soft glows. Glassmorphism cards, soft borders, subtle glow effects, rounded-xl/2xl corners. Tasteful hover/fade motion - alive but not distracting. Fully responsive, semantic HTML.

## Single page (/) - all in one file plus a few components
- Sticky navbar (logo, nav links, Sign In, Get Started CTA)
- Hero: bold gradient headline, subheading, primary + secondary CTA
- Feature grid (6 features)
- 3 testimonials with names/avatars/companies
- Pricing section (3 tiers: Free/Pro/Team, cards only, no separate page)
- FAQ (4-5 questions)
- Final CTA + footer

## Components
Build 4-5 small reusable components (Navbar, Footer, GlassCard, PricingCard or similar) - not one giant file, but keep it tight.

## Copy
Real, compelling SaaS marketing copy - no lorem ipsum.

## Goal
Should look and feel like it could launch on Product Hunt today - polished and visually impressive, built efficiently in one focused page rather than a full multi-page site.

What actually happened - 5 distinct failure modes, not one

cohere/north-mini-code:free

FREEText-dump (whole app as prose)41s

Wrote the entire multi-file app as a fenced code block inside its chat reply, narrating file-by-file, but never called the edit tool once. Finished fast and looks superficially like a real answer.

I'll create a premium single-page SaaS landing site with Next.js, TypeScript, and Tailwind CSS. Here's the complete implementation:

## Project Structure

[... full file contents follow as plain text, never staged as edits ...]

poolside/laguna-m.1:free

FREEClaimed-complete, shipped nothing5.0m

Its own todo list shows all 5 items marked "completed" - yet zero files were ever staged. The turn simply timed out with a todo list that had quietly lied about its own progress.

todos: ["completed", "completed", "completed", "completed", "completed"], edits: []

tencent/hy3:free

FREEPlain timeout, no recovery10.0m

Timed out at 300s on both the base attempt and the automatic retry. No todo list, no text, no edits either time.

poolside/laguna-xs.2:free

FREEPlain timeout, no recovery10.0m

Same as hy3:free - timed out on both attempts with nothing produced.

deepseek/deepseek-v4-pro

CHEAP-PAIDInconclusive (rate-limited)5.0m

Base attempt timed out; the retry came back in 0.3s with an OpenRouter rate-limit error rather than a real second attempt. Not a fair test of this model - infrastructure got in the way before it could really try.

The 5 that finished, fastest first

poolside/laguna-xs-2.1:freeFREEClean success20 files2.8m$0.023
xiaomi/mimo-v2.5CHEAP-PAIDSuccess via retry19 files4.3m$0.032
stepfun/step-3.7-flashCHEAP-PAIDSuccess via retry16 files7.3m$0.036
minimax/minimax-m3CHEAP-PAIDSuccess via continue (expensive)16 files9.0m$0.186
tencent/hy3-previewCHEAP-PAIDSuccess via continue, claimed-complete along the way18 files15.4m$0.018

Every one of these failure modes is now something codelazr actively detects and shows the user - the text-dump and claimed-complete patterns are caught by the client's uselessResponse/emptyResponse detectors, and a timeout with real partial progress offers Continue instead of silence.

Full testing history and methodology: /stats.