Skip to main content
Day-to-day workflow once you have the repo cloned and pnpm install done. If you don’t yet, start at Self-Hosted.

Repo at a glance

Editor setup

The repo is TypeScript end-to-end. The recommended editor setup:
  • VS Code with the ESLint and TypeScript Nightly extensions, or
  • Cursor / Windsurf / Claude Code — all three know how to read CLAUDE.md and the workspace TS configs.
pnpm-workspace.yaml and packages/tsconfig mean type-checking works across workspaces with no extra config. If your editor doesn’t find a type, restart its TS server.

Hot reload across workspaces

pnpm run dev from the repo root runs every workspace’s dev script in parallel through Turbo. Most workspaces are watch-mode: So a change in packages/resume-schema/src/index.ts triggers a rebuild that the web app picks up automatically via the workspace link.
The web app supports Turbopack with pnpm --filter @magic-resume/web dev:turbo. It’s faster but occasionally lags behind a Next.js minor — fall back to dev if you hit a Turbopack-specific bug.

Lint and test before pushing

lint-staged (configured in the root package.json) runs on staged files via Husky, but the full sweep is:
The apps/web workspace has an i18n check that fires on staged .tsx/.ts files:
This validates that every new translation key is present in every locale. Adding a key in en.json without adding it in zh-CN.json will fail the pre-commit hook.

Branch hygiene

The default branch is master. Feature branches use <type>/<short-name> (e.g. feat/turborepo-mcp-migration-wip). Commits follow conventional-commit style — see git log for examples.