Independent product · fiddle.diy · In active development

The system of record
for your build.

Fiddle started as a camera trick: point your phone at a car, it names the part. It grew into the place a whole build lives: the log, the catalog, the fitment, the power you can prove, the people running the same setup. I designed it and built all of it with Claude as my pair-programmer. Every screen below is the live product.

Agentic experienceDesigning how much an AI agent may decide on its own

Role

I design it and build it

Company

Buster Studios (independent)

Timeline

2026 – present · fiddle.diy

Status

Live product, in active development

Tools

Figma, Claude Code, React, YOLOv8, ONNX Runtime Web, Claude API, Netlify, Capacitor

Scale

245,471 parts in the catalog

The short version

  • Naming the part was chapter one. The product is everything after: the log, the fitment, the number you can defend.
  • I built all of it: desktop and mobile apps, ~50 serverless functions, accounts, payments, an Android shell, a 41-suite test bed.
  • The catalog didn't exist to license, so I went and got it: 245,471 parts across 362 brands, with chassis-level fitment.
  • House rule: never bluff. No invented horsepower, no fitment guesses, no hallucinated part numbers.

01 · The problem

The most expensive words in car repair: “that round thing”

Every DIY repair starts with identification, and the whole aftermarket is priced on the assumption that you already know what you're looking at. So the first bet was simple: make the camera the search box. I trained a vision model, built the scanner, and it worked.

Then I used it on my own car for a while and found the thing I had missed. Naming a part takes a few seconds and then it's done with. Running a build goes on for years: what is installed, what it cost, what the car puts down, when the fluid was last flushed, who else runs the same setup. Nothing was tracking any of that except spreadsheets and a shoebox of receipts. So the scanner turned into a feature and the build log turned into the product.

The desktop garage: the whole build as a command center
The same build on the phone

Fiddle on both surfaces. The desktop garage is the build's command center: 7 mods, 41 service entries, staged parts, build photos, one Publish. The phone is the same build with the scanner in your pocket.

The garage is my M3 and the detections are live. Every screen in this case is the shipped product, not a mock.

02 · Who it's for

Three people, two postures

WHO I BUILT IT FORSMThe Saturday mechanicDIY MODE · PRIMARY“I know it's broken. I don't know what it's called.”GOALSName the part without a forum threadPay aftermarket money, not dealer moneyWatch someone do it firstFRUSTRATIONSOrdering the wrong part costs a weekEvery listing assumes you know the numberEBThe enthusiast builderDIY MODE · THE ONE WHO STAYS“My build history lives in a group chat and ashoebox.”GOALSKeep the mod and service record in one placeProve the power numberKnow what fits before buying wheelsFRUSTRATIONSNothing survives selling the carFitment answers are strangers guessingWTThe working techPRO MODE“OEM first. I don't gamble on fitment for acustomer's car.”GOALSVerified part numbersService data, not opinionsFast lookup between jobsFRUSTRATIONSConsumer apps optimize for cheap, not correctThe app ships both postures: DIY mode leads with price and simple steps; Pro mode leads with OEM parts and service data.
I'm one of these users, which is a research advantage and a trap. The Pro column exists because a working tech told me my price-first defaults were useless to him.

03 · Design

A dark room where only one thing glows

Fiddle's look is a system I call Holo: deep blue-black surfaces that lighten as they come toward you, thin strokes, light type, and teal saved for the one thing that matters. Eighty percent quiet, twenty percent glow. I tested the candidate palettes on the actual phone, in the actual garage, and kept the winner.

The restyle never stopped the product. The colors live in one tokens file, old names point at new values, and screens migrated as I touched them. The name took a few tries too: Partsnar, then MotorMuse, then fiddle. It's what you do with a car on a Saturday.

04 · The journey

One broken part, start to finish

THE REPAIR JOURNEY, BEFORE AND AFTERThe Saturday mechanic · one broken part, start to finish01Something breaks02Identify03Source04Install05Log itFEELINGDOINGNotices a noise, a leak, awarning light.Searches forums, comparesblurry photos, asks a friend.Cross-references part numbersacross five retailers.Finds a video for the exactchassis, does the job.Records what went in, what itcost, what changed.FRICTIONNo vocabulary for what'swrong.Guessing the name is thewhole bottleneck.Wrong number, wrong part,week lost.Generic videos, wronggeneration.Nothing captured it before.WHAT I DESIGNEDPoint the camera. The modelnames it.Number resolved from livelistings; OEM and aftermarketside by side.Search built from the chassiscode, not marketing text.The entry lands in the buildlog and the car's history.
The scanner only fixes stage two. Mapping the whole arc is what showed me the product was the log, not the camera.

05 · The core loop

Garage, scan, part

