COIN-OP Nº 001 · ONE DEAD LAPTOP · 27 MISSIONS + 5 CABINETS
Reopen the arcade
an AI-era full-stack apprenticeship
You inherited a dead arcade. The back office holds one old Dell
Latitude. Bring the building back room by room — when the sign is
fully lit, the developer who lit it is you.
An arcade, a laptop, and everything you need to learn
The fiction is an arcade. The machine is real: your Latitude 3490, wiped, running
Xubuntu, doing actual jobs — starting with the one you genuinely need, a backup
vault for your rig's photos, repos, and files (that's the coin vault, and it's
Mission 4). Every service the building runs gets a staff member: an AI agent you
build, put through a Tryout, and only then trust with keys.
The back-office app you build all course long is the Ledger.
The five commissions are cabinets: real web apps with real
marquee art that end up playable on your floor. When the big sign out front is
fully lit, the certificate is the building itself.
Under the fiction, this is a ~150-hour full-stack curriculum built for how 2026
actually works: an AI agent codes with you from mission 1, but every mission
assigns you a seat, and the seat is the lesson. The classic
course-by-course path survives on the Purist page
if you ever want the long road. (All clients and characters here are fiction;
the skills, the machine, and the apps are not.)
The four seats
WRITER
Blank page, by hand, no agent. Reserved for the ~20% of concepts where the
struggle is the learning: state, async, schemas, auth, retrieval.
REVIEWER
The agent writes; you must find what's wrong before it ships. There is
always something. Merging unread code fails the mission.
ARCHITECT
You write the spec and direct the agent through it. The grade is whether
your spec survived contact with implementation.
DEBUGGER
Something is broken and the logs are lying. Appears mostly inside Tryouts,
where breakage is safe and encouraged.
The Tryout
No staff bot touches the real building until it survives a shift on the test
cabinet: an agent builds the candidate, and you run the interview — read its PR
cold, break it on purpose in a disposable sandbox copy, rule
hire, fix-then-hire, or reject.
Rejections are wins. Every arcade has a story about the repair guy who made
things worse; yours won't.
The premises
Using this board: check missions and stages off as you go —
progress and notes save in this browser (localStorage) and the building lights up
to match. Export before switching machines; import on the other side. Edit this
file freely; never renumber an existing ID (saved progress is keyed on them).
THE BUILDING
Seven rooms between you and the grand reopening
Rooms light amber while you work them, green when they're done. Click a room to go there.
STAFF
The wall behind the counter
Badges light up when a Tryout ends in a hire. This wall is the course's real scoreboard.
🎟️The Ticket Booth · one front door for every service candidate
📖The Guide · answers from your own notes candidate
🔦The Night Guard · watches the building, reports to Grafana candidate
✒️Your hire · the last one is your own design candidate
Arc 0 · Power On
~20 hrs
Get the lights on: the machine, the fleet, and the building's first real duty.
Install Xubuntu 24.04 LTS on the Latitude and make the shell yours:
terminal fluency, apt, permissions, aliases, git configured, VS Code and nano ready.
Deliverable — a verified, updated, configured Linux machine humming in the back office.
Briefing
The play
The install walkthrough already exists, in full detail, on the Purist page:
follow Phase 0 there, sections 0.A through 0.E
(installer USB → install → terminal → git and SSH keys → editor). It's the one
part of the classic path that isn't course-shaped; it's just correct. Do all of
it, then come back for the back-office twist.
The back-office twist (this path only)
This machine is about to be an always-on appliance, not a lap warmer.
Two settings desktop courses never mention:
# 1) Closing the lid must not suspend the building.
sudo nano /etc/systemd/logind.conf # set: HandleLidSwitch=ignore
sudo systemctl restart systemd-logind
# 2) Give the arcade a fixed address. In your router's admin page,
# add a DHCP reservation for the Latitude's MAC address
# (find it with: ip addr). A building that wanders is hard to run.
Hardware notes for always-on duty: prefer Ethernet over
Wi-Fi (and if Wi-Fi is unavoidable, check the card with
lspci -nnk | grep -iA3 net — Intel variants behave; the Qualcomm
QCA61x4A has flaky-Linux reports). The 3490 takes two SODIMMs, 32 GB max: a
cheap 2×8 GB kit is the best money this building could spend, though the whole
course is planned to fit in 8 GB.
Failure modes that matter
No backup before the wipe. The installer erases the whole disk. Purist task p0-1 is not optional.
Skipping the checksum. Verifying the ISO is the habit, not the outcome.
The VM temptation. On 8 GB, metal or nothing — a VM here would strangle Docker later.
Directing your agent
No agent this mission; the hands are yours. But keep a file of every moment
that confused you. In M1.4 you'll hand that list to Claude Code and interrogate
its explanations — a perfect first review exercise.
Keyed SSH in both directions between HQ (the rig) and the arcade,
host aliases, files moved. Two machines become one operation.
Deliverable — ssh arcade works from HQ; ssh hq works from the laptop; password auth is off.
Briefing
Mental model
SSH is a client knocking on a daemon's door with a key. Each direction needs
a daemon listening at the destination and the visitor's public key in
the destination's authorized_keys. Private keys never travel.
That's the whole protocol, socially speaking.
Arcade side (the laptop opens its door)
sudo apt install openssh-server
systemctl status ssh # should be active (running)
# From HQ (PowerShell — Windows ships the OpenSSH client):
ssh-keygen -t ed25519 # if HQ has no key yet
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh charles@<laptop-ip> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
ssh charles@<laptop-ip> # should now log in with no password
HQ side (the rig opens its door)
# Windows 11: Settings → System → Optional features → add "OpenSSH Server"
# or in an admin PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd; Set-Service sshd -StartupType Automatic
# THE WINDOWS GOTCHA: your account is an administrator, so Windows reads keys from
# C:\ProgramData\ssh\administrators_authorized_keys (NOT your user profile).
# Paste the laptop's ~/.ssh/id_ed25519.pub into that file, then lock its ACL
# (sshd refuses the file if it's too open). This one gotcha causes 90% of
# "why is it still asking for a password" on Windows:
icacls.exe "$env:ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
Aliases, then hardening
# Laptop ~/.ssh/config # HQ %USERPROFILE%\.ssh\config
Host hq Host arcade
HostName <rig-ip> HostName <laptop-ip>
User <windows-user> User charles
# Once BOTH key logins work, turn off password auth on the laptop:
printf 'PasswordAuthentication no\nPubkeyAuthentication yes\n' | \
sudo tee /etc/ssh/sshd_config.d/99-hardening.conf
sudo sshd -t && sudo systemctl restart ssh # -t validates config BEFORE restarting
Ubuntu quirk worth knowing: since 22.10, ssh.socket owns the
listener (socket activation). Auth settings like the one above work normally,
but if you ever change the port, change it on the socket
(sudo systemctl edit ssh.socket), not in sshd_config, or it will
be silently ignored.
Failure modes that matter
Locking yourself out: never disable password auth until the key login is proven from the other machine.
Permissions: on Linux, ~/.ssh must be 700 and authorized_keys 600, or sshd silently ignores them.
The administrators_authorized_keys ACL on Windows, above.
Prove it
Move a file each way with scp. Then run ssh arcade htop
from HQ: the arcade's guts, live, inside an HQ terminal. That feeling is the
whole two-building operation in one command.
Create the arcade repo — home of everything you build here — push it
to GitHub over SSH, and adopt a commit discipline.
Deliverable — ~/arcade repo with README, pushed; first three commits tell a story.
Briefing
The play
You configured git and GitHub keys during M0.1 (Purist 0.D). Now open the
books for real: ~/arcade with README.md (what this
place is), docs/ (specs live here, starting next mission), and
ledger/ (the app, from Arc 1 on). Push it. Every mission from here
commits into this repo; the git log becomes your course transcript.
Commit discipline (the whole lesson)
One coherent change per commit; the message says why, not what.
Commit before every experiment, so reverting is casual, not surgery.
Branches are free. Anything exploratory gets one.
Failure mode that matters
The junk-drawer repo: secrets, ISOs, and node_modules
committed in week one haunt you in month six. Write a .gitignore
now; add .env to it before any .env exists.
First architect seat: audit what on HQ deserves protecting (photos,
the repos you'd cry about, documents), write the backup spec, then implement v0 —
the arcade pulls from HQ nightly and records what it did.
Deliverable — real files flowing HQ → arcade on a schedule, a vault-status.json the next arc builds UI on, and the building doing a real job by ~hour 15 of the course.
Briefing
The architect seat, defined
You don't write the script first. You write the spec first,
in ~/arcade/docs/vault-spec.md: WHAT is protected (exact HQ paths —
audit your Pictures, repos, documents), WHERE it lands
(/srv/vault/), WHEN (schedule), HOW MUCH history (v0: none, latest
copy only — noted honestly as a limitation), and HOW YOU'D KNOW it worked (the
status file). Then you direct the agent to implement the spec and review the
result against it. The spec surviving contact is the grade.
Design constraints worth knowing (why v0 pulls with scp)
HQ is Windows: rsync isn't natively there, so a classic
rsync pull would need extra install on HQ. v0 stays stock: the laptop pulls
over SSH with scp -r (or sftp), which needs
nothing but M0.2's work.
v0 is deliberately naive: full re-copy, no versioning, no dedup. It will
feel wasteful — good. Feeling the waste is what makes Arc 2's upgrade to
restic (snapshots, dedup, encryption) land as a solution instead of a
vocabulary word.
The vault disk is finite. Your spec's WHAT must fit; the audit includes
sizes (du -sh laptop-side, right-click Properties on HQ).
Shape of v0 (direct your agent toward this; don't paste it)
# ~/arcade/vault/pull.sh — runs on the laptop
# for each path in the spec:
scp -r hq:"C:/Users/<you>/Pictures" /srv/vault/photos/
# then write vault-status.json: { started, finished, paths, bytes, ok }
# then: crontab -e → schedule it nightly (man 5 crontab is the reading)
Failure modes that matter
No spec, just vibes: backing up everything means backing up junk and filling the disk by Thursday.
Silent failure: a backup that quietly stops is worse than none — that's why the status file exists, and why the Vaultkeeper gets a Tryout in Arc 2 to watch it.
Never testing a restore: copy one photo back the other way today, by hand. Unrestored backups are a rumor.
Arc 0 gate: the building holds a real copy of
things you'd miss, on a schedule, with a status file proving it — before you've
written a single line of frontend. The lights are on and the place already earns
its keep.
Arc 0 notes
Arc 1 · Back Office
~24 hrs
Frontend fundamentals, learned on the arcade's own book of record.
Read this very app's construction notes (docs/BUILD-NOTES.md)
against its source, decision by decision, and file your objections.
Deliverable — written attacks on at least two of the twenty-three decisions, in your Arc 1 notes.
Briefing
The reviewer seat, defined
Reviewing is not reading; it's interrogation. For every decision the notes
defend, ask the three reviewer questions: What does this actually do?What input or future change breaks it?What would I have done, and
can I defend the difference? The notes were written to be argued with, and
several decisions have real weaknesses. Find two. "It's fine" is a failed
review; nothing is fine.
Why this is mission one of the frontend arc
From here on you'll read far more code than you write — every agent session
is a code review. Training the interrogation reflex on a codebase with narrated
intent is the gentlest on-ramp: the answers are printed, and your job is
deciding whether they're good ones.
Hand-build the arcade status page: semantic HTML and CSS, no framework,
no agent, served from the Latitude and viewed from HQ's browser.
Deliverable — http://arcade:8080 (or the IP) renders your page anywhere on the LAN.
Briefing
The play
In ~/arcade/ledger/: one index.html, one
style.css. Content: the arcade's name, the premises (three
machines, what each does), the vault's duties as a static list for now, and a
staff wall with everyone marked "candidate." Serve it:
cd ~/arcade/ledger && python3 -m http.server 8080
# then from HQ's browser: http://<laptop-ip>:8080
The moment HQ renders a page the arcade is serving, you have a two-machine
web system. Every site you'll ever ship is this moment with more middlemen.
Craft bar (this is the refresher, so hold it)
Semantic elements: header, nav, main, section; heading levels in order.
Design tokens: colors and fonts as CSS custom properties on :root, defined once, used everywhere.
One deliberate layout: flexbox or grid, chosen on purpose, not both by accident.
Failure modes that matter
Div soup: if every element is a div, structure lives only in class names, and machines (including your future agents) can't read it.
Styling before structure: finish the HTML outline first; CSS on an unstable skeleton is rework.
Absolute positioning as layout: it's a pin, not a system. The page should survive a resize.
Reference, not tutorial
Odin's Foundations
HTML/CSS/Flexbox sections and MDN
are the reference shelf when stuck; you're past following them start-to-finish.
JavaScript state, by hand: the status page fetches
vault-status.json (written by M0.4's script) and renders live backup
freshness — green under 24h, amber under 48h, red past that.
Deliverable — the page tells the truth about last night's backup without you reading a log.
Briefing
Mental model
State is data; the DOM is a projection of it. The discipline that separates
jQuery-era spaghetti from everything since: fetch data → compute a state object
→ render state to DOM. Three functions, one direction of flow. You're writing,
in miniature, the idea React industrializes next arc.
The play
Have M0.4's script copy vault-status.json into the ledger
folder it serves (or serve /srv/vault alongside; your call —
note the tradeoff).
fetch('vault-status.json') → parse → compute
hoursSince(finished) → render the dial and byte counts.
Handle the three ugly cases before the pretty one: file missing, JSON
malformed, clock skew (finished in the "future").
Failure modes that matter
file:// fetch: browsers block fetch from file:// pages — this only works because M1.2 made you serve over HTTP. Now you know why.
Trusting the data's shape: the JSON is written by your own script and it will STILL surprise you one day. Guard it.
Timezone display: store timestamps ISO/UTC, render local.
Claude Code's first feature on your codebase: a vault history strip
(last 7 runs) on the status page, on a branch, reviewed like money depends on it.
Deliverable — a merged (or rejected) PR with your written review; at least one demanded change.
Briefing
Setup
Install Claude Code on the laptop (a terminal agent for a terminal building —
made for each other). Point it at ~/arcade and ask for the feature
as a spec: what it should do, what it must not touch, and that it works
on a branch. Small diffs are a demand you're allowed to make.
The review discipline (use it forever)
Read the diff cold before running anything. Line by line. Out loud helps.
For each hunk: what does it do, what breaks it, does it belong in this PR?
Run it. Then feed it garbage (delete the JSON, truncate it) and watch.
Demand at least one change, even on good code. Finding it is the exercise.
Merge only what you can defend line by line. You are the reviewer of record.
Also: the M0.1 confusion file
Hand the agent your list of confusing install moments and have it explain
each one. Interrogate the answers — agents state wrong things with the same
confidence as right ones, and calibrating your ear for that is a course
outcome.
Your first hire, deliberately low-stakes: a disk-space reporter for the
vault. An agent builds the candidate; you run the full Tryout format for the first
time and make the call.
Deliverable — the Sweeper on the wall (a cron job writing sweeper-status.json, surfaced on the Ledger), and one page of tryout notes.
Briefing
The candidate spec (you write this first — architect muscle)
The Sweeper checks /srv/vault disk usage and free space, writes
sweeper-status.json (used, free, biggest offenders, timestamp), and
must warn when free space drops under a threshold. Runs daily by cron. Small
enough to try out in an evening, real enough to matter — v0 backups WILL eat
the disk eventually, and the Sweeper is who tells you.
The Tryout format (learn it here, reuse at every hire)
Paper round: read the candidate's code cold. Note every
question before running anything.
Floor round: run it in a sandbox, not the building —
here, a scratch directory full of junk files; later Tryouts use a
docker-compose clone. Probe: near-full disk, empty vault, unreadable dir.
Stress question: ask the agent "what happens if X?" for
your three nastiest X's, and check its answers against what the floor round
showed.
Ruling: hire / fix-then-hire / reject, with reasons, in
writing. Rejections are wins.
Failure mode that matters
The polite interview. If the Tryout finds nothing, the
Tryout was too soft. There is always something: a magic-number threshold, a
du that follows symlinks, output that breaks on a filename with a space.
Find it.
Arc 1 gate: the Ledger exists, tells the truth
about the vault, and has survived its first agent contribution under your review.
One badge is lit on the staff wall.
Arc 1 notes
Arc 2 · The Vault
~26 hrs
Backend, database, real snapshots; the coin vault grows up.
An Express API on the Latitude, by hand: routes serving vault and
sweeper status, middleware, logging. The static page becomes a client of your first server.
Deliverable — GET /api/vault/status answered by code you wrote.
nodeexpressRESTmiddlewarenvm
Briefing
Authored when you approach Arc 2, so it reflects that month's tooling. Say "author Arc 2 briefings."
PostgreSQL on the laptop. You design the schema for backup-run history
by hand (that part is sacred writer territory); the agent writes the CRUD; you review.
Deliverable — every vault and sweeper run lands in Postgres; the API reads from it.
postgrespsqlschema designSQLmigrations
Briefing
Authored when you approach Arc 2.
Retire naive scp: restic gives the vault encrypted, deduplicated
snapshots with real history (HQ pushes to the arcade over SFTP). Scheduled properly;
runs recorded to the database.
Deliverable — point-in-time restore proven: recover a file as it was last Tuesday.
resticsnapshotsencryptionsystemd timerssftp
Briefing
Authored when you approach Arc 2.
The first real hire: an agent-built watcher that verifies snapshots
actually restore (test-restores a sample nightly) and reports to the Ledger. Sandbox
trial in a throwaway repo, then your ruling.
Deliverable — the Vaultkeeper's badge lit; the Ledger shows verified-restore status, not just ran-status.
debuggingrestore testingcron vs timerstryout format
Briefing
Authored when you approach Arc 2.
Arc 2 notes
Arc 3 · Ticket Booth
~19 hrs
The family gets memberships, the building gets one front door, Docker arrives.
Auth by hand, because auth is sacred writer territory: password hashing,
sessions, family accounts on the Ledger. Nobody's agent writes your first auth.
Deliverable — family members log into the Ledger; you can explain exactly what a session cookie is.
bcryptsessionsJWTthreat model
Briefing
Authored when you approach Arc 3.
Docker and compose: Postgres moves into a container, the whole stack
becomes one docker compose up. This also builds the sandbox-clone
machinery every future Tryout uses.
Deliverable — the stack rises with one command; a throwaway copy rises beside it and is destroyed without fear.
docker engineimages vs containersvolumescompose
Briefing
Authored when you approach Arc 3.
Photos flow continuously from HQ into the vault and get a gallery
surface behind the family login. (Tooling decided at briefing time against 8 GB
reality — likely Syncthing plus a lightweight gallery.)
Deliverable — a family member sees the photos in a browser without touching HQ.
syncthingservicesRAM budgets
Briefing
Authored when you approach Arc 3.
One front door for every service: a Caddy reverse proxy with local
HTTPS, agent-built, tried out in the compose sandbox before it takes the keys.
Deliverable — the Ledger, gallery, and status endpoints behind one address; ports stop being something the family sees.
reverse proxycaddyTLSDNS on LAN
Briefing
Authored when you approach Arc 3.
Arc 3 notes
Arc 4 · The Counter
~21 hrs
HQ's GPU serves models to the building; retrieval built by hand at the strategy-guide rack.
HQ's Ollama serves models over the LAN; the arcade's apps call it like
any API. The premises earn their diagram: GPU where the GPU is, apps where the apps are.
Deliverable — a curl from the laptop gets a completion from HQ's GPU.
ollamaLAN servicesopenai-compatible APItokens
Briefing
Authored when you approach Arc 4.
RAG by hand, no framework: chunk your own notes, embed into a local
Chroma store, retrieve, and answer with citations. The atom of every "chat with your
data" product, written where you can see all of it.
Deliverable — ask a question about your own notes, get a cited answer, and know exactly which line of your code found the source.
embeddingschunkingvector searchchromagrounding
Briefing
Authored when you approach Arc 4.
An agent builds the Guide: a chat surface in the Ledger over your
retrieval pipeline. The Tryout is an eval: grounding probes, hallucination bait,
questions with no answer in the notes. Hire only what admits ignorance.
Deliverable — the Guide's badge lit; your first written eval, reusable every time its index changes.
evalshallucinationcitationsrefusal behavior
Briefing
Authored when you approach Arc 4.
Arc 4 notes
Arc 5 · Break Room
~19 hrs
Agents as infrastructure: tool loops, duty rosters, and the building's service entrance.
A tool-calling loop by hand: model gets tools (read vault status, query
the DB, fetch a URL), decides, acts, loops. Forty lines that demystify the entire
agent industry.
Deliverable — a CLI agent that answers "how's the building?" by actually checking.
tool callingagent loopcontextstop conditions
Briefing
Authored when you approach Arc 5.
The staffing mechanics land in the Ledger: a job queue, run logs, and
cost meters per staff member. Every bot's every shift becomes a row you can see.
Deliverable — the Ledger shows who ran, when, what it cost, and what it said.
queuesidempotencycost trackingobservability
Briefing
Authored when you approach Arc 5.
An MCP server exposing the building (vault status, staff runs, job queue)
so Claude Code can query and command it from any terminal on the premises.
Deliverable — "hours since the last verified restore?" answered by Claude Code through your MCP server.
MCPtools as APIschemas
Briefing
Authored when you approach Arc 5.
A monitoring agent: uptime checks on every service, alerts to the Ledger,
metrics into HQ's Grafana. Tried out in the sandbox with services deliberately
stopped: does it notice, and does it lie?
Deliverable — the Night Guard's badge lit; HQ's Grafana grows an Arcade dashboard.
monitoringalertinggrafanafalse positives
Briefing
Authored when you approach Arc 5.
Arc 5 notes
Arc 6 · Grand Reopening
~21 hrs
Inspections, the off-site annex, and the last hire — yours.
GitHub Actions on the arcade repo: lint, test, and build the containers
on every push. Robots judge your code before it lands, the way every team works.
Deliverable — a red X you caused, understood, and turned green.
CI/CDgithub actionspipelines
Briefing
Authored when you approach Arc 6.
A Warpyard node joins the premises: same SSH ritual as M0.2, the compose
stack deployed off-site. Anything public-facing waits for your own explicit go.
Deliverable — the arcade's stack runs somewhere you've never physically touched, and that feels normal now.
cloud VMsdeploysenv parity
Briefing
Authored when you approach Arc 6.
Design a staff member this course never imagined: spec it (architect),
hand-write its riskiest core (writer), direct the agent through the rest, run your
own candidate's Tryout ruthlessly (reviewer/debugger), and light the badge.
Deliverable — a working staff member of your own design in production, its spec and tryout notes in the repo. That's the diploma, and it runs.
everything
Briefing
Authored when you approach the capstone; the spec you can start daydreaming now.
Arc 6 notesTHE FLOOR
Five cabinets to fill the room
The arcs teach you to run the building; the Floor teaches you to fill it.
Five commissions, five real web apps, each designed to train the skills that
separate app designers from page builders: state modeling, motion as feedback,
pointer physics, keyboard-first interfaces, accessibility in complex widgets,
density and virtualization, and the geometry problems hiding inside every serious
UI. Each cabinet has a client (fictional), a brief with taste and constraints
(real training: designing FOR someone), staged build plans with seats and
acceptance criteria, and a ship bar with no mercy. Cabinets are elective and
unordered beyond their prerequisites — pick whichever one you can't stop thinking
about. That's the ADHD cheat code and it's legal here.
~150 hours across all five — a second diploma's worth, tracked separately from the
restoration (the sign out front only counts the arcs). A cabinet lights its screen
when you start it and runs attract mode when it ships.
WAVE LABfor Marta · Spindle Recordsunplugged
A listening station for the record shop next door: the
waveform IS the player — scrub it like tape, zoom it like a map, pin notes
to the exact second the crackle gets good. Prereq: Arc 1. ~25h.
Commission brief + build plan
Client is fiction; the app is real and yours.
The brief.
Marta digitizes used vinyl before selling it and wants customers to
preview records on a shop tablet. She hates streaming-app sterility:
"it should feel like handling the record." Constraints she gave you:
warm, tactile, no playlists, no accounts, big targets for thumbs, and
the annotations her staff leave ("skip intro", "the good part: 2:41")
must feel like handwritten stickers, not comments sections.
What this trains: Web Audio
graph, canvas at 60fps, precomputed waveform peaks, scrub/seek gesture
physics, motion as feedback, requestAnimationFrame discipline.
Ship bar 60fps scrub on the Latitude,
annotations survive reload, whole app driveable eyes-closed by keyboard,
and one real record digitized end-to-end as the demo disc.
Stretch: AnalyserNode live spectrum behind the wave while playing —
pure showmanship, judged on restraint.
PARTY LINEfor the arcade's own birthday-party deskunplugged
The booking board for parties and floor slots: drag to book,
resize to extend, and watch overlapping bookings pack themselves into columns.
A calendar that refuses bad bookings — visibly, politely. Prereq: Arc 2. ~35h.
Commission brief + build plan
Client is fiction; the app is real and yours.
The brief.
The party desk (okay: future-you) books birthday parties, tournaments, and
maintenance blocks across the floor's zones. Rules with teeth: no
double-booking a zone, parties need 30-minute cleanup gaps, tournaments
can't start after 7pm. The board must make an invalid drop refuse —
shrug, bounce back, explain — not fail silently or, worse, allow it.
What this trains: interval
geometry (greedy column packing), custom drag/resize pointer engine, ghost
previews, constraint validation as UX, UTC storage vs local rendering, DST
edges, interruptible motion.
Ship bar An invalid drop visibly
refuses with a reason; the DST week renders correctly both directions;
every gesture is interruptible mid-flight; optimistic updates reconcile.
Stretch: a scrubbable "now" line and a day/week view transition
that morphs blocks instead of cutting.
PIN MAPfor Jun · boardwalk associationunplugged
An infinite-canvas planning table: cards, images, and strings
between pins, on a board that pans and zooms like it weighs something. You will
actually use this for client workshops. Prereq: Arc 3. ~40h.
Commission brief + build plan
Client is fiction; the app is real and yours.
The brief.
Jun runs planning sessions for the boardwalk association and wants one
surface for moodboards, site maps, and "what goes where" arguments: drop
cards and images anywhere, pin strings between related things, save named
views ("the sign debate", "budget corner") and glide between them when
presenting. Taste constraints: quiet surface, loud content; no toolbars
covering the work; it should feel like a big table, not a diagram tool.
What this trains: screen↔world
coordinate transforms, camera systems and choreography, hit testing,
selection and transform handles, spatial culling for density, drop-anything
ingestion.
Ship bar 1,000 cards, 60fps pan/zoom on
the Latitude; zoom-to-cursor exact; camera glides you'd happily present
with; survives a real working session without a restart.
Stretch (after Arc 5): presence cursors over websockets — you and a
client on the same table, live, with named cursors.
NIGHT SHIFTfor the Night Guard's wallunplugged
The ops wall: every service, every backup, every bot's last
shift, live, dense, and readable from across the room — with a time-travel
scrubber for "what happened at 3am." Prereq: Arc 2. ~30h.
Commission brief + build plan
The client is your own building — the data is real.
The brief.
One glance answers: is everything up, when was the last verified backup,
what did the bots do overnight, is the disk filling. Constraints: readable
at 2 meters, zero decoration that isn't data, every empty/error/stale state
designed on purpose (the wall's job is precisely the moments things are
wrong), and it must degrade gracefully when its own data source dies —
a dashboard that lies is worse than a wall.
What this trains: streaming
updates without layout thrash, stale-while-revalidate state, chart
interaction (brush, crosshair, tooltip), data-dense responsive layout,
designing every non-happy state. Load the dataviz discipline before S3 —
chart junk fails the ship bar.
Ship bar Pull the network cable
mid-demo and the wall tells the truth within 30 seconds; zero layout shift
during live updates; the 3am question answerable by scrubbing alone.
Stretch: anomaly flags — the wall marks moments worth scrubbing to,
so 3am finds you instead.
EVERYKEYfor the back office's power users (you)unplugged
A command palette over the whole Ledger: every action three
keystrokes away, commands that take arguments, and a trainer that teaches your
own hands. Prereq: Arc 2. ~20h.
Commission brief + build plan
The client is future-you, who is tired of clicking.
The brief.
⌘K anywhere in the Ledger opens the palette: fuzzy-search every action and
record ("restore photo...", "book party sat 2pm", "sweeper last run"),
commands that take inline arguments, contextual scope (different commands on
different pages), and — the trainer — after you mouse-click anything that
had a shortcut, a quiet toast: "next time: ⌘K → rs". Superhuman holds
itself to sub-100ms palette response; you'll hold yourself to sub-60.
What this trains: keyboard-first
architecture, fuzzy search with ranking, composite-widget accessibility
(combobox pattern, aria-activedescendant, focus trap and restore), command
registries, latency budgets as a design material.
Ship bar Any Ledger action in ≤3
keystrokes; results under 60ms; a flawless screen-reader run; the trainer
measurably changed your own habits within a week.
Stretch: palette-as-API — EVERYKEY commands exposed through your
Arc 5 MCP server, so Claude Code can run the same registry you can.
Floor rules: one
cabinet at a time. A cabinet you're sick of goes back under its tarp without shame
— but no new cabinet starts until the current one ships or is formally abandoned
in writing (a one-paragraph post-mortem in your notes). Shipped beats perfect;
abandoned-with-a-post-mortem beats zombie.
Floor notesFRANCHISE OPTIONS
Spin this course into a new building
Same 27 mission slots, same hours, same seats — new topics. This desk writes the
work order: describe the direction (or retitle arcs and missions yourself),
download the request, and hand it to a Claude Code session. The session
researches the topic, then returns a proposal file; import it here to preview
every swap before anything gets built. Approved proposals become their own page
with their own saved progress — this board is never touched.
Locations
PYTHONZ — 150 hours of Python. One green screen. No repeats. (2026-08-09)
Customize all 27 missions
Prefilled with the current topics. Overwrite any subset;
untouched rows are derived from your direction. Hours and seats are fixed.
The prompt
How this works: download request → paste the
prompt into a Claude Code session → the session researches and returns a proposal
file → Import proposal here to preview the swap → approve in the session → it
builds the new page and links it above. Full manual: docs/FRANCHISE.md.