578dd4eab9
- Replace INFO1 brand with Klassenportal everywhere (titles, nav, emails, TOTP issuer, recovery codes) - Update domain from info1.simon0x.xyz to info1.ifb.lol - Remove E2EE claims (e2ee.js was deleted, claims were false) - Add GET /api/health endpoint (DB check + uptime) - Add live server status section to landing page - Fix README: domain, title, layout table
1.2 KiB
1.2 KiB
Klassenportal
Privates Dashboard für Schulklassen. Stundenplan, Hausaufgaben, Noten, Fehlzeiten, Klassenkalender und Chat an einem Ort.
Läuft unter info1.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.