back to work
2026backend · web · androidSide project·2026·finished

Lumi.

A personal AI assistant you host yourself.

lumi · memory recall
hey lumi, when's mom's birthday?
searching memory · pgvector
Jan 9wifi password for the new flat
Mar 3mom's birthday is October 14
October 14. You told me on March 3.
phonehome serverlaptop gpu
ask for a demo repositorynot hosted · demo on request

problem

I wanted an assistant that remembers things about me (notes, files, old conversations) without that history living on someone else's servers.

approach

The backend is FastAPI with Postgres, pgvector for retrieval, and Redis, on a small always-on server. When it needs a model it calls Ollama on my laptop over Tailscale: Qwen 2.5 for chat, Qwen 2.5-VL for images, nomic-embed for embeddings. It can also call OpenAI or Anthropic models when I want it to. On top of that there's a React web app, a Kotlin Android app, and an Astro marketing site on Cloudflare Pages.

outcome

Finished and tested end to end. Chat, memory, file search, the wake word and the Android app all work, and memory is visible and deletable from the UI. Not hosted publicly; demo on request.

stack rationale

  • Postgres + pgvectorMemory, files and embeddings sit in one database I already know how to back up, so there's no separate vector store to run.
  • Kotlin on AndroidThe wake word is always listening, so it needs native audio APIs and careful battery use. That was easier in Kotlin than in React Native.
  • TailscaleThe server and the GPU laptop talk over a private network. Neither has a port open to the internet.

full stack

  • Python
  • FastAPI
  • PostgreSQL
  • pgvector
  • Redis
  • Ollama
  • React
  • Kotlin
  • Astro