Files
documenso/AGENTS.md
T
Lucas Smith 960217c78d build: migrate from npm to pnpm with workspace catalogs
- Switch package manager to pnpm 10 via corepack
- Add pnpm-workspace.yaml with 54+ shared dependency catalogs
- Convert all workspace packages to catalog: and workspace:* protocols
- Upgrade Turborepo from 1.x to 2.8.12 (pipeline -> tasks)
- Upgrade apps/openpage-api from Next 15 to Next 16
- Update Docker, CI workflows, and GitHub Actions for pnpm
- Convert patch file to pnpm native format
- Replace deprecated next lint with standalone eslint
- Update all documentation references from npm to pnpm
- Fix stale dependabot config and documentation paths
2026-03-06 14:28:12 +11:00

60 lines
2.7 KiB
Markdown

# Agent Guidelines for Documenso
## Build/Test/Lint Commands
- `pnpm run build` - Build all packages
- `pnpm run lint` - Lint all packages
- `pnpm run lint:fix` - Auto-fix linting issues
- `pnpm run test:e2e` - Run E2E tests with Playwright
- `pnpm run test:dev -w @documenso/app-tests` - Run single E2E test in dev mode
- `pnpm run test-ui:dev -w @documenso/app-tests` - Run E2E tests with UI
- `pnpm run format` - Format code with Prettier
- `pnpm run dev` - Start development server for Remix app
**Important:** Do not run `pnpm run build` to verify changes unless explicitly asked. Builds take a long time (~2 minutes). Use `pnpm exec tsc --noEmit` for type checking specific packages if needed.
## Code Style Guidelines
- Use TypeScript for all code; prefer `type` over `interface`
- Use functional components with `const Component = () => {}`
- Never use classes; prefer functional/declarative patterns
- Use descriptive variable names with auxiliary verbs (isLoading, hasError)
- Directory names: lowercase with dashes (auth-wizard)
- Use named exports for components
- Never use 'use client' directive
- Never use 1-line if statements
- Structure files: exported component, subcomponents, helpers, static content, types
## Error Handling & Validation
- Use custom AppError class when throwing errors
- When catching errors on the frontend use `const error = AppError.parse(error)` to get the error code
- Use early returns and guard clauses
- Use Zod for form validation and react-hook-form for forms
- Use error boundaries for unexpected errors
## UI & Styling
- Use Shadcn UI, Radix, and Tailwind CSS with mobile-first approach
- Use `<Form>` `<FormItem>` elements with fieldset having `:disabled` attribute when loading
- Use Lucide icons with longhand names (HomeIcon vs Home)
## TRPC Routes
- Each route in own file: `routers/teams/create-team.ts`
- Associated types file: `routers/teams/create-team.types.ts`
- Request/response schemas: `Z[RouteName]RequestSchema`, `Z[RouteName]ResponseSchema`
- Only use GET and POST methods in OpenAPI meta
- Deconstruct input argument on its own line
- Prefer route names such as get/getMany/find/create/update/delete
- "create" routes request schema should have the ID and data in the top level
- "update" routes request schema should have the ID in the top level and the data in a nested "data" object
## Translations & Remix
- Use `<Trans>string</Trans>` for JSX translations from `@lingui/react/macro`
- Use `t\`string\`` macro for TypeScript translations
- Use `(params: Route.Params)` and `(loaderData: Route.LoaderData)` for routes
- Directly return data from loaders, don't use `json()`
- Use `superLoaderJson` when sending complex data through loaders such as dates or prisma decimals