Der SmartStudy Kurs-Planner ist eine vollständig implementierte Webanwendung zur Kursverwaltung und -buchung. Studenten können Kurse durchsuchen, buchen und ihren persönlichen Stundenplan verwalten. Administratoren organisieren das Kursangebot, legen Kapazitäten fest und verwalten Teilnehmerlisten. Das Projekt demonstriert die Umsetzung einer realen Produktanforderung mit modernem Tech-Stack – von der Datenbankmodellierung bis zum responsiven UI.
Frontend: React 19 mit modernem Component-Pattern
Das Frontend basiert auf React 19 mit React Router für clientseitiges Routing und der Context API für globales State Management (Authentifizierung). Das UI ist mit Tailwind CSS gestaltet – Mobile-First, mit dunklem Farbschema und intuitiver visueller Hierarchie.
Die Anwendung besteht aus vier Haupt-Screens:
Login & Registrierung
Minimalistisches Formular mit Inline-Validierung und Rollenzuweisung
Kurskatalog
Grid-/Listenansicht mit Suche, Platz-Status und Direktbuchung
Mein Dashboard
Persönliche Kursübersicht mit Stornierungsmöglichkeit
Admin-Panel
Kurserstellung, Teilnehmerlisten und Kapazitätsverwaltung
// React Router Setup mit rollenbasiertem Routing
export default function App() {
const { user } = useAuth();
return user ? (
<Routes>
<Route path="/katalog" element={<KatalogPage />} />
<Route path="/dashboard" element={<DashboardPage />} />
{user.rolle === 'ADMIN' && (
<Route path="/admin" element={<AdminPage />} />
)}
</Routes>
) : <LoginPage />;
}
Backend: Node.js/Express mit REST API
Das Backend ist als Node.js/Express REST API implementiert. Drei klar getrennte Router-Module bedienen Authentifizierung, Kursverwaltung und das Buchungssystem. Die Authentifizierung nutzt JWT (JSON Web Tokens) mit bcrypt-Passwort-Hashing – ein Industry-Standard für zustandslose API-Authentifizierung.
API Routes → Endpunkt-Struktur
│
├── /api/auth → Login, Register (JWT)
├── /api/kurse → CRUD + Suche (Admin/User)
├── /api/buchungen → Buchen, Stornieren, Dashboard
└── /api/health → Health Check Endpoint
Besonders interessant ist die Middleware-Architektur: Ein JWT-Authentifizierungs-Middleware schützt alle geschützten Routen, während ein separater Admin-Check sicherstellt, dass nur Administratoren Kurse erstellen, bearbeiten oder löschen können.
Datenbank: Prisma ORM mit SQLite
Die Datenschicht nutzt Prisma ORM mit SQLite – eine Zero-Config-Datenbank, die für Prototypen und Demonstrationszwecke ideal ist. Das relationale Schema bildet die drei Kernentitäten sauber ab:
User
Name, Email, Passwort-Hash, Rolle (STUDENT/ADMIN)
Kurs
Titel, Beschreibung, Max-Teilnehmer, Start-/Endzeit
Buchung
User↔Kurs Verknüpfung mit Unique-Constraint
model Kurs {
id Int @id @default(autoincrement())
titel String
beschreibung String
maxTeilnehmer Int
startzeit DateTime
endzeit DateTime
erstelltVonId Int
erstelltVon User @relation("KursErsteller")
buchungen Buchung[]
}
model Buchung {
userId Int
kursId Int
user User @relation(fields: [userId])
kurs Kurs @relation(fields: [kursId], onDelete: Cascade)
@@unique([userId, kursId]) // Doppelbuchungen verhindern
}
Buchungssystem: Intelligente Backend-Validierung
Das Herzstück der Anwendung ist das Buchungssystem mit serverseitiger Validierung. Bevor eine Buchung akzeptiert wird, prüft das Backend drei kritische Bedingungen:
Kapazitätsprüfung
Ist der Kurs voll? Aktuelle Teilnehmerzahl vs. Maximum
Zeitkonflikt-Prüfung
Überschneiden sich gebuchte Kurszeiten?
Doppelbuchungs-Schutz
Unique-Constraint auf DB-Ebene verhindert Duplikate
Diese Validierungen sind ausschließlich im Backend implementiert – nicht im Frontend. Das ist ein bewusster Architektur-Entscheid: Clientseitige Validierung kann umgangen werden, serverseitige nicht. Das Frontend zeigt lediglich die aussagekräftigen Fehlermeldungen des Backends an und gibt dem Nutzer visuelles Feedback (grüne Bestätigung, rote Warnung bei Konflikten).
Admin-Panel: Vollständige Kursverwaltung
Das Admin-Panel bietet Administratoren die Möglichkeit, das gesamte Kursangebot zu organisieren. Es beinhaltet ein umfangreiches CRUD-Interface für Kurse, Teilnehmerlisten mit Detailansicht und die Möglichkeit, Kurse mit allen zugehörigen Buchungen zu löschen (Cascade Delete).
Titel, Beschreibung, Zeitraum und maximale Teilnehmerzahl festlegen – mit Formular-Validierung und sofortigem Feedback.
Für jeden Kurs die eingeschriebenen Studenten mit Name, E-Mail und Buchungsdatum anzeigen.
Beim Löschen eines Kurses werden alle zugehörigen Buchungen automatisch entfernt – saubere referentielle Integrität.
Technischer Deep-Dive: Architektur & Stack
Die komplette Technologie-Landkarte des Projekts auf einen Blick:
Frontend
- React 19 / React Router
- Tailwind CSS 3.4
- Context API (Auth State)
- Vite Build Tool
Backend & Datenbank
- Node.js / Express 4
- JWT + bcrypt Auth
- Prisma ORM / SQLite
- REST API (3 Router)
Features
- Rollenbasierte Zugrifskontrolle
- Zeitkonflikt-Erkennung
- Mobile-First / Responsive
- Seed Data (Demo-Kurse)
Architektur-Highlights
Einige bewusste Architektur-Entscheidungen machen dieses Projekt zu mehr als einer einfachen CRUD-App:
Alle Geschäftsregeln (Kapazität, Konflikte, Berechtigungen) werden ausschließlich im Backend durchgesetzt. Das Frontend zeigt nur die Ergebnisse an.
Routes → Business Logic → Prisma ORM → SQLite. Jede Schicht hat eine klare Verantwortlichkeit.
Frontend und Backend in JavaScript – keine Kontextwechsel, shared Mental Model, effiziente Entwicklung.
Fazit
Der SmartStudy Kurs-Planner demonstriert, wie eine reale Produktanforderung – Kursverwaltung mit Buchungssystem – als Full-Stack-Anwendung sauber umgesetzt wird. Von der Prisma-Datenbankmodellierung über JWT-Authentifizierung bis zur Zeitkonflikt-Erkennung: Jedes Feature zeigt praxisnahes Full-Stack Engineering. Das Projekt ist live deployed und sofort testbar.
Live-Demo: Jetzt ausprobieren
Die Anwendung läuft produktiv auf dem eigenen Server. Registriere dich als Student, durchsuche den Kurskatalog und buche deinen ersten Kurs:
SmartStudy Kurs-Planner öffnen