Project · Pre-launch

OneTap Notes

One tap records a meeting. About a minute later a speaker-attributed summary and a translation into the listener's language arrive by email, on iPhone, Android, Wear OS and the web. Korean and Chinese recordings pass through a domain-adapted recognition stage built from recent ASR research.

Architecture

OneTap Notes: a domain-adapted, multilingual voice-notes pipeline Meetings in, speaker-attributed notes and translations out, about a minute after recording stops. 4 use cases Church & community Work meetings Classes & lectures School & family events picked at onboarding; selects the vocabulary used for every recording 1 · Capture iPhone · Android Wear OS · web one tap, screen locked idempotent upload queue participant names as hints 2 · Preprocess ffprobe allow-list 16 kHz mono silence trimming no denoising (hurts ASR) under 0.5 s of speech: not billed 3 · Domain-adapted ASR context biasing Soniox + diarization jamo / pinyin fix LLM edits + verifier ↺ fallback: Groq Whisper must sound alike Korean jamo · Chinese pinyin · digits locked 4 · Notes Groq gpt-oss-120b JSON-schema notes owner grounding translation, 6 languages decisions · tasks · owners 5 · Deliver bilingual email (Resend) verified address only synced to all devices 30-day server retention Production: verified and unattended Sign in with Apple / Google (JWKS) · rotating refresh tokens App Store + Play receipts verified server-side · signed webhooks fallbacks logged · health-checked deploys with auto-rollback GitHub Actions CI/CD for 4 platforms · 81 automated tests · ~$0.11 per meeting hour Phonetic verifier, built in-house LLM proposes span edits, never a rewrite applied only if it sounds alike (distance ≤ 0.35) source must exist · digits must match keeps LLM correction from inventing words learnings transcripts & notes scored 6 · Evaluation harness: every engine × correction chain 14 synthesized meetings, 6 languages, one voice per speaker → CER after number folding (120만 원 = 1,200,000원) → summary facts, action-item owners, hallucination checks transcripts cached · LLM chains repeated to separate effect from noise EXAMPLE FINDING → SHIPPED DECISION 6.5% Korean CER on Soniox 10.3% same audio on Groq Whisper → Soniox is the default, Whisper the fallback also measured: use-case vocabulary, Korean lecture CER 4.0% → 2.9% owners 11/21 → 15/21 Hybrid models: Soniox: ASR, diarization, context biasing · Groq: gpt-oss-120b notes, Whisper fallback · whisper.cpp + Ollama: local fallback · FunASR: open baselines 14 eval meetings · 6 languages pre-launch · iPhone · Android · Wear OS · web Peace Cho · Soniox · Groq · FastAPI · Swift · Kotlin

Scroll sideways on a narrow screen to see the whole diagram.

The six stages

1Capture

One tap records on iPhone, Android, Wear OS or the web, even with the screen locked. Uploads queue in the background with idempotency keys, so a retry never processes a meeting twice. Optional participant names travel with the audio.

2Preprocess

Files are identified by content, not extension, then converted to 16 kHz mono and trimmed of long silences. There is deliberately no denoising: recent studies show it makes modern ASR less accurate.

3Domain-adapted ASR

The use case's vocabulary and the participant names bias Soniox, which also separates speakers. Korean and Chinese text then gets dictionary sound-alike fixes and optional LLM span edits, each checked by the phonetic verifier.

4Notes

gpt-oss-120b on Groq writes key points, decisions, action items and open questions as strict JSON. Speaker labels tie tasks to people, and an owner is kept only if the transcript or the typed names support it. Notes are translated into the chosen language.

5Deliver

A bilingual email goes only to the address the sign-in provider verified, and notes sync to every device. Audio is deleted right after processing; transcripts leave the server after 30 days.

6Evaluation

A harness runs every engine through every correction chain on 14 synthesized meetings and scores character error rate, facts, owners and hallucinations. Its findings chose the default engine and caught two bugs before release.