The single front door
mise.toml is the one entry point. It pins the toolchain (Node 22, pnpm 9.15.0, process-compose) and defines every dev task for every child repo. A clean clone goes:
How the pieces fit
repos.manifest
Clones the independent GitHub repos (
api, web, infra, docs) — gitignored, not submodules. The workspace owns only cross-cutting tooling.process-compose + Docker
Supervise local Postgres (RLS roles, pgbouncer), Drizzle migrations, and seeds, then launch the apps.
Setup as a DAG
mise run setup and mise run dev enforce an ordered dependency graph rather than a flat script:
1
Clone & install
Read
repos.manifest, clone missing repos, install node packages.2
Fan out secrets
Distribute secrets from
.env.workspace into each child’s .env.3
Bring up data
Health-check the Postgres container, then run migrations and seeds.
4
Build in order
Compile shared packages (
@greekcore/db, @greekcore/ui, @greekcore/auth-web) in dependency order.5
Launch
Start the API and web apps simultaneously under
process-compose.Skills as pinned dependencies
skills-lock.json pins external agent skills by content hash — third-party skills are vendored and pinned just like package dependencies.
Clerk skills
Auth-related agent skills, content-pinned.
GetStream skills
stream, stream-builder, stream-react, stream-docs — pinned by hash.Why this shape
Thin workspace, real repos
Child repos stay independently versioned and deployable; the workspace never becomes a monorepo bottleneck.
Zero-config onboarding
One
mise run setup && mise run dev brings up the database, migrations, seeds, backend, and every frontend.