Inspiration
Purgatory was inspired by a problem I ran into while taking a Software Architecture & Design course. We spend a lot of time learning about system design, quality attributes, architecture diagrams, and tradeoffs, but there are not many tools that let you actually practice those concepts and get feedback on how well your design would hold up.
I wanted to build something more interactive than a static diagram or sample solution. With Purgatory, users can work through realistic engineering scenarios, inspect an existing architecture, run simulated stress tests, see where the system fails, modify the design, and rerun the same conditions to compare the results.
How I Built It
Purgatory is a full-stack TypeScript application built with React, Vite, Tailwind CSS, React Flow, Node.js, Express, Supabase, PostgreSQL, Clerk, Recharts, and ElevenLabs.
The core of the project is a deterministic stress simulation engine that models things like traffic spikes, database saturation, dependency degradation, autoscaling, timeouts, and regional failures. The frontend then visualizes those results directly on the architecture so users can see how stress propagates through the system.
Challenges
The hardest part was balancing realism with simplicity. I did not want the stress testing to just be scripted animations, but I also did not want to build a full production load-testing platform. I focused on modeling the relationships that matter most in system design while keeping the results deterministic and easy to understand.
Another challenge was the UI. Early versions focused too much on the architecture diagram itself, so I redesigned the experience around the full workflow: scenario → investigate → stress test → redesign → rerun → compare.
What I Learned
Building Purgatory taught me a lot about distributed systems, simulation, system design tradeoffs, and designing an application where the backend remains the source of truth. It also reinforced how much easier architecture concepts are to understand when you can actually see the consequences of a design decision instead of only discussing them theoretically.
Built With
- clerk
- elevenlabs
- express.js
- node.js
- react
- react-flow
- recharts
- supabase
- tailwind
- typescript

Log in or sign up for Devpost to join the conversation.