Three screens carry most of the product: the garage where the build lives, the scanner that names a part, and the part page that tells you whether it fits.

The garage: 51 log entries, 7 mods, service up to date
An engine bay scan, routed to cloud vision, tap a dot to get the part
A catalog entry with a proven-fit badge earned from real installs

Left to right: the garage with the story tabbed into mods, service, results and staged; an engine-bay scan, which the scene router hands to Claude vision, tap a dot and get the part; and a real catalog entry with product photo, the story of the part, and a proven-fit badge earned from real installs.

Exteriors run the on-device model, instantly and offline. Anything else goes to the cloud, which is at least willing to say when it isn't sure. The scanner used to be the whole app; now it's one of several ways into the log.

06 · Iteration

The road here wasn't straight

Every one of these was killed on purpose.

  1. 01

    Native iOS AR → web proof-of-concept

    TriedA native iPhone app with ARKit, the proper way.

    WallWeeks of toolchain before I could point a camera at a car and learn anything.

    PivotProve it on the web the same day. The native shell came later, as a one-afternoon Capacitor wrapper.

  2. 02

    Live-tracked AR overlay → snapshot-and-annotate

    TriedLabels tracking the live camera feed.

    WallThe anchors jittered and leapt. Smoothing didn't save it.

    PivotFreeze the frame and annotate the still image. You lose the magic of it moving, and you gain the ability to read the label.

  3. 03

    Cloud vision → a model I trained myself

    TriedDetection through a cloud vision API.

    WallAnchors weren't precise enough to tap.

    PivotTrain my own YOLOv8 on 23 part classes. Precise, offline, mine to tune.

  4. 04

    One model for everything → scene-aware routing

    TriedEvery photo went to the exterior model.

    WallPoint it at an engine bay and it found bumpers, confidently.

    PivotClassify the scene before anything else runs. Exteriors go to the on-device model; everything else goes to cloud vision, which is at least willing to say when it isn't sure.

  5. 05

    AI part numbers → numbers grounded in live listings

    TriedThe AI suggested the OEM part number.

    WallModels invent plausible part numbers, and one bad number kills all trust.

    PivotTokenize live market listings and let the most frequent number win. The AI is allowed to name the part. The price comes from live listings, never from the model.

  6. 06

    A parts scanner → the system of record

    TriedScan, identify, price, buy. The scanner was the home screen.

    WallYou identify a part once. The scanner had nothing to say to you on any of the other days.

    PivotRebuild the whole thing around the build log. The scanner got demoted into the Parts tab, which is the shortest way to explain what changed.

  7. 07

    Retail APIs → a catalog I harvested myself

    TriedLive retail lookups every time someone touched a part.

    WallSlow, rate-limited, and no API covers the aftermarket.

    PivotCrawl it. 245,471 parts across 362 brands once the cleaning had stripped the duplicates and the false positives, with type-ahead, did-you-mean, and translated descriptions.

  8. 08

    LLM-everything → dictionary-first fitment

    TriedAsking a language model what fits a G80.

    WallFitment is where a confident wrong answer costs someone a set of wheels.

    PivotChassis-code dictionaries first, down to JDM 25-year imports, with the LLM filling only the rows the dictionary can't answer.

07 · The router

Two engines, one interaction

WHAT HAPPENS WHEN YOU TAP SCANFrameCAPTUREDScene classifierWHAT AM I LOOKING AT?ExteriorON-DEVICE · YOLOv8 · 12.7 MBInstant, offline, nothing leaves the phone.Engine bay / interiorCLOUD VISIONThe local model was never trained here. Do not pretend.Part on a benchCLOUD VISION · SINGLENo car for context, so the prompt changes too.The router exists because one model answering everything was confidently wrong about engine bays. Two engines, one interaction, each honest about its job.
The decision tree I keep coming back to. One model answering everything was confidently wrong about engine bays, so the frame gets classified before anything else happens.

08 · The model

Training the eyes

The detector is a YOLOv8 model I trained on 23 exterior part classes, exported to a 12.7 MB ONNX file that runs entirely in the browser. Instant scans, works on garage Wi-Fi, and no photo of your car ever leaves the phone. A scene classifier routes everything else (engine bays, interiors, parts on a bench) to Claude vision.

Owning the pipeline pays off in unglamorous ways. The model once labeled both mirrors “right,” so now paired parts get their side reassigned by position. Scanned parts are checked against product photos before the app will claim a match. None of that shows up in a demo, and most of it is what separates a demo from something a person will keep using.

09 · The data

The catalog nobody would sell me

The aftermarket has no clean API to buy, so Fiddle's catalog is one I went and built. 245,471 parts across 362 brands, with translated descriptions, harvested photos, and search fast enough to feel local. That number is smaller than what the crawl pulled down. A good deal of what comes back is fluff, duplicate listings and false positives, and the cleaning pass is what gets it to something you can search. On top of the catalog sits fitment: chassis-code dictionaries across dozens of makes, with an LLM filling in only where the dictionary abstains.

