DEV Community

David Nizeyimana
David Nizeyimana

Posted on

Echoes of the House: A Ghost That Remembers

Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine

What I Built

Echoes of the House is a ghost you can talk to, and it remembers you.

You light a candle and leave a few "traces" of what happened in a house: a door that opened when no one was home, footsteps that stopped at the photo wall, lights flickering on Halloween night. Then you ask the house a question. An open model reads the traces, decides how restless the house is, and the one who still lingers there answers you.

It has two modes:

  • Remembrance: talk with someone you've lost. You give their name and how you knew them (grandmother, friend...), and the ghost speaks as them.
  • Haunting: question the house itself.

Every encounter is remembered. When you come back, the ghost knows what you asked before. If that gets too heavy, one button, "Let the house forget", wipes it all.

I took the theme literally: a ghost living inside a machine, built from memories, in the days when the line between past and present feels thinnest.

Demo

🔗 Live: https://echoes-of-the-house.onrender.com

The live site serves the house and its memory. The ghost's mind (Gemma), the trace reader (TabPFN) and the voice (Piper) all run on my own laptop.

Screenshots

Running locally on my laptop (Gemma 3 4B live through Ollama, "nothing leaves this machine"):

Remembrance mode, running locally
Remembrance mode: offer a photo, name who you're remembering, leave a memory.

Haunting mode, running locally
Haunting mode: the house turns cold and blue. "Something is listening."

The live version on Render (the ghost's model runs only on my laptop, so here Gemma shows as off and the traces are read by a simple fallback):

Gate screen on Render
Light the candle to enter.

Traces read on Render
Sample traces read: "The veil is thin tonight."

Code

🕯️ Echoes of the House

A ghost you can talk to, one that remembers.

Light a candle, leave a few traces of what happened in a house (a door that opened on its own, footsteps in the hallway), and ask the house a question. A local AI model reads the traces, decides how restless the house is, and answers you in the voice of the one who still lingers there. Every encounter is remembered, so the ghost knows you when you come back.

Built for the DEV "Ghost in the Machine" Hacktoberfest challenge.

🔮 How it works

  1. You leave traces: dated events in rooms of the house.
  2. TabPFN reads them and predicts how restless the house is.
  3. Gemma 3 answers as the ghost, shaped by that restlessness, your question, and its past memories of you.
  4. Piper speaks the reply aloud, and Backboard remembers the encounter for next time.

✨ Features

…

How I Built It

Everything that makes the ghost come alive is open and runs locally:

  • Gemma 3 (4B), open-weight, run with Ollama. This is the ghost's mind. The server builds a prompt from the traces, TabPFN's reading, the visitor's question, an optional photo, and past encounters, then streams Gemma's reply word by word, so it feels like the ghost is speaking in real time.
  • TabPFN by PriorLabs. A small Python service turns the traces into features: how many traces there are, how many rooms, how many strange events (whispers, footsteps, cold spots), how many fell on "veil nights" (Oct 31 to Nov 2), and how many years they span. TabPFN predicts how active the house is, and that reading shapes the ghost's mood. To be honest, the training table is made-up example data.
  • Piper TTS (en_GB-alan-medium). A local voice, slowed down a little so it sounds older, reads the ghost's reply aloud when you press "Hear it."
  • Backboard stores each encounter as a memory, and the last few are fed back to the ghost so it remembers you. If Backboard isn't set up, memory falls back to a local file.
  • Sentry traces each encounter as spans: reading the traces, fetching memory, the ghost speaking, and saving memory.
  • React + Vite on the front end, with Web Audio ambience, falling petals, a laugh when you enter, and a button to keep any encounter as a PNG. Node + Express on the back end.

Why Does Open Innovation Matter?

This project is about grief and memory: someone's name, a photo of them, the things you wish you could still ask them. That's not something I'd want to send to a company's server.

Because Gemma, TabPFN and Piper all run on my laptop:

  • Photos and questions stay on your machine. The uploaded photo is deleted as soon as the encounter ends.
  • It works with the internet off. The ghost can still speak when your Wi-Fi is down.
  • It costs nothing to run. No API bills, which matters a lot to a student like me in Zambia.
  • I can change it. I can swap the model, change the voice, or tune how the ghost behaves without asking anyone's permission.

A closed API could disappear or change its prices tomorrow. A ghost built from open pieces stays in the house.

My Agent Session

I built this step by step with AI coding assistants, pasting terminal commands one at a time and learning as I went.

The Spirit of It

I didn't make this project for anyone in particular, because here in Zambia we don't celebrate Halloween or the other holidays, so I'm excited to build this for people out there.

Prize Categories

  • Best Use of Gemma: Gemma 3 (4B) is the ghost's mind, running locally through Ollama.
  • Best Use of TabPFN: TabPFN reads the house's traces and predicts how restless it is, which sets the ghost's mood.
  • Best Use of Render: the app's front end and memory API are hosted on Render.
  • Best Use of Backboard: Backboard gives the ghost its memory, so it remembers every visitor.
  • Best Use of Sentry Agent Tracing: Sentry spans follow each encounter through its four stages: reading the traces, fetching memory, the ghost speaking, and saving memory.

Credits: Built with PriorLabs-TabPFN. Gemma 3 by Google, run with Ollama. Piper TTS. Memory by Backboard. Monitoring by Sentry. The entrance laugh is Kira's laugh from Death Note. All rights belong to its owners, and it's used only for fun.

Top comments (0)