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

125
docs/PLAN.md Normal file
View File

@@ -0,0 +1,125 @@
# Motorrad-Akademie LMS Ersatz für Tutor LMS
Dieses Dokument ist die **Produkt- und Architekturgrundlage** für eine private, zielorientierte Lernplattform. Sie ersetzt schrittweise [Tutor LMS](https://tutorlms.com/) auf [akademie.fahrlaessig.com](https://akademie.fahrlaessig.com/).
---
## 1. Zielbild
- **Eigentümerschaft:** Code und Daten bei euch, keine Plugin-Lizenzkosten für das LMS-Kernstück.
- **Bedienung:** Reduzierte Admin-Oberfläche auf echte Workflows (Kurs anlegen, Lektionen, Zugang, Zahlung).
- **Kontinuität:** URLs, Kurslogik und Look sollen zur bestehenden Akademie passen (Migration/Redirects später).
- **Skalierung:** Produktionsfähige Basis (API, DB, Jobs), ohne WordPress als Laufzeit für den Lernbereich.
---
## 2. Ist-Analyse Akademie (öffentlich)
| Bereich | Anforderung |
|--------|-------------|
| Kurse | Karten mit Titel, Autor, Kategorien (kostenlos, Module, Übung der Woche). |
| Kurrikulum | `/kurse/.../lektionen/...` Module/Themen und Lektionen. |
| Zugang | Einschreiben vs. „Mit dem Lernen beginnen“. |
| Monetarisierung | Abo-Preise, Warenkorb/Demo, kostenpflichtig vs. kostenlos. |
| Vertrauen | Bewertungen, Dozentenprofile. |
| Marketing | Startseite, Roadmap, Blog/Shop teils außerhalb LMS. |
---
## 3. Tutor-LMS-Feature-Parität (phasenweise)
### Phase A MVP (Betrieb Akademie)
- Nutzer: Registrierung, Login, Passwort, Rollen (Lernender, Admin).
- Kurse: Slug, Titel, Beschreibung, Thumbnail, Kategorien, veröffentlicht.
- Kurrikulum: Kurs → Modul → Lektion (Reihenfolge), Rich-Text-Inhalt.
- Einschreibung + Fortschritt (Lektion abgeschlossen).
- Zahlungen: vorbereitet (Stripe o. Ä.); **Dev:** kostenlose Einschreibung + Preisfelder in DB.
- Öffentliche Kursliste + Kurssicht + Lektionsplayer-Layout.
### Phase B später
- Quizze, Aufgaben, Zertifikate, Prerequisites, Content Drip, Gradebook, erweiterte Analytics, Bundles, Live-Sessions, KI-Inhalte nur bei konkretem Bedarf.
---
## 4. Technische Architektur (Umsetzung in diesem Repo)
| Komponente | Wahl |
|------------|------|
| App | Next.js (App Router), TypeScript |
| Datenbank | PostgreSQL 16 |
| ORM | Prisma |
| Auth | NextAuth.js (Credentials, erweiterbar auf OAuth) |
| Deployment lokal | Docker Compose (`web` + `db`) |
Verzeichnisüberblick:
- `app/` Routen: Marketing (`/`), Kurse, Lektionen, Login, **Mitgliederbereich `/portal`**, **Admin `/admin`**, öffentliche Zertifikatsseite `/zertifikat/[code]`, API (`/api/...`).
- `components/` UI-Bausteine (Header, Kurskarten, Formulare).
- `lib/` Prisma-Client, Auth, Landing-Content, Zertifikate, Fortschritt, Slugs.
- `prisma/schema.prisma` Datenmodell inkl. `LandingPage`, `Certificate`.
- `prisma/seed.ts` Demo-Daten + Standard-Landing.
- `docker-compose.yml` Postgres (Hostport **5433**) + Web.
- `Dockerfile` + `scripts/docker-entrypoint.sh` Migration, Seed, `next dev`.
- `README.md` Einstieg & Schnellstart.
- `docs/HANDBUCH.md` **implementierter Stand** (Admin, Portal, Zertifikate, Docker).
---
## 5. Migration (später, produktiv)
- Export aus WordPress/Tutor → Import-Skripte ins Zielschema.
- Nutzer: Einladung/Passwort-Reset statt unsicherer Passwort-Übernahme.
- SEO: 301 von alten `/kurse/`-URLs.
- Zahlungen: Abgleich mit Payment-Provider (Kunden-IDs).
---
## 6. Sicherheit (Produktion)
- TLS, Security-Header (CSP iterativ), Rate-Limits auf Login.
- OWASP-Basics, keine Secrets im Image, regelmäßige Updates.
- RBAC für Admin/Dozent/Support.
---
## 7. Monitoring (sekundär, aber vorgesehen)
- Strukturierte Logs, Metriken (Latenz, 5xx, Jobs), Alerts bei Zahlungs-Webhooks.
- Healthchecks für App, DB, Queue.
---
## 8. Ausführung Entwicklung mit Docker Compose
Voraussetzung: Docker und Docker Compose installiert.
```bash
cd /home/lo/Dokumente/real-akademie-replacement
docker compose up --build
```
- App: **http://localhost:3000**
- Demo-Login (Seed): `admin@akademie.local` / `devpassword`
Lernender: `lernender@akademie.local` / `devpassword`
Umgebungsvariablen siehe `.env.example`. Für reine lokale Entwicklung ohne Docker: Node 20+, `npm install`, Postgres starten, `DATABASE_URL` setzen, `npx prisma generate`, `npx prisma migrate dev`, `npm run dev`.
**Hinweis Next.js:** Unter demselben dynamischen Pfadsegment (z.B. `/kurse/[slug]/…`) müssen die Parameternamen in allen verschachtelten Routen übereinstimmen (hier durchgängig `slug` für den Kurs).
---
## 9. Roadmap dieses Repos
1. ~~MVP-UI und Datenmodell~~; ~~Admin-UI (Kurse, Nutzer, Landing Page)~~; ~~Portal mit Passwort & Zertifikat~~ umgesetzt (siehe `docs/HANDBUCH.md`).
2. Stripe/Webhooks + echte Abos.
3. Migrationstools von Tutor-Export (Inhalte, Nutzer, Zahlungen).
4. Phase-B-Features nach Priorität (Quizze, Drip, …).
---
## 10. Repository
- **Git:** `https://git.loepperts.com/loepperts/FL-Akademie.git`
- Einstieg für neue Entwickler: zuerst **`README.md`**, dann **`docs/HANDBUCH.md`** und dieses **`docs/PLAN.md`**.