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
41 lines
1.2 KiB
Markdown
41 lines
1.2 KiB
Markdown
# Klassenportal
|
|
|
|
Privates Dashboard für Schulklassen. Stundenplan, Hausaufgaben, Noten, Fehlzeiten, Klassenkalender und Chat an einem Ort.
|
|
|
|
Läuft unter [info1.ifb.lol](https://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
|
|
|
|
```bash
|
|
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](./LICENSE).
|