Initial commit: FL-Akademie LMS mit Docker, Admin, Portal und Dokumentation.

Made-with: Cursor
This commit is contained in:
lo
2026-04-13 23:17:07 +02:00
commit d3367f0046
66 changed files with 3641 additions and 0 deletions

100
README.md Normal file
View File

@@ -0,0 +1,100 @@
# 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`
---
## 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.