Service · Products
MVPs, dashboards, internal tools and the APIs underneath — designed and built by the same hands, shipped in phases you can open.
No phase ends in a status update. Each one ends at a URL you can open.
phase 1 phase 2 phase 3 phase 4
──────── ──────── ──────── ────────
scope ────► data model ────► first slice ────► the rest
what it does schema before one flow, remaining flows
what it won't any screen end to end + operations
│ │ │ │
▼ ▼ ▼ ▼
written scope migrations a URL you a URL you
+ fixed quote you can read can open can ship
scope is re-cut between phases, while changing it is still cheap
That is also what keeps the scope honest: it is hard to argue about progress you can click on, and the re-cut between phases happens while changing direction is still cheap.
MVP
6–10 weeks
Internal tool
2–5 weeks
Engagement
Fixed scope per phase, quoted after the first call
Stack
TypeScript, Next.js, Postgres, Python
How long does an MVP take?
Six to ten weeks for something real users can use, assuming the scope survives contact with the first phase. Anything quoted at two weeks is a prototype — worth being honest early about which of the two you need, because they are built differently.
Can you take over an existing codebase?
Yes, and it starts with a short architecture review rather than a rewrite. Most inherited codebases have three real problems and a lot of noise; the review separates them first. Rewrites are the expensive answer and usually the wrong one.
What stack do you use?
TypeScript, Next.js and Postgres by default; Python where the work is data or models. Boring on purpose — the exciting choice only gets made when the boring one has visibly run out of room, and the day it did gets written down.
Why the data model before the screens?
Because the schema decides what the product can become. Most products that turn painful to change were painful in the schema first, and a screen can be redrawn in an afternoon while a migration cannot.
Do we get the code?
From the first commit. Your repository, your hosting, your accounts. Nothing to migrate off when the engagement ends, because nothing ever lived somewhere else.
What happens after launch?
Either a handover written so your next engineer can carry it without a call, or a retainer if you would rather keep the same hands on it. Which one it is gets decided before the build, not after.
What it has to do, who uses it, and when it needs to exist. You get a scope, a timeline and a fixed quote before anything is built.