DEV Community

Cover image for Ghostlight: A Séance for the Machine
ROHINI RAY
ROHINI RAY

Posted on

Ghostlight: A Séance for the Machine

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

When a computer is abandoned, it doesn’t remember files the way a person does. It remembers a rhythm: the pause before a sentence, the return to backspace, the hands that used to find the keys in the dark.

Ghostlight is a small, spooky writing companion for those traces. Bring it an old command, a ghost-story prompt, or a memory you want to revisit. A ghost answers.

What I Built

I interpreted “Ghost in the Machine” as a quiet séance with a computer that has outlived the people who used it.

Ghostlight opens with one question: “What would you like to remember?” You can ask for a gentle haunting, bring an old command, or write about someone you miss. The ghost responds with a short, atmospheric story.

For example, I asked it for a story about an abandoned computer that remembers the hands that typed on it. The reply imagined an old monitor glowing in an empty office and keys softly replaying a conversation after the room had gone quiet.

The terminal is theatrical. Ghostlight never monitors or executes real shell commands.

Demo

Try the live app: https://ghostlight-tau.vercel.app/

Code

https://github.com/rohini-ray/Ghostlight.git

How I Built It

The ghost’s voice comes from Gemma 4, an open-weight model, through Google’s hosted API. Ghostlight sends each prompt to Gemma and displays the reply in a terminal-inspired interface. The Listen control can send a reply to ElevenLabs for narration when a valid ElevenLabs Text to Speech key is configured.

The frontend is plain HTML, CSS, and JavaScript. A small Python backend handles the model requests, keeps provider calls out of the browser, and supports both local use and Vercel’s Python functions. I also added retries for temporary Google API errors and filter response parts marked as model thoughts so the chat can show the story.

Why Does Open Innovation Matter?

I chose Gemma because Ghostlight should have a voice that can be changed, studied, and moved as the project grows. Gemma’s open weights give me a path beyond a closed-model-only design: I can change the model configuration, experiment with the Gemma family, and explore a self-hosted version if privacy, cost, or offline use becomes a priority.

This deployed version is not offline. It uses Google’s hosted Gemma API, and sends reply text to ElevenLabs only when someone asks for narration. Those providers may process the content under their own terms, and usage may cost money. I wanted to make that trade-off visible rather than imply a private local séance that this version doesn’t provide.

The open-weight model makes the project’s central creative voice more portable. The hosted APIs make it easy to try today; the ability to choose and potentially run Gemma elsewhere gives Ghostlight room to change tomorrow.

The Spirit of It

The moment that stayed with me was the idea of a machine remembering through a rhythm rather than a file: a hesitant pause, a burst of typing, a sentence that never got sent. Ghostlight can’t bring anyone back, but it can make a little space for the stories we still carry.

Prize Categories

Best Use of Gemma
Best Use of ElevenLabs

Solo Builder

Built by @rohiniray

Top comments (0)