AUTOMATIONSOLVER GitHub ↗

Ladder logic · Motor control · Puzzle game

Make the rung remember

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.

Operator panel SCANNING · 60 ms
X0 Y0 X1 Y0
Y0 MOTOR OFF

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

work order 02 · start / stop seal-in
AutomationSolver in play: a work-order brief on the left, the ladder grid editor with an energized seal-in rung glowing amber in the center, and the operator panel with START/STOP inputs and a running motor output on the right.

One engine, both sides

packages/client

Grid ladder editor

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

Deterministic scan cycle

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

Authoritative grading

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

01Direct ControltutorialWire a single input contact to a single output coil.
02Start / Stop Seal-IneasyLatch a motor with momentary Start/Stop buttons using a seal-in contact.
03Emergency StopeasyAdd a normally-closed E-Stop to a seal-in motor circuit.
04Delayed StartmediumSound a warning beacon, then start the motor after a 2-second timer.
05Batch CountermediumCount 5 parts, latch a BATCH FULL lamp, and reset on demand.
06Index to SensorhardRun a conveyor until a part reaches the sensor, then stop automatically.
07Drill Station CyclehardSequence a clamp, drill feed, warning beacon and eject pusher into one automatic stroke.
08Elevator — Automatic DescenthardDrive a 3-floor elevator up on command and auto-return to the ground after 10 s idle.
09Elevator — 5-Floor DispatchhardWire per-floor call buttons so a 5-floor car dispatches toward whichever floors are called.
10Elevator — DoorshardAdd a door that opens on arrival, dwells, and auto-closes — the car cannot move until it does.
11Elevator — Fully FunctionalhardThe complete 5-story elevator: dispatch, doors, and an automatic return to the lobby when idle.

Getting started

git clone https://github.com/CuplexUser/AutomationSolver.git
cd AutomationSolver
npm install # no native modules — no C++ toolchain needed
npm run dev # server on :4000, client on :5173

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.