Case studyiPhone · Documentation · Automotive · In progress
Bilprotokollet
A Swedish iPhone companion for the used-car viewing. Guided checks, a bodywork map, photographs and imported diagnostic reports keep observations and follow-up questions together. Includes a local code reference and PDF records, with original reports preserved separately. No account or automated buying verdict. In development.

A record before the decision
A used-car viewing leaves you with a mixture of facts, impressions and things the seller said. Was that service documented? Where was the scratch? Did the warning come from the dashboard, a diagnostic report or someone’s recollection?
Bilprotokollet is a Swedish iPhone app that keeps those observations together. Guided checks, photographs, seller answers and imported diagnostic reports become a record to revisit after the viewing. The person inspects the car. The app helps preserve what they found and what still needs checking.
From a checklist to a viewing companion
A guided visit breaks the inspection into five stages. A bodywork map records observations against thirteen panels, while individual checklist items keep their notes and photos together. Explicit outcomes distinguish an unchecked item from a problem or a point needing follow-up.
The overview collects those outcomes and the questions they raise. A separate advice area links to Swedish consumer resources, including Konsumentverket and ARN. First launch is empty; example inspections are an explicit choice.

Diagnostic reports, with their context intact
The app imports individual VCDS and OBDeleven text scans and supported OBDLink HTML reports. Before saving, the user reviews the extracted codes, control modules, reported status and warnings against the original. Where a report declares a fault count, the app checks its interpretation against that count. Missing status stays missing. An inaccessible control module is not presented as fault-free.
A bundled OBDex reference provides 9,533 English code titles without a network request, alongside a small set of Swedish explanations. A code lookup remains separate from the inspection. Saved fault reports can contribute a follow-up flag, but ten codes do not become ten diagnoses or a guessed repair bill.
This is report import, not a direct connection to an OBD reader. The original file is preserved byte for byte and can be exported separately. Unsupported or ambiguous formats are blocked or clearly flagged rather than quietly treated as a clean scan.
What the audits changed
The first audit uncovered failures beneath the visible interface: large photo attachments could disappear from saved data, some recorded problems did not reach the overview, and a note saying the engine light was off could trigger a warning. Storage now preserves attachments and surfaces errors; follow-up flags use selected outcomes instead of guessing from note wording.
A later independent Claude Opus review examined diagnostic imports, storage and PDF output. It found subtler problems: a lamp status lost in HTML, a report count invented by the parser, masked vehicle identifiers treated as conflicting cars, and an import field that could display an entire large file at once.
The fixes changed both the internals and the explanation. Review warnings now accompany the interpreted data. File previews are bounded. Imports are saved to the inspection’s identity, even if the list changes. Original files are removed only after the corresponding deletion has been saved, with a grace period for abandoned imports.
One regression test also needed correcting: the source report explicitly named a status for four of twelve faults. Requiring a status on all twelve would have rewarded invented information. The test now checks both preservation and restraint.
A record to take away
PDF export includes the inspection, unresolved items, seller answers, notes and photographs. Diagnostic sections identify the source file and carry interpretation warnings. The PDF is a summary; the original diagnostic file remains a separate export.
Rendering runs in the background, including the home-screen preview. A twelve-page regression document checks long content, diagnostic details and an actual rendered photograph in dark mode.
Built locally, still in development
Bilprotokollet uses SwiftUI, SwiftData and local PDF rendering. The inspection workflow needs no account. Diagnostic reference data is bundled with the app, and records remain local unless exported.
At this stage, 76 diagnostic-import checks and 162 other regression checks pass, together with the PDF test and a Release simulator build. A focused Opus follow-up found further gaps that were corrected and verified locally; those final corrections have not received another independent review.
Physical iPhone testing, VoiceOver review and broader coverage of current report exports remain. The project is in development: a structured record for a more informed conversation, with the limits of that record kept visible.