Image bauen und in die Registry schieben / build (push) Successful in 6s
- ex-grid: minmax(min(460px,100%),1fr) -> keine 460px-Mindestspalte auf dem Handy mehr; Block und X-Button nicht mehr abgeschnitten - Satz-Zeile: Aktionen (Reset/X) rechtsbuendig per flexiblem Spacer; auf sehr schmalen Handys kompaktere Felder (72px) - README: gekuerzt, bodenstaendiger Ton, interne CI/CD-/Infra-Notizen raus - ROADMAP: Umgesetztes markiert, veraltete Punkte entfernt, gestrafft - Tests: 169 Checks gruen (39+18+52+32+28)
86 lines
2.6 KiB
Markdown
86 lines
2.6 KiB
Markdown
# REKORD
|
|
|
|
Selbstgehosteter Trainings-Tracker für Gym, Laufen und Radfahren. Läuft im
|
|
Browser, speichert auf deinem Server, gehört dir.
|
|
|
|
Eine SQLite-Datei als Zustand, ein Python-Backend aus der Standardbibliothek,
|
|
ein HTML/CSS/JS-Frontend ohne Framework. Kein Cloud-Konto, keine Telemetrie.
|
|
|
|
## Was es kann
|
|
|
|
**Training erfassen**
|
|
|
|
- Gym mit Push/Pull/Legs (frei konfigurierbar), dazu Laufen und Radfahren
|
|
- Eingabe als eine Box: Zahl links, Einheit fest rechts (kg, reps, km, min,
|
|
min/km, bpm, m)
|
|
- Sätze abhaken als "Set n [ ]"; der ganze Button ist klickbar, die Kette
|
|
hakt ohne Lücken ab
|
|
- "Reset-Satz" und "Alles zurücksetzen" holen das letzte abgeschlossene
|
|
Training; optional startet eine Session direkt mit dem letzten Workout
|
|
oder mit den Plan-Gewichten
|
|
- Übungen per Drag & Drop sortieren, Übungen aus anderen Tagen spontan
|
|
hinzufügen
|
|
- Fragezeichen pro Übung: kurze Erklärung (herstellerunabhängig)
|
|
|
|
**Verlauf & Statistik**
|
|
|
|
- "Session starten" / "Session abschließen", mehrere Sessions am Tag
|
|
- Verlauf als Liste oder Wochenübersicht; inline bearbeitbar und löschbar
|
|
- Statistik: bestes Gewicht je Trainingstag, Differenz zur ersten Messung
|
|
|
|
**Ansicht & Einstellungen**
|
|
|
|
- Deutsch und Englisch
|
|
- Themes: Dunkel, System, Hell - plus OLED-Dark-Schalter
|
|
- Akzentfarbe aus zehn Farben, Gewichtseinheit kg/lb, Start-Ansicht wählbar
|
|
- Einstellungen liegen serverseitig, gelten auf allen Geräten
|
|
|
|
**Mehrbenutzer**
|
|
|
|
- Konten mit Kennwort (gehasht), Daten getrennt pro Benutzer
|
|
- Der erste Benutzer ist Administrator und verwaltet Konten und Kennwörter
|
|
|
|
**Daten**
|
|
|
|
- Export/Import als JSON und CSV (Backup, Umzug, Tabellen-Auswertung)
|
|
- Workouts über eine kleine API (`/api/workouts`)
|
|
- Demo-Verlauf (`demo-data.json`) zum Ausprobieren
|
|
|
|
## Starten
|
|
|
|
Python (nur Standardbibliothek):
|
|
|
|
```bash
|
|
python3 server.py 8080
|
|
```
|
|
|
|
Oder Docker:
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Danach im Browser: `http://<host>:8080/`. Beim ersten Start führt ein kurzer
|
|
Wizard durch Sprache, Einzel- oder Mehrbenutzermodus und Darstellung.
|
|
|
|
## Plan anpassen
|
|
|
|
Übungen, Sätze, Gewichte und Erklärungen stehen in `config.json` - ohne
|
|
Code-Eingriff. Schema: [TECH.md](TECH.md).
|
|
|
|
## Daten
|
|
|
|
- Alles liegt in `data/state.db` (SQLite) - backupbar, überlebt Neustart und
|
|
Container-Rebuild
|
|
- Datenverzeichnis per `TRAINING_STATE_DIR` frei wählbar
|
|
- Keine externen Dienste, keine Telemetrie
|
|
|
|
## Mehr
|
|
|
|
- [TECH.md](TECH.md) - Architektur, API, Datenmodell
|
|
- [DESIGN.md](DESIGN.md) - Design-Sprache (Tokens, Komponenten, Anti-Patterns)
|
|
- [ROADMAP.md](ROADMAP.md) - geplante Erweiterungen
|
|
|
|
## Lizenz
|
|
|
|
AGPL-3.0. Siehe `LICENSE`. |