Clone e use. Uma cara só: Expo + React + Hono + Drizzle + Zod + oRPC + Tailwind.
api/ Hono + oRPC + Services + tests (Drizzle Postgres)
web/ Vite + React + TanStack Query/Router + Tailwind 4 + shadcn
mobile/ Expo SDK 57 + mesmo client oRPC
desktop/ Tauri (serve o build do web, zero UI duplicada)
lib/ helpers compartilhados (env, db, openapi, server)
contracts/ oRPC contract-first — fonte da API, do swagger e dos clients
routes/ api.ts: contrato-RAIZ + Hono shell + mount oRPC
config/ env validado (createEnv), conexão única, lint presets
database/ schema (1 entidade = 1 arquivo) + migrations + seeders + factories
docs/ architecture.md, api.md, openapi.json (gerado)
docker/ Postgres local + Dockerfile da API
pnpm install
docker compose -f docker/compose.yml up -d db # Postgres local
pnpm seed # popula via DATABASE_URL
pnpm dev # API :3333 (docs em /docs, spec em /openapi.json)| Comando | O quê |
|---|---|
pnpm check |
tsc api + web + mobile |
pnpm test |
bun test (Postgres hermético via PGlite) |
pnpm build |
build do web |
| Novo recurso | database/schema/tables/ → contract → service → controller (ver regra 5) |
pnpm --filter @mystack/api openapi:export |
regenera docs/openapi.json |
pnpm --filter @mystack/desktop dev |
Tauri dev (precisa Rust, usa web em :5173) |
- Código compartilhado mora em
lib/(env,db,openapi,server). Imports diretos de npm (versões nocatalog:) — sem barrels, sem indireção. - Versões decididas uma vez:
pnpm-workspace.yaml→catalog:. Front trava no Expo SDK 57; toolchain e back no latest verificado. - Paths uma vez: no contract (
/products,/products/{id}). - Banco fora do repo:
DATABASE_URLobrigatório (Postgres). - Nova entidade (MVC):
database/schema/tables/(Model) → contract (View/Resource) → service → controller → registra emcontracts/index.ts+routes/api.ts. Detalhe p/ agentes:AGENTS.md.