Database
- Local PostgreSQL
- Schema migrations
- Typed SQL queries
Search the packs, templates, docs, and pages
The website, the desktop app, the admin panel, the mobile app, and the extension all talk to one API. A change on the server shows up as an error in the editor, not as a bug report from a customer.
GET/organizations2006ms
POST/invitations20012ms
GET/settings/members2008ms
PUT/members/role2009ms
GET/auth/session2004ms
Configured before you arrive
Routes, database, cache and Docker. One create run and it answers on localhost:3000.
Your users are built in
Sign-in, sessions, teams, roles and invitations are live endpoints on day one.
Every app already talks to it
Five clients, one typed SDK, generated straight from these routes.
pnpm typecheck0 errors, 6 apps
One name, declared in the database and inherited by every layer up to the button a customer clicks. Press the button.
organization.seat_limit
Postgres
the column
seat_limit integerPrisma
the schema
seat_limit IntKysely
the query
.select("seatLimit")Hono
the API route
c.json({ seatLimit })React
the UI
{data.seatLimit}Every broken screen, listed
The compiler names each query, route and component that needs the change.
Refactors stop being scary
Follow the errors to done. Empty list, finished change.
AI agents fix their own mistakes
A wrong guess fails the typecheck in seconds, and the agent corrects it.
Six apps that cannot drift apart
Every app reads the backend's types. Nothing is left quietly behind.
5
Clients served by one backend
Website, desktop, admin, mobile, and extension, all reading the same typed API. One more app is one more client.
your api
web
admin
mobile
0
Hand-written API clients to maintain
Every route becomes a typed call on the frontend the moment it exists. No client to write, no client to let rot.
routes in, sdk out
nothing to keep in sync
1
Place every error is handled
Logged, shaped into a response, and reported to Sentry by one middleware. Nothing dies quietly.
Nine outcomes, each with a receipt your developer can check. The whole repo is public.
Web, desktop, admin, mobile and extension read the same SDK.
Change the API and every dependent screen stops compiling.
Unit, integration and end-to-end suites gate every merge.
One middleware logs, shapes and reports every failure.
Live events ship with the same type safety as requests.
Access rules check against a fixed list of actions.
The cache fails soft; the API keeps answering from Postgres.
Every setting is validated at boot, with a clear message.
Standard Postgres with migrations tracked in the repo.
Everything goes live on your own host, with the URLs, secrets, and migrations already wired between the services. No dashboards, no YAML.
Stack progress
00 / 4 services
Production/Fly.io
Better you read it here than find out on day two.
in the box
not in the box
Billing, notifications, collaboration
Feature packs. Each adds its routes, schema and tests with one command.
Browse feature packsYour business logic
The plumbing is done. The thing that makes your product yours is yours to write.
The plumbing below is finished before you write a line. All of it is checkable in the public repo.


Every pack ships real source code: frontend, backend, and admin surfaces where the feature needs them. Add them when you need them, one command each.
Same features underneath, different starting point. Either command resolves what the packs depend on, copies the source into your repository, and merges the database schema.
A landing page, a design system, a themed layout, and the features already wired into it. Rebrand it, put your product in the middle, ship.
$ hype-stack compose
Your design and your choices, without rebuilding auth, billing, or notifications. Tick the packs you want and the CLI wires them into the open-source starter.
Clone it, rename a field, run the typecheck. If that does not convince your developer, nothing on this page will.
free / public / your repo