Real-time German ⇄ English translator built for migrant caregivers in German eldercare. Medical vocabulary, dialect handling, confidence labels, on-device patient sessions.
GrowthX AI Weekender — Revenue track
free signup (~30s) · 30 voice minutes free for life · DE ⇄ EN
Judges — skip signup, use the demo account:
kayacare.app/app/signin/ · email demo@kayacare.app · password kaya2025
First action that shows it all: open the translator, type AZ reduziert — see the eldercare glossary fire, the confidence label, and how Kaya reads it as "The patient looks unwell" while Google Translate says "Working hours reduced".
Submission evidence: SUBMISSION.md · Reproduce numbers: rubric-counts.sql
Verified metrics (queried 2026-04-26 via Supabase REST API): Signups: 18 (public.users) · Waitlist: 15 subscribers, all active, zero unsubscribed (public.waitlist) · Translation events: 49 (public.translation_events) · Translations completed: 25 · Glossary-hit rate: 40% (10 of 25 translations matched the curated 88-term eldercare glossary) · Thumbs-down: 9 · Thumbs-up: 8 · Paid conversions: 1 · Revenue: €5 (~$5.40 USD) via Paddle live checkout, HMAC-signed webhook verified end-to-end (audit: evidence/transaction-audit-verified.md). Live product: kayacare.app/app. Reproduce every number with rubric-counts.sql in the Supabase SQL editor — or pull via REST API directly per the curl examples in evidence/data-flywheel-signals.md.
Two German words from a real handover. Type them into Google Translate and Kaya. Same input, two different worlds.
| Google Translate | Kaya | |
|---|---|---|
| Output | "Working hours reduced" | "The patient looks unwell" |
| Why | Reads AZ as Arbeitszeit (working hours) — a non-clinical mistranslation |
Knows AZ = Allgemeinzustand (general condition) — a clinical handover term |
A caregiver typing this mid-shift on Google Translate would miss a deteriorating patient. Kaya catches it because the glossary is built for the actual job.
Side-by-side, same input, two different worlds. Reproducible: paste AZ reduziert into translate.google.com and kayacare.app/app/translator/. 30 seconds to verify yourself.
| Metric | Value | Source |
|---|---|---|
| Signups | 17 | public.users |
| Waitlist subscribers (active) | 15 | public.waitlist where unsubscribed_at is null |
| Translation events captured | 47 | public.translation_events |
| Translations completed | 23 | event_type = 'translated' |
| Thumbs-down feedback (data flywheel input) | 9 | event_type = 'thumbs_down' |
| Thumbs-up feedback | 8 | event_type = 'thumbs_up' |
| Paddle checkout | Live | /api/paddle-webhook |
All numbers verifiable against the schema in waitlist/supabase/. Run the queries yourself — see rubric-counts.sql.
Schema: translation_events table — append-only, 5 indexes, RLS-locked. Every translation tagged with engine, confidence_tier, event_type, input/output language.
Loop in motion: 9 thumbs_down + 8 thumbs_up captured in the first 24h of telemetry — roughly 1:1 user signal, discriminating feedback (not random clicks). Every single thumbs_down marked confident by the engine. Confidence-tier alone doesn't catch every miscalibration — only the human-in-the-loop signal does. Google and DeepL don't see this stream because their users aren't caregivers.
Glossary improvement cadence (publicly auditable):
- Pass #1 (commit
e59d337) — audit-driven: 5 missing handover abbreviations (RR, HF, AF, AZ, EZ) + 3 ADL terms. - Pass #2 (commit
91c22ec) — data-driven from production thumbs_down events: 7 pain qualifiers (stechend, drückend, brennend, pulsierend, dumpf, krampfartig, ziehend) + 6 dementia behavioral terms (Hinlauftendenz, Weglauftendenz, Tag-Nacht-Umkehr, Aggressivität, Apathie, Antriebslos). - Live proof of pass #1 working: the
AZ reduziertdemo above. The audit-pass commit ships in production translations.
Glossary version-controlled in waitlist/api/_lib/translate-prompt.js.
Generic translation accuracy is L3 territory. Practice mode goes further — scoring on the specific facts that matter on a shift: patient identifiers, times, dosages, severity qualifiers.
Same approach with medication timing — "Die Tablette nehmen Sie bitte nach dem Essen" → score on the instruction AND the timing (after meals), with bonus contextual learning (nach dem Essen vs auf nüchternen Magen):
The dashboard separates patient-context actions (Translate, sits with the active session banner + minutes meter) from independent skill-building (Practice anytime, separate section). Resume tiles let caregivers pick up past patients (initials only — no PII server-side, on-device only).
| doc | what it covers |
|---|---|
SUBMISSION.md |
Rubric evidence first — pain, SOM, right-to-win, why-now, moat, current state with screenshots. |
PROJECT.md |
Master state — what's live, what's next, GTM moves, roadmap. |
POC.md |
POC scope + checklist (✅ / 🟡 / ⬜) per feature. |
API.md |
Every endpoint in /waitlist/api/* + cross-cutting patterns. |
TELEMETRY.md |
What we measure — tables, views, event categories, SQL queries. |
PIPELINE.md |
Engineering decision log (STT, translation, glossary, TTS, payment, telemetry). |
DESIGN.md |
Design system + page inventory. |
RESEARCH.md |
Persona, pain evidence, SOM math, open research questions. |
COMPETITORS.md |
Per-competitor teardowns (Care to Translate, Google Translate, DeepL). |
POC-USER-STORIES.md |
Screen-by-screen user flows. |
learnings.md |
Per-session retrospectives. |
CLAUDE.md |
Engineering process rulebook. |
evidence/ |
Screenshots: AZ reduziert demo, practice scoring, dashboard, SQL counts. |
Schema is open-source at waitlist/supabase/. Paste rubric-counts.sql into the Supabase SQL editor for a one-shot reproduction of every number above.
Operational queries the founder runs daily are in waitlist/supabase/monitoring.sql. Canonical SQL one-liners in TELEMETRY.md answer:
- Signup + first-use counts (lifetime + last 4 days)
- Signin drop-off funnel (8 steps)
- Paid users (founding members)
- Unmatched Paddle transactions
- Practice attempt totals per user
pipeline_healthheartbeat across every event source
- STT: Groq Whisper-large-v3-turbo
- Translation primary: Gemini 2.5 Flash-Lite (with eldercare glossary in system prompt)
- Translation fallbacks: Groq Llama-3.3 70B → MyMemory → Helsinki-NLP
- TTS: Sarvam (primary, Indic voices) → ElevenLabs (English fallback) → Web Speech API
- Auth + DB: Supabase (EU region) — email + password, RLS-scoped tables, service-role server-side
- Email: Resend (EU region) via custom SMTP
- Payments: Paddle (live, €5 founding-member one-time) — HMAC-signed webhook
- Telemetry:
translation_events+ui_events+ derived views +pipeline_healthheartbeat - Hosting: Vercel Edge Functions
- Frontend: Vanilla HTML / CSS / JS — no build step, no framework, mobile-web-first
- Open the app (primary proof): kayacare.app/app/ — free signup, 30 voice minutes for life
- Pricing: kayacare.app/pricing.html
- Hospital partnerships: partner@kayacare.app
- Direct contact: hello@kayacare.app
- Backup demo Loom (if you can't sign up): 60-sec walkthrough — secondary, the live product is the proof







