TalkType is a small voice-to-text PWA with a soft ghost interface. Open it, tap the ghost, speak, and get usable editable text quickly.
Try it at talktype.app.
/api/transcribe.@xenova/transformers, WASM, IndexedDB/browser cache, and no cloud transcription.TalkType has three transcription paths:
Transcript history is saved locally in the user's browser when supporter mode is unlocked. If a supporter has a Passport and notes endpoint configured, current transcripts and attached recordings can mirror themselves to the Pi drop-zone. Text and audio are encrypted client-side before upload, and local deletions remove items from the mirrored history on the next pass. Do not include private transcripts, recordings, API keys, supporter codes, or payment details in GitHub issues.
Start here:
Historical audits and old session notes live in docs/archive. Future feature research lives in docs/research.
Install dependencies:
npm install
Run the app:
npm run dev
Useful checks:
npm test -- --run
npm run lint
npm run build
Copy .env.example to .env and set the values needed for your mode:
DEEPGRAM_API_KEY: required for Live Mode and standard batch transcription.GEMINI_API_KEY: required for output style presets.GEMINI_MODEL: optional; defaults to gemini-3.1-flash-lite-preview.API_AUTH_TOKEN: optional shared token. If set, API routes require an auth session.API_COOKIE_SECRET: required when API auth sessions are enabled.SUPPORTER_UNLOCK_CODES: comma-separated manual supporter codes for /api/supporter/redeem and legacy /api/validate-code; matched case-insensitively.SUPPORTER_LICENSE_SECRET: secret used to hash supporter codes and sign supporter tokens.PUBLIC_FORCE_SUPPORTER_MODE: set to true only for local/supporter testing.MAX_UPLOAD_BYTES: optional upload cap for /api/transcribe.PUBLIC_APP_URL: public app origin used for payment redirects.SQUARE_ENVIRONMENT: sandbox for testing or production for live Square checkout.SQUARE_API_VERSION: Square API version header. Keep pinned and bump deliberately after testing.SQUARE_ACCESS_TOKEN: Square access token for hosted checkout.SQUARE_LOCATION_ID: Square location id for the supporter product.SQUARE_WEBHOOK_SIGNATURE_KEY: Square webhook signature key.SQUARE_WEBHOOK_NOTIFICATION_URL: exact webhook URL configured in Square.TALKTYPE_STORAGE_ADAPTER: filesystem, netlify-blobs, or memory.TALKTYPE_DATA_DIR: filesystem storage directory for checkout/license data.PUBLIC_QRBUDDY_API_URL: QRBuddy /render-qr endpoint for Passport card QR stamps.PUBLIC_QRBUDDY_APP_URL: QRBuddy app/share origin for QR links when needed.PUBLIC_PASSPORT_SERVER_URL: optional default encrypted notes endpoint used by Passport QR/import/check-in. Falls back to PUBLIC_VAULT_SERVER_URL for older configs.The standalone Vault server uses:
PORT: Vault server port, default 3000.VAULT_DIR: encrypted blob storage directory, default ./vaults.VAULT_ALLOWED_ORIGIN: comma-separated browser origins allowed to call the Vault server.MAX_VAULT_BLOB_BYTES: upload cap for encrypted Vault payloads, default 150MB.The app currently uses @sveltejs/adapter-node and builds to build/.
npm run build
npm run preview
Netlify config is present, but deployment details should be checked against the current adapter before launch.
Offline Mode still ships a large ONNX Runtime WASM asset, but it is on the dynamic offline-transcription path and is cached at runtime rather than precached during service-worker install.
TalkType uses a custom non-commercial source license. Personal, educational, and non-commercial use is allowed; commercial reuse needs written permission. See LICENSE.