I have a 2017 F-150 SuperCrew. EcoBoost. The kind of truck where every F-150 thread eventually turns into cam phasers.
Dealers still talk about it like a recall. It wasn’t. Ford ran Customer Satisfaction Program 21N03 — cam phaser replacement — and it died on January 1, 2023. Before that, it wasn’t even a flat “covered or not.” Payout was by miles at the time of repair: 100% under 70k, 66% from 70–80k, 33% from 80–90k, nothing at 90k+. You only got in if the 21B10 PCM reflash happened before February 28, 2022.
I know those numbers now because I wrote the wrong sentence first.
The sheet
CurbSpec is a one-shot report for the moment before money moves on a used vehicle. VIN or a listing paste, stated mileage, then a compiled page: what this engine/fuel might still owe in service, campaigns that could actually apply, known issues with sources. Not a title report. Not a garage log — that’s wrenchtron. $12.99, no account, no ads.
Under the hood it’s Next.js on Vercel, Postgres on Neon, Stripe for checkout. A VIN goes through NHTSA’s VPIC decoder first — that part’s deterministic, free, and not the hard problem. The hard problem is applicability: NHTSA will happily hand you a diesel fuel-tank campaign against a gasoline truck, or a 6.2L rod recall against a 5.3. So every campaign and every schedule line gets gated against this VIN’s actual fuel, displacement, and drive before it ever reaches the page. I validated that gate against 134 real VINs off a local dealer’s unfiltered lot, decoded live — not synthetic data — and it caught three real bugs before they shipped, including a Ram ProMaster cargo van inheriting the Ram 1500 pickup’s service calendar off a bare “1500” substring match.
Eight vehicle families get a hand-reviewed maintenance calendar. Everything else — any vehicle I can identify at all — gets a live research pass: Gemini with Google Search grounding, then a structured JSON pass, cited and dated on the snapshot. Known issues carry a tier — official_tsb, hand-reviewed library, or researched live this run — always labeled, never blended into one undifferentiated list. Payment is a webhook-confirmed state flip on an immutable Postgres row; the redirect-time check is a UX nicety, never the thing that unlocks the report. A regression suite (119 tests as of this week) pins the due-date math, the schedule matching, and the applicability gate against real VINs so a “helpful” refactor can’t quietly break the one thing the whole product is betting on.
I paid the $12.99 on my own 2017 so Stripe was real. The unlock worked.

The phaser line said, in effect, ask whether the repair already happened. That’s the dealer shrug. It doesn’t tell you you might have qualified for a third of the cost, or zero, depending on the odometer that day.

A paying stranger would have gotten that. So I fixed f150.json and the family page. The sourced version lives at curbspec.com/f-150.
The same bug, one layer up
Fixing the copy wasn’t the end of it. Same day, I found the same shape of mistake living one layer deeper, in the AI research pipeline itself: the prompt that runs Gemini’s search told it not to restate an official NHTSA recall as a “known issue” — but it never told the model about the two TSB entries already sitting in f150.json. So live research would go find the cam phaser rattle on its own, independently, and write it up again under a different title. The dedup logic keyed on the title text, and “Cam phaser cold-start rattle” doesn’t match “Cam Phaser Rattle & Variable Camshaft Timing (VCT) Wear” as a string, so both made it onto the sheet. Same defect, twice, under two names, on a report someone’s supposed to pay for.
Fix was the same shape as the original bug: tell the model what it isn’t allowed to rediscover. The library’s own known issues now go into the research prompt the same way recalls already did. Reran the same VIN before and after — seven known issues with two duplicates became six with none.
Pattern I’m noticing: an AI pipeline doesn’t lie to you the way a stale comment does. It just confidently re-derives something you already told it, under a name specific enough that your dedup logic walks right past it. Worth checking for on any pipeline that merges a fixed library against a live model call.
What this is not
Google already answers “VIN plus estimate” for free, badly. CurbSpec is the used-buyer cut: history unknown, this powertrain, due vs the next 50k, no 60k dealer bundle. If that isn’t worth $12.99 standing next to the truck with a phone, more copy won’t save it.
I’m not pretending the first version was complete. It was wrong on the one F-150 fact everyone actually argues about. That’s the post.




























