Fire and life safety · 2026
Synthetic dataOFSM Inspection Tracker, for Cal Poly fire safety
A tool that turns fire-safety inspection PDFs into tracked violations and Excel reports.
Go to the proof
- Parse time per report
- Under 1 s
- Model providers wired
- 3
- Tests passing
- 32/32
- Monthly cost
- $0
Deployment
The OFSM Inspection Tracker is a gated internal tool for Cal Poly EHS’s fire and life-safety team, live at https://ofsm-tracker.vercel.app behind a shared team password. It has been in active use by the team since July 11, 2026. All of the Cal Poly tools are set to extend to the Solano campus next, and to Maritime after that.
Problem
The fire-safety team tracked violations from CAL FIRE and OSFM inspection reports by hand, across a growing archive of PDFs. An earlier prototype tried to automate this, but it only worked inside a Claude.ai Artifact, because its PDF-extraction call went straight to Anthropic’s API with no key of its own. That setup only works when Claude’s own environment proxies the request. Opened as a plain file in a browser, the same call failed every time with no authentication.
Build
I diagnosed the actual failure and rebuilt the tool as a real app instead of patching the prototype. It now runs on Vercel serverless functions on Node 22, holding a real provider key server-side. Data lives in Neon Postgres with an auto-migrating schema, so entered data survives closing the tab. The frontend is plain HTML, CSS, and JavaScript, with no build step.
While rebuilding it, I found that the inspection PDFs already carry clean text layers, so extraction runs through a deterministic pdfjs-dist parser instead of a vision model. AI, from NVIDIA, Gemini, or optionally Anthropic, chosen after a documented cost, quality, and speed comparison, only steps in as a fallback for scanned paper reports. Uploads are chunked to fit Vercel’s 4.5MB body limit, and violations are extracted in batches of three with live progress shown on screen. Every extraction lands in an editable table for review before anyone commits it. Access is gated by HMAC-signed cookie auth behind the shared password. The Excel export reproduces the team’s existing three-sheet workbook, Master, By Building, and By System, column for column.
The code is client-owned and private; the walkthrough above is the public record.
Proof
The screenshots here use synthetic data, not real inspection records, since the live tool holds real building and violation data behind the team password. In production, the tracker holds the team’s full inspection archive, with every violation matching the master spreadsheet row for row. The test suite passes 32 out of 32. It runs for $0 a month, on a deliberately free-tier architecture. After I shipped it, I generated a campus-wide routing package: per-building PDFs, a routing index, and email templates that pushed findings to the units responsible for fixing them. The fire-safety team’s reaction on shipping was that the tool would save them real time. It has been in daily use since.
What I would do next
I would add a small dashboard view so the team can see open violations by building without opening the Excel export. I would also fold the routing package generation into the main app, since right now it runs as a separate step.




