01
all projects

Case Study · 01 / 03 · Reflective Memory Intelligence · 2026

EchoVault AI

Reflective memory intelligence platform. Temporal Emotional RAG that chunks by feeling, embeds per-user vector spaces, and answers grounded — every claim cited, no impersonation.

LiveSolo build · 2026Open sourceMIT licensed
Marketing hero — preserving memories through ethical AI.

p95 pipeline

~1.91s

tests

124 / 11 PBT

status

live · solo

The problem

ChatGPT stores conversations as tokens. Notion stores them as pages. Neither understands them. Most AI tools forget you the moment a session ends, and the few that don't (ChatGPT Memory, custom GPTs) hold at most ~2KB of summarized strings — a notepad, not a memory system. Meanwhile, your private archive grows: thousands of WhatsApp messages, journal entries, voice notes — emotional context that becomes impossible to revisit meaningfully without an AI that actually understands what those moments meant.

What I built

EchoVault is an emotional memory intelligence platform. It ingests your private archive, chunks it by emotional continuity (not tokens), embeds it into a per-user vector space, and answers questions about your past as a grounded analytical companion that cites every claim back to a real memory chunk.

Backend

  • FastAPI · Python 3.13
  • Qdrant vector store (per-user namespace isolation)
  • BGE-small-en-v1.5 embeddings (384-dim)
  • Groq · LLaMA-3.1-8b-instant (enricher + reflector)
  • 124 tests · 11 property-based invariants (Hypothesis)
  • Custom Temporal Emotional Chunker (the IP)

Frontend

  • React 19 + TanStack Start
  • Tailwind v4 + shadcn/ui + Framer Motion
  • TanStack Query for server state
  • OpenAPI-generated TypeScript types
  • 10 component tests (Vitest + React Testing Library)
  • Mobile-first responsive (drawer nav, real touch targets)

Infrastructure

  • Vercel (frontend, custom domain echovaultai.me)
  • Render free tier (backend, ephemeral storage + auto-seed lifespan)
  • HuggingFace Inference Router (saves ~250MB RAM)
  • Multi-origin CORS (apex + www)
  • Formspree for waitlist signups
  • Auto-deploy on git push to main

The IP — Temporal Emotional Chunker

Most RAG systems chunk by tokens. EchoVault chunks by feeling.

temporal_chunker.py
TIME_GAP_MINUTES = 30
MIN_CHUNK_SIZE = 3
MAX_CHUNK_SIZE = 50

def chunk(messages):
    chunks = []
    current = [messages[0]]
    for prev, msg in pairwise(messages):
        gap = msg.timestamp - prev.timestamp
        boundary_reason = None
        if gap > timedelta(minutes=TIME_GAP_MINUTES):
            boundary_reason = "time_gap"
        elif len(current) >= MAX_CHUNK_SIZE:
            boundary_reason = "size_limit"
        elif emotional_shift_detected(prev, msg):
            boundary_reason = "emotional_shift"
        if boundary_reason and len(current) >= MIN_CHUNK_SIZE:
            chunks.append(_finalize(current, boundary_reason))
            current = [msg]
        else:
            current.append(msg)
    if current:
        chunks.append(_finalize(current, "end_of_stream"))
    return chunks

Standard RAG splits text into 512-token windows — a brute-force approximation that breaks emotional context constantly. EchoVault's Temporal Emotional Chunker groups messages by two real-world signals: emotional continuity and time proximity. A grief conversation from June 2 stays one chunk even if it's 7 messages spanning 14 seconds. A topic shift from anxiety to celebration breaks the chunk, even if those messages are 30 seconds apart. Time gaps over 30 minutes always create boundaries, and a maximum of 50 messages prevents runaway chunks. Combined with a Grounding Validator that drops any claim below 0.7 confidence, the result is an AI that refuses to hallucinate about your past.

Architecture

WhatsApp .txt   ─┐
journal entries ─┼─→ Parser → Temporal Chunker → Emotional Enricher
voice note      ─┘                                 │ (Groq · LLaMA-3)
                                                   ↓
                              Embedder (BGE-small-en-v1.5, 384-dim)
                                                   ↓
                              Qdrant vector store + SQLite metadata
                                                   ↓
user query ──────→ Hybrid retrieval ──→ Reflection Engine
                                                   ↓
                                       Grounding Validator
                                       (drops claims < 0.7 confidence)
                                                   ↓
                                  answer + cited memory chunks

End-to-end pipeline runs in ~1.91 seconds for a 5MB WhatsApp export. Every reflection cites every claim.

See it in action

Memory dashboard — semantic search, emotional timeline, AES-256 encrypted vault.
Memory dashboard — semantic search, emotional timeline, AES-256 encrypted vault.
Live demo entry — try the Temporal Emotional RAG pipeline on synthetic data or your own export.
Live demo entry — try the Temporal Emotional RAG pipeline on synthetic data or your own export.
Founder note — analytical companion, not a clone. Ethical commitments stated upfront.
Founder note — analytical companion, not a clone. Ethical commitments stated upfront.

By the numbers

124

backend tests passing

11

property-based correctness invariants

~1.91s

end-to-end pipeline runtime · 5MB upload

0.7

confidence floor on every cited claim

384

vector dimensions per memory chunk

8 × 8

emotional tones × thematic tags

Where it's going

The MVP is live. The product roadmap is six phases:

  1. 01

    Identity foundation — Clerk auth, JWT-based session, per-user Qdrant collections, managed Postgres on Neon.

  2. 02

    Knowledge graph layer — entity linking, relationship strength, temporal edges, graph reranking on top of vector search.

  3. 03

    Multi-agent orchestration — replace the single reflector with 8 specialist agents (orchestrator, retrieval, reflection, timeline, emotional analysis, grounding, memory curator, safety).

  4. 04

    Event-driven backend — Celery + Redis workers, async fan-out, streaming uploads, background summarization.

  5. 05

    Multi-source ingestion — Telegram, iMessage, plain markdown, audio files via Whisper transcription.

  6. 06

    Real-time chat + observability — SSE streaming reflection, conversation history, Sentry, structured logs, evaluation suite (hallucination rate, grounding precision, latency budgets).

Currently building Phase 1 — auth and per-user namespaces.