DEADNET: a murder mystery on a dead friend's old computer
_This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine._
What I Built
DEADNET is a short murder mystery that takes place on a dead woman's computer.
Nora Vale died in her room on Halloween night, 1999. The police called it an accident. You play Adam, her friend. Her neighbour Mara leaves you Nora's old computer with a note asking you to take a look before it's collected.
!Mara's note and Nora's computer
The computer is a late-90s desktop with ordinary apps: Messenger, Mail, Photos, a Calendar, My Computer, a Trash Bin and a few games. There are no clue files or puzzles. You learn what happened by reading her messages, emails and photos, and noticing where people's stories don't line up.
Her last conversation in Messenger is with you. You didn't answer it in time.
!Nora's Messenger
Then her account comes back online, in a window called Unknown Signal. You can talk to her and show her what you've found. She's played by an open-weight model, and she only knows what you've shown her, so she can't just tell you the answer.
When you think you've worked it out, you open the Casebook on your recovery USB and answer three questions: who came into the room, why, and how they got in. A wrong answer doesn't end the game. It just tells you something doesn't fit.
Demo
Play it in your browser. It takes about 15 minutes. Each visitor gets their own copy of the case, and progress saves automatically. If nobody has played for a while, the first load can take up to a minute while the server starts.
!The desktop
If you get stuck: compare the times in Mail, and look closely at the photo captions.
Code
{% github sea-deep/deadnet %}
MIT licensed. Borrowed code, fonts, images and sounds are credited in CREDITS.
How I Built It
The desktop is React with 98.css. A small Node server stores each player's case and talks to the model, so no API keys reach the browser.
The main design decision was splitting what's fixed from what's live:
- Fixed: the evidence and the solution. Every player gets the same messages, timestamps and photos, and the same answer.
- Live: the characters. The model decides what Nora remembers, how sure she is and what she asks you.
I did this because language models are good at sounding unsure and bad at keeping facts straight. If the model could change the evidence, it could also accidentally solve the case for you, or make it unsolvable.
So each character only sees what they've actually been shown. Replies come back in a fixed format and get checked before they're saved. If a reply mentions evidence the character hasn't seen, it's rejected.
What I changed along the way. My first version was a file hunt: log files, a damaged backup you had to unlock, and at one point you had to play mini-games to recover it. It worked, but it felt like an escape room rather than someone's computer. I rebuilt it around what a real person would actually have on their PC: chats with friends, emails, a photo album, a calendar. The clues are in there, mixed in with ordinary life.
Hosting. It runs on Render. Each browser gets its own private case, so players never see each other's conversations. The game autosaves, and you can save to a file, load it back or start over from the Start menu. If the free AI models are busy, it tells you and offers scripted replies so you can still finish.
There's also one voice clip: Nora's last voicemail, recorded once with ElevenLabs and cached, with a transcript next to it.
Why Does Open Innovation Matter?
It keeps the game playable. The story is about a computer that keeps answering after its owner is gone. With open-weight models, Nora doesn't depend on one company keeping one model available. The prompts and rules are in the repo, and any compatible open model can play her.
It can run privately. You can run the whole thing locally with Gemma through Ollama, so your conversations never leave your machine.
It's free to play. The hosted version uses free open-weight models, so nobody has to ration their messages.
A closed frontier model would probably write better dialogue. But it would still need the same limits, because the hard part was never the writing. It was stopping the model from changing the facts.
Prize Categories
- Best Use of Render: the game is hosted on Render as a web service, with a private case per visitor, automatic saving, and API keys kept on the server.
- Best Use of Gemma: Gemma runs the characters locally through Ollama, so the game works offline and privately.
- Best Use of ElevenLabs: Nora's last voicemail, an important clue, is an ElevenLabs recording, cached and shown with a transcript.
All characters and events are fictional. _I used AI coding assistants while building DEADNET and while writing this post._
1 reaction
Mentions
DEADNET: a murder mystery on a dead friend's old computer _This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine._ What I Built DEADNET is a short murder mystery that takes place on a dead woman's computer. Nora Vale died in her room on Halloween night, 1999. The police called it an accident. You play Adam, her friend. Her neighbour Mara leaves you Nora's old computer with a note asking you to take a look before it's collected. !Mara's note and Nora's computer The computer is a late-90s desktop with ordinary apps: Messenger, Mail, Photos, a Calendar, My Computer, a Trash Bin and a few games. There are no clue files or puzzles. You learn what happened by reading her messages, emails and photos, and noticing where people's stories don't line up. Her last conversation in Messenger is with you. You didn't answer it in time. !Nora's Messenger Then her account comes back online, in a window called Unknown Signal. You can talk to her and show her what you've found. She's played by an open-weight model, and she only knows what you've shown her, so she can't just tell you the answer. When you think you've worked it out, you open the Casebook on your recovery USB and answer three questions: who came into the room, why, and how they got in. A wrong answer doesn't end the game. It just tells you something doesn't fit. Demo Play it in your browser. It takes about 15 minutes. Each visitor gets their own copy of the case, and progress saves automatically. If nobody has played for a while, the first load can take up to a minute while the server starts. !The desktop If you get stuck: compare the times in Mail, and look closely at the photo captions. Code {% github sea-deep/deadnet %} MIT licensed. Borrowed code, fonts, images and sounds are credited in CREDITS. How I Built It The desktop is React with 98.css. A small Node server stores each player's case and talks to the model, so no API keys reach the browser. The main design decision was splitting what's fixed from what's live: - Fixed: the evidence and the solution. Every player gets the same messages, timestamps and photos, and the same answer. - Live: the characters. The model decides what Nora remembers, how sure she is and what she asks you. I did this because language models are good at sounding unsure and bad at keeping facts straight. If the model could change the evidence, it could also accidentally solve the case for you, or make it unsolvable. So each character only sees what they've actually been shown. Replies come back in a fixed format and get checked before they're saved. If a reply mentions evidence the character hasn't seen, it's rejected. What I changed along the way. My first version was a file hunt: log files, a damaged backup you had to unlock, and at one point you had to play mini-games to recover it. It worked, but it felt like an escape room rather than someone's computer. I rebuilt it around what a real person would actually have on their PC: chats with friends, emails, a photo album, a calendar. The clues are in there, mixed in with ordinary life. Hosting. It runs on Render. Each browser gets its own private case, so players never see each other's conversations. The game autosaves, and you can save to a file, load it back or start over from the Start menu. If the free AI models are busy, it tells you and offers scripted replies so you can still finish. There's also one voice clip: Nora's last voicemail, recorded once with ElevenLabs and cached, with a transcript next to it. Why Does Open Innovation Matter? It keeps the game playable. The story is about a computer that keeps answering after its owner is gone. With open-weight models, Nora doesn't depend on one company keeping one model available. The prompts and rules are in the repo, and any compatible open model can play her. It can run privately. You can run the whole thing locally with Gemma through Ollama, so your conversations never leave your machine. It's free to play. The hosted version uses free open-weight models, so nobody has to ration their messages. A closed frontier model would probably write better dialogue. But it would still need the same limits, because the hard part was never the writing. It was stopping the model from changing the facts. Prize Categories - Best Use of Render: the game is hosted on Render as a web service, with a private case per visitor, automatic saving, and API keys kept on the server. - Best Use of Gemma: Gemma runs the characters locally through Ollama, so the game works offline and privately. - Best Use of ElevenLabs: Nora's last voicemail, an important clue, is an ElevenLabs recording, cached and shown with a transcript. All characters and events are fictional. _I used AI coding assistants while building DEADNET and while writing this post._