Inspiration
Aisha's landlord called about her lease renewal. She had it open in front. The first few minutes went fine: yes, she got the notice, yes, the date worked. Then he added a new "administrative fee" on top of the increase and kept talking, already moving toward goodbye.
She knew that fee wasn't supposed to be there. What she didn't have was the sentence, "isn't that fee only for the first year?", fast enough to stop him before he moved on. By the time it came to her, he was already saying "talk soon."
She hung up angry at herself, not the fee. She knew the words. She just hadn't rehearsed him, mid-sentence, already leaving. Real conversations don't wait for you to catch up.
I've been Aisha more times than I can count. Every immigrant I know has their own version of that call, different document, different fee, same twenty minutes too late. Leena is the version of that call you get to have as many times as you need, before the one that counts.
What it does
Bring a document, a lease, a school letter, a notice you don't understand, and Leena reads it, explains it in your language, and turns it into a rehearsal. Or just describe the situation. A persona opens first, never a blank screen, like real life. Go blank mid-conversation and "help me say this" gives you the line, even from a photo, so asking about "the first burger" on a menu you just shot gets you the actual item, not a generic phrase.
Every phrase you've asked for gets saved to a phrasebook you can drill on its own. When you finish, the debrief comes back in your native language, not translated after the fact. Two numbers climb across every attempt: Independence (what you handled alone) and Coverage (how ready you are). Leena doesn't tell you you're improving. It shows you.
Why not Duolingo or ChatGPT?
Duolingo builds fluency over months. It doesn't know you have a call on Tuesday. ChatGPT gives you a phrase, then forgets you exist, no memory, no persona, no proof you're getting better. Leena lives in the gap: rehearsal for the exact conversation in front of you, with evidence you're improving at it.
How I built it
A monorepo: React Native (Expo) client, Express + Prisma + PostgreSQL API. Every AI call routes through the server, keys never touch the client, a model swap never touches client code.
Every structured model response goes through a JSON-extraction and retry layer: pull the JSON out, validate against a schema, split hard failures (retry) from soft ones (a few stray wrong-script characters shouldn't cost someone their whole report).
Analysis runs two model calls, 30–90 seconds, never blocking. The session ends instantly, the app polls, and the flow is idempotent, so a dropped connection never double-writes.
Native language runs through everything, document explanations, mid-conversation help, debriefs, generated directly in-language, never translated after the fact. Not what someone already worried about being talked down to needs.
Challenges I ran into
Small models fail in specific ways. One hit 503 capacity_exhausted for hours. One garbled Hindi and returned out-of-range indices. One returned pure garbage. Reliable output meant live-testing against the real product, not a leaderboard.
A slow pipeline at the worst moment. The first version froze the app for up to 90 seconds right after someone finished rehearsing a hard conversation. Worst possible place for a spinner.
Expo Go fell behind my SDK mid-build, no timeline to catch up. I downgraded the whole app to the last App-Store-compatible SDK so the demo works for anyone.
Accomplishments that I'm proud of
- This is my first solo (+Claude) hackathon project, and my first mobile app, end to end.
- Making the AI fail safely: a script guard catching wrong-script leaks across four writing systems without flagging real proper nouns, and an error layer where a raw provider error never reaches someone mid-conversation.
- A metrics system that refuses to show a confident number off one data point.
What I learned
I learned where not to use AI. Every AI call adds latency, a network dependency, and a point of failure, and it makes a process opaque exactly where a user needs to trust it most. So the two metrics that actually measure someone's progress, Independence and Coverage, are plain deterministic functions over stored data, no model in the loop, fully testable, the same input always gives the same number. AI writes the feedback and grounds it in what happened; it doesn't get to decide, unaccountably, whether you're improving. If a model call fails, a checklist just doesn't generate that one time, it never blocks the feedback the user is actually waiting for.
What's next for Leena
Push notifications, spaced-repetition style. Every phrase lookup is already a timestamped event, "you have three phrases corresponding to ordering food. Would you like to practice a conversation around it?" is a query, not a redesign.
The Render Workflow, deployed live. Built and tested; held back only because new billing wasn't a call to make the night before submission.
More native languages. The model already accepts any language string. Onboarding scopes to four for a focused demo, not a ceiling.
Multi-device accounts. Identity is bound to one device today, deliberately. Right trade-off for a first version. Wrong one forever!
I want Leena to become everyone’s pocket buddy for moments like Aisha’s — helping people speak English with confidence, without hesitation, and unlock the everyday opportunities that come with being able to say what they mean when it matters.
Track Selection
Best Immigration Solution: Leena turns a document you can't parse, a lease, a notice, a form, into a plain-language explanation and a rehearsed conversation, in your own language. Best Education & Opportunity Hack: it rehearses the specific conversations that gate opportunity (a parent-teacher conference, an ESL enrollment) until you can have them without freezing. Best Newcomer Settlement Hack: every seeded scenario is a settlement moment, landlord, doctor, DMV, pharmacist, the everyday calls that decide whether you're actually landing here. Best Overall Hack: a full AI pipeline built solo in one hackathon window: mobile client, API, structured-output reliability, and a metrics system that only shows a number when it's honest.
Built With
- deepseek-v3
- expo-speech
- express.js
- native
- openai
- postgresql
- prisma
- qwen3-vl-8b-instruct
- react
- render
- typescript
- whisper