7d464c21eb739d8e54ff5656212dd37b4afa04fd
- VAPID-based push via web-push package - push_subscriptions table: endpoint + keys per user (upsert on conflict) - GET /api/push/vapid-key — public key for subscribe flow - POST/DELETE /api/push/subscribe — store/remove subscription - POST /api/push/test — manual test notification - Hourly scheduler: notifies users day before homework due + countdown expires - SW: push event handler shows notification; notificationclick opens /app - Settings: Push section with enable/disable/test buttons, auto-detects browser support and VAPID availability
Klassenportal
Privates Dashboard für Schulklassen. Stundenplan, Hausaufgaben, Noten, Fehlzeiten, Klassenkalender und Chat an einem Ort.
Läuft unter ifb.lol.
Stack
Node.js 20, Express 5, SQLite über better-sqlite3, Vanilla JS im Frontend. Kein Buildschritt. Auth per JWT im HttpOnly-Cookie, bcrypt, TOTP-2FA. Mail über Resend.
Lokal starten
npm install
cp .env.example .env # JWT_SECRET und RESEND_API_KEY setzen
node index.js
Bindet an 127.0.0.1:3010.
Registrierung
Beschränkt auf @ifb-schulen.com-Adressen (Regex IFB_EMAIL_RE in src/routes.js). Jeder neue Account muss per Mail bestätigt werden. Neue Lehrerkonten landen in einer Admin-Warteschlange.
Layout
index.js Express-Bootstrap
src/auth.js JWT-Sign/-Verify, requireAuth-Middleware
src/db.js SQLite, Schema, Migrationen
src/routes.js Auth, Admin, Chat, Kalender, Tickets, Health
src/teacher.js Lehrerendpoints
src/files.js Dateiablage mit Quota
src/mailer.js Resend-Wrapper
public/ HTML-Seiten (Vanilla JS)
Lizenz
MIT. Siehe LICENSE.
Description
Languages
HTML
74.8%
JavaScript
25.2%