- Γber NORA
- Features
- Technologie-Stack
- Architektur
- API-Dokumentation
- Entwickler
- Contributing
- Lizenz
- Kontakt
NORA (Nordakademie Organizer & Room Assistant) ist eine umfassende Web-Plattform, die speziell fΓΌr Studierende der Nordakademie entwickelt wurde. Die Anwendung vereint alle wichtigen organisatorischen Tools in einer intuitiven, modernen OberflΓ€che und macht das Studentenleben deutlich einfacher.
Unsere Vision ist es, den Studienalltag an der Nordakademie durch intelligente Digitalisierung zu vereinfachen. NORA bietet nicht nur Zugriff auf wichtige Informationen wie StundenplΓ€ne und Raumbelegungen, sondern fΓΆrdert auch die Vernetzung unter Studierenden und ermΓΆglicht eine bessere Organisation des akademischen Lebens.
NORA entstand aus dem BedΓΌrfnis heraus, die verschiedenen organisatorischen Aspekte des Studiums an der Nordakademie zu zentralisieren. Anstatt zwischen verschiedenen Systemen und Plattformen zu wechseln, bietet NORA eine einheitliche LΓΆsung fΓΌr:
- Stundenplanverwaltung: Γbersichtliche Darstellung aller Veranstaltungen mit Zeitangaben, RΓ€umen und Dozenten
- Raumplanung: Interaktive GebΓ€udeplΓ€ne mit Echtzeitinformationen zur Raumbelegung
- PrΓΌfungsorganisation: Verwaltung und Γbersicht ΓΌber anstehende Klausuren
- Soziale Vernetzung: Freundeslisten und gemeinsame Stundenplanansichten
- Kalenderintegration: Export und Synchronisation mit externen Kalendern
- Personalisierte Ansicht: Automatische Filterung nach Zenturie
- Zeitbereichsauswahl: Flexible Darstellung von 0-24 Uhr
- Freundschafts-Feature: Einsicht in StundenplΓ€ne von Kommilitonen
- Custom Hours: Eigene Termine und Veranstaltungen hinzufΓΌgen
- Raumsuche: Schnelles Finden freier RΓ€ume fΓΌr bestimmte Zeitslots
- GebΓ€udeΓΌbersicht: Detaillierte PlΓ€ne fΓΌr alle Nordakademie-GebΓ€ude
- Stockwerksnavigation: Etagenweise Ansicht mit Raumdetails
- Rauminformationen:
- Raumnummer und Name
- Aktuelle Belegung
- NΓ€chste Veranstaltung
- KapazitΓ€t und Ausstattung
- Such- und Filterfunktion: Schnelles Auffinden spezifischer RΓ€ume
- Echtzeit-Belegungsstatus: Sofortige Γbersicht ΓΌber freie RΓ€ume
- KlausurΓΌbersicht: Chronologische Auflistung anstehender PrΓΌfungen
- Intelligente Eingabe:
- Autocomplete fΓΌr Modulnummern
- Autocomplete fΓΌr Kursnamen
- Automatische Synchronisation beider Felder
- PrΓΌfungsdetails:
- Datum und Uhrzeit
- Dauer
- Raum
- Kurs und Modulnummer
- Countdown: Anzeige der verbleibenden Zeit bis zur Klausur
- Freundesliste: Verwaltung von Kontakten innerhalb der Plattform
- Stundenplan-Sharing: Einsicht in die ZeitplΓ€ne von Freunden
- Zenturien-Anzeige: Γbersicht ΓΌber die Zenturien aller Freunde
- Validierung: Nur @nordakademie.de E-Mail-Adressen
- Webcal-Export: Automatischer Import in alle gΓ€ngigen Kalender-Apps
- iCal-Download: Manuelle Kalender-Integration
- Plattform-Support:
- Apple Kalender (macOS, iOS)
- Google Kalender
- Microsoft Outlook
- Andere iCal-kompatible Anwendungen
- Automatische Updates: Γnderungen werden in Echtzeit synchronisiert
- Schnellsuche: Strg+K / Cmd+K fΓΌr sofortigen Zugriff
- Kategorien:
- Kurse
- RΓ€ume
- Zenturien
- Dozenten
- Live-Ergebnisse: Sofortige Anzeige wΓ€hrend der Eingabe
- Keyboard-Navigation: VollstΓ€ndige Tastatursteuerung
- Responsive Design: Optimiert fΓΌr Desktop, Tablet und Mobile
- Glassmorphism: Moderne, transparente Designelemente
- Gradient Accents: FarbverlΓ€ufe im Nordakademie-Branding
- Dark Mode Ready: Vorbereitet fΓΌr zukΓΌnftige Dark-Mode-Integration
- Accessibility: Barrierefreie Bedienung
- Performance: Optimierte Ladezeiten und flΓΌssige Animationen
- HTML5 - Strukturierung der Anwendung
- CSS3 - Modernes Styling mit Glassmorphism
- JavaScript ES6+ - Clientseitige Logik und InteraktivitΓ€t
- TailwindCSS 3.x - Utility-First CSS Framework via CDN
- Capacitor 7.x - Native Mobile App Wrapper (iOS & Android)
- Fetch API - HTTP-Requests und API-Kommunikation
- LocalStorage API - Client-Side Session Persistence
- DOM API - Dynamische UI-Updates
- Native Modules - Zugriff auf Device-Features via Capacitor
- Go 1.21+ - Hochperformante Backend-Sprache
- Fiber v2 - Express-inspiriertes Web Framework
- GORM - ORM fΓΌr Datenbankzugriff
- PostgreSQL 14+ - Relationale Datenbank
- CORS Middleware - Cross-Origin Resource Sharing
- Logger Middleware - Request Logging
- JWT (golang-jwt/jwt/v5) - Token-basierte Authentifizierung
- bcrypt - Passwort-Hashing
- Godotenv - Environment Configuration
- RESTful API Design - Standardisierte Endpunkte
- Session Management - UUID-basierte Sessions
- Email Service - Transaktionale E-Mails
- Calendar Service - iCal/Webcal Generation
- Nginx - Reverse Proxy und Static File Server
- SSL/TLS - HTTPS mit Let's Encrypt
- Systemd - Service Management
- Git - Version Control
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Client Layer β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Browser β β iOS App β β Android App β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β ββββββββββββββββββββ΄ββββββββββββββββββ β
β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββ
β HTTPS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Nginx Reverse Proxy β
β β’ SSL Termination β
β β’ Static File Serving β
β β’ Load Balancing β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (HTML/JS/Capacitor) β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Dashboard β β Stundenplan β β Raumplan β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Navbar β β Modals β β Auth β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
β REST API
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend (Go/Fiber) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β API Services β β
β β β’ Auth Service β’ Schedule Service β β
β β β’ User Service β’ Room Service β β
β β β’ Exam Service β’ Friend Service β β
β β β’ Calendar Service β’ Search Service β β
β ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββ β
β β Middleware Layer β β
β β β’ Authentication β’ Logging β’ CORS β β
β ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ β
β β β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PostgreSQL Database β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Users β β Sessions β β Events β β Rooms β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Exams β β Friends β β Zenturienβ β Courses β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-- Benutzer und Authentifizierung
Users
ββ id (PK)
ββ email
ββ password_hash
ββ first_name
ββ last_name
ββ zenturie_id (FK)
ββ subscription_uuid
Sessions
ββ id (PK)
ββ user_id (FK)
ββ session_id (UUID)
ββ expires_at
-- Akademische Daten
Zenturien
ββ id (PK)
ββ name
ββ year
Courses
ββ id (PK)
ββ module_number
ββ name
Events
ββ id (PK)
ββ zenturie_id (FK)
ββ course_id (FK)
ββ room_id (FK)
ββ start_time
ββ end_time
ββ professor
Exams
ββ id (PK)
ββ user_id (FK)
ββ course_id (FK)
ββ exam_date
ββ duration
ββ room_id (FK)
-- GebΓ€ude und RΓ€ume
Buildings
ββ id (PK)
ββ name
ββ code
Rooms
ββ id (PK)
ββ building_id (FK)
ββ room_number
ββ room_name
ββ floor
ββ capacity
-- Soziale Features
Friends
ββ id (PK)
ββ user_id (FK)
ββ friend_user_id (FK)
CustomHours
ββ id (PK)
ββ user_id (FK)
ββ title
ββ start_time
ββ end_time
ββ location
ββ location_typePOST /v1/register - Benutzerregistrierung
POST /v1/login - Login und Session-Erstellung
POST /v1/logout - Session beenden
POST /v1/reset-request - Passwort-Reset anfordern
POST /v1/reset-confirm - Passwort zurΓΌcksetzen
GET /v1/verify - E-Mail-Verifizierung
GET /v1/user/profile - Benutzerprofil abrufen
PUT /v1/user/profile - Profil aktualisieren
PUT /v1/user/zenturie - Zenturie setzen
GET /v1/zenturien - Alle Zenturien abrufen
GET /v1/schedule - Eigene Events abrufen
GET /v1/schedule/friend - Friend-Schedule abrufen
POST /v1/custom-hours - Custom Hour erstellen
GET /v1/custom-hours - Custom Hours abrufen
DELETE /v1/custom-hours/:id - Custom Hour lΓΆschen
GET /v1/rooms - Alle RΓ€ume abrufen
GET /v1/rooms/:id - Raumdetails abrufen
GET /v1/rooms/free - Freie RΓ€ume finden
GET /v1/exams - Eigene Klausuren abrufen
POST /v1/exams - Klausur erstellen
DELETE /v1/exams/:id - Klausur lΓΆschen
GET /v1/friends - Freundesliste abrufen
POST /v1/friends - Freund hinzufΓΌgen
DELETE /v1/friends/:id - Freund entfernen
GET /v1/search - Globale Suche
GET /v1/courses - Alle Kurse abrufen
GET /v1/calendar/subscribe/:uuid - iCal-Feed abrufen
Alle geschΓΌtzten Endpunkte erfordern eine gΓΌltige Session-ID, die als Query-Parameter session_id oder im Body ΓΌbergeben wird.
- Login mit E-Mail und Passwort
- Backend generiert UUID-Session und speichert sie
- Client erhΓ€lt Session-ID und speichert sie im LocalStorage
- Bei jedem Request wird Session-ID mitgesendet
- Backend validiert Session und prΓΌft Ablaufdatum
Alle API-Antworten folgen einem einheitlichen Schema:
Erfolg (200 OK)
{
"data": { ... },
"message": "Success"
}Fehler (4xx, 5xx)
{
"error": "Error message",
"detail": "Detailed error description"
}Aktuell gibt es kein Rate Limiting, dies ist fΓΌr zukΓΌnftige Versionen geplant.
NORA wurde entwickelt von einem engagierten Team von Nordakademie-Studierenden:
- @wielauritz - Frontend Development, UI/UX Design
- @FinnK04 - Backend Development, Database Design
- @aylinbmp - Design, Concept
- @V3rkz - Testing
Dieses Projekt entstand im Rahmen des NORDAKADEMIE Hackathon 2025 und wird seitdem kontinuierlich weiterentwickelt.
Wir freuen uns ΓΌber BeitrΓ€ge zur Verbesserung von NORA!
- Fork das Repository
- Erstelle einen Feature-Branch (
git checkout -b feature/AmazingFeature) - Commit deine Γnderungen (
git commit -m 'Add some AmazingFeature') - Push zum Branch (
git push origin feature/AmazingFeature) - Erstelle einen Pull Request
- Klare Beschreibung: ErklΓ€re ausfΓΌhrlich, was der PR macht und warum
- Kleine, fokussierte Γnderungen: PRs sollten eine spezifische Funktion/Bugfix adressieren
- Code-QualitΓ€t: Halte dich an den bestehenden Code-Stil
- Tests: Stelle sicher, dass bestehende FunktionalitΓ€t nicht beeintrΓ€chtigt wird
- Dokumentation: Aktualisiere die README, falls notwendig
Alle Pull Requests werden von den Core-Entwicklern intensiv geprΓΌft:
- Code Review: ΓberprΓΌfung auf QualitΓ€t und Best Practices
- Funktionstest: Validierung der implementierten Features
- Security Review: PrΓΌfung auf potenzielle SicherheitslΓΌcken
- Performance Check: Analyse der Performance-Auswirkungen
Wichtig: Pull Requests werden nur akzeptiert, wenn sie einen echten Mehrwert bieten und den QualitΓ€tsstandards entsprechen. Die finale Entscheidung liegt bei den Core-Entwicklern.
- Nutze die GitHub Issues fΓΌr Bug Reports und Feature Requests
- Bug Reports sollten enthalten:
- Beschreibung des Problems
- Schritte zur Reproduktion
- Erwartetes vs. tatsΓ€chliches Verhalten
- Screenshots (falls relevant)
- Browser/System-Informationen
- Feature Requests sollten enthalten:
- Use Case und Motivation
- Vorgeschlagene Implementierung
- MΓΆgliche Alternativen
Copyright Β© 2025 NORA Development Team
Dieses Projekt ist unter einer proprietΓ€ren Source-Available Lizenz verΓΆffentlicht.
β Erlaubt:
- Einsehen des Quellcodes
- Eigene Kopien fΓΌr persΓΆnliche, nicht-kommerzielle Zwecke
- BeitrΓ€ge ΓΌber Pull Requests
β Nicht erlaubt ohne schriftliche Genehmigung:
- Kommerzielle Nutzung
- Weiterverbreitung
- Modifikation fΓΌr andere Projekte
- Verwendung in anderen Produkten oder Services
FΓΌr die vollstΓ€ndige Lizenz siehe LICENSE Datei.
FΓΌr Anfragen bezΓΌglich kommerzieller Nutzung oder spezieller Lizenzen, kontaktiere bitte die Core-Entwickler.
FΓΌr Fragen, Anregungen oder Support:
- E-Mail Adresse: team@nora-nak.de
- GitHub Issues: @wielauritz/nora/issues
- Pull Requests: @wielauritz/nora/pulls
Entwickelt mit β€οΈ fΓΌr die NORDAKADEMIE
Website β’ GitHub β’ Report Bug
