#DHSeaDev — Chrome MV3 — Side Panel — Social Deduction
VEILFALL
VEILFALL is a solo hidden-role deduction game that lives in a Chrome side panel. Nine souls hold a ward at Threshold Academy and one of them came through the Gate wrong. You are one of the nine, you know your own calling and nothing else, and the other eight are opponents who each know only what their own calling told them. They form reads from evidence they can cite, bluff from a plan agreed before the first night, and vote from their own beliefs rather than following the room.
CHROME WEB STORE LISTING IN PREPARATION
Version 0.8.0 is built and gated; the store listing is being prepared and is not submitted yet. The full privacy policy is in the Privacy section below. Questions: dhseadev@gmail.com
A day, in three beats
Every day is the same three beats. What changes is who is still alive to speak, and how much of what they said was true.
Vespers
The hall sleeps. Callings act in a fixed order, information moves in the dark, and someone does not wake up. Nobody dies on the first night.
The Reading
The living talk. Whisper to any soul privately, speak to the room, or say nothing and listen. Everything anyone claims is written down whether it was true or not.
The Naming and the Tally
Someone is accused, hands go up, and at most one soul is Sealed. Half the living, strictly more than the current leader, and a tie clears the block.
The opponents are the actual work
Most single-player takes on this genre script the opposition: the other seats say lines from a table and vote the way the plot needs. VEILFALL does not. Every opponent carries a belief record — what it has been told, who told it, and how much that source is worth after everything else it has said. Reads are formed from that record and cited back to it. A soul that accuses you can tell you why.
Two things follow that matter more than they sound. Evil souls draw their bluffs from a plan assigned at setup rather than independently, so two of them no longer claim the same calling and hand you the game. And every vote is computed engine-side from that seat’s own beliefs, never from what the room is doing, which is what stops eight opponents stampeding behind whoever spoke first.
The rules themselves are never delegated. A deterministic engine owns all state — setup, night order, ability resolution, misinformation, vote arithmetic, deaths, succession and win checks — and calls no model, ever. That split is not stylistic. Letting a language model adjudicate rules produces drift that stays invisible until the moment it decides a game.
It plays with no key, and no network
The default tier runs entirely offline. There is no account, no sign-in, and no network request anywhere in it. Opponents are driven by the belief engine described above, which is where all of the interesting behaviour lives.
One optional feature adds a network call. Supply your own free Groq API key and opponents phrase their lines in their own words instead of drawing from a template bank. It changes wording only. The engine still decides what each soul knows, claims, targets and votes for, and a legality filter checks every generated sentence against that speaker’s permitted facts before it reaches you — speculation passes, an unfounded assertion is dropped rather than trimmed and shipped.
There is also read-aloud, which is genuine audio and unrelated to the key: it speaks the game through your operating system’s own speech engine, free and offline, with a stable voice and pace per soul derived from the persona the AI layer already generated. The first build called the text feature “voices”, which promised sound from a text feature. The two are named apart now.
What is ours, and what is not
VEILFALL is a reimplementation of an existing game’s ruleset with entirely original expression. That is a narrower claim than “original game” and it is the accurate one, so it is worth stating plainly rather than leaving to be discovered.
Derived. The rules are modelled closely on Blood on the Clocktower by The Pandemonium Institute, specifically its Trouble Brewing script: twenty-two roles in the same faction split, the same player-count composition ladder, the same two-part night order, the same nomination and vote structure, the same ghost vote, the same win conditions. Anyone who knows that game will recognise this one immediately. Game rules and systems are not copyrightable, which is why the genre has been reimplemented many times, but the debt is real and pretending otherwise would be dishonest.
Ours. The setting, the twenty-two calling names, every line of ability and flavour text, the phase vocabulary, the art, the title, the interface and the entire codebase are original to this project. Nothing was copied or adapted from the source’s text or art, and a pre-ship check greps every shipped file for source terminology and fails the build on a hit.
Also ours, and not derived from anything. The opponents. Belief records, evidence weighting, personas, engine-side voting, coordinated bluff assignment, the four-layer prompt-injection defence and the post-game transparency view have no counterpart in a game played by humans with a human storyteller.
Not affiliated with, endorsed by, or connected to The Pandemonium Institute. If you enjoy this, buy the real thing and play it with seven friends. It is better, and it is theirs.
Measured, not estimated
Every number below came from an instrumented run of the shipped build. The balance figures use a random player, so a real one should do better than these.
| Measurement | Result |
|---|---|
| Engine unit and property tests | 46 / 46 |
| AI, security and full-game tests | 20 / 20 |
| Rate limit, model client, guidance and speech tests | 44 / 44 |
| Real-browser end-to-end, zero console errors | 45 / 45 |
| Seeded auto-play battery | 300 games, all terminal, all four win paths reachable |
| Balance at Adept / Novice / Veteran (n=400 each) | 53.8% / 58.0% / 54.3% |
| Utterances rejected by the legality filter, offline tier | 0 across 250 games |
| Documented prompt-injection battery | 0 illegitimate disclosures |
| Repeated opponent sentences within one day | 0 across 95 days (was 8 days in 91 before the fix) |
A fourth difficulty preset was built and cut. It measured within noise of the third, and shipping a label that does nothing is worse than shipping three that do.
Questions
Do I need an API key to play VEILFALL?
No. The whole game runs offline with no account and no key. Opponents are driven by a deterministic belief engine that holds real hidden knowledge, cites evidence for its reads, bluffs from a coordinated plan and votes from its own beliefs. Adding your own free Groq key is optional and changes only the wording of what opponents say, never what they know or do.
Can I cheat by talking the opponents into revealing their roles?
You can try, and the defence is structural rather than an instruction. Each opponent’s context contains only that opponent’s own knowledge, so a total compromise of one seat costs exactly one soul’s worth of information, which you could have learned by talking anyway. Any text you type arrives inside reserved delimiters with speaker tagging, every generated line is checked engine-side against that speaker’s permitted facts before you see it, and opponents never message each other, so there is no hop for an injection to take. A documented battery of attacks produced zero illegitimate disclosures.
Is every game different, or can I replay one?
Both. Every board is generated from a seed, so the same seed always deals the same callings to the same seats and the same opponents behave the same way. Leave the seed blank for a fresh game, or paste one in to replay a board exactly or hand it to somebody else.
Does VEILFALL read the pages I visit?
No. It has no content script, requests no host permission at install time, and reads no tab or page URL anywhere in its source. It runs in the side panel and nowhere else, and a pre-ship check greps the shipped code for exactly that on every build.
Privacy
The short version: VEILFALL asks for two permissions, stores your game in your own browser, and contacts nothing unless you choose to add an API key. There is no analytics, no account, and no telemetry in any tier.
| What | Answer |
|---|---|
| Data collected | None. VEILFALL collects and transmits no data about you, in any tier. |
| Accounts or sign-in | None. No account system, no login, no email field, no password. |
| Network requests | None by default. The only outbound call in the entire codebase is to Groq, it exists only if you supply your own key and press Activate, and it carries a single opponent’s already-decided line to be rephrased. Turning the feature off stops it. |
| Analytics or telemetry | None. No events, no page views, no crash reporting, no advertising identifiers, no third-party scripts. The content security policy is script-src 'self'. |
| Permissions requested | Two: sidePanel and storage. A third, access to api.groq.com, is optional and requested at runtime only if you enable improvised dialogue. |
| Where your save lives | chrome.storage.local in this browser only. It holds the game in progress, your notebook, your settings and your seed. There is no storage.sync, so nothing is copied to another machine or to a Google account. |
| Browsing history and page content | Never read. No content script, no page capture, and no tab or page URL is read or stored anywhere in the source. |
| Your API key | If you supply one it is stored in this browser profile’s extension storage. Anyone with access to the profile can read it. If that is not acceptable, leave it blank — the game is complete without it. |
| What is sent to Groq, if you enable it | The structured intent of one opponent’s line plus that opponent’s own permitted knowledge, so it can be phrased. Never your notebook, never the full board, never anything identifying you. Groq’s own handling of that request is governed by Groq’s terms, not ours. |
| Text you type | Stays on your machine in the offline tier. With improvised dialogue on, what you say to the room is included as context so opponents can respond to it, wrapped in markers and attributed to you. |
| Remote code | None. No eval, no dynamically constructed functions, no remotely hosted scripts, no CDN libraries and no remote fonts. Zero third-party runtime dependencies. |
| Selling or sharing data | There is no data to sell, share or transfer, to anyone, for any purpose. |
| Deleting your data | Removing the extension deletes the save with it. You can also clear its storage from chrome://extensions at any time, or clear the key alone from Settings. |
| Children | The game involves fictional accusation and deception between characters and no real-world contact of any kind. Because it collects nothing, it holds no information about anyone regardless of age. |
The permissions, and why each one exists
| Permission | Why |
|---|---|
sidePanel | The entire interface is a Chrome side panel. This is what lets the panel open when you click the toolbar icon. Without it the extension has no interface at all. |
storage | Saves the game in progress, your notebook and your settings, so closing the panel or restarting Chrome does not discard the night you are in the middle of. Local only. |
https://api.groq.com/* | Optional, requested at runtime, and only if you enable improvised dialogue and supply your own key. Decline it and everything else still works. |
| Host permissions at install | None requested. VEILFALL runs on no website and reads no page. |
What was deliberately not built: batching. Sending eight opponents’ knowledge in one request would fit the free rate limit comfortably and would also mean one prompt injection reaches all eight at once. Per-agent isolation costs more requests and is worth it.
Questions about any of this: dhseadev@gmail.com
Credits
Built by #DHSeaDev. Engine, AI layer, interface, art and tests are hand-written for this project with no bundler, no framework and zero third-party runtime dependencies. Rules are derived from Blood on the Clocktower by The Pandemonium Institute, as described above; all expression is original and the project is not affiliated with or endorsed by them.
Built by #DHSeaDev — dhseadev@gmail.com