Packages
Berkeleytime uses a monorepo architecture managed by Turborepo. The packages/ directory contains shared code and configurations used across multiple applications.
Overview
| Package | Description |
|---|---|
| @repo/BtLL | Berkeleytime Logical Language: interpreted DSL for academic requirements (GradTrak) |
| @repo/common | Shared database models, TypeScript types, and utilities |
| @repo/theme | React design system with Radix UI components |
| @repo/shared | Shared utilities, metrics, and rating configurations |
| @repo/gql-typedefs | GraphQL type definitions shared across apps |
| @repo/sis-api | Auto-generated TypeScript client for UC Berkeley SIS APIs |
| @repo/eslint-config | Shared ESLint configuration |
| @repo/typescript-config | Shared TypeScript configuration presets |
Package Dependencies
The following diagram shows how packages relate to each other and to the apps:
┌─────────────────────────────────────────────────────────────────┐
│ Apps │
├─────────────┬─────────────┬─────────────┬─────────────────────────┤
│ frontend │ backend │ datapuller │ staff-frontend, etc. │
└──────┬──────┴──────┬──────┴──────┬──────┴──────────┬──────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ Packages │
├─────────────┬─────────────┬─────────────┬─────────────────────────┤
│ @repo/ │ @repo/ │ @repo/ │ @repo/ │
│ theme │ common │ sis-api │ gql-typedefs │
├─────────────┼─────────────┼─────────────┼─────────────────────────┤
│ @repo/ │ @repo/ │ │ │
│ shared │ eslint- │ │ │
│ │ config │ │ │
└─────────────┴─────────────┴─────────────┴─────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ @repo/typescript-config │
│ (Base configuration for all packages) │
└─────────────────────────────────────────────────────────────────┘
Using Packages
Packages are referenced in package.json using the workspace protocol:
{
"dependencies": {
"@repo/common": "*",
"@repo/theme": "*"
},
"devDependencies": {
"@repo/eslint-config": "*",
"@repo/typescript-config": "*"
}
}
Turborepo handles building packages in the correct order based on their dependencies.