# rhl-lieferscheine

## Tech Stack
- Frontend: Next.js 16 App Router, React 19, JavaScript/JSX, Tailwind CSS 4
- Backend: Next.js Route Handlers on Node.js 22-slim
- Database: MongoDB 7 via Mongoose 9
- Auth: Signed JWT session cookie (`auth_session`), `bcryptjs`, RBAC roles `branch | admin | superadmin | dev`
- Deployment: Docker Compose with NAS mount, GitLab CI/CD planned

## Conventions
- Read `~/.codex/docs/NEXTJS_CONVENTIONS.md` for code conventions.
- Read `~/.codex/docs/DEFAULT_STACK.md` for stack defaults.

## Project-Specific Rules
- Keep owner-facing conversation in German.
- Write source code, comments, tests, and project docs in English.
- Keep user-facing UI text in German.
- Treat `Docs/` as the canonical project documentation directory for this repository.
- Do not overwrite existing `Docs/` content without explicit approval. `Docs/frontend-ui.md` may contain local changes and must stay untouched unless the user asks for edits there.
- Keep the product scope intentionally pragmatic. Do not reintroduce dropped feature families such as large dashboards, saved searches/bookmarks, or an in-app PDF viewer without approval.
- Treat Qsirch as required for the target environment. Do not plan production rollout around filesystem search alone.
- Respect the current access model: one account per branch, branch users only see their own branch, elevated roles may work across branches, and only `superadmin` / `dev` may manage users.
- Follow the established delivery flow: work ticket-by-ticket, run `npx vitest run` and `npm run build` before new implementation steps, stop for local/server verification before updating docs.
- When docs are requested, write full-file outputs instead of diff snippets.

## Ticket Naming
- Prefix: RHL
- Format: `RHL-XXX`

## Branch And MR Naming
- Branch: `type/rhl-xxx-slug`
- MR title: `RHL-XXX type(scope): summary`
- Types: feat, fix, refactor, docs, chore, style, test, perf, ci, build

## Commands
- Install dependencies: `npm install`
- Start dev server: `npm run dev`
- Run tests once: `npx vitest run`
- Watch tests: `npm run test:watch`
- Build production bundle: `npm run build`
- Start production server: `npm run start`
- Lint repository: `npm run lint -- .`
- Validate environment: `node scripts/validate-env.mjs`
- Start local Docker stack: `docker compose -f docker-compose.yml -f docker-compose.local.yml up --build`
- Start server-like Docker stack: `ENV_FILE=.env.server docker compose -f docker-compose.yml up -d --build`
- Run manual API smoke flow: `docker compose exec app node scripts/manual-api-client-flow.mjs --baseUrl=http://127.0.0.1:3000 --username=<user> --password=<pw> --branch=<branch>`

## Key Paths
- `app/` - routes, protected/public app structure, route handlers
- `components/` - UI building blocks
- `lib/` - domain logic, API client helpers, auth/storage/search helpers
- `models/` - MongoDB user model
- `scripts/validate-env.mjs` - environment validation entrypoint
- `scripts/manual-api-client-flow.mjs` - manual smoke validation helper
- `Docs/` - existing product and operational documentation
- `docker-compose.yml` and `docker-compose.local.yml` - runtime definitions

## Stop And Ask
Escalate before continuing when the task touches:
- architecture or scope changes
- auth, RBAC, or security-sensitive behavior
- database schema or MongoDB operational topology
- CI/CD, deployment automation, reverse proxy, or HTTPS rollout
- secrets, credentials, or Qsirch integration details
