Skip to content

Monorepo Structure

TT Time Tracker is a pnpm workspace monorepo. All packages and services are managed from the root with a single pnpm install.

Directory tree

tt-time-tracker/

├── src/                        # Vue 3 SPA (PWA) — the frontend
│   ├── api/                    # HTTP client + generated SDK
│   ├── assets/                 # Static assets (CSS, images)
│   ├── components/             # Shared Vue components
│   ├── composables/            # Vue composables (useFormat, useTasks, …)
│   ├── lib/                    # Low-level utilities and helpers
│   ├── router/                 # Vue Router configuration and routes
│   ├── stores/                 # Pinia stores (one per domain)
│   ├── utils/                  # Pure utility functions
│   └── views/                  # Page-level Vue components

├── services/
│   ├── api/                    # NestJS REST API
│   │   └── src/
│   │       ├── app.module.ts   # Root module — imports all feature modules
│   │       ├── auth/           # better-auth integration, guards, decorators
│   │       ├── casl/           # CASL ability factory, TenantGuard, FeatureGuard
│   │       ├── config/         # Typed configuration via @nestjs/config
│   │       ├── modules/        # Feature modules (entry, invoice, project, …)
│   │       └── prisma/         # PrismaService and PrismaModule
│   └── worker/                 # BullMQ background worker
│       └── src/
│           ├── app.module.ts   # Worker root module
│           └── modules/        # Job processors

├── packages/
│   ├── database/               # @tt/database — Prisma schema, migrations, seed
│   │   └── prisma/
│   │       ├── schema.prisma   # Main schema file (imports model files)
│   │       ├── models/         # One .prisma file per model
│   │       └── migrations/     # Migration history
│   ├── schemas/                # @tt/schemas — Zod schemas + TypeScript types
│   ├── queues/                 # @tt/queues — BullMQ queue names + job interfaces
│   └── logger/                 # @tt/logger — Pino logger

├── docs/                       # This documentation site (VitePress)

├── docker-compose.yaml         # Full-stack Docker Compose
├── Dockerfile                  # Frontend production image (nginx)
├── nginx.conf                  # nginx SPA config used inside the Docker image
├── package.json                # Root scripts and devDependencies
├── pnpm-workspace.yaml         # Workspace package paths
└── tsconfig.json               # Root TypeScript config (extended by packages)

Package roles

PackageImport pathWho uses it
@tt/database(not imported — used via prisma.service)API, worker
@tt/schemas@tt/schemasAPI (DTO validation), frontend (form validation)
@tt/queues@tt/queuesAPI (enqueue), worker (process)
@tt/logger@tt/loggerAPI, worker
@tt/telemetry@tt/telemetryAPI, worker

Root scripts

ScriptDescription
pnpm dev:clientVue dev server on :5173
pnpm dev:apiNestJS API with watch mode on :3000
pnpm dev:workerBullMQ worker with watch mode
pnpm build:clientType-check + Vite production build
pnpm build:apiNestJS production build
pnpm db:upStart infrastructure (postgres, redis, rustfs)
pnpm db:migrateApply Prisma migrations
pnpm db:generateRegenerate Prisma client
pnpm db:studioOpen Prisma Studio
pnpm openapiGenerate typed SDK from openapi.json
pnpm lintESLint the entire monorepo
pnpm docs:devStart VitePress documentation site
pnpm docs:buildBuild the documentation site

TT Time Tracker — Internal Documentation