Hey folks,
I’ve been hacking on a side project: a web-based “System Design Simulator.” It’s like a whiteboard, but you can actually press play and watch your architecture behave (or fail).
What you can do:
Drag-and-drop common pieces: load balancer, API gateway, caches, DBs, queues, even some AI bits.
Hit “Start Simulation” to see latency, error rate, throughput, cache hit rate in real time.
Flip chaos switches: traffic spikes, cache-miss storms, network partitions, component crashes.
Share & remix: every design gets a short link; anyone can fork it and improve.
Built-in hints: it tells you if you forgot an entry point or storage.
Why I made it:
Diagrams don’t fail; systems do. I wanted a fast way to feel trade-offs without spinning up infra.
For interviews and design reviews, it’s nice to ask “what if the cache dies?” and just click a button.
Try it here: "https://paperdraw.dev/"
Quick start: drop Load Balancer → App Server → Cache → DB, press play, then trigger a cache-miss storm.
Would love feedback:
What metrics or failure modes would you add?
Is the start/stop flow obvious enough?
Any presets you want (payments, chat, ingestion)?
Should I add “export GIF of the run” for sharing?
Thanks for taking a look—happy to fix bugs or add features if you ping me.
Top comments (3)
I was trying to test it, importing my Mermaid file, and I got an API KEY leaked error.
Nice project! I built something similar but used Rust/WASM for the simulation engine - wrote about the engineering decisions here if you're interested: SysSimulator
Great tool!
Wanted to flag a bug, whenever I click on my name (top-right), it redirects me back to the premium/landing page. Checked the console and found these errors:
CORS block on functions/v1/track-bot (Supabase edge function) - the preflight response is missing the Access-Control-Allow-Credentials: true header, while the request is using credentials include mode.
rpc/record_user_event call is returning a 404 - looks like this Postgres function either doesn't exist anymore or the frontend is referencing an outdated name
Seems like when these two calls fail, the frontend treats it as "logged out" and redirects. Attaching a screenshot below.