Files

3.8 KiB

Beisel Rallye Graz 🍺

Projektübersicht

Interaktive Website für eine Bier-Rallye durch 17 Grazer Bezirke. Teilnehmende tragen bei jedem besuchten Bezirk das entsprechende Beisel (Bierlokal) ein und verfolgen ihren Fortschritt.

Konzept

  • Ziel: Alle 17 Grazer Bezirke besuchen
  • Aktivität: Für jeden Bezirk ein lokales Beisel finden und eintragen
  • Zeitrahmen: 24 Stunden Rallye
  • Multi-User: Mehrere Teilnehmer können parallel teilnehmen

Technologie-Stack

  • Backend: Express.js (Node.js)
  • Frontend: EJS Templates + Vanilla JavaScript
  • Datenbank: SQLite (beisel_rally.db)
  • Styling: Custom CSS mit Wirtshaus-Theme
  • Deployment: Nginx Reverse Proxy auf aufeins.click.jetzt

Architektur

beisel-rally/
├── index.js              # Express Server (Port 8083)
├── package.json          # Dependencies & Scripts
├── beisel_rally.db       # SQLite Datenbank
├── server.log            # Laufzeit-Logs
├── PROJECT.md            # Diese Dokumentation
├── public/
│   └── css/
│       └── style.css     # Responsive Styling
└── views/
    └── index.ejs         # Haupttemplate mit Client-Side Logic

Datenbank-Design

Tabelle: rally_logs

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
);

Zweck: Server-seitige Speicherung aller Rallye-Einträge für persistente Multi-User-Fähigkeit.

API-Endpunkte (geplant)

Aktuelle Situation

Derzeit wird nur localStorage im Browser genutzt. Die SQLite-Datenbank ist vorhanden, wird aber nicht integriert.

Zu implementierende Endpunkte:

  • POST /api/visit - Neuen Bezirk besuchen
  • GET /api/status/:username - Fortschritt abrufen
  • GET /api/all-users - Alle Teilnehmer anzeigen
  • DELETE /api/reset/:username - Reset für User

Deployment

Nginx Konfiguration

server {
    listen 443 ssl;
    server_name aufeins.click.jetzt;
    
    ssl_certificate     /etc/letsencrypt/live/aufeins.click.jetzt/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/aufeins.click.jetzt/privkey.pem;
    
    location / {
        proxy_pass http://192.168.0.187:8083;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Server Starten

cd /home/claw/.openclaw/agents/wisp/workspace/beisel-rally
node index.js
# Server läuft auf http://localhost:8083

Entwicklungs-Status

Abgeschlossen

  • Grundlegende Frontend-Struktur
  • Responsive Design mit Mobile-Support
  • User-Auswahl und -Verwaltung (localStorage)
  • Fortschrittsanzeige
  • Wirtshaus-Theme Implementierung

Offene Punkte

  1. SQLite-Integration - API-Endpunkte für Datenbank-Zugriff
  2. Server-Datenpersistenz - localStorage → Server-Side Storage
  3. Deployment - Backend-Server auf 192.168.0.187:8083 starten
  4. Sicherheit - Input Validation, Rate Limiting
  5. Export/Import - Backup-Funktionalität

Nächste Schritte

Kurzfristig (Prio 1)

  • API-Endpunkte für SQLite-Datenbank implementieren
  • Client-Seite anpassen um API zu nutzen
  • Server starten und testen

Mittelfristig (Prio 2)

  • Authentifizierung hinzufügen
  • Leaderboard implementieren
  • Export/Import Funktionalität

Langfristig (Prio 3)

  • Mobile App (Progressive Web App)
  • Social Features (Teilen, Einladungen)
  • Anbindung an bestehende Beisel-Datenbank

Kontakt & Credits

Projekt erstellt von Gregor. Entwicklung durch Wisp (AI Coding Agent).

Domain: aufeins.click.jetzt
Server: 192.168.0.187:8083
Gitea: http://gitea.click.jetzt:3000/clawdia/beisel-rally


Prost! 🍻