7c373ddad6
* Configure biome * Fix companion build * fix: remove generated files from formatter ignore list to enable proper formatting Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * fix: add explicit stripe dependency to @calcom/features to fix type resolution Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * fix: rename const require to nodeRequire in generate-swagger.ts to avoid TypeScript reserved identifier conflict Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * fix: add guard for document in makeBodyVisible to prevent test environment teardown errors Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * fix: replace ESLint with Biome CLI in embed-code-generator.e2e.ts Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * fix: address cubic review comments - Fix invalid --reporter-path Biome CLI option by using shell redirection - Fix packages/lib lint report filename (app-store.json -> lib.json) - Add typescript-eslint and eslint back to companion for lint:react-compiler - Add missing restricted import rules to biome.json: - packages/lib: add ../trpc/** and @trpc/server restrictions - packages/trpc: add ../apps/web/** restriction Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * chore: regenerate companion bun.lock after adding eslint dependencies Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * Remove remaining eslint things * add tailwind directives --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Cal.com Development Guide for AI Agents
This directory contains comprehensive documentation for AI agents working on the Cal.com codebase.
Quick Navigation
- Commands - Build, test, and development commands
- Knowledge Base - Knowledge base & best practices
- Architecture Overview - System structure and patterns
Getting Started
Cal.com is a monorepo using Yarn workspaces and Turbo for build orchestration. The main application is in apps/web/ with shared packages in packages/.
Key Directories
apps/web/- Main Next.js applicationpackages/prisma/- Database schema and migrationspackages/trpc/- API layer using tRPCpackages/ui/- Shared UI componentspackages/features/- Feature-specific codepackages/app-store/- Third-party app integrations
Architecture Overview
Database Layer
- Prisma ORM with PostgreSQL
- Schema in
packages/prisma/schema.prisma - Always use
selectinstead ofincludefor better performance - Never expose
credential.keyfield in API responses
API Layer
- tRPC for type-safe APIs
- Routers in
packages/trpc/server/routers/ - Authentication handled via NextAuth.js
Frontend
- Next.js 13+ with App Router in some areas
- React 18 with TypeScript
- Tailwind CSS for styling
- Internationalization with
next-i18next
Common Patterns
Error Handling
- Use early returns to reduce nesting
- Throw descriptive errors with proper error codes
- Prefer composition over prop drilling
Performance
- Avoid O(n²) logic in backend code
- Minimize Day.js usage in performance-critical paths
- Use
selectqueries to only fetch needed data - Consider using
.utc()for Day.js operations
Security
- Never commit secrets or API keys
- Always validate input data
- Use proper authentication checks
- Never expose sensitive credential fields
Testing Strategy
- Unit tests with Vitest
- Integration tests for complex workflows
- E2E tests with Playwright
- Test files use
.test.tsor.spec.tsextensions
Pull Request Guidelines
For large PRs (>500 lines or >10 files):
- Split by feature boundaries
- Separate database migrations, backend logic, frontend components
- Create dependency chains that can be merged sequentially
- Pattern: Database → Backend → Frontend → Tests