Full-Stack · React · Node.js

SmartStudy Kurs-Planner: Kursverwaltung als Full-Stack Showcase

Wie eine webbasierte Kursverwaltung mit React 19, Node.js/Express und Prisma ORM zeigt, dass modernes Full-Stack Development weit mehr ist als nur Frontend und Backend zusammenschalten.

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).

Kurse erstellen & bearbeiten

Titel, Beschreibung, Zeitraum und maximale Teilnehmerzahl festlegen – mit Formular-Validierung und sofortigem Feedback.

Teilnehmerlisten einsehen

Für jeden Kurs die eingeschriebenen Studenten mit Name, E-Mail und Buchungsdatum anzeigen.

Cascade Delete

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:

Server-Side Validation Only

Alle Geschäftsregeln (Kapazität, Konflikte, Berechtigungen) werden ausschließlich im Backend durchgesetzt. Das Frontend zeigt nur die Ergebnisse an.

Saubere Schichtentrennung

Routes → Business Logic → Prisma ORM → SQLite. Jede Schicht hat eine klare Verantwortlichkeit.

Einheitlicher JavaScript-Stack

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