Turborepo monorepo with @forte/shared and @forte/backend workspaces. Docker Compose dev env with PostgreSQL 16 + Valkey 8. Fastify server with Pino JSON logging, request ID tracing, and health endpoint. Drizzle ORM with company + location tables. Includes: - Root config (turbo, tsconfig, eslint, prettier) - @forte/shared: types, schemas, currency/date utils - @forte/backend: Fastify entry, plugins (database, redis, cors, error-handler, dev-auth), health route, Drizzle schema + migration - Dev auth bypass via X-Dev-Company/Location/User headers - Vitest integration test with clean DB per test (forte_test) - Seed script for dev company + location
48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# Forte — Project Conventions
|
|
|
|
## App
|
|
- **Name:** Forte
|
|
- **Purpose:** Music store management platform (POS, inventory, rentals, lessons, repairs, accounting)
|
|
- **Company:** Lunarfront Tech LLC
|
|
|
|
## Tech Stack
|
|
- **Runtime:** Bun
|
|
- **Language:** TypeScript (strict mode, end-to-end)
|
|
- **API:** Fastify with Pino JSON logging
|
|
- **ORM:** Drizzle ORM (PostgreSQL 16)
|
|
- **Validation:** Zod (shared schemas between frontend and backend)
|
|
- **Queue:** BullMQ (Valkey-backed)
|
|
- **Cache:** Valkey 8 (Redis-compatible fork)
|
|
- **Monorepo:** Turborepo with Bun workspaces
|
|
- **Testing:** Vitest
|
|
- **Linting:** ESLint 9 flat config + Prettier
|
|
|
|
## Package Namespace
|
|
- `@forte/shared` — types, Zod schemas, business logic, utils
|
|
- `@forte/backend` — Fastify API server
|
|
|
|
## Database
|
|
- Dev: `forte` on localhost:5432
|
|
- Test: `forte_test` on localhost:5432
|
|
- Multi-tenant: `company_id` (uuid FK) on all domain tables for tenant isolation
|
|
- `location_id` (uuid FK) on tables that need per-location scoping (inventory, transactions, drawer)
|
|
- Migrations via Drizzle Kit (`bunx drizzle-kit generate`, `bunx drizzle-kit migrate`)
|
|
|
|
## Key Entity Names
|
|
- `account` — billing entity (family, individual, or business)
|
|
- `member` — individual person on an account (NOT "student" — renamed to support multiple adults)
|
|
- `member.is_minor` — derived from date_of_birth, controls consent/portal rules
|
|
|
|
## Commands
|
|
- `bun run dev` — start all packages in dev mode
|
|
- `bun run test` — run all tests
|
|
- `bun run lint` — lint all packages
|
|
- `bun run format` — format all files with Prettier
|
|
|
|
## Conventions
|
|
- Shared Zod schemas are the single source of truth for validation (used on both frontend and backend)
|
|
- Business logic lives in `@forte/shared`, not in individual app packages
|
|
- API routes are thin — validate with Zod, call a service, return result
|
|
- All financial events must be auditable (append-only audit records)
|
|
- JSON structured logging with request IDs on every log line
|