Product engineering · Data visualisation · 2026
Affordability starts before the first month’s rent.
Threshold gathers the costs of moving into one scenario: cash needed upfront, monthly spending, and the gap between current savings and a chosen move.
- Project
- Threshold
- Role
- Independent product, design, data modelling, and frontend engineering
- Stack
- React 19 · TypeScript · MapLibre · URLSearchParams · Vitest

- 3
- city models
- 2
- cost horizons
- URL
- owns the scenario
- Apr ’26
- data snapshot
01 / Frame the decision
Monthly affordability can hide the cost that stops a move.
A person may be able to cover the monthly total and still be blocked by a deposit, first month’s rent, moving costs, or furnishing an empty place.
Threshold separates upfront and recurring costs before calculating the savings gap and time to move. Someone can understand the result without having to audit a spreadsheet.
- Upfront total
- Monthly total
- Savings gap
- Time to move

02 / Make assumptions visible
Every estimate should expose its assumptions.
Each city is a typed configuration of districts, rent bands, transport rules, deposits, utilities, and local charges. London and the Swiss cities can share a calculation engine without pretending their costs work the same way.
Defaults are starting points rather than hidden truth. People can override food, transport, broadband, moving, furniture, health insurance, income, and savings, while the interface keeps the published data date visible.
- London
- Basel
- Zurich
- Editable defaults

03 / Let the state travel
The URL saves the whole scenario.
Every meaningful input serialises into URL parameters. Opening the link reconstructs the same district, property, household, lifestyle, and affordability scenario.
This removes account creation and global state from a product that does not need either. It also makes comparisons easy to discuss: the scenario itself can be copied, reviewed, and changed.
- No account
- No backend
- Reproducible scenarios
- Pure calculations
What stayed with me