- Add deployment section to README (systemd, Docker, nginx reverse proxy) - Add environment variable support to server.py (PORT, PGN_URL, CACHE_TTL) - Update .gitignore for Python artifacts and lara-chess directory - Improve board/navigation UX in app.js (userScrolledMoves tracking, updateClocks function, better game switching)
4.2 KiB
🏆 Lara Kiesewetter – Live Schachturnier
Live-Überwachung von Lara Kiesewetters Partien bei der ODJM (Offene Deutsche Jugendmeisterschaft) 2026. Die App lädt automatisch PGN-Daten von der Deutschen Schachjugend, zeigt das aktuelle Spielbrett an und listet alle Partien von Lara.
Features
- Live-Brett – Visuelle Darstellung der aktuellen Partie mit chessboard.js
- Spielerinfo – Anzeige von Namen, ELO und Schachuhr beider Spieler
- Zugliste – Alle Züge der aktuellen Partie mit Klick-Navigation
- Alle Partien – Übersicht aller Runden mit Lara; Klick zum Wechseln
- Live-Erkennung – Automatische Erkennung laufender (unterminierter) Partien
- Auto-Refresh – Aktualisiert die Daten alle 60 Sekunden
- Proxy-Server – Lokaler Python-Server mit PGN-Caching und CORS-Unterstützung
Projektstruktur
├── app.js # Hauptlogik (Brett, UI, Auto-Refresh)
├── index.html # HTML-Grundgerüst
├── style.css # Dark-Theme-Styling
├── pgn-parser.js # PGN-Parser (Header + Züge extrahieren)
├── server.py # Lokaler Proxy-Server (Python 3)
├── cache/ # PGN-Cache (wird automatisch angelegt)
└── lara-chess/ # (optional – reserviert für Erweiterungen)
Setup
Voraussetzungen
- Python 3.6+ für den Proxy-Server
- Browser (Chrome, Firefox, Edge)
Installation & Start
-
Proxy-Server starten:
python server.pyDer Server läuft auf
http://localhost:8111. -
Öffne die App im Browser:
http://localhost:8111(Der Server serviert auch die statischen Dateien.)
Ohne Proxy (direkter Dateizugriff)
Öffne index.html direkt im Browser. Hinweis: Der CORS-Proxy (server.py) muss trotzdem laufen, da der PGN-Endpunkt keine CORS-Header setzt.
Technik
| Komponente | Technologie |
|---|---|
| Schachbrett | chessboard.js |
| Schachlogik | chess.js |
| UI | HTML, CSS, Vanilla JS |
| Proxy-Server | Python http.server (ohne externe Abhängigkeiten) |
| PGN-Quelle | deutsche-schachjugend.de (ODJM 2026) |
Deployment
Die Anwendung kann als eigenständiger Server betrieben werden.
Produktivbetrieb (systemd – Linux)
# Service-Datei erstellen
sudo tee /etc/systemd/system/lara-chess.service <<EOF
[Unit]
Description=Lara Kiesewetter Live Schachturnier
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/lara-chess
ExecStart=/usr/bin/python3 /opt/lara-chess/server.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# Aktivieren und starten
sudo systemctl daemon-reload
sudo systemctl enable --now lara-chess
Die App läuft dann auf http://SERVER_IP:8111.
Docker
# Dockerfile
FROM python:3-slim
WORKDIR /app
COPY . .
EXPOSE 8111
CMD ["python", "server.py"]
docker build -t lara-chess .
docker run -d --name lara-chess -p 8111:8111 --restart unless-stopped lara-chess
Reverse Proxy (nginx)
server {
listen 80;
server_name chess.example.com;
location / {
proxy_pass http://127.0.0.1:8111;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Umgebungsvariablen (optional)
In server.py können Port und PGN-URL über Umgebungsvariablen überschrieben werden:
| Variable | Default | Beschreibung |
|---|---|---|
PORT |
8111 |
Server-Port |
PGN_URL |
(siehe server.py) | Quelle der PGN-Daten |
CACHE_TTL |
30 |
Cache-Gültigkeit in Sekunden |
Konfiguration
Die wichtigsten Konstanten in app.js:
const PGN_URL = 'https://www.deutsche-schachjugend.de/2026/odjm-d/partien/gesamt-utf8.pgn';
const REFRESH_INTERVAL = 60000; // Auto-Refresh alle 60s
const PLAYER_NAME = 'Kiesewetter, Lara';
Im server.py lässt sich der Cache-TTL anpassen:
CACHE_TTL = 30 # Sekunden