Ladder logic · Motor control · Puzzle game
AutomationSolver is a puzzle game where you program a Mitsubishi-style PLC in ladder logic — seal-ins, e-stops, on-delay timers, counters, a conveyor index, and a five-story elevator. Build the rung on a grid, run the scan, and watch the power flow.
Hold START, then let go — the Y0 branch seals the rung in and the
motor keeps running. STOP breaks it. That's puzzle 02; the real editor is yours to wire.
The bench
One engine, both sides
packages/client
Contacts and coils drop onto a rung grid, just like a real MELSEC program. Series is AND, parallel branches are OR, and every scan the solver floods power from the left rail so you see exactly which cells are live.
packages/shared
A pure-TypeScript simulation engine with zero runtime dependencies. It advances only by an
explicit dt — never the wall clock — so the same program always produces the
same trace, everywhere.
packages/server
Submit, and the server replays your program through the same engine against scripted test scenarios — machine dynamics included. Client and server agree bit-for-bit, by construction.
That's the architectural bet of the whole project: one simulation engine, shared by live play and grading. The client uses it for instant feedback while you edit; the server uses it as the source of truth for scoring. There is no second implementation to drift.
Work orders
Getting started
Open http://localhost:5173, create an account, and start solving. The database is
Node's built-in node:sqlite and password hashing is node:crypto
scrypt, so npm install works on a fresh machine with nothing but Node.