MGMeghraj Giri
Back to Projects
AppLive2025

Epiphra — AI Reflection App

Epiphra is an AI reflection app: a chatbot with real-time voice and long-term memory, so it carries context between sessions rather than starting cold each time. Built on Google's Gemini with pgvector on PostgreSQL holding the memory.

Epiphra — AI Reflection App

Epiphra is an AI reflection app you talk to rather than type at. It runs on Gemini's audio model for real-time voice, and keeps a long-term memory of past conversations in pgvector, so a session picks up from what you have said before instead of starting cold every time.

Role
Lead developer
Team
At Inseed
Status
Live on iOS and Android

The problem

A reflection app that forgets is not a reflection partner, it is a form. The value of talking something through repeatedly is that the other side remembers what you said last month and notices you are circling the same thing — and a chatbot with a fresh context every session cannot do that.

Typing is also the wrong interface for it. People reflect out loud, in a way they do not when composing a message, and the pauses and the way something is said carry as much as the words.

Voice through the model, not around it

Voice runs through Gemini's audio capability directly rather than the usual chain of speech-to-text, then a text model, then text-to-speech.

That chain is the obvious way to build this and it costs on both axes. Every hop adds latency, and in a spoken conversation latency is not a performance metric — it is the difference between talking to something and waiting for something. The chain also throws away everything that is not words: pace, hesitation, where someone trails off. In a reflection app that is signal, not noise.

Memory as retrieval, not as a longer prompt

A model's context window is finite, and months of conversation do not fit in it. The naive fix — keep appending history until it stops working — fails twice over: it fails outright once the window is full, and long before that it degrades, because the current conversation is competing for attention with everything ever said.

So memory is retrieval instead. Conversations are embedded and stored in pgvector, and each turn retrieves the fragments actually relevant to what is being discussed now. What reaches the model is a selection, not an archive.

The interesting work is in the selection. Every turn spends a budget across system instructions, retrieved memories and recent dialogue, and the three compete. Retrieve too much and the model is reading old sessions while someone is mid-sentence; retrieve too little and it forgets the thing that mattered. Cost and latency scale with whatever wins that argument, and on a voice interface latency is felt immediately.

Technologies

React NativeTypeScriptGeminiPostgreSQLpgvectorRAG

Key Highlights

  • Real-time voice
  • Long-term memory

A look inside

Epiphra — AI Reflection App screenshot 1
Epiphra — AI Reflection App screenshot 2
Epiphra — AI Reflection App screenshot 3
Epiphra — AI Reflection App screenshot 4
Epiphra — AI Reflection App screenshot 5
Epiphra — AI Reflection App screenshot 6
Epiphra — AI Reflection App screenshot 7