It's the least visible work in the product and the hardest to copy. Calling a vision API takes an afternoon. Spending months cleaning part records is the part most people skip, which is why it's worth doing.

10 · Catalog health

What the index holds, and what it doesn't

Proposed screen · Fiddle

Not yet shipped · Aug 2026 registry snapshot

parts indexed

245,471

photos, fitment, provenance

brands with parts

362

in the searchable index

brands tracked

471

registry, all tiers

deferred

153

each with an evidenced cause

Why 153 brands are deferred

Source: Orb-Weaver registry

  • needs-template87
  • bot-defense22
  • no-catalog20
  • wrong-domain9
  • domain-unknown8
  • no-attributes6
  • dealer-only4
  • site-error3
  • wrong-catalog1

Every bar resolves to its evidence in the registry, the same rule as everywhere else in Fiddle: no claim without a record behind it.

A gap with a named cause can go on a roadmap. One without a cause is a number I can't do anything with, which is why the deferred column is the one I'd build this screen for.

11 · Parts & fitment

A catalog with opinions about what fits

Desktop search with the car pinned, every result graded for fitment

Desktop search: the whole catalog with the car pinned, every result graded for fitment, and “Hot on the G80” counted from published builds rather than ads.

“1 running it” is counted from real build logs. The paddock is what ranks the catalog, not ad spend.

Hot on the G80, every card with a fit grade against my car
Fitment notes for my chassis, fuzzy-matched from build logs

On the phone: Hot on the G80, ranked by what is installed, every card with a fit grade against my car; and the fitment notes for my chassis, with owner reports, an OEM-fit count, and what the paddock's logs say.

“1 installed” is a real count of real installs, and “no fit data” is a real answer rather than a hedge. Estimated fits are labeled as estimates.

12 · Trust

The product never bluffs

The power readout shows your factory rating until a dyno sheet or a rated tune says otherwise. The fitment simulator flags, in amber, when its answer isn't about your car. Even sign-in refuses to leak who has an account.

From the outside those look like engineering choices. They're design decisions, and they come from the same confirmation-loop thinking I ship at Oracle, running in a garage app instead of a supply chain.

13 · The rules

Three places it refuses to answer

HOUSE RULE · NEVER BLUFFPowerShows your factory rating until adyno sheet or rated tune saysotherwise.WON'T INVENT HORSEPOWERFitmentAnswers from chassis dictionaries.No data for your car? It says so, inamber.WON'T GUESS CLEARANCEPart numbersResolved from live market listings,not from a language model.WON'T HALLUCINATE A NUMBERConfidence you didn't earn is a liability. In a category racing the other way, restraint is the differentiator.
I wrote these down early and checked every feature against them. Two of the three cost me features I wanted to ship.

14 · The paddock

Community, events, and power you can defend

The Paddock feed: installs as they land, part number attached
The Power sheet: stock factory rating until a dyno pull says otherwise

The Paddock feed, installs as they land with the part number attached, and behind it the Power sheet, where the claim stays at the stock factory rating until a real Dynojet or Mustang CSV says otherwise.

Every card in the feed is a log entry on a real build rather than a text box somebody typed into. And with no dyno sheet the card says “stock · factory rating,” because a made-up horsepower number is worse than no number at all.

15 · Built with Claude

Pair-programming with Claude, honestly

Fiddle is a two-person team where one of us is an AI. I bring the design judgment and the product decisions; Claude brings speed and a bottomless appetite for the grind. I review what it writes, and I say no a lot. The repo shows the partnership plainly: merged PRs from Claude's branches, and a 41-suite test bed that stays green.

When trying an idea costs an afternoon instead of a sprint, you stop arguing about mockups. The live AR overlay didn't die in a critique. It died in my driveway, jittering, where there was nothing left to debate. What becomes scarce is the quality of the decision, and that happens to be the thing a design career builds.

It's also the cheapest technical empathy I've found. When I sit down with data scientists and engineers at work, I don't have to imagine what a model can and can't carry inside a design. I ship against one every week, and it shows up mostly in which fights I decide are worth having.

16 · Where it stands

Where it stands

  • Live at fiddle.diy: accounts, garage sync, catalog, fitment, community, events, and an Android shell. I design it, build it, and run it.
  • First revenue: a paid vehicle tech report, and in-app car transfers where the whole history moves with the car.
  • The decisions that did the most work were the refusals: no invented numbers, no fitment guesses, no pretending to know something the data doesn't support.
  • Next: wider fitment coverage and growing the paddock. The community is the moat the catalog feeds.