- frontend/apps/*: Next.js apps (e.g.,
@liam-hq/app,@liam-hq/docs). - frontend/packages/*: Shared libraries and tools (e.g.,
schema,erd-core,cli,ui). - frontend/internal-packages/*: Infra and tooling (
e2e,configs,storybook,agent). - assets/: Images and media. docs/: Documentation. scripts/: Repo utilities.
- Install:
pnpm install - All apps/packages (Turbo):
- Dev:
pnpm dev(or one app:pnpm -F @liam-hq/app dev) - Build:
pnpm build - Test (unit):
pnpm test - E2E (Playwright):
pnpm test:e2e - Coverage:
pnpm test:coverage
- Dev:
- App-only examples:
- Run Next dev:
pnpm -F @liam-hq/app dev:next - Build Next:
pnpm -F @liam-hq/app build
- Run Next dev:
- Language: TypeScript/TSX; React components in PascalCase (e.g.,
App.tsx); utilities in camelCase (e.g.,mergeSchema.ts). - CSS Modules:
*.module.csswith typed CSS viatyped-css-modules. - Lint/Format: Biome and ESLint. Run
pnpm fmtandpnpm lint. Pre-commit hooks runpnpm lint(seelefthook.yml).
- Unit tests: Vitest. Place near source as
*.test.ts(x)or in__tests__/. - E2E tests: Playwright in
frontend/internal-packages/e2e. - Commands:
pnpm testfor unit,pnpm test:e2efor Playwright,pnpm test:coveragefor V8 coverage.
- Commit style: Conventional Commits (e.g.,
feat:,fix:,chore(deps): ...). - Before pushing:
pnpm fmt && pnpm lint && pnpm test. - PRs: clear description, linked issues, screenshots for UI changes, and note any env or migration impacts.
- Versioning: If you change a publishable package, add a changeset:
pnpm changeset.
- Environment: use
.env/.env.local(created automatically bypnpm prebuild). Never commit secrets. - Sync Vercel envs (optional):
pnpm vercel:env-pulland link withpnpm vercel:link. - Common vars:
NEXT_PUBLIC_*, Sentry keys, and job runner tokens (seeturbo.jsonenv list).
- Target a single package with
pnpm -F <package-name> <script>. - Use Turbo filters when running large tasks locally for faster feedback.