Goals
- Fast builds, clear ownership, safe API boundaries
1) Workspaces
- Use pnpm or yarn workspaces for deterministic installs
- One package per purpose: apps/, packages/, tooling/*
2) Task pipelines
- Turborepo with local and remote cache in CI
- Consistent scripts: build, dev, test, lint, typecheck
3) Boundaries
- ESLint rules and TS path mapping to enforce imports
- No deep imports across packages. Re-export from index
4) Versioning and releases
- Changesets for versions and changelogs
- Publish only public packages. Keep internals private
5) Testing strategy
- Unit tests isolated per package
- E2E in apps and run against preview deployments
6) DX
- Strict tsconfig.base.json at the root
- Shared Prettier and ESLint in a tooling package
Example: turbo.json
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
"dev": { "cache": false },
"lint": { "outputs": [] },
"typecheck": { "outputs": [] },
"test": { "outputs": ["coverage/**"] }
}
}
Checklist
- Cached pipelines
- Strict boundaries and clear ownership