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
│   ├── desktop/                # @tt/desktop — Tauri tray app (macOS/Windows) around the client's /tray route
│   │   └── src-tauri/          # Rust shell, tauri.conf.json, capabilities, icons
│   └── mobile/                 # @tt/mobile — Capacitor app (iOS/Android) bundling the client's native build
│       ├── android/            # Android Studio project
│       ├── ios/                # Xcode project (Swift Package Manager)
│       └── assets/             # Icon / splash sources
│
├── 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