SiteStamp - Turning Field Evidence Into Reports Engineers Can Actually Trust

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, and inspection capacity, not intent, is the real bottleneck. Bridges, culverts, and roads depend on regular inspection to stay safe, but field engineers are stretched thin. On site, an inspector has to synthesize scattered evidence, photos, handwritten or voice notes, prior knowledge, into one assessment: what's wrong, how severe it is, what should happen next.

In the low-connectivity environments where inspections are common, that synthesis often happens hours or days later, from memory and a blank report template. The result is inconsistent, hard-to-verify documentation, and every hour spent turning scattered evidence into a report is an hour not spent inspecting the next asset. We built SiteStamp to close that gap without cutting the engineer out of the decision.

What it does

SiteStamp turns a field visit into an evidence-backed engineering report an inspector can generate on the spot and a maintenance authority can act on immediately. An inspector creates a Visit, uploads photos with optional text or voice notes while walking the site, then hits Generate Report. One request, one structured report: severity assessments, defect findings, repair recommendations, and supporting evidence for every claim.

The model reasons over the whole evidence set at once, not one photo at a time, so it can catch that spalling on multiple piers and a blocked drain are one systemic issue rather than three unrelated ones. 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, a needsReview banner says so directly instead of hiding it. 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

Every evidence photo goes to gemma-4-31b-it as inline image data, alongside the site name and any typed or transcribed notes. The response comes back as structured JSON, constrained by a schema and then independently re-validated on our backend, so a malformed or incomplete response never reaches an inspector.

A few decisions made this actually reliable in practice:

  • Evidence stays traceable. Instead of having the model try to reference database records directly (which we found badly hurt output reliability), each defect points to a simple photo index that our backend resolves back to the real evidence. Every finding stays clickable and provable.
  • The model knows when to ask for more context. If a visit has an asset code, Gemma can call one tool to pull prior inspection history, but only inspections before the current visit date. That boundary is enforced by the database query itself, not by asking the model nicely, so a later repair can never leak into an earlier report.
  • Uncertainty is a feature, not a bug we hide. We explicitly reward the model for saying "I can't confirm this" instead of guessing, and surface that flag prominently in the UI.
  • Voice notes get their own model. Transcription runs on gemini-3.6-flash, while Gemma focuses purely on the visual and written reasoning.

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 emit real database IDs directly badly hurt JSON reliability, arbitrary identifiers turned out to be a surprisingly hard thing for a model to reproduce accurately inside structured output. Swapping to simple integer indices resolved server-side fixed it without losing traceability.

We also assumed audio input would just work on Gemma and hit a live error before learning that capability is currently limited to edge variants not available through the hosted API, so we routed voice 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. We rewrote things so the model is rewarded for admitting uncertainty 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 actual inspection happened, and every finding it produces is something an engineer can click and verify rather than take on faith.

We're also proud we built that trust in on purpose: validated output, traceable evidence, uncertainty the model is rewarded for reporting honestly, and a model choice we made by actually testing failure modes instead of trusting a benchmark. Most of all, we're proud the output is something a maintenance authority could genuinely act on, not another chatbot transcript.

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 IDs. Fixing the interface around the model mattered more than fixing the model itself.

We also learned that for something like civic infrastructure, trust has to be demonstrable, not claimed. That single idea shaped almost every decision we made.

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