← All posts

I made a horror game about IT support, and the monster is the documentation

Gjorge Karakabakov

You have followed a runbook that read beautifully and was completely wrong. You did every step in the right order, and the situation got worse. Halworth XP is a horror game built entirely out of that feeling.

Play it: it-support.idad.fyi - browser, no install, no account. There is no server and no analytics, so your save lives in your own localStorage.

Halworth XP: the game's wordmark on a blue XP-style gradient, above the line 'A horror game that takes place entirely inside an old office desktop'

The pitch: IT support, except some of the tickets are not tickets

Most horror games hand you a corridor and take away your torch. This one hands you a ticket queue and a chat client.

You are the new day-shift IT support hire at Halworth Systems. Colleagues report faults through IntraChat, you investigate, you decide, and at 17:00 your manager grades the shift from A+ to F. Three F grades and you are fired, which ends the run. Thirty shifts is the whole game, and a shift takes about eight real minutes because the clock runs at one in-game minute per second.

Most of the faults are genuinely IT problems. Some of them are not. Nobody tells you which kind you are looking at.

The IT support loop, rebuilt faithfully enough to hurt

If you have ever worked a service desk, the rhythm will feel suspiciously familiar.

Ask, corroborate, resolve

Someone messages you. Typing indicator first, then their opening line, and only then does the ticket land on the Ticket Desk. The reporter always speaks before the queue does, which means the clock on your response bonus starts the moment you were actually told.

Then you work it the way you would really work it. The composer offers contextual questions, each costing in-game minutes, some unlocking only after earlier ones. You search the Knowledge Base, look the machine up in the Asset Registry, read the Event Viewer, and watch the screen in the Remote Viewer. Finally you pick a resolution, and some resolutions stay locked until you are holding the clues that justify them.

Nothing points at the evidence

This is the part I am proudest of. Evidence exists only if you go and look for it. If the Asset Registry shows a reporter as NO RECORD, the game will never highlight that, nudge you, or play a sting. It just sits there, being the most important fact of your afternoon.

You also cannot bluff your way to the right answer. Of the 303 resolutions across the game, 79 are gated behind clues, including the correct one on every single ticket. You do not get to pick “replace the pickup roller” before you know the roller is worn.

Form 9-C is the scariest escalation path ever printed

One resolution appears on many tickets and behaves unlike all the others: dispatching the Company Cleanup Crew, on Form 9-C.

File it against a living colleague and they are gone for the rest of the run. Not gone as in a score penalty. Gone as in off the roster, no longer messaging you, and the tickets that would have been theirs simply never arrive. Fail to file it against something that is not a colleague, and that stays in the building with you.

The Knowledge Base article covering the form says it in six words:

Dispatch is not reversible. Neither is failing to.

That symmetry is the entire design. If filing were merely risky, you would file whenever you felt nervous. Because not filing is also fatal, nervousness tells you nothing at all. You have to be right, which means you have to investigate.

And then there is the joke that doubles as the horror. Three F grades gets you fired. Three wrongful dispatches gets you promoted. Halworth is not grading you on the axis you think it is.

The monster is a help article that reads clean

From day 12, something starts rewriting your Knowledge Base at 03:14. There are three flavours of damage, and they are ranked by how safe they are for you.

Glyph rot is the kindest, because obviously broken text is text you distrust. A wiped article is loud and expensive, but at least you know it is missing. The bad one is the procedure rewrite: the article still reads clean, authoritative and well formatted, and the steps in it are wrong.

The rewrite that matters lands on day 22, and it targets the article governing Form 9-C. The real procedure says dispatch when two or more indicators are present, and that quarantine covers a single asset showing one. The rewrite quietly drops the threshold to one, adds “Quarantine is deprecated”, and signs off with a line no real procedure would ever print:

Dispatch early. Dispatch often. An unfilled position is the only unrecoverable outcome.

Follow it and you will clear the building for whatever wrote it.

Your only tells are a small pencil mark in the article list and the footer. A genuine article names a maintainer and a revision. A rewritten one reads revision — · last modified 03:14 · author —. The paper copy sitting on your desktop is the ground truth, and restoring the article from it is the correct resolution to that day’s ticket.

I love this mechanic because it is honest. The threat is not a creature in a corridor. It is confidently wrong documentation, which every person reading this has met in production.

Four out of five frightening tickets are completely mundane

This is the content rule I would keep if I had to throw out everything else.

A keyboard typing the wrong letters is AZERTY, not a possession. A polite password reset request at half past two is a polite password reset request. If the unsettling ticket were always the supernatural one, you would stop reading and start pattern-matching on tone, and the whole thing would collapse into a vibe check you can pass without understanding anything.

So by week five, every single day carries one entirely routine ticket, precisely because by then your instinct is to file on everything that twitches.

For the engineers: no assets, and content is the architecture

Every icon is inline SVG, the wallpaper is CSS gradients, and every sound is synthesised at runtime from four oscillators, three noise buffers and three filters. No image files, no audio files, nothing to download.

The codebase is about 22,400 lines, and 12,135 of them are src/content. The engine is 2,481. That ratio is the architecture, held by one rule: engine/ and os/ contain no story, content/ contains no logic. Adding a new day requires no engine change at all.

Go work a shift

Thirty days, 75 tickets, four endings, roughly eight minutes a shift, and it saves as you go. The Knowledge Base is not set dressing either: it starts at 20 articles, ends at 32, and the twelve that unlock along the way explain what Halworth actually is, in the only register this company knows how to write in.

Clock in at it-support.idad.fyi and see how many shifts you last. If you have ever closed a ticket you were not completely sure about, you already know how this feels.