Skip to content
RR.DEV
All Projects

Case Study

Private production systemWeb Applications2025 - 2026

SMFD Journal

Inspections, forms, and records platform for a fire district

Platform
Web Applications
Year
2025 - 2026

01 / 05 โ€” Dashboard

Select thumbnail ยท click image to enlarge

Screenshots come from the real applications. Sensitive names, identifiers, and credentials are redacted.

01What it does

Replaces paper inspection and records workflows for a fire district: captains build forms and inspections with a drag-and-drop builder, firefighters complete them in the field (including offline), submissions map onto official PDF templates, and tickets route automatically with reminders.

02What I built

  • Drag-and-drop form and inspection builders (dnd-kit) with a runner, scoring, and templating
  • PDF pipeline: visual field mapping onto uploaded AcroForm templates, combined PDFs, and email notifications with attachments
  • Offline-first inspections: IndexedDB outbox, reference caching, and an auto-sync engine that survives reloads
  • Ticketing system with station routing, point-person assignment, reminders, and event notifications
  • Modules for training records, GAR risk assessments, PPE inspections, watch logs, audit log, and search

03Key engineering work

  • 40 migrations with 39 RLS policies scoped per feature area (stations, training, PPE, forms, tickets, audit)
  • Server-side email functions for form submissions, GAR alerts, and ticket events with PDF attachments
  • Vercel API routes proxying NWS, AQI, tides, traffic, fires, evac alerts, and stream gauge data
  • Private storage policies for inspection photos, separating public and private buckets

04Challenge / Solution

Challenge

Firefighters complete inspections in station bays with no connectivity, but records must land in a secure, permissioned database with official PDF output.

Solution

An offline sync engine queues every inspection in IndexedDB with stable IDs, caches reference data, and replays the outbox on reconnect - while RLS keeps every record scoped to the right station and role.