Development Tooling
pnpm 11.24.0 workspaces; Biome for format/style; ESLint for correctness.
Package manager is pnpm 11.24.0 (see root packageManager). Decision: ADR 005. Lint split: ADR 006.
Biome formats and applies style (imports, unused). ESLint owns TypeScript, React, Next.js 16, Expo, and Fastify correctness. pnpm lint runs Biome then ESLint. Pre-commit formats staged files with Biome after security hooks. CI runs both (lint.yml).
pnpm lint
pnpm lint:fixTurborepo caches build, checktypes, and lint:eslint. test, test:unit, and test:e2e are not cached (cache: false in turbo.json). Per-package build.env in turbo.json hashes only vars that change emitted output (e.g. VERCEL_GIT_COMMIT_REF on @repo/web#build only). Consumer app builds no longer run OpenAPI codegen — use pnpm generate when API routes change. Commands: root README.
Build performance
Measure before and after build-graph changes. Cold run (clear caches first):
rm -rf .turbo
find . \( -name node_modules -o -name .git \) -prune -o \( -name dist -o -name .next \) -type d -prune -exec rm -rf {} +
find . \( -name node_modules -o -name .git \) -prune -o -name '*.tsbuildinfo' -delete
pnpm turbo run build --force --profile=turbo-profile.json --verbosity=1
pnpm checktypes
pnpm lint
pnpm turbo run build --filter=@repo/web... --force --profile=web.json --verbosity=1
pnpm turbo run build --filter=@repo/api... --force --profile=api.json --verbosity=1
pnpm turbo run build --filter=@repo/docu... --force --profile=docu.json --verbosity=1Re-run the same commands after changes. OpenAPI regen: pnpm generate (not part of @repo/web... build).
Turbo remote cache (optional)
For cross-machine cache hits, create a Vercel Remote Cache token and set TURBO_TOKEN + TURBO_TEAM in GitHub Actions secrets and Vercel project env. Per-package env keys (Phase 1a) must be in place first or branch secrets still bust package caches.