Development Guide
Prerequisites
- Node.js 20+
- pnpm 9.x
- Git
Setup
git clone https://github.com/catesandrew/work-loom.git
cd work-loom
pnpm install
pnpm build
Development commands
# Build all packages and apps
pnpm build
# Start dev servers (API + web)
pnpm dev
# Run all tests
pnpm test
# Type check
pnpm typecheck
# Clean build artifacts
pnpm clean
Running individual packages
# Build a specific package
pnpm --filter @workloom/types build
# Test a specific package
pnpm --filter @workloom/registry test
# Dev mode for the API server
pnpm --filter @workloom/api dev
# Dev mode for the web app
pnpm --filter @workloom/web dev
# Build the docs site
pnpm --filter @workloom/docs build
# Dev mode for docs
pnpm --filter @workloom/docs start
Testing
All packages use Vitest. Tests live alongside source code in __tests__/ directories or in test/ directories.
# Run all tests
pnpm test
# Run tests for one package
pnpm --filter @workloom/renderer-claude test
# Watch mode
pnpm --filter @workloom/registry exec vitest --watch
Build order
Turborepo handles build ordering automatically. The dependency graph is:
types → manifest → workspace
types → storage → registry
types → renderer-core → renderer-claude
types → renderer-core → renderer-codex
types → renderer-core → renderer-copilot
types → renderer-core → renderer-gemini
types → auth
types → drift
types → sync (depends on renderer-core)
environment (standalone — no internal deps)
config (standalone — dotenv loading)
fetch-client (standalone — native fetch wrapper)
react-query (standalone — TanStack wrapper)
database (depends on types)
workloom-api (depends on fetch-client, react-query)
api depends on: auth, database, registry, workspace, renderer-claude, renderer-codex, renderer-copilot, renderer-gemini, config, environment
cli depends on: auth, manifest, registry, workspace, renderer-claude, renderer-codex, renderer-copilot, renderer-gemini, drift, sync
web depends on: react-query, workloom-api, fetch-client, environment
docs depends on: (standalone)
Adding a new package
- Create directory under
packages/ - Add
package.jsonwith@workloom/scope - Add
tsconfig.jsonextending root config - Add
src/index.tswith exports - Run
pnpm installto link the workspace - Add build/test scripts
- Reference from consuming packages
Code style
- TypeScript strict mode
- No
anytypes - Prefer interfaces over type aliases for object shapes
- Zod for runtime validation at boundaries
- Vitest for tests