Monorepo foundation · MIT License
Start your web app on a stack that is already wired together.
Starting a new SaaS or internal tool usually means a week of setup before the first line of product code. Client OS is that week, done: auth, a typed API, a web frontend, a database layer and a deploy path, connected and ready to extend.
git clone https://github.com/catesworks/client-os.gitcd client-ospnpm installpnpm supabase:startpnpm dev# web http://localhost:3026# api http://localhost:4026# studio http://127.0.0.1:55623The source repository is private to the catesworks organization.
What you get on day one
- 01
Typed API with OpenAPI
A Hono API whose routes are OpenAPI definitions, with a generated client for the web.
- 02
Next.js web app
A Next.js 16 App Router app with a login page and a signed-in dashboard shell.
- 03
Organizations and roles
Every record is scoped to an Organization, and every caller holds a Role in it.
- 04
Auth and service accounts
Supabase Auth for people, PATs for service accounts, audit events for both.
- 05
Postgres and Drizzle
Drizzle schemas and migrations, a local Supabase stack, and backup and restore scripts.
- 06
A CLI in the same workspace
The `client` command, built with Commander, with single-binary and npm build pipelines.
- 07
Desktop shell
A Tauri 2 shell with a placeholder frontend and a bundled sidecar.
- 08
clientos, a worked example
A consulting CRM built on the scaffold, so you see the patterns on real resources.
- 09
The clientos-context skill
A published agent skill that keeps a Client’s LLM context files in step from notes.
- 10
A deploy path
Render or Docker for the API, Vercel for the web app, Supabase Cloud for data.
From clone to your own product
- Step 1
Clone
Clone the repository (or copy it with `npx degit`) and run `pnpm install`. One pnpm workspace holds every app and package.
- Step 2
Run
`pnpm supabase:start` boots a local Supabase stack in Docker. `pnpm dev` runs process-compose, which applies the Drizzle migrations, seeds demo data and demo accounts, then starts the API and the web app.
- Step 3
Extend
Add a route with an OpenAPI definition in apps/api, run `pnpm openapi:dump`, and the kubb-generated client in packages/api-client gives the web app typed hooks for it. The clientos routes show the pattern end to end.
- Step 4
Check
CI runs typecheck, an OpenAPI drift check, an ESM load smoke test, lint, migrations against a fresh Postgres, tests and a Prettier check on every pull request.
- Step 5
Deploy
The API deploys to Render (render.yaml) or as a Docker image; the web app deploys to Vercel; Supabase Cloud holds auth, Postgres and storage. docs/PROD-DEPLOY.md is the first-deploy checklist.
Skip the setup week
Clone it, run five commands, and start on the part that is actually your product.