# Architektur-Dokumentation: Beisel Rallye 🍺 ## SystemΓΌbersicht ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Browser │──────→│ Express Server │──────→│ SQLite DB β”‚ β”‚ (Client) β”‚ β”‚ (:8083) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↕ ↕ Nginx Reverse Proxy beisel_rally.db (aufeins.click.jetzt) :8083 ``` ## Komponenten ### 1. Frontend (Browser) - **Technologie:** Vanilla JavaScript + EJS Templates - **Responsibility:** UI-Rendering, User-Interaktion, Client-Side Validation - **Speicherung:** Aktuelle Implementierung nutzt localStorage (β†’ wird durch Server API ersetzt) ### 2. Backend (Express.js) - **Port:** 8083 - **Routing:** Express Router - **Datenbank:** SQLite via `sqlite3` Package - **Middleware:** body-parser, CORS (geplant) ### 3. Datenbank (SQLite) - **Datei:** `beisel_rally.db` - **Schema:** Einfache Tabelle `rally_logs` - **Skalierung:** Ausreichend fΓΌr erwartete User-Anzahl (<1000) ## Datenfluss ### Aktuelle Implementierung (localStorage-basiert): ``` User β†’ Browser UI β†’ localStorage β†’ (keine Server-Kommunikation) ``` ### Ziel-Implementierung (Server-seitig): ``` User β†’ Browser UI β†’ API Request β†’ Express Server β†’ SQLite DB ↑ | └─────────────── API Response β†β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## Datenbank-Schema ```sql CREATE TABLE rally_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_name TEXT NOT NULL, district TEXT NOT NULL, beisel_name TEXT NOT NULL, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ); -- Index fΓΌr hΓ€ufige Queries CREATE INDEX idx_user_district ON rally_logs(user_name, district); ``` ## Deployment-Architektur ### Nginx Reverse Proxy - **Funktion:** SSL-Terminierung, Load Balancing (geplant) - **Domain:** aufeins.click.jetzt - **Backend:** 192.168.0.187:8083 - **SSL:** Let's Encrypt automatisch ### Server-Setup ```bash # AbhΓ€ngigkeiten installieren cd /home/claw/.openclaw/agents/wisp/workspace/beisel-rally npm install # Server starten node index.js # Im Hintergrund laufen lassen (optional) nohup node index.js > server.log 2>&1 & ``` ## Skalierungsbetrachtung ### Aktuelle KapazitΓ€ten - **SQLite:** Bis ~1M EintrΓ€ge performant - **Express:** Bis ~100 req/s ohne Optimierung - **Nginx:** Hoch skalierbar ### ErweiterungsmΓΆglichkeiten 1. **PostgreSQL Migration** bei >10k Usern 2. **Redis Caching** fΓΌr statische Daten (Bezirke, Beiseln) 3. **Load Balancing** mit mehreren Express Instanzen 4. **WebSocket** fΓΌr Echtzeit-Updates ## Sicherheitshinweise ### Aktuelle Schwachstellen - ❌ Keine Input Validation auf Server-Side - ❌ Keine Rate Limiting - ❌ SQL Injection mΓΆglich (bei korrekter Implementierung) - ❌ CORS nicht konfiguriert ### Verbesserungen - βœ… Parameterisierte Queries verwenden - βœ… Rate Limiting implementieren - βœ… CORS Headers setzen - βœ… Input Sanitization hinzufΓΌgen - βœ… HTTPS erzwingen (bereits durch Nginx gegeben) --- *Stand: 2026-06-29 | Version: 1.0*