This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine.
Room 404 is an interactive haunted terminal experience built for the Hacktoberfest 2026 Week 4 "Ghost in the Machine" challenge.
The prompt explicitly suggested:
“A haunted terminal that 'possesses' your shell and whispers back eerie commentary on the commands you run”
Room 404 embodies this across both a retro browser console and a live shell CLI.
On October 31, 1978, a guest named Elena Voss checked into Room 404 of the Briar House Hotel and never checked out. Her second line in the ledger was scraped away until the paper was thin enough to see light through. Exactly forty-eight years later—on October 31, 2026 at 03:17 AM—the hotel’s obsolete management computer (BriarOS v4.04 on a PDP-11) suddenly rebooted and registered a new guest: you.
ls, cat ledger_1978.log, cd hallway, pwd, date, ps, whoami, status, dial 404, and knocks. gemma2-9b-it) npm run haunt) zsh/ bash). git clone https://github.com/iadii/room-404.git && cd room-404
api/, copy .env.example to .env and set your GROQ_API_KEY. npm install && npm run dev in web/. http://127.0.0.1:3000 to play the Web Terminal & CCTV Console.
The hotel has your name. Room 404 is an interactive haunted terminal experience built for the Hacktoberfest 2026 Week 4 “Ghost in the Machine” challenge.
On Halloween night, 2026, you enter an abandoned hotel whose obsolete management computer (BriarOS v4.04 on PDP-11) still holds the trace of a guest from October 31, 1978. Explore four rooms, inspect corrupted sector files, converse directly with the entity inhabiting the machine, and answer the knocks behind the screen. An open-weight Google Gemma 2 (gemma2-9b-it) model running on Groq narrates the ghost—crafting the prose, whisper, and typed visual manifestations (flicker, shadow, knock, mirror reversal, or signal static)—while deterministic domain rules govern the world invariants, clue discovery, and fear meter.
See the game screen · Read a sample transcript
The Hacktoberfest Week 4 challenge prompt calls for:
“A haunted terminal that…
The backend is built as a clean TypeScript modular monolith with strict domain boundaries, separating deterministic system truth from generative haunting:
flowchart LR
WEB[Next.js 16 Web UI\nGhost Terminal & CCTV Console] --> HTTP[Express 5 API Router]
CLI[haunt-cli.ts\nReal Shell REPL] --> HTTP
HTTP --> APP[HauntingService\nTurn & Command Processor]
APP --> DOMAIN[Deterministic Domain Engine\nConstants, Rooms & File System]
APP --> PORTS[Repository & Narrator Ports]
PORTS -.-> FILE[FileVisitRepository\nPrivate Atomic JSON]
PORTS -.-> MODEL[GroqSceneNarrator\nGoogle Gemma 2 9B Instruct]
flicker, shadow, knock, mirror, static), and cited evidence IDs.
If an LLM can hallucinate whatever it wants, horror loses its stakes. If the AI can arbitrarily invent a fantasy room or pretend a clue was found, the puzzle dissolves.
ROOM_FILES), and ending gates are authored domain invariants. The model receives The challenge prompt poses five critical questions on open innovation:
Commercial closed-source APIs frequently over-censor psychological horror, spooky fiction, and eerie lore due to blunt commercial safety filters. Attempting to generate a scene where a ghost possesses a terminal or whispers about an unsolved disappearance from 1978 often triggers generic policy refusals or corporate safety disclaimers.
Google's open-weight Gemma 2 (gemma2-9b-it) allows developers to build creative, narrative art with authentic tension, nuanced dread, and gothic atmosphere—all while enforcing clear boundaries through strict typed JSON schemas rather than blunt prompt refusals.
Yes. Every session transcript, player alias, pulse rate, and clue progression is stored exclusively on the player's local machine in api/data/ as private JSON files with restricted file mode 0600. No player history, queries, or stories are saved to a third-party database, monetization engine, or cloud telemetry service.
Because Room 404 is built on an explicit SceneNarrator port and OpenAI-compatible completions, the application is completely decoupled from any single vendor. We can seamlessly swap between gemma2-9b-it, gemma2-27b-it, or future fine-tuned gothic horror community weights with a single environment variable change—without changing a single line of game logic.
While the default development configuration uses Groq for sub-second Gemma 2 inference, the architecture is designed so the same SceneNarrator interface can target local runtimes (such as Ollama or llama.cpp). This means the ghost can literally run offline on a laptop with the lights and the internet turned off.
Open weights democratize development costs. Running Gemma 2 locally costs $0.00 in API fees, and running it on Groq open-weights incurs near-zero cost. Players can explore dozens of rooms, ask scores of questions, and trigger endless terminal manifestations without accumulating an unpredictable cloud bill.
Show your work: the interactive development of Room 404—from architecture design and domain refactoring to possessed terminal commands and Gemma 2 integration—was orchestrated through an AI agent pair-programming session.
You can inspect the exported case transcript directly:
During testing in the CLI terminal, I ran:
NIGHT GUEST@BRIAR-PDP11:[/suite]$ dial 404
A second later, the terminal output flickered, and Gemma 2 whispered back:
“Turn, turn—your fear fuels my circuit. I am the lock you cannot escape.”
The entire terminal interface flashed a critical static glitch: ##ERROR##: line 404 not found.
In that moment, it wasn't just a chatbot output. The terminal felt genuinely possessed—a forgotten computer from 1978 talking back through modern silicon.
Room 404 is natively built around Google's open-weight Gemma 2 (gemma2-9b-it):
cat,