Case study
Runway
A cash-runway calculator built around one question: are you default alive or default dead, and how much time do you actually have.
Role: Design and build, solo
Stack: Next.js, TypeScript, Zustand, Supabase, Vitest

Why it exists
The problem this was built to solve, and the approach behind it.
Cash-runway math usually lives in a spreadsheet that goes stale the moment a real decision needs to be modeled against it.
Runway runs the plan through a small deterministic projection engine.
What it does
- A public landing page paired with a focused planning app for modeling runway scenarios
- Month-by-month cash projection from starting cash, itemized burn, and revenue
- Timeline events, a hire, a raise, a cost change, replayed against the projection instead of a flat average
- A default-alive or default-dead verdict, not just a runway number
- Plain-English insights derived from the same engine: burn sensitivity, what a raise actually buys
- A ledger view with month-by-month detail and CSV export
- Versioned state, so a saved plan survives a schema change
In the product
Swipe or click through a few screens from the working app.



The Plan page in Runway, with cash and cost inputs on the left and a live chart showing cash on hand, the cash-out date, and a default-alive or default-dead verdict on the right
Architecture decisions
The calls that shaped the build, written the same way the product itself records them.
Pure math, no framework in the projection
The month-by-month projection, the default-alive check, and the insight generation all run outside React, deterministic and framework-free. The chart, the ledger, and the verdict all read from the same engine output, so they cannot disagree with each other.
Founder view and operator view, kept apart
Founder-facing assumptions live in one store. Instance defaults, feature flags, and demo data live in a separate operator surface. Mixing the two is how a planning tool quietly turns into an admin panel with a spreadsheet bolted on.
Diagnostics that check the engine against itself
Beyond the unit tests, the app runs live invariant checks against its own projection engine: results stay deterministic, cash decays monotonically, a raise extends the runway and a hire shortens it. A bad assumption shows up as a failed check instead of a verdict nobody double-checked.
Want something built with this kind of judgment?
A focused 30-minute call to scope the work and see if it is a fit. No pitch.