v0.1 prototype rejected — "AI slop" → full rebuild¶
| Date | 2026-04-26 |
| Severity | High — entire prototype scrapped, 2.5 hour rebuild |
| Status | Resolved — v1.0.0-rebuild ships the rebuild |
Summary¶
The first 961tech prototype (v0.1.0-prototype tag) was rejected by MASTER on review with the verdict "AI slop." Visual polish, build UX, and depth of catalog were all below acceptable. A full rebuild in the same session shipped v1.0.0-rebuild 2 hours and 20 minutes later with a different design language, a different build paradigm, and 3× the catalog data.
Timeline¶
- 2026-04-26 ~02:00 — v0.1 prototype tagged. 554 listings scraped across 3 categories (CPU, GPU, MOTHERBOARD), 67 canonical products, 12.5% match rate, default zinc-cyan Tailwind palette, 2-step wizard build flow.
- ~02:25 — MASTER reviews. Verdict: AI slop. Specifically:
- Visual: stock dark-zinc + cyan-accent template, no design language
- Typography: system fonts only
- Build flow: 2-step wizard (CPU → MB → done) felt patronising for an audience that builds PCs
- Categories: only 3 of 8 PC component types
- Compat checks: 1 rule (CPU↔MB socket)
- Live build card: empty white space on the right of hero
- Empty build state: "Step 1 of 2" — nothing inviting
- ~02:30 — Rebuild kicks off
- ~04:50 —
v1.0.0-rebuildready for review
Root cause¶
The v0.1 prototype optimised for "ship something" over "ship something good." Specific contributing factors:
- No design system. Defaulted to Tailwind's stock dark theme (zinc + cyan) — recognisable as the "AI did this in 30 minutes" look. No palette work, no font pairing, no spacing rhythm.
- No reference quality bar. Didn't anchor against best-in-class peers (Linear, Stripe, PCPartPicker, Vercel) before designing. Result: design defaults filled the gap.
- No domain research on the build UX. Picked a step wizard because it's a common pattern, not because it matches how PC builders work. Didn't validate against PCPartPicker, Newegg's builder, or any real PC-building flow.
- Premature scoping. Scraping just 3 categories instead of all 8 meant browse and build pages had nothing to populate. Scoping should have included "enough catalog data for the UI to feel real."
- Compat rules trivialised. One rule (CPU↔MB socket) is barely a compat check. Real value requires PSU wattage + GPU clearance at minimum.
What changed in the rebuild¶
| v0.1 (rejected) | v1.0 (rebuild) | |
|---|---|---|
| Visual | zinc-950 + cyan-400 default Tailwind | Petrol black + cedar green + heat orange custom palette |
| Typography | system fonts | Fraunces serif (display) + Switzer sans + JetBrains Mono |
| Build flow | 2-step wizard (CPU → MB → done) | All-slots PCPartPicker model (8 slots, pick in any order) |
| Categories scraped | 3 (CPU, GPU, MOTHERBOARD) | 8 (+ COOLER, RAM, STORAGE, PSU, CASE) |
| Listings in DB | 554 | 1,701 (+207%) |
| Canonical products | 67 | 303 (+352%) |
| Match rate | 12.5% (GPU 0%) | 13.5% overall (GPU 40% via AIB matcher) |
| Product images | none | 28/30 CPUs, 8/18 GPUs, etc. |
| Hero | text only on left, empty right | Animated stagger + Live Build card with floating "Save $94" chip |
| Empty build state | "Step 1 of 2" | 3 Quick Start templates + 8 visible slots |
| Compatibility rules | 1 (CPU↔MB socket) | 3 (+ PSU wattage, + GPU↔Case clearance) |
| Footer | hardcoded "554 indexed" | live DB count |
| Animations | none | Framer Motion stagger reveals, hover lifts, pulsing dots |
What we kept¶
- The data model (
Retailer,Product,Listing,ListingPrice,Click) — sound. Just under-populated. - The scraper architecture — sound, just needed 5 more category scrapers
- The Prisma + Next.js stack choice — sound
Lessons¶
- Anchor to a quality bar before designing. Pick 3-4 reference products in adjacent space; design with their level of polish as the floor, not the ceiling.
- Reject default templates. If the UI looks like a Tailwind starter, stop. Pick fonts, pick colors, build a real palette. Captured as a feedback memory: see feedback_no_ai_slop_ui reference.
- Validate UX patterns against real users in the space. PC builders don't think in steps; they iterate. The all-slots model came from observing PCPartPicker's affordances, not from "what's the simplest thing to build first?". Captured as a feedback memory: see feedback_pc_builder_ux reference.
- Scope catalogue depth as part of UI scope. UI without enough data feels broken. If you're scoping "build the build page," include "scrape enough categories to populate the build page."
- Compat rules are a credibility signal. One rule says "we ticked a box." Three rules say "we understand the domain." Plan compat rule depth proportional to that signalling weight.
What we deliberately don't fix¶
These were rough but acceptable in v1.0:
- Match rate on Cooler/RAM/Storage/PSU is 3-12% — many seeded products show "NOT IN STOCK" because no scraped listing matched. Tracked in #21 for LLM-assisted extraction in M2.
- Save / Share Build buttons are UI-only (no persistence). Auth.js (#11) is the prerequisite, then #12 save and #13 share land.
- Cmd+K command palette triggered in nav — not wired up yet. M2 polish.
- No price history charts — schema is ready, no Recharts component yet. Tracked in #8.
- No filter sidebar on Browse — sort is in-stock-first only. Tracked in #5 and friends.
References¶
REBUILD-V1.mdat the repo root — full diff and commit timeline of the rebuildv0.1.0-prototypegit tag — frozen rejected statev1.0.0-rebuildgit tag — accepted v1