STUDYNEXUS
Eine Plattform, die kein HsH-Student hatte.
Gebaut von einem, der sie selbst brauchte.
Chapter I: The Origin
Aus echter Frustration wird echtes Produkt.
Studium organisieren ist ein Chaos
Jeder HS Hannover Student kennt das: QIS, Moodle, Excel, Notizbuch – und trotzdem verliert man den Überblick.
Das ist kein Komfortproblem – es ist ein Systemfehler.
- Keine zentrale Anlaufstelle für Studienfortschritt
- ECTS manuell in Excel nachpflegen
- Prüfungstermine über mehrere Systeme verteilt
- GPA mit dem Taschenrechner ausrechnen
- Stundenplan-Kollisionen erst im Hörsaal bemerken
# Aktuelle Realität an der HsH
# Die StudyNexus Lösung
[✓] backend started on :8000
[✓] postgres ready — migrations applied
[READY] StudyNexus is running.
Platform Scope
Ein Betriebssystem fürs Studium.
StudyNexus ist keine weitere Todo-App. Es ist ein vollständiges Studien-Betriebssystem.
Der Zugang ist absichtlich exklusiv.
Full-Stack MVP läuft bereits vollständig.
200+
Source Files
(Frontend + Backend)
17
Alembic
Migrations
22+
Architecture Decision
Records (ADRs)
122
Backend Tests
alle grün
37
BIN-Module
vollständig seeded
5
Docker Services
(Compose Stack)
Chapter II: System Architecture
Fünf Container. Eine kohärente Plattform.
Frontend & Backend. Ein Repository.
Frontend (Next.js) und Backend (FastAPI) leben im selben Repository.
Jede Änderung am API-Contract ist sofort im Frontend sichtbar.
Der Weg einer Anfrage
Jede Mutation durchläuft eine sichere Pipeline.
Docker Compose: Fünf Services
Die gesamte Infrastruktur startet mit einem einzigen Befehl.
PostgreSQL und Redis haben eigene Health-Checks.
✓ redis healthy (redis:7-alpine)
✓ backend started → :8000
✓ frontend started → :3000
✓ adminer started → :8080
Chapter III: Engineering Decisions
22+ Architecture Decision Records. Hier sind die prägendsten.
Architektur-Entscheidungen sollten dokumentiert sein — nicht nur was, sondern warum. Und welche Alternativen abgelehnt wurden.
FastAPI statt Django
Django ist das 'sichere' Python-Framework. FastAPI ist das richtige.
httpOnly Cookies statt localStorage
JWT in localStorage speichern ist eine klassische XSS-Schwachstelle.
bcrypt direkt – kein passlib
passlib ist de facto unmaintained. Letzte Version 2022.
CSRF via Custom Header
Klassisches CSRF-Token-Management benötigt Server-State. Stattdessen
x-studynexus-client: true.
HsH-Only Strategie
Die Beschränkung auf @stud.hs-hannover.de ist kein Kompromiss – sie ist ein Design-Entscheid.
Redis für Admin-Session-Tokens
JWT ist nicht server-seitig invalidierbar. Für Admin-Aktionen (Delete, Archive, Reset) brauchen wir einen Token, den wir sofort sperren können. Redis mit 15-Minuten-TTL – das Sudo-Konzept für das Web.
is_admin im JWT-Payload
Next.js Middleware läuft in der Edge Runtime – kein Datenbankzugriff möglich. is_admin: true
direkt im JWT ermöglicht Admin-Route-Guards ohne DB-Abfrage und ohne latency.
Chapter IV: Feature Deep-Dive
Was die Plattform heute kann.
Das Herzstück: Mission Control Dashboard
Der erste Blick nach dem Login. Echtzeit aus der Datenbank – kein Caching.
Jedes Widget ist funktional und reaktiv.
- GPA-Tracker mit ECTS-gewichteter Echtzeit-Berechnung
- Exam Countdown mit Pulsier-Animation (< 14 Tage=rot)
- Daily Focus: heute's Events, automatischer Wechsel nach 20 Uhr
- Smart Timeline: aufgaben-intelligente Sortierung nach Fälligkeit
Kanban Board mit echtem Drag & Drop
@dnd-kit v6 als Fundament. Vier Spalten, Prioritäten, Modul-Verknüpfung.
Vollständig persistent – DB-write bei jedem Drop.
15-Minuten CSS-Grid Engine
Kein Table-Layout. Ein echtes CSS Grid mit 15-Min-Auflösung, Echtzeit-Linie und HTTP 409 Kollisionserkennung.
Semester-Binding. Ghosting-Modus. Mobile Agenda View.
Visueller Studienplan
Module in Semester-Spalten, Drag & Drop, ECTS-Berechnung, echte HsH-Prüfungsordnung.
- PFLICHT-Module automatisch geladen
- WAHLPFLICHT & ERGÄNZEND manuell hinzufügbar
- Drag & Drop zwischen Semestern via @dnd-kit
- ECTS-Summe pro Spalte live berechnet
MilestoneWidget — §6 PO live überwacht
Das Dashboard hat ein neues Sidebar-Widget, das die BIN-Prüfungsordnung §6 in Echtzeit auswertet: Welche Semester sind abgeschlossen? Ist die Vorprüfung bestanden?
- Sem 1 complete: alle 6 Module BIN-100..116
- Vorprüfung: alle 17 Module Sem 1–3 bestanden
- BA-Zulassung: Vorprüfung + ≥ 134 ECTS
- Live-Fortschrittsbalken per Milestone
Enterprise Admin — 14 Seiten, 35+ Endpunkte
Ein vollständiges Admin-Control-Center: User-Management, Prüfungsordnungs-Verwaltung, Analytics-Dashboard, Audit-Log und JSON-Import – komplett in 2 Tagen geliefert.
Studienordnung auf einen Blick
Eine eigene Dashboard-Seite, die alle relevanten PO-Regeln darstellt: Zulassungsregeln §6, Notenscala §10, Wiederholungsregeln §11 – mit Live-Status-Badges direkt aus der Datenbank.
- Programm-aware: erkennt BIN via API-Response
- Prüfungsarten PX / EA / R / BAA+Ko farbcodiert
- BA-Zulassung: Live-ECTS-Fortschrittsbalken
- Kein Hardcode – Sprint 7 fügt weitere POs hinzu
Chapter V: BIN Prüfungsordnung
3 PDFs. 37 Module. Alle §6-Regeln automatisch abgebildet.
Aus echten Dokumenten gebaut
Keine Placeholder-Daten. Alle 37 BIN-Module wurden direkt aus drei offiziellen HsH-Dokumenten extrahiert und in die Datenbank überführt.
- §5 — Modulstruktur Abschnitt 1 + 2
- §6 — Zulassungs- & Voraussetzungsregeln
- Anlage B1/B2 — vollständige Modullisten
- §7 — Prüfungsarten (PX, EA, R, BAA+Ko)
- §10 — 11 offizielle HsH-Noten
- §11 — Wiederholungsregeln (max. 3 Versuche)
- SWS pro Modul (Semesterwochenstunden)
- Prüfungsarten je Modul
- 37 vollständige Modulbeschreibungen
Vier Typen. Direkt aus ATPO-FIV §7.
Jedes der 37 BIN-Module trägt die offizielle Prüfungsart aus dem Modulhandbuch – persistent in der Datenbank, farbcodiert in der UI.
Eine Pydantic-Validierung stellt sicher, dass nur die 11 offiziellen HsH-Noten eingetragen werden können. HTTP 422 bei ungültiger Note.
§6 ZULASSUNGSREGELN — VOLLSTÄNDIG IMPLEMENTIERT
Studienfortschritt nach §6 — live
GET /me/stats liefert 8 neue Felder. Das Dashboard-Widget wertet sie in Echtzeit aus. Kein
Polling – der Status wird beim Page-Load berechnet.
Chapter VI: Security by Design
Security ist kein Nachgedanke. Security ist Architektur.
Stateless CSRF via Custom Header
Jede mutierende Anfrage trägt x-studynexus-client: true.
Cross-Origin-Requests dürfen ohne CORS-Preflight keine Custom Headers setzen.
JWT in httpOnly Cookies
Der JWT-Token lebt ausschließlich in einem httpOnly Cookie. JavaScript kann diesen Cookie nicht auslesen.
HttpOnly; Secure; SameSite=Lax
Path=/; Max-Age=604800 (7d)
6-Digit Email Verification
6-stelliger Code via Resend API, 15-Minuten-Ablauf, nur @stud.hs-hannover.de.
Row-Level User Isolation
Jede Datenbank-Query filtert by user_id. Kein separates Permissions-System – das ORM erzwingt die Isolation strukturell.
.filter(Task.user_id == current_user.id)
.all()
Sudo-Konzept: Lesen vs. Zerstören
Ein gestohlener Admin-JWT allein kann keinen Schaden anrichten. Destruktive Operationen erfordern einen zweiten Faktor – einen kurzlebigen Redis-Token, der durch Passwort-Re-Verifikation ausgestellt wird.
JWT-basierter Admin-Check
is_admin: true im JWT-Payload (ADR-021). Edge-Runtime kompatibel – kein DB-Lookup, zero
latency. Reicht für alle lesenden Admin-Operationen.
Redis Session Token (Sudo)
Admin gibt Passwort erneut ein → Redis-Token mit 15-Min-TTL. Nur dieser Token schaltet destruktive Ops frei. Sofort invalidierbar – kein JWT-Expiry abwarten.
Chapter VII: Admin Panel
Enterprise Control Center. Geplant für eine Woche. Geliefert in zwei Tagen.
Was das Admin Panel kann
Dashboard & KPI
13-Felder-KPI-Response, Wachstums-Chart (Recharts LineChart, 7d/30d/90d/1y), User-Segmentierung, DB-Größe
via pg_database_size().
Vollständiger User-Zugriff
Paginated Liste (25/Seite), 5 Filter-Tabs, Suche über Email+Name, PATCH aller Felder, Password-Reset, Hard Delete mit Begründungspflicht.
Hochschule → Modul → Voraussetzung
6 Router-Dateien, ~30 Endpunkte. Soft Delete auf POs/Modulen (Bestandsschutz), Hard Delete auf Hochschulen/Fakultäten.
Lückenlos seit Phase 2
Jede Admin-Mutation seit dem ersten Tag protokolliert. Timeline-Layout, ActionBadge mit 8 Farb-Varianten, DiffBlock (old→new Diff, Strikethrough für entfernte Werte).
JSON-Bulk-Import bis 500 Module
Validate → Preview (erste 10) → POST → Ergebnis. Idempotent via kuerzel-Lookup in derselben PO. PDF-Placeholder für Sprint 7 (ML/NLP).
Echtzeit-Systemstatus
Overall-Badge (ok/degraded/down), ServiceBadge pro Service (DB-Ping + Redis.ping), DB-Version + Größe, Auto-Refresh alle 60 Sekunden.
AdminDataTable<T> — eine Komponente für alle Listen
Statt 6 separate Tabellen-Implementierungen: eine generische TypeScript-Komponente. Column-Sort, debounced
Search (350ms), server-side Pagination, hideOnMobile per Spalte — alles konfigurierbar über
Props.
22 neue TypeScript-Interfaces, 11 neue TanStack Query Hooks, adminFetch.ts
als dünner Wrapper: kein direktes fetch(), zentrale Header-Logik, 204-Handling.
Chapter VIII: Database Architecture
12+ Tabellen. 17 Alembic-Migrationen. Vollständige Hochschul-Hierarchie.
Von der Hochschule zum einzelnen Modul
Das Datenmodell bildet die echte Hochschulhierarchie ab.
9 SQLAlchemy-Modelle mit UUID Primary Keys und PostgreSQL-native ENUMs.
Gewichtete Note – wie an echten Hochschulen
Der GPA wird nicht einfach gemittelt – ECTS-basierte Gewichtung.
17 Alembic Migrations – Jeder Schritt versioniert
Keine manuellen SQL-Änderungen – jede Schemaänderung ist versioniert, reversibel und auf jedem Environment reproduzierbar.
Sprints 1–3 legten das Fundament (0001–0011). Sprint 4 ergänzte die BIN-PO-Daten (0012–0014). Sprint 5 lieferte die Admin-Infrastruktur (0015–0017).
Chapter IX: Sprint-Roadmap
Wo das Projekt steht. Wohin es geht.
Foundation: Auth, DB & Docker
JWT Authentication, PostgreSQL-Schema mit Alembic, Docker Compose Stack mit 5 Services, Email-Verifikation via Resend API, vollständige Studienplan-CRUD mit GPA-Berechnung.
Mission Control & Mobile
Kanban Board (@dnd-kit), Schedule Board (15-Min CSS Grid), Dashboard Widgets, Mobile FAB, Agenda View für kleine Screens, TanStack Query Migration, vollständige i18n (DE/EN).
BIN Prüfungsordnung Integration
37 BIN-Module aus 3 PDFs, Prüfungsart-System (PX/EA/R/BAA+Ko), §6-Voraussetzungen als DB-Constraints, MilestoneWidget, PO-Übersicht-Seite, GPA-Fix BIN-209.
Admin Panel — Enterprise Control Center
14 Admin-Seiten, 35+ Endpunkte, Two-Layer Auth (JWT + Redis Sudo), Audit-Log, Analytics (Recharts), JSON-Bulk-Import, 122/122 Tests grün.
Security Audit & Email-Templates
Admin-API-Rate-Limiting, Toast-Notifications bei API-Errors, E-Mail-Templates für Passwort-Reset, UI-Polishing und Dropdown-Auswahl für UUID-Felder.
Production Launch für die HsH
Öffentlicher Launch für alle HS Hannover Studierenden. Onboarding-Flow mit vorausgefüllten Prüfungsordnungen. Gamification: XP, Badges, Streaks.
Ein Projekt
in Bewegung.
StudyNexus ist nicht fertig – und das ist genau der Punkt.