A faithful web recreation of the terminal hacking minigame from Fallout 4, built with SvelteKit 5 and deployed on Cloudflare Workers.
The hacking minigame presents a grid of characters and words on a retro CRT terminal. Your goal is to find the correct password from a list of words scattered in the noise. Each wrong guess tells you the likeness — how many letters match the password at the same position — letting you narrow down the answer. You have 4 attempts before lockout.
Bracket sequences like (#$@!), [>.-], {!=;} can be clicked for a random bonus — either a dud word is removed from the grid, or your attempts are refilled to 4.
| Start | Main Menu |
|---|---|
![]() |
![]() |
| Game | Levels |
|---|---|
![]() |
![]() |
Daily Challenge — a new puzzle every day. One shot, no retries. (coming soon)
Run Mode — play levels back to back, accumulating a score. Progress through 20 levels of increasing difficulty.
Practice Mode — pick any level and play without pressure. No score recorded.
Leaderboard — (coming soon)
20 levels across 5 difficulty tiers:
| Tier | Levels | Word Length | Words |
|---|---|---|---|
| Very Easy | 1–4 | 4–5 letters | 5–8 |
| Easy | 5–8 | 5–6 letters | 8–12 |
| Average | 9–12 | 7–8 letters | 9–13 |
| Hard | 13–16 | 8–9 letters | 11–13 |
| Very Hard | 17–20 | 9 letters | 12–16 |
Difficulty increases through word length, number of words, and the distribution of likeness clues — harder levels have more zero-likeness duds so fewer guesses give you useful information.
Score is calculated per level in Run Mode:
base = 100 × 1.4^(level - 1)
multiplier = 2.0 (3 attempts left) | 1.5 (2 left) | 1.1 (1 left)
perfection bonus = +500 if solved on first try
score = round(base × multiplier) + perfection bonus
Framework — SvelteKit 5 with Svelte 5 runes ($state, $derived, $effect)
Language — TypeScript throughout
Deployment — Cloudflare Workers
Database — Cloudflare D1 (SQLite) for user accounts and leaderboard
Assets — Cloudflare R2 for music tracks
Styling — vanilla CSS with custom properties, no UI library
- A flat array of junk
Tokenobjects fills the grid (gridRows × gridColsIntercells) - Words are placed randomly into each half of the grid, ensuring no overlaps or adjacency
- Bracket pairs (
(),[],{},<>) are detected per row and assigned group IDs - Non-interactive hex address columns are prepended to each row
- The grid scans in character by character on load with a typewriter sound effect
Node.js 20+ and a Cloudflare account are required.
npm install
npm run devMusic is streamed from Cloudflare R2 — public domain recordings from the 1910s–1920s. Keyboard sounds are played on hover and click to simulate typing on the terminal.
Music must be turned on manually by the user (browser autoplay policy). Once started it plays through a shuffled playlist automatically.
Users are created lazily — anonymous play is allowed and accounts are only created when a player submits a score. Identity is stored in an httpOnly cookie tied to a D1 record. No passwords, no email required.
EOF



