Packages

Berkeleytime uses a monorepo architecture managed by Turborepo. The packages/ directory contains shared code and configurations used across multiple applications.

Overview

PackageDescription
@repo/BtLLBerkeleytime Logical Language: interpreted DSL for academic requirements (GradTrak)
@repo/commonShared database models, TypeScript types, and utilities
@repo/themeReact design system with Radix UI components
@repo/sharedShared utilities, metrics, and rating configurations
@repo/gql-typedefsGraphQL type definitions shared across apps
@repo/sis-apiAuto-generated TypeScript client for UC Berkeley SIS APIs
@repo/eslint-configShared ESLint configuration
@repo/typescript-configShared 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.