SiteStamp - Faster, Verifiable Documentation for Public Infrastructure Inspection

Models used: Gemma 4 31B (gemma-4-31b-it) + Gemini 3.6 Flash (gemini-3.6-flash)


Inspiration

Public infrastructure is only as safe as it is inspected. Bridges, culverts, and roads depend on regular inspection to stay usable and safe, but inspection capacity, not intent, is the real bottleneck: field engineers are stretched thin, and every hour spent turning scattered evidence into a report is an hour not spent inspecting the next asset.

That bottleneck has a direct human cost. In the low-connectivity environments where inspections are common, synthesizing photos, handwritten or voice notes, and prior knowledge into an assessment often happens hours or days later, from memory and a blank report template. The result is inconsistent, hard-to-verify documentation, which can slow repair decisions on infrastructure people depend on every day. We built SiteStamp to close that gap: faster documentation without cutting the engineer out of the decision.

This is also personal for us. Our background spans both civil engineering and software engineering, so SiteStamp isn't an AI project looking for a civic use case, it started from time actually spent thinking about how inspections get documented in the field, and what breaks down when they don't.

What it does

SiteStamp helps engineers spend more time inspecting and less time reconstructing reports afterward, while giving maintenance authorities documentation they can actually verify and act on. An inspector creates a Visit, uploads photos with optional text or voice notes while walking the site, then hits Generate Report. One request returns a structured report: severity assessments, defect findings, repair recommendations, historical trend and supporting evidence for every finding.

The core idea is that SiteStamp doesn't caption bridge photos independently. It synthesizes an entire inspection session at once, so it can recognize that spalling on multiple piers and a blocked drain are one systemic issue rather than three unrelated findings, a correlation a tool that looks at one photo at a time simply cannot make.

Every finding is clickable: click a defect, its supporting photo highlights and scrolls into view. Nothing is "AI said so, trust us." When the model isn't confident about something, it says so directly instead of guessing. And to be clear, SiteStamp assists the engineer, it doesn't replace their judgment; the whole design is built around giving them something they can verify, not something they have to take on faith.

How we built it

The outcome we designed for: every finding traceable back to real evidence, uncertainty visible instead of buried, and historical context that can never leak information from after the visit into a report about it. Those three guarantees are what make the report something a maintenance authority can actually rely on.

Underneath, every evidence photo goes to gemma-4-31b-it as inline image data alongside the site's notes, and the response comes back as structured JSON, checked against a schema and independently re-validated on our backend before an inspector ever sees it. Voice notes are transcribed separately with gemini-3.6-flash, so Gemma stays focused on the visual and written reasoning. When an asset has prior inspection history, Gemma can pull it in through a single tool call, strictly limited to inspections before the current visit, so a later repair can never distort an earlier report's trend.

Built as a Turborepo monorepo: Node/Express/TypeScript API, PostgreSQL via Prisma, React/Vite frontend, deployed on Render, Vercel, and Neon.

Challenges we ran into

Early on, having the model reference database records directly badly hurt output reliability, arbitrary identifiers turned out to be a surprisingly hard thing for a model to reproduce accurately. Moving to simple indices resolved on our backend fixed it without losing traceability.

We also assumed voice input would just work end-to-end on Gemma and hit a live error before learning that capability isn't available through the hosted API we used, so we routed transcription to Gemini Flash instead.

Hardest of all was resisting the urge to make the model always sound confident. Early prompts rewarded complete-sounding reports, which quietly encouraged guessing on thin evidence. We rewrote things so the model is rewarded for admitting "I can't confirm this" instead.

Accomplishments that we're proud of

We're proud that SiteStamp doesn't stop at "photo in, caption out." A tool that looks at one photo at a time can never notice that two separate cracks are actually one structural problem. SiteStamp reasons across the whole visit at once, the same way the inspection actually happened, and every finding it produces is something an engineer can click and verify rather than take on faith.

We're proud we built that trust in on purpose instead of bolting it on afterward, and that the output is something a maintenance authority could genuinely act on, not another AI-generated writeup that still needs to be double-checked from scratch.

What we learned

We learned that reliability problems in AI systems often hide in unexpected places, ours wasn't in the reasoning, it was in asking the model to reproduce database identifiers. Fixing the interface around the model mattered more than fixing the model itself.

We also learned that for civic infrastructure, trust has to be demonstrable, not claimed. That idea shaped almost every decision we made, and it's the same standard we'd want applied to any tool touching public safety.

What's next for SiteStamp

  • Background report generation for visits with a lot of evidence, so inspectors aren't stuck waiting on a spinner mid-report.
  • Streaming the report as it's generated, so findings appear as the model produces them instead of all at once at the end.
  • Critical-finding escalation, letting an inspector, or the model itself when it spots something urgent, flag a finding for immediate attention instead of waiting on the full report.
  • Offline-first evidence capture, so uploads queue locally and sync once there's a connection, matching how these sites actually work.
  • Multi-inspector visits, merging evidence from more than one engineer into a single assessment for larger assets.

Built With

Share this project:

Updates