Memory Séance Lite: A Private, Local AI Ofrenda for the Stories We Almost Forget A developer built Memory Séance Lite, a local-first memorial app that stores short memories of people, pets, places and abandoned projects in SQLite and uses a small open-weight model served through Ollama to write an ofrenda and answer questions grounded only in the user's own entries. The app runs fully offline after a one-time model download, cites the memories behind its answers, and returns an honest refusal when the stored memories cannot answer a question. It ships with 27 pytest tests that mock every LLM call and a retrieval layer that tokenizes questions and ranks memories. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine https://dev.to/challenges/hacktoberfest-week4-2026-10-26 Every family has a ghost like this: a grandmother who named every tomato plant in her garden, an uncle's terrible jokes, a side project that stopped at version 0.3 and has been rotting in a private repo ever since. They are not dramatic stories. They are small, specific, and they disappear the moment the last person who remembers them stops talking. Memory Séance Lite is a small app for keeping those stories. You write short memories about a person, a pet, a place, or an abandoned software project. They are saved in a SQLite file on your own computer. Then a small open-weight language model, running locally through Ollama, does two things: "Ghost in the Machine" can mean something spooky, or something that honors the past. I went for the second, and I tried to let both holidays meet in the middle. Halloween gives the season, the dark background, the candlelight. Día de los Muertos gives the spirit : remembrance as something warm, communal and colorful, where the dead are welcomed rather than feared. The interface is deliberately dark but gentle, with marigold and candle tones and a strip of papel-picado-style color at the top. The "ghost" is not a spirit I pretend to summon. It is the trace a person or a project leaves behind , and the "machine" is a small model that holds that trace for you without making anything up. A "séance" app could easily slide into pretending to speak as someone who has died. I didn't want to build that. It is unkind to people who are grieving, and small models are terrible at it. So: A 60-second walkthrough: viewing memories, lighting the candle for an ofrenda with Gemma 3 1B, asking the séance a grounded question with citations, and triggering an honest refusal when memories cannot answer. To run it yourself Python 3.10+ and Ollama https://ollama.com/download required : git clone https://github.com/AbdulKhadhar/memory-seance-lite && cd memory-seance-lite ./scripts/setup.sh Windows: .\scripts\setup.ps1 add --low / -Low for qwen3:0.6b python -m app.main or .venv/bin/python -m app.main Open http://127.0.0.1:8000 . After the one-time download of Ollama and the model, the app works with no internet connection at all. There is also python scripts/load sample.py , which loads fictional sample memories so you can try it without writing your own. A private, local-first memorial app: save short memories of a person, pet, place, or abandoned project, and let a small open-weight model on your own computer write an ofrenda and answer questions, using only what you wrote. The séance is a creative memorial conversation. It is not communication with a deceased person. The narrator is a small language model that only retells the memories you wrote. Grief, nostalgia and half-forgotten projects are some of the most private things we write down, and they are exactly what you should not upload to a hosted AI service. Memory Séance Lite keeps the whole loop on your computer: SQLite for storage, Ollama for inference, and a model small enough for an old laptop. Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 4: Ghost in the Machine . The "ghost" here… A quick tour of the repository: | Path | What it does | |---|---| | app/routes.py | The API, and the refusal logic for the séance | | app/retrieval.py | Tokenizing the question and ranking memories | | app/database.py | SQLite schema, FTS5 index, full wipe | | app/llm.py | A thin Ollama client with typed errors, and the ofrenda JSON validator | | app/prompts.py | Short, grounded system prompts | | static/ , templates/ | Vanilla HTML/CSS/JS, no build step, no node modules | | tests/ | 27 pytest tests; every LLM call is mocked | The whole backend has three runtime dependencies: fastapi , uvicorn and httpx . The whole point was that a person with an old laptop could run this. Gemma 3 1B is the default: small enough to download and run on modest hardware, and good enough to retell a handful of short memories in plain language. For machines that are really struggling, there is a one-line switch in the Settings tab, in .env , or ./scripts/setup.sh --low to Qwen3 0.6B . The app sends think: false to Qwen3 so it skips its reasoning trace, which saves time on weak hardware, and it strips any stray