Field intelligence, end to end.

One PWA in daily production use inside a commercial cleaning operation. One pipeline behind it. A razor-thin client gathers reality from the field — photos, voice, and structured observations — and the shared pipeline converts it into durable, role-scoped operational records.

inputpaper / memory / field notes
processworkflow / audit trail / sync
outputrecords / summaries / decisions

The thesis

Capture should be the cheapest part of an operational system. A phone with a browser, a handful of structured fields, a tap to submit. The value is in conversion — turning unstructured field reality into queryable, durable, role-scoped operational data.

So: build the client thin enough to deploy as a Web App Manifest install on any phone or Chromebook. Build the pipeline once. The client stays disposable — when two capture modes turned out to share a workflow, they collapsed into one app without the pipeline noticing.

Chaos in, order out

Photos, voice, and scribbled field reality enter at separate inlets, converge through one pipeline, and leave as structured, role-scoped records.

Field intelligence pipeline Chaotic field inputs — photos, voice, and scribbled notes — enter at separate inlets on the left, converge through the pipeline, and emerge as ordered operational records on the right. CHAOTIC FIELD REALITY THE PIPELINE ORDERED RECORDS Photo Voice Notes INGEST · TRANSCRIBE · EXTRACT · DISPATCH
Field inputs converge through ingest, transcription, extraction, and dispatch into ordered operational records.

The pipeline

Each step is a small, focused stage. Capture modes can be added or merged at step one; the rest of the chain is reused untouched.

  1. 01Capture: the Field Capture PWA installs to the home screen. Site, employee, geolocation, and any mix of photo, voice, and typed note. One tap to submit.
  2. 02Ingest: a stdlib Python intake server validates the submission and writes a CouchDB document. Audio bytes stay on local disk; metadata becomes the source of truth.
  3. 03Transcribe: a Mac-local watcher pulls audio, drops it into a Whisper inbox alongside a sidecar JSON carrying the structured context.
  4. 04Extract: the transcript is parsed for site observations, callouts, retention risks, access constraints, onboarding signals. Structured fields from the sidecar override text-detected guesses.
  5. 05Dispatch: events become queue jobs; the queue processor routes them by routing flag — personal entries to the journal, site-tagged observations to the site note, employee-tagged to the person note.
  6. 06Project: the Obsidian vault is the canonical design model. HTML projections give role-scoped views — an area manager on a Chromebook sees the operational state without ever touching the vault.

Field Capture — production

One PWA in daily production use across a distributed commercial cleaning operation. It started as two apps — a photo-and-observation capture tool and a voice-memo tool — that turned out to share a workflow. They were collapsed into a single client without the pipeline behind them changing at all.

Pick a site, pick the people involved, then capture whatever the moment calls for: snap photos, record a voice note, type an observation, or any combination. A mode control sets routing intent — operations submissions flow through the site/person dispatcher; personal entries route to a journal in a separate vault. The submission lands in CouchDB; the pipeline turns it into a timestamped section in that site's living about page in the operational vault.

Per-person bearer tokens with scoped site/person authorization. Tokens cached after first tap; Add-to-Home-Screen installs are first-class on iOS, Android, and Chromebook.

Try Field Capture

fc.gregstoltz.com

Without an access token you'll see the paste prompt — the auth gate works as designed. The PWA still installs cleanly. Add to Home Screen for the standalone install.

The pattern is the product

The client is disposable; the pipeline is the asset. Two capture modes merging into one app — with zero downstream change — is the proof. The shape generalizes: any new field-intelligence channel is another writer that drops its uploads and sidecar metadata into CouchDB and inherits transcription, extraction, dispatch, and projection for free.

The substantive engineering investment lives once, in the pipeline. Whether a new kind of field observation arrives as another mode inside Field Capture or as a separate tiny client, the marginal cost of capturing it collapses to a small amount of front-end work.

The pipeline source is open. The code behind ingest, transcription, extraction, and dispatch lives in the btq repository on GitHub.