# FL-Akademie (Motorrad-Akademie LMS) Private Lernplattform als **Ersatz für Tutor LMS** für die [Fahrlässig Motorrad Akademie](https://akademie.fahrlaessig.com/) – Next.js, PostgreSQL, Prisma, NextAuth. Ziel: eigene Kontrolle über Kurse, Nutzer, Landing Page und Zertifikate ohne WordPress-Plugin-Abhängigkeit. **Remote-Repository:** `https://git.loepperts.com/loepperts/FL-Akademie.git` ### Ersten Push ausführen Lokal ist `origin` gesetzt. Ein Push benötigt Zugangsdaten für `git.loepperts.com` (Benutzer/Passwort, Personal Access Token oder SSH). ```bash cd FL-Akademie # bzw. real-akademie-replacement git push -u origin main ``` Bei SSH statt HTTPS: ```bash git remote set-url origin git@git.loepperts.com:loepperts/FL-Akademie.git git push -u origin main ``` --- ## Schnellstart (Docker) Voraussetzung: Docker & Docker Compose. ```bash git clone https://git.loepperts.com/loepperts/FL-Akademie.git cd FL-Akademie docker compose up --build -d ``` - **App:** [http://localhost:3000](http://localhost:3000) - **PostgreSQL (vom Host):** `localhost:5433` → Container-Port 5432 (weniger Konflikte mit lokalem Postgres) Beim Start führt der Web-Container aus: `prisma generate`, `prisma migrate deploy`, `prisma db seed`, danach **`next dev`**. --- ## Umgebungsvariablen Siehe `.env.example`. In `docker-compose.yml` sind für die Entwicklung bereits Werte gesetzt (`DATABASE_URL`, `NEXTAUTH_URL`, `NEXTAUTH_SECRET`). Für Produktion **eigenes starkes `NEXTAUTH_SECRET`** und korrekte **`NEXTAUTH_URL`** (öffentliche HTTPS-URL) setzen. --- ## Demo-Zugänge (Seed) | Rolle | E-Mail | Passwort | |------------|---------------------------|--------------| | Admin | `admin@akademie.local` | `devpassword` | | Dozent | `matze@akademie.local` | `devpassword` | | Lernender | `lernender@akademie.local`| `devpassword` | Der Lernende ist im Demo-Kurs „Modul 1 – Die Fahrschule“ eingeschrieben. --- ## Wichtige Routen | Bereich | Pfad | Beschreibung | |--------|------|----------------| | Öffentlich | `/` | Startseite (Inhalte aus DB, bearbeitbar im Admin) | | Kurse | `/kurse`, `/kurse/[slug]` | Katalog, Kurssdetail, Einschreibung (kostenlose Kurse) | | Lektionen | `/kurse/[slug]/lektionen/[lessonSlug]` | Lernansicht (Login + Einschreibung nötig) | | Login | `/login` | Anmeldung | | Mitgliederbereich | `/portal` | Fortschritt, Kurse wiederholen, Link zu Zertifikaten | | Konto | `/portal/account` | Passwort ändern | | Zertifikate (Liste) | `/portal/certificates` | Eigene Teilnahmebestätigungen | | Zertifikat (öffentlich) | `/zertifikat/[code]` | Anzeige/Druck mit Verifikationscode | | Administration | `/admin` | Nur Rolle `ADMIN`: Kurse, Nutzer, Landing Page | `/dashboard` leitet nach `/portal` um. --- ## Dokumentation im Repo | Datei | Inhalt | |--------|--------| | [docs/PLAN.md](docs/PLAN.md) | Produktvision, Architektur, Phasen, Sicherheit/Monitoring | | [docs/HANDBUCH.md](docs/HANDBUCH.md) | Betrieb: Admin, Portal, Zertifikate, Datenmodell, Docker-Details | --- ## Projektstruktur (kurz) ``` app/ # Next.js App Router (Seiten, API-Routen) components/ # UI-Komponenten lib/ # Prisma-Client, Auth, Landing-Parsing, Zertifikate, Fortschritt prisma/ # schema.prisma, Migrationen, seed.ts scripts/ # docker-entrypoint.sh ``` --- ## NPM-Skripte (ohne Docker) Node 20+, lokales PostgreSQL, `.env` aus `.env.example`: ```bash npm install npx prisma generate npx prisma migrate dev npm run dev ``` `postinstall` führt kein `prisma generate` aus (Docker/CI-freundlich); nach `npm install` immer **`npx prisma generate`** ausführen. --- ## Lizenz / Nutzung Internes Projekt für die Akademie – keine allgemeine Open-Source-Lizenz festgelegt, sofern nicht separat ergänzt.