# Technology Stack

**Analysis Date:** 2026-04-27

## Languages

**Primary:**
- TypeScript 5.9.3 (server), 5.7.3 (client) - Strict mode enabled, full type safety across codebase

**Secondary:**
- JavaScript (build outputs, scripts)
- HTML/CSS (frontend templates)

## Runtime

**Environment:**
- Node.js (version not pinned, assumed LTS) - Used for both server and client dev/build
- ES2023 target (server), ES2022 target (client)

**Package Manager:**
- npm - Lockfiles present for both client and server

## Frameworks

**Core Frontend:**
- React 19.2.0 - UI framework
- React Router DOM 7.12.0 - Client-side routing
- Vite 7.2.4 - Build tool and dev server

**Core Backend:**
- NestJS 11.0.1 - Web framework with TypeScript-first design
- Express (via `@nestjs/platform-express`) - Underlying HTTP server

**Frontend Styling:**
- Tailwind CSS 4.1.18 - Utility-first CSS framework
- `@tailwindcss/vite` plugin for Vite integration

**Testing & Development:**
- Jest 30.0.0 - Test runner (server-side only, configured in package.json)
- ts-jest - TypeScript support for Jest
- Supertest 7.0.0 - HTTP assertion library (server integration tests)
- @vitejs/plugin-react - React fast refresh for Vite

## Key Dependencies

**Critical Server:**
- `@prisma/client` 7.2.0 - ORM and database abstraction layer
- `prisma` 7.2.0 - CLI and schema management tool
- `@anthropic-ai/sdk` 0.71.2 - Claude API for on-demand German translations
- `socket.io` 4.8.3 - WebSocket library for real-time communication
- `@nestjs/websockets` 11.1.12 - NestJS WebSocket integration
- `@nestjs/platform-socket.io` 11.1.12 - Socket.io adapter for NestJS
- `@nestjs/jwt` 11.0.2 - JWT authentication provider
- `@nestjs/passport` 11.0.5 - Passport.js integration for authentication
- `passport-jwt` 4.0.1 - JWT strategy for Passport
- `bcrypt` 6.0.0 - Password hashing
- `class-validator` 0.14.3 - Request DTO validation
- `class-transformer` 0.5.1 - DTO transformation
- `@nestjs/swagger` 11.2.5 - OpenAPI/Swagger documentation
- `@nestjs/config` 4.0.2 - Environment configuration management
- `dotenv` 17.2.3 - .env file loading

**Critical Client:**
- `axios` 1.13.2 - HTTP client library for API requests
- `socket.io-client` 4.8.3 - WebSocket client for real-time updates
- `zustand` 5.0.10 - Client state management (auth store)
- `@tanstack/react-query` 5.90.19 - Server state and data fetching (caching, synchronization)
- `react-router-dom` 7.12.0 - Client-side routing
- `framer-motion` 12.26.2 - Animation library
- `lucide-react` 0.562.0 - Icon library (SVG icons)
- `clsx` 2.1.1 - Conditional CSS class utilities
- `tailwind-merge` 3.4.0 - Tailwind class merging utility

**Development (Backend):**
- `@nestjs/cli` 11.0.0 - NestJS code generation and project scaffolding
- `@nestjs/schematics` 11.0.0 - Code generators for NestJS
- `prettier` 3.4.2 - Code formatter
- `eslint` 9.18.0 - Linting
- `typescript-eslint` 8.20.0 - TypeScript ESLint support
- `tsx` 4.21.0 - TypeScript execution (used for seed scripts)
- `tsconfig-paths` 4.2.0 - TypeScript path alias resolution
- `ts-node` 10.9.2 - TypeScript REPL and script runner
- `ts-loader` 9.5.2 - TypeScript webpack loader

**Development (Frontend):**
- `eslint` 9.39.1 - Linting
- `typescript-eslint` 8.46.4 - TypeScript ESLint support
- `eslint-plugin-react-hooks` 7.0.1 - React Hooks linting rules
- `eslint-plugin-react-refresh` 0.4.24 - Vite React refresh linting

## Configuration

**Environment:**
- Server loads from `.env` file (see `.env.example`):
  - `DATABASE_URL` - PostgreSQL connection string
  - `JWT_SECRET` - Secret key for signing tokens
  - `JWT_EXPIRES_IN` - Token expiration time (default "7d")
  - `PORT` - Server port (default 5000)
  - `NODE_ENV` - Environment (development/production)
  - `CORS_ORIGINS` - Comma-separated list of allowed origins
  - `ANTHROPIC_API_KEY` - Claude API key for translations (optional)
  - `UPLOAD_DIR` - Directory for file uploads
  - `MAX_FILE_SIZE` - Maximum upload file size

- Client loads from `.env` or `.env.local`:
  - `VITE_API_URL` - Backend API base URL (e.g., `http://localhost:5000/api`)
  - WebSocket URL derived automatically by removing `/api` suffix

**TypeScript:**
- Server: `server/tsconfig.json` with target ES2023, decorators enabled
  - `strictNullChecks: true`
  - `forceConsistentCasingInFileNames: true`
  - `noImplicitAny: false` (allows implicit any in some cases)
  - Path aliases via `baseUrl: ./`

- Client: `client/tsconfig.app.json` with target ES2022, strict mode
  - `strict: true` - All strict options enabled
  - `noUnusedLocals: true`, `noUnusedParameters: true`
  - `jsx: react-jsx` - JSX without React import required
  - Path alias `@/*` → `./src/*`

**Build:**
- Client Vite config: `client/vite.config.ts`
  - Dev server port 5173
  - API proxy `/api` → `http://localhost:5000`
  - React plugin with React 19 support
  - Tailwind CSS Vite plugin
  - Type checking via `tsc -b` before build

- Server NestJS config: `server/nest-cli.json` (if exists)
  - Build output to `dist/`

## Platform Requirements

**Development:**
- Node.js LTS (tested with v22)
- npm (lockfiles version management)
- PostgreSQL 16+ (via Docker Compose)
- Docker & Docker Compose (for database)
- Git

**Production:**
- Node.js LTS
- PostgreSQL 16+ (managed service or self-hosted)
- Anthropic API key for translations (optional but recommended)
- File storage: Local filesystem or cloud storage (currently local via `./uploads`)

## Database

**PostgreSQL 16 Alpine** (via Docker Compose):
- Port 5432 (internal), 5433 (exposed for dev)
- Database name: `dimension47`
- Default credentials in docker-compose (dev only)
- pgAdmin 4 included for database management (port 5050)

**Prisma Configuration:**
- Schema: `server/prisma/schema.prisma`
- Generator: Prisma Client with CommonJS module format
- Adapter: `@prisma/adapter-pg` for optimized PostgreSQL queries
- Output: `src/generated/prisma/`

---

*Stack analysis: 2026-04-27*
