A privacy-first, fully on-device web app for door knockers to record conversations and transcribe them locally — then share the day's notes as one message. Nothing is ever sent to the cloud by the app itself.
🎙️ Record & Transcribe
- Record audio of doorstep conversations on any smartphone (iOS Safari, Android Chrome)
- Transcribe speech to text entirely on-device using Whisper Base (~80 MB, downloads once)
- Works offline after the first model download
🗂️ Session Blocks
- The first recording creates a block; every start/stop adds a session to it
- Each session is transcribed individually
- Tap Finish block & share to see a nicely formatted list of every transcribed conversation with its date and time
📤 Share & Wipe
- Share to any app via the native share sheet (WhatsApp, Notes, email, …) — or copy to the clipboard
- After a successful share, the block and all of its sessions are deleted from the device
🛡️ Privacy & Security
- ✅ 100% on-device processing — no audio or transcripts ever leave your device via the app
- ✅ Automatic PII redaction — names, addresses, phone numbers, postcodes are stripped before anything is stored
- ✅ No audio retention — audio is discarded in memory after transcription
- ✅ No backend, no accounts, no analytics
📱 Progressive Web App (PWA)
- Install to home screen like a native app
- Works offline after initial setup
- No app store friction
| Layer | Technology | Notes |
|---|---|---|
| Frontend | TypeScript + Vite | Fast dev experience, tiny bundle |
| Recording | MediaRecorder API + getUserMedia |
Cross-browser audio capture |
| Transcription | whisper-web / @xenova/transformers |
Whisper Base, WASM + WebGPU |
| Storage | IndexedDB (idb) |
On-device blocks, sessions & transcripts |
| Sharing | Web Share API | Native share sheet; clipboard fallback |
| Hosting | Static (GitHub Pages) | No server at all |
- Node.js 18+
- npm
npm install
npm run devOpens https://localhost:5173 with HTTPS (required for microphone access on phones).
npm run build
npm run previewOutput in dist/ ready for static hosting. Pushes to main deploy automatically via GitHub Pages.
┌────────────────────────────────────────┐
│ Smartphone Browser (iOS Safari / │
│ Android Chrome) │
├────────────────────────────────────────┤
│ PWA Frontend │
│ ┌──────────────────────────────────┐ │
│ │ Microphone → Audio Recording │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ Whisper Worker → Transcription │ │
│ │ (Runs in Web Worker, keeps UI │ │
│ │ responsive) │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ PII Redaction (rules) │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ IndexedDB → Blocks, Sessions, │ │
│ │ Redacted Transcripts │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ Web Share API → formatted notes │ │
│ │ then delete block locally │ │
│ └──────────────────────────────────┘ │
└────────────────────────────────────────┘
(no backend, no network calls
after the model is cached)
- Welcome screen explains the privacy model
- Download the Whisper transcription model (~80 MB) — required, happens once
- Tap ● Record at the first door — this creates a session block
- Stop when the conversation ends; the session is transcribed and saved
- Repeat at each door — every recording joins the current block
- When finished, tap Finish block & share
- Review the formatted notes, then share to any app (or copy)
- After sharing, everything is deleted from the device automatically
- The Sessions view lists recorded sessions with timestamps
- Tap one to see its redacted transcript or delete it individually