# 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`**.