Skip to main content

Break your API on purpose

Your app talks to a real network. Chaos engineering at the proxy lets you answer "what happens when it's slow / down / lying" without touching code or rewriting mocks — and because the proxy sees everything, the failures your page swallows still land in the incident inbox.

Silent by design — 0:48. Every beat is legible with the sound off.

What happens

Baseline (0:04). The dashboard's report cascade (three cards + a status sequence) completes in about two seconds at mock latency.

Latency rule (0:12). CHAOS ADD-RULE: /api/report now answers in 2.5–3.5s. A labeled spinner — "Loading revenue report… (waiting on /api/report)" — tracks a real awaited fetch, and when it outstays the 0.4s baseline the page puts up a "Things are taking longer than usual" banner. The wait on screen is the actual response time.

Error rule (0:22). Rules swapped: every /api/report call now fails with a 500. The cards that never got data are labeled in place — "HTTP 500 — no data" — and each swallowed failure surfaces as a toast with its fix: "the report handler is throwing; payload valid, handler not."

Clear (0:38). CHAOS CLEAR and the cascade is back to mock latency, real values replacing the labels. The unhappy path is a switch you can flip, not a deployment you have to wait for.

How it's made

Recorded by the scripted demo engine against the real stack. The chaos rules are real CHAOS daemon commands issued mid-take through the engine's daemon client — the same engine your MCP chaos tool drives. make demo NAME=chaos-testing re-records it.