Inspiration
Most grief happens alone: late at night, on anniversaries, in the words we never got to say. Support helps, but it isn't always there at two in the morning. Many of us in India have lost a parent, a friend in service, or someone who never came home, and we still talk to them in our heads, often in a mix of English, Hindi and Bengali. We wanted to give people one gentle, safe moment to hear them again, and to help them carry that loss, not replace the person.
What it does
Miss You is a short, clearly labelled AI video call with a recreation of someone you miss, built only from your own photos, videos and voice notes.
Setting up (a few minutes)
- About them: name, relationship, call language (English, Hindi or Bengali), and whether they have passed away or live far away. This changes how the call is framed, and it never pretends someone who passed is alive.
- Memories: upload photos, videos and old voice notes. Location data is removed from every file.
- Their face: finds the people in your photos, lets you confirm who is who, and picks the clearest, best-lit pictures. It checks the person is an adult and not a public figure.
- Their voice: clones their voice from old voice notes, or you pick a preset voice that feels close. It never matches a voice to a face on its own; you confirm.
- How they talked: their greeting, what they called you, form of address (tui/tumi/apni, tu/tum/aap), favourite phrases, humour, topics to avoid, and short memory notes.
- A place: a tea stall, a garden, a riverside ghat. It creates a living scene (idle, listening and talking loops), checked to really look like them.
The call
- A portrait, front-camera-style call. You talk by voice (hold-to-talk or hands-free) or type.
- Mixed languages work naturally: speak Hinglish or Bengali-English and the recreation understands, and can answer in kind.
- It speaks only from the memories you shared and never invents new ones. It gently steps away from off-limits topics.
- An "AI recreation" badge stays on screen the whole time. Captions are optional and off by default, so the face stays clear.
Care built in
- If someone says they're in danger, the call pauses and real helplines appear (Tele-MANAS 14416 and others).
- Gentle check-ins if you call every day, plus daily time limits.
- 18+ only, with consent required. It never claims to be alive or to make real contact.
After the call
- A quiet moment to reflect, with an optional mood check.
- Memory box: keep the lines you want to hold on to. Downloads carry a visible "AI recreation" label.
- Letters: write to them and hear a gentle reply in their recreated voice.
- Closure journey: a guided way to say what was left unsaid.
- Privacy: recreations are private to your account, and one step deletes every photo, video, voice note and the recreation itself, with a report of exactly what was removed.
How we built it
We started from an empty folder on 15 October 2026 and planned first: scope.md, prd.md and spec.md are in the repo. Claude Code was our AI coding assistant.
- Frontend: React + TypeScript + Vite PWA, Tailwind, React Query and Zustand.
- Backend: FastAPI (async SQLAlchemy, Alembic), PostgreSQL 16 + pgvector, Redis, and arq workers for ingest, face detection, scene generation and video loops.
- Live call: a WebSocket pipeline: speech-to-text → safety check → persona LLM grounded in your memory notes → sentence-level text-to-speech streaming.
- Making the face feel alive: the talking loop is driven by the loudness envelope of the reply audio (Web Audio analyser), so the face moves only while the voice plays.
- Per-language routing of speech recognition, voice cloning and voices, with fallbacks so a call keeps working if one service is down.
- Cost and safety: every AI request is metered against a credit balance, and media is stored encrypted.
- Tests: 43 backend tests with mocked providers, component tests, and an end-to-end crawler that clicks every non-destructive control as the jury user.
Challenges we ran into
- Latency: a call has to feel like a conversation, so we stream replies sentence by sentence instead of waiting for the whole answer.
- Code-mixed speech: real people switch between English, Hindi and Bengali mid-sentence. Language detection, voice routing and persona prompts all had to handle that.
- A face that feels present, not uncanny: we regenerated scene loops when one looked wrong (eyes closed too long) and kept every view clearly labelled as AI.
- Safety without preaching: the recreation must comfort, not claim to be real, never replace real help, and step aside gently when a topic still hurts.
- Real deletion: deleting a loved one must remove data everywhere it was processed, not just from our database.
Built With
- arq
- caddy
- fastapi
- ffmpeg
- fish-audio
- insightface
- openai
- pgvector
- postgresql
- pwa
- python
- react
- react-query
- redis
- sarvam-ai
- sqlalchemy
- tailwindcss
- typescript
- vite
- web-audio-api
- websockets
- whisper
- xai-grok
- zustand
Log in or sign up for Devpost to join the conversation.