Back to Home
Case Study — Founder & Engineer

RepoDeck
AI-assisted reporting for field service.

Field-service professionals spend their evenings turning site notes and photos into client-ready reports. RepoDeck collapses that into the visit itself — capture on mobile, let AI draft the language, ship a professional PDF. I designed, built, and run the entire platform solo.

What I built

Streaming AI report drafting

Findings become polished report language as the inspector watches — token-by-token streaming, not spinner-and-wait.

Voice dictation

Hands-free capture in the field. Speak an observation; it lands in the right finding, ready for AI cleanup.

Photo capture & annotation

On-device photo markup — arrows, boxes, severity callouts — built into the mobile capture flow.

Reusable comment library

A searchable library of standard findings so field pros never type the same paragraph twice.

One-click PDF reports

A dedicated Python service renders branded, client-ready PDF reports with photos and severity summaries.

Auth, billing & accounts

Supabase auth with row-level security and Stripe subscription billing — a real business, not a demo.

Architecture

Clients

Flutter mobile app

iOS · capture, dictation, annotation

Next.js web app

reports, admin, billing

Platform

Supabase

Postgres · Auth (RLS) · Storage

Services

LLM service

streaming report drafting

PDF service

Python / FastAPI · Docker

Stripe

subscriptions & webhooks

Engineering practice

  • 500+ automated tests on the mobile app alone, kept green sprint over sprint
  • Playwright end-to-end suites and Jest unit coverage on the web app
  • Accessibility as a gate — WCAG AA contrast and a11y e2e checks in CI
  • Sentry monitoring across client, edge, and server
  • Sprint-planned delivery with written launch audits
Next.jsTypeScriptFlutterSupabase / PostgresPython / FastAPIGemini & LLM streamingStripeSentryPlaywrightDocker

Want this kind of product built?

RepoDeck is what it looks like when one engineer owns data, models, and product end to end. If you need that, let's talk.

Get in Touch