Monorepo Structure
Monorepo Structure
Understanding the Data Pod codebase
Overview
Data Pod uses a monorepo with pnpm workspaces.
Key principle: Packages are building blocks, apps combine them.
Apps (Deployable)
apps/api/
Main Data Pod API server.
What it does:
- Serves tRPC endpoints
- Handles webhooks
- Provides SSE for real-time
- Runs event processors
Key files:
src/index.ts- Server setupsrc/webhooks/- Webhook handlers
Run locally:
Packages (Libraries)
packages/api/
tRPC router definitions and business logic.
Contains:
src/routers/- API endpointssrc/event-handlers/- Event processorssrc/plugins/- Plugin system
Example:
packages/database/
Database schema and migrations.
Contains:
src/schema/- Drizzle table definitionsmigrations/- SQL migration filessrc/projectors/- Event sourcing projections
Example:
packages/events/
Event type definitions.
Contains:
src/domain-events.ts- Typed eventssrc/publisher.ts- Event publishingsrc/payloads.ts- Zod schemas
Example:
packages/client/
TypeScript SDK for frontends.
Contains:
src/index.ts- Main client classsrc/facades/- High-level APIs- Auto-generated from packages/api
Example:
packages/core/
Shared utilities.
Contains:
- Config management
- Logging
- Utilities
Services (Examples)
services/intelligence/
Example intelligence service (optional).
Shows how to build a remote service that integrates with Data Pod.
Package Dependencies
Rule: Packages can depend on other packages, apps depend on packages.
Building Order
When changing code, build in dependency order:
Or build all:
Common File Patterns
Adding a Router
- Create in
packages/api/src/routers/ - Register in
packages/api/src/index.ts - Client automatically gets types
Adding Schema
- Create in
packages/database/src/schema/ - Export from
packages/database/src/schema/index.ts - Create migration in
packages/database/migrations/
Adding Events
- Define in
packages/events/src/domain-events.ts - Add builder in
packages/events/src/publisher.ts - Export from
packages/events/src/index.ts
Development Tips
Hot reload: Apps auto-reload on changes
Type checking: TypeScript checks across packages
Linting: ESLint + Prettier
Next Steps
- Add router → Router Development
- Change schema → Database Migrations
- Work with events → Event System
