Skip to content

Repository files navigation

Architecture Simulator

Learn system architecture by defending it.
System diagramming with a traffic simulation slide.

Live app →  ·  Design notes  ·  CI

A payments and OCR architecture graded A, having survived three fault rounds


What it is

Interview prep tool for system architecture design.

Build diagram to a scenario with hard requirements — p99 under 400ms, 99.9% available, under $900 a month — and a scoped palette. Drag components out, wire them together, then attack the result: raise the traffic, kill a node, flush the cache, poison a queue, run a security probe. You get a grade and a list of findings.

Drill is flash cards: 204 cards across 166 topics, in multiple choice for volume or typed-answer for the real thing, on an SM-2 schedule.

The loop is the product. Fail a rule in Build and the matching cards land at the front of tomorrow's Drill queue.

The drill screen in speed mode

Stack

Next.js 15 (App Router) · React 19 · TypeScript (strict, noUncheckedIndexedAccess) · Tailwind v4 · @xyflow/react · vitest · Playwright · pnpm · Vercel.

242 tests. No accounts, no API keys, no backend — progress lives in browser storage behind a ProgressStore interface, with a Firestore implementation a swap away.

Run it

pnpm install
pnpm dev          # http://localhost:3000
pnpm check        # typecheck + tests, what CI runs
pnpm test         # watch mode
pnpm build        # production build, exactly as Vercel runs it
pnpm build:local  # same, but writes to .next-build so a live dev server survives
pnpm smoke        # real-browser test (needs `pnpm dev` in another terminal)
Where things live
Path What
SPEC.md The plan, and the reasoning behind every design decision
src/topics.ts The shared taxonomy. TopicId is a union, not string — a typo is a compile error
src/sim/simulate.ts The engine. Flow propagation, latency, availability, cost
src/sim/rules.ts The 34 rules that produce findings, each tagged with the topics it teaches
src/sim/scenarios/ Scenario data plus each one's reference solution
src/sim/observability.ts The observability probe — findings derived by comparing fault rounds to baseline
src/drill/ Cards, SM-2 scheduling, queue policy, progress
src/drill/cards/ The deck, one module per domain so a card is reviewable in a PR
src/storage/ ProgressStore — local today, Firestore when you want it
Gotchas

Use pnpm build:local if pnpm dev is running. A plain next build writes to .next and replaces the dev server's cache underneath it, leaving the running app 404ing on layout.css. build itself is deliberately plain, because Vercel runs it and expects output in .next.

If a page hangs on "Loading deck…" or loses its styling, the dev cache is stale — installing a dependency while the dev server runs will do it:

rm -rf .next && pnpm dev   # then hard-refresh (⌘⇧R)

Progress is per browser. docs/FIRESTORE_SETUP.md is a ~20 minute walkthrough to sync it across devices. Until then the app needs no setup at all, which is the trade being made deliberately.

Licence

MIT — see LICENSE. Fork it and make it your own.

Free and ad-free. If it helped, buy me a coffee.

Releases

Packages

Contributors

Languages