Resources
7Install
npx skillscat add tomi791/diveandtravel-app Install via the SkillsCat registry.
SKILL: Dive and Travel Kursverwaltung
Beschreibung
Diese App ist ein Kursverwaltungssystem für Dive and Travel (Tauchschule SSI-DTC Freiburg).
Entwickelt mit Next.js 14 + Prisma + SQLite.
Produktionsserver: https://ssi-dtc.de (Hostinger Node.js Hosting)
Pfad: C:\Users\jselz\OneDrive - Kegler IT GmbH & Co. KG\Claude\Projekte Cowork\DTC\Kursverwaltung\tauchschule-app
Version: 2.7.2
Aktivierungs-Trigger
Aktiviere diese Skill wenn der Nutzer:
- Fehler in der Tauchschule-App meldet (Build Error, Runtime Error, 500er)
- Neue Features für die App haben möchte
- Etwas an Schülern, Kursen, Terminen, Lehrern oder Einstellungen ändern will
- Fragen zur Datenbankstruktur stellt
- Die App neu aufsetzen / wiederherstellen will
- Dateien der App lesen oder bearbeiten will
Tech-Stack & Schlüsselinfos
Framework: Next.js 14 App Router
Sprache: TypeScript
ORM: Prisma 5.22
Datenbank: SQLite (prisma/dev.db)
Styling: Tailwind CSS + custom ocean-Farben
Auth: JWT (HTTP-only Cookie) + bcrypt + TOTP-MFA
Server: npm run dev → localhost:3000Projekt-Pfad & Datei-Konventionen
C:\Users\jselz\OneDrive - Kegler IT GmbH & Co. KG\Claude\Projekte Cowork\DTC\Kursverwaltung\tauchschule-app\
├── app/(dashboard)/dashboard/[modul]/page.tsx # Server Components
├── app/(dashboard)/dashboard/[modul]/[id]/page.tsx
├── lib/actions.ts # ALLE Server Actions (alle DB-Operationen)
├── lib/pdfReport.ts # Kursbericht-PDF (inkl. Ausfahrten)
├── prisma/schema.prisma
├── prisma/dev.db # SQLite Datenbank (lokal)
├── components/layout/Sidebar.tsx # Navigation (Client)
├── components/dashboard/SchuelerSucheSelect.tsx # Suchbare Schüler-Auswahl (Client)
├── components/dashboard/DashboardWidgets.tsx # Report/Video Buttons (Client)
├── lib/mailbox.ts # IMAP-Helper (fetchInbox, fetchMailDetail)
└── lib/version.ts # Aktuelle VersionWICHTIG - Datei schreiben:
- PowerShell strips backticks → immer Node.js-Script für TSX-Dateien mit Template-Literalen verwenden
- Schema-Änderungen lokal: Dev-Server stoppen →
npx prisma db push --accept-data-loss→ Server neu starten - Schema-Änderungen auf Hostinger (MySQL): NICHT
prisma db pushverwenden (hängt/timeout) → stattdessen direkt per MySQL-CLI:mysql -u u590503555_sa_dtc -p'PASSWORT' -h 127.0.0.1 u590503555_dtc_app -e "ALTER TABLE ..." - IMMER
127.0.0.1stattlocalhostfür MySQL auf Hostinger —localhostwird abgelehnt - Bracket-Verzeichnisse
[id]: PowerShellCopy-Itemstatt direktem Schreiben verwenden - IMAP-Config gehört in
.env(IMAP_HOST, IMAP_PORT), NICHT in die DB —.envüberlebt Git-Push auf Hostinger - Datenbank liegt auf Hostinger — lokale
prisma db pushAusführung ist nutzlos; Schema-Änderungen minimieren
Datenmodell (Kurzreferenz)
| Tabelle | Schlüsselfelder |
|---|---|
| User | id, email, name, role (ADMIN/LEITUNG/LEHRER), passwordHash |
| Schueler | id, vorname, nachname, email, telefon, geburtsdatum |
| Kurs | id, name, kuerzel, typ, status, ssiLink?, lehrerId, farbe |
| KursZusatzLehrer | kursId, userId, rolle — @@unique([kursId,userId]) |
| Termin | id, kursId, typ, startzeitpunkt, endzeit |
| TerminTeilnahme | terminId, schuelerId, status (ANGEMELDET/ERSCHIENEN/ABGESAGT) |
| Anmeldung | schuelerId, kursId, status — @@unique([schuelerId,kursId]) |
| Kursfortschritt | schuelerId, kursId, tauchgaenge, abgeschlossen |
| Zertifikat | schuelerId, name, ausstellungsdatum, zertifikatNr |
| KursVorlage | id, name, kuerzel, kategorie (29 SSI-Vorlagen) |
| AuditLog | id, aktion, entitaet, entitaetId, details, userName |
| SystemConfig | id="default", schoolName, smtpHost, twilioSid, ... |
Wichtige URL-Routen
/dashboard → Übersicht
/dashboard/schueler → Schüler-Liste
/dashboard/schueler/[id] → Schüler-Detail + Kurszuweisung
/dashboard/kurse → Kurs-Liste
/dashboard/kurse/neu → Neuer Kurs (mit Vorlagen-Dropdown)
/dashboard/kurse/[id] → Kurs-Detail + Status + Lehrer
/dashboard/termine/[id] → Termin + Teilnahme + Status setzen
/dashboard/kalender → Monat/Liste Ansicht
/dashboard/einstellungen/stammdaten → SSI Kurs-Vorlagen
/dashboard/log → Audit-Log mit FilterServer Actions (lib/actions.ts) — Wichtigste
// Auto-Fortschritt: ERSCHIENEN → tauchgaenge +1 für POOL/FREIWASSER/AUSFAHRT
updateTeilnahmeStatus(terminId, schuelerId, status)
// Kurs-Status + Audit-Log
updateKursStatus(kursId, status) // GEPLANT|AKTIV|ABGESCHLOSSEN|ABGEBROCHEN
// Schüler ↔ Kurs
assignSchuelerToKurs(schuelerId, kursId)
removeSchuelerFromKurs(schuelerId, kursId)
// Mehrere Lehrer pro Kurs
addZusatzLehrer(kursId, userId, rolle)
removeZusatzLehrer(kursId, userId)
// Löschen
deleteKurs(kursId)
deleteSchueler(schuelerId)
deleteTermin(terminId)Bekannte Fallstricke
Backtick-Verlust: PowerShell
Write-HostundGet-Contentzeigen Backticks nicht an. Template-Literale in TSX immer via Node.js-Script schreiben.[id]-Verzeichnisse: PowerShell-Wildcards.
cmd /c "type ..."zum Lesen,Copy-Itemzum Schreiben.Prisma DB Push (lokal): Dev-Server muss gestoppt sein (DLL-Lock auf query_engine-windows.dll.node). Reihenfolge:
Get-Process "node" | Stop-Process -Force npx prisma db push --accept-data-loss npm run devPrisma DB Push (Hostinger/Produktion): Server hat kein Git. Schema via base64 hochladen, dann:
/opt/alt/alt-nodejs18/root/usr/bin/node node_modules/.bin/prisma db push \ --schema=/home/u590503555/domains/ssi-dtc.de/nodejs/prisma/schema.prisma \ --skip-generateProduktion-DB:
/home/u590503555/domains/ssi-dtc.de/db/dev.dbDev-Server Log:
C:\temp\devserver.log— Server läuft als Hidden-Prozess.404 für .js-Chunks: Normal bei Server Components in Next.js dev — kein Fehler.
SystemConfig: Hat immer nur einen Eintrag mit
id = "default".HTML-Checkbox FormData: Unchecked-Checkbox sendet KEIN Feld (nicht 'off'). Immer
=== 'on'prüfen, nie!== 'off'.E-Mail Buttons:
display:inline-blockin E-Mail-Clients unzuverlässig → immer<table role="presentation">mit<td>-Zellen verwenden.
Pflichtaufgabe nach jeder Code-Änderung
Nach JEDER Änderung an Features, Bugfixes oder UI müssen diese Dateien aktualisiert werden:
lib/version.ts— Version um 0.0.1 erhöhenCLAUDE_LOG.md— Neuen Eintrag mit Datum, Version und Beschreibung oben einfügenSKILL.md— Version + ggf. neue Dateiliste / Fallstricke aktualisierenDEVELOPER.md— Version + ggf. neue Komponenten/Schema-ÄnderungenBenutzerhandbuch_Tauchschule.html— Version-Badge + ggf. neue Abschnitte für Benutzer-Features
Dies geschieht automatisch und selbständig — Jürgen muss nicht extra darum bitten.
Wiederherstellen / Neustart
# Server neu starten
Get-Process "node" | Stop-Process -Force
Start-Process cmd.exe -ArgumentList '/c cd "C:\test claude\dztc\tauchschule-app" && npm run dev > C:\temp\devserver.log 2>&1' -WindowStyle Hidden
# Schema-Änderungen pushen
Start-Process cmd.exe -ArgumentList '/c cd "C:\test claude\dztc\tauchschule-app" && set DATABASE_URL=file:./dev.db && npx prisma db push --accept-data-loss > C:\temp\push.log 2>&1' -WindowStyle Hidden
# Status prüfen
netstat -ano | findstr ":3000"
Get-Content "C:\temp\devserver.log" | Select-Object -Last 10Vor jeder Änderung checken
# Welche Exports hat actions.ts?
Select-String -Path "C:\test claude\dztc\tauchschule-app\lib\actions.ts" -Pattern "export async"
# Schema aktuell?
Select-String -Path "C:\test claude\dztc\tauchschule-app\prisma\schema.prisma" -Pattern "model "
# Server läuft?
Get-Content "C:\temp\devserver.log" | Select-Object -Last 5