This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
My friend repairs his own BMW E90 325i. Not professionally, not as a hobby exactly, just the way someone does when they'd rather understand their car than hand it to someone who won't explain it back.
Watching him work, the actual bottleneck is never the wrench. It's that the information is scattered. A torque spec lives in a forum post from 2013. A part number lives in a different tab. Half the "guides" are a video where someone talks for four minutes before touching the car. He's lying under a car on jack stands with dirty hands trying to pinch-zoom a phone screen.
So I built him BMW Repair Workshop: a fast, mobile-first reference for his exact car. Twenty repair procedures, seven reference guides, every torque value and part number laid out in a table instead of buried in prose. And an Ask box where he can describe a problem in his own words and get an answer built only from those procedures.
My first plan was obvious: feed the service manual into a RAG pipeline and let an agent answer questions from it.
That plan died about an hour in. The real BMW service documentation (Bentley's manual, BMW's own TIS system) is commercial, copyrighted, and sold for money. It's also mirrored absolutely everywhere, a chapter-split copy is one search away, and there are entire sites dedicated to serving it for free.
Wide availability isn't permission. So I didn't use any of it. Not the PDFs, not the mirrors, not "just extracting the facts" from them, which is the same thing wearing a different hat.
Where the content actually came from: Procedures and specs written from general public automotive knowledge, with a handful of figures cross-checked against publicly published sources (owner forums, retailer install guides) Every single entry states its own provenance in a Source field, visible on the page Every torque figure and part number carries an explicit "verify this against RealOEM or your dealer" caveat, because I am not a mechanic and these came from general knowledge, not from his car's documentation
That last point matters more than it sounds. A repair reference that quietly presents an unverified number as fact is worse than no reference, because someone torques a bolt to it.
Try the Ask box with something vague, the way you'd actually say it: "my coolant keeps disappearing but there is no puddle" "clunk from the front over bumps, what should I check first" "how do I rebuild the automatic transmission?" ← watch it refuse
Open-source AI at the core: Gemma (gemma-4-31B-it), Google's open-weight model, served through DigitalOcean Serverless Inference.
DigitalOcean is doing the actual model serving here. I send an OpenAI-compatible chat completion to inference.do-ai.run/v1/chat/completions, authenticated with a DigitalOcean model access key, and Gemma runs on their infrastructure. No GPU to provision, no model to host, no container to keep warm. The spend ceiling is their prepaid Inference & Agents balance with auto-reload off, which means the absolute worst case for a runaway is a capped loss and the Ask box going quiet, rather than a surprise bill.
That combination, an open-weight model served by a provider I'm not locked into, is most of the "open innovation" argument below in one line.
The site is 100% static. Content lives as Markdown in the repo, a dependency-free Node script compiles it into a search index plus one static HTML page per procedure. Search runs client-side. There is no database, no framework, no build toolchain.
I started to build one, then measured the corpus. The entire knowledge base is about 11,000 tokens. That fits in a single prompt with room to spare.
So every question sends all twenty-seven entries to the model. No embeddings, no vector store, no chunking, no retrieval step that can silently fetch the wrong chunk and answer confidently from it. The model sees the complete corpus every time.
This is faster to build, free of an entire category of bug, and more accurate than chunked retrieval at this scale. Costs about $0.002 per question. The reflex to reach for a vector database is strong, and measuring first saved me from it.
Keeping it honest. The system prompt does real work here: Answer only from the provided entries Never invent a torque value, part number, or step Carry each entry's verification caveats through into the answer Keep safety warnings (spring compressors, hot cooling systems, torquing bushings at ride height) rather than trimming them for brevity Name the procedure the answer came from
