# Avaria Team OS

Internes Betriebssystem für Organisation und Teamverwaltung von **Avaria Media**.
Dunkles Glassmorphism-Design im Avaria-Stil, sichere rollenbasierte Plattform.

## Tech-Stack

- **Next.js 16** (App Router) · **React 19** · **TypeScript**
- **Tailwind CSS v4** + Avaria-Designsystem (`src/app/globals.css`)
- **Prisma 6** ORM · **MySQL / MariaDB** (XAMPP, localhost)
- **Auth.js v5** (Credentials, JWT-Session) · **Argon2id** Passwort-Hashing
- **zod** Validierung · **nodemailer** (Passwort-Reset-Mails)

## Voraussetzungen

- Node.js 20+ (entwickelt mit 24)
- Laufende MySQL/MariaDB-Instanz (hier: XAMPP auf `127.0.0.1:3306`)

## Einrichtung

```bash
# 1. Abhängigkeiten
npm install

# 2. .env anlegen (siehe .env.example) — DATABASE_URL, AUTH_SECRET, ...

# 3. Schema in die DB schreiben
npm run db:push

# 4. Rollen, Rechte & Demo-Nutzer anlegen
npm run db:seed

# 5. Entwicklungsserver
npm run dev        # http://localhost:3000
```

### Demo-Zugänge (nur lokal)

| Rolle        | E-Mail                 | Passwort           |
|--------------|------------------------|--------------------|
| Admin        | admin@avaria.media     | `Avaria!Admin2026` |
| Leitung      | leitung@avaria.media   | `Avaria!Leitung26` |
| Teammitglied | team@avaria.media      | `Avaria!Team2026`  |

## Skripte

| Befehl              | Zweck                                   |
|---------------------|-----------------------------------------|
| `npm run dev`       | Entwicklungsserver                      |
| `npm run build`     | Produktions-Build                       |
| `npm run typecheck` | TypeScript prüfen                       |
| `npm run db:push`   | Prisma-Schema in DB übernehmen          |
| `npm run db:seed`   | Rollen/Rechte/Nutzer seeden             |
| `npm run db:studio` | Prisma Studio öffnen                    |

## Architektur

```
src/
  app/
    (auth)/login, reset           # öffentliche Auth-Seiten
    (app)/dashboard, kanban, ...   # geschützte Module (RBAC)
    api/auth/[...nextauth]         # Auth.js-Endpunkt
  components/  brand, layout, ui   # wiederverwendbare UI
  lib/
    auth/   (config, password, session, tokens, permissions)
    rbac/   (catalog = Module/Rechte/Rollen, Single Source of Truth)
    validation/, mail/, prisma.ts, navigation.ts
  proxy.ts                         # Auth-Gate (ehem. middleware)
prisma/schema.prisma, seed.ts
```

## Sicherheit

- Argon2id-Hashes, Timing-Schutz gegen User-Enumeration
- Auth.js-CSRF, sichere httpOnly-Sessions (JWT)
- RBAC: grobes Gate in `proxy.ts`, Feinprüfung via `requirePermission` je Seite/Action
- Security-Header inkl. CSP, X-Frame-Options, HSTS (`next.config.ts`)
- Eingabevalidierung mit zod (Front- & Backend), Prisma gegen SQL-Injection
- Scoped DB-User statt root

## Roadmap (Phasen)

- **Phase 1 — abgeschlossen:** Struktur, Sicherheit, Auth, Rollen/Rechte, Designsystem, Dashboard
- Phase 2: Designsystem-Ausbau & UI-Komponenten
- Phase 3: Kanban, Projekte, Creator-DB, Kalender, Meetings
- Phase 4: Arbeitszeit, Urlaub & Abwesenheiten
- Phase 5: Chat, Benachrichtigungen, Admin-Verwaltung (CRUD)
- Phase 6: Testing, Security-Audit, Animationen, Feinschliff

> Das vollständige Datenmodell aller Module liegt bereits in `prisma/schema.prisma`.
