Inspiration
About 10 years ago, my (Piyush's) grandfather had a stroke. Overnight, a man who always had something to say had to fight for every word. I watched the frustration up close: knowing exactly what you want to say, and not being able to get it out.
What stayed with me even more was his courage. He worked at his recovery every day, and once he had found his words again, he spent his time helping other stroke survivors find theirs. He lived seven more years after his stroke, and he made them count.
He has since passed away, but his journey is the reason Saykind exists. I studied data science because I love technology, but my passion has always been healthcare, and today I work as a data engineer in healthcare. Saykind is my team's attempt to do what he did: help people on the same road, with the tools we know best.
The numbers show how many people are on that road. Almost 12 million people have a stroke every year, and about 1 in 3 stroke survivors develop aphasia, a language disorder that affects speaking, understanding, reading and writing. That's roughly
$$12\text{ million} \times \tfrac{1}{3} \approx 4\text{ million people a year}$$
(our own rough estimate, combining two sources, not a published figure). In a Copenhagen study, 61% of people with aphasia after a stroke still had it a year later. Aphasia takes away words, not intelligence.
Sources: World Stroke Organization, Global Stroke Fact Sheet 2025; RELEASE Collaborators, Stroke, 2021; Pedersen et al., Cerebrovascular Diseases, 2004
What it does
Saykind is a calm place for adults with aphasia to practice everyday words, then use them in a real conversation. It runs in the browser like a phone app, with nothing to install.
Four levels: a path, not a gate. Every level opens from the menu, so people go where they're comfortable.
- Learn Objects. Six everyday words: chair, cookie, mug, hat, table and lamp. Each has a picture, the word with syllables, normal and slow audio (the snail button), first-sound and syllable hints, and speaking practice with unlimited tries.
- Discover Objects (prototype, optional). The phone's camera finds objects in the room and labels each one with its word. Tap one, hear it, and say it. There's always a Skip button.
- At the Café. An animated café and a barista called Sam. You order by voice, or by tapping pictures in the menu. Both feed the same conversation. Sam asks one short question at a time, accepts fragments like "latte… large," and never finishes your words for you.
- In the Real World. Ready-made phrases to practice privately, then play aloud or show at a real counter, plus an optional recording session the person starts and stops themselves.
Around the levels:
- Get Help: a call button and a message the person reads, edits and sends from their own phone. Saykind never sends anything on its own.
- Doctor report (prototype): a short summary the person previews, then shares only by tapping Email, Share, Download PDF or Copy. The conversation transcript is off by default.
- Caregiver view: a separate page showing only what the person has switched on in Settings.
- A dignity-first voice: every line speaks to a capable adult ("please," "thank you," "take your time"), and a filter blocks baby-talk, cheering, pity and blame.
On the person's screens there are no countdowns, no scores and never a "wrong."
How we built it
Frontend
- Next.js 16, React 19, TypeScript and Tailwind CSS v4. Screens are React Native components running on the web through React Native Web.
- The café scene (Sam, his lip-sync and his idle animation) is plain DOM and CSS, kept separate so the original artwork stays exact.
- Animation with Motion and GSAP, plus React Bits components.
- Atkinson Hyperlegible Next, a typeface designed for maximum legibility, paired with Bricolage Grotesque.
AI services, all called from our server:
- ElevenLabs Scribe listens to the person.
- Anthropic Claude (Claude Haiku) plays Sam and writes the doctor report.
- ElevenLabs (Flash v2.5) gives Sam his voice, with the device's voice as a fallback.
- Perceptron finds objects for the camera level.
- OpenAI is an optional fallback, never required. All keys stay on the server.
The server owns the order. Claude only proposes changes. The server accepts only real menu items, sizes and temperatures, checked with a zod schema. If the reply doesn't match the order, the model gets one correction pass.
Fast enough to feel live. The camera asks Perceptron for its native bounding boxes with reasoning turned off. In our laptop test, that brought each frame down from about 2.6 seconds to between 0.6 and 1.2 seconds. The camera only sends a frame when the scene has changed and the tab is visible, within a per-session budget.
Slow audio that sounds natural. The practice words are 86 pre-made audio files. The slow versions are time-stretched with ffmpeg, so they're slower but keep the same pitch.
Spending protection: per-visitor and app-wide rate limits, a separate limit for the camera, and a daily budget for spoken audio.
Privacy by design: our server stores nothing a person said or photographed. Practice logs, café sessions, settings and reports stay in the browser on the person's own device.
Testing: 205 unit tests (Vitest), plus Puppeteer browser suites with mocked AI providers, axe-core accessibility checks, reduced-motion tests, and our own UI audit of text size, tap targets, colours and layout at phone and desktop sizes. Deployed on Vercel.
Challenges we ran into
- Speech recognition isn't built for aphasic speech. It mishears fragments and can invent words, so it never judges the person. Saykind shows what it heard, with a caveat, and offers to try again, listen again, or move on.
- Making vision feel live. Our first camera loop took about 2.6 seconds per frame. Switching to Perceptron's native box mode with reasoning off brought it under about 1.2 seconds. Asking for less made it faster.
- A real phone broke our layout. On an iPhone, the microphone panel covered the word. We rebuilt both Level 1 screens as three rows, with the panel pinned to the bottom.
- Tone is harder than it looks. A prompt alone wasn't enough, so we built a phrase filter plus rules, covering the barista, the hints, the report and the screen text.
- Reports must never fail. Any model error, missing key or blocked wording falls back to a fixed template.
- Free-plan limits. Our first ElevenLabs voice required a paid plan, so we switched to a premade voice and wrote a clear error message for that case.
Accomplishments that we're proud of
- A full spoken order loop: you speak, Claude replies as Sam, he answers out loud with lip-sync, and the device's voice steps in if the service drops.
- A barista with patience built in: one question at a time, fragments accepted, and he never finishes your words.
- A doctor report that's private by default: saved on the device, previewed first, and never sent without a tap.
- Accessibility we measured: no serious or critical axe findings, and zero findings in our UI audit across 13 screens at phone and desktop sizes.
- 205 unit tests and browser suites with every AI provider mocked.
- Original artwork for the café, Sam and the illustrated menu.
What we learned
- Calm beats clever: one question at a time, fragments accepted, no hurry.
- Fast AI comes from asking for less, not from a bigger model.
- Never let the model own the data that matters: let it propose, and have the server validate.
- Tone needs code and tests, not just a prompt.
- Recovery doesn't stop after the first months. Research shows meaningful language gains even more than six months after a stroke, so practice has to continue at home.
- People with aphasia and their carers ranked the right amount of therapy, and how carers can help, among their top research priorities, and those shaped our features.
What's next for Saykind
- Validate: test on real phones, then pilot with speech-language pathologists, people with aphasia and their caregivers.
- Build: accounts so caregivers can follow along from their own device with the person's consent; server-side email for reports; adaptive difficulty that chooses the next words; a therapist portal; more scenarios and more languages.
- Launch: health-data privacy and compliance, then partnerships with speech-language pathologists and stroke rehab clinics. Our working idea, still untested: free for families, paid for clinics.
Built With
- anthropic
- axe-core
- claude
- elevenlabs
- eslint
- ffmpeg
- framer-motion
- gsap
- next.js
- node.js
- openai
- perceptron
- puppeteer
- react
- react-bits
- react-native-web
- tailwind-css
- typescript
- vercel
- vitest
- zod
Log in or sign up for Devpost to join the conversation.