Layout-Fix Satz-Zeile (mobil), README knapp/oeffentlich, Roadmap aktualisiert
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)
This commit is contained in:
AI-Agent committed 2026-10-05 11:24:51 +00:00
1 parent 1759da8437
commit 7c5045cec8
4 files changed
+92 -136

No files matched your search

+37 -87
View File
@@ -1,135 +1,85 @@
# REKORD
**Rekord & Record: dein Training, festgehalten.**
Selbstgehosteter Trainings-Tracker für Gym, Laufen und Radfahren. Läuft im
Browser, speichert auf deinem Server, gehört dir.
Ein leichtgewichtiger, selbst gehosteter Trainings-Tracker fürs Gym, Laufen
und Radfahren. Läuft in jedem modernen Browser, speichert auf deiner Platte
und wertet deine Fitnessdaten nicht aus. Kein Abo, kein Konto bei einem
Anbieter, keine Datenkraken.
Eine SQLite-Datei als Zustand, ein Python-Backend aus der Standardbibliothek,
ein HTML/CSS/JS-Frontend ohne Framework. Kein Cloud-Konto, keine Telemetrie.
## Warum REKORD?
- **Kein Vendor Lock-in.** Alles läuft bei dir: Backend auf deinem Server,
Zustand in einer portablen SQLite-Datei. Export jederzeit als JSON oder
CSV, Import genauso. Zieh um oder hör auf - deine Daten gehören dir.
- **Leichtgewichtig.** Python-Standardbibliothek + SQLite im Backend, ein
HTML-, ein CSS-, ein JS-File im Frontend. Kein Framework, kein
Build-Schritt, keine Node-Installation. Läuft auf einem Mini-PC, einem
alten Laptop oder in einem Container.
- **Browserbasiert.** Keine App, kein Store, keine Installation. Aufschlagen,
loslegen - auf jedem Gerät mit Browser.
- **Cross-Device Sync.** Der Zustand liegt serverseitig. Öffne die App am
Handy, am Laptop oder am Desktop-Rechner - es ist derselbe Stand. Mehrere
Benutzer mit eigenen Konten und getrennten Daten sind eingebaut.
- **UX zuerst.** Sätze eintragen mit einer Box (Zahl + Einheit in einem
Feld), Set-Kette durch Abhaken, "Alles zurücksetzen", Verlauf inline
bearbeiten, Wochenübersicht, Statistik mit Differenz zur ersten Messung.
Der Tracker reibt sich nicht in den Weg zwischen dich und die Übung.
- **Dein Take aufs Aufzeichnen.** Die App zeichnet auf - Gewichte, Reps,
Cardio-Felder - und zeigt die Entwicklung über die Zeit. Sie verkauft
nichts, personalisiert nichts und schickt nichts nach Hause.
- **Open Source.** AGPL-3.0. Nachvollziehbar, erweiterbar, auditierbar.
## Features im Überblick
## Was es kann
**Training erfassen**
- Gym mit Push/Pull/Legs (frei konfigurierbar) plus Laufen und Radfahren
- 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)
- Set-Abhaken als "Set n [ ]": der ganze Button ist klickbar, das Set hakt
eine Kette ab - ohne Lücken
- Reset-Satz und "Alles zurücksetzen" laden das letzte abgeschlossene
Training
- Vorbefüllung beim Start (optional): "Letztes Training vorbefüllen" oder
"Plan-Gewichte vorbefüllen" (startKg aus der Config, auch ohne Verlauf)
- 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: Erklärung plus die passende Maschine
- Fragezeichen pro Übung: kurze Erklärung (herstellerunabhängig)
**Sessions & Verlauf**
**Verlauf & Statistik**
- "Session starten" / "Session abschließen", mehrere Sessions am Tag
- Keine Geister: erst abgeschlossene Sessions erscheinen im Verlauf
- Verlauf als Liste oder Wochenübersicht, inline bearbeitbar (Datum, Zeiten,
Abhak-Status, Werte) und löschbar
- Statistik: bestes Gewicht je Trainingstag mit Balken, Differenz zur ersten
Messung
- 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 (Server-Standard und pro Benutzer)
- Farbthema: Dunkel, System (folgt dem Gerät), Hell - plus OLED-Dark-Schalter
- Akzentfarbe aus zehn Farben (inklusive Weiß)
- Gewichtseinheit kg oder lb, Start-Ansicht wählbar
- Einstellungen serverseitig, gelten auf allen Geräten
- 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**
- Eigene Konten mit Kennwort (gehasht), Daten strikt getrennt
- Konten mit Kennwort (gehasht), Daten getrennt pro Benutzer
- Der erste Benutzer ist Administrator und verwaltet Konten und Kennwörter
- Einmaliger Einrichtungs-Wizard beim ersten Start (Sprache, Modus,
Darstellung)
**Daten**
- Export/Import als JSON und CSV (Backup, Umzug, Tabellen-Auswertung)
- Workouts über eine kleine API abrufbar (`/api/workouts`)
- Demo-Daten (`demo-data.json`) zum direkten Ausprobieren
- Workouts über eine kleine API (`/api/workouts`)
- Demo-Verlauf (`demo-data.json`) zum Ausprobieren
## Schnellstart
## Starten
Python (nur Standardbibliothek, kein `pip install`):
Python (nur Standardbibliothek):
```bash
python3 server.py 8080
```
Oder mit Docker:
Oder Docker:
```bash
docker compose up -d
```
Danach im Browser: `http://<host>:8080/`
Danach im Browser: `http://<host>:8080/`. Beim ersten Start führt ein kurzer
Wizard durch Sprache, Einzel- oder Mehrbenutzermodus und Darstellung.
Beim ersten Start führt dich ein kurzer Wizard durch Sprache, Einzel- oder
Mehrbenutzermodus und Darstellung - danach ist die App einsatzbereit.
## Plan anpassen
## Den Übungsplan anpassen
Übungen, Sätze, Gewichte und Erklärungen stehen in `config.json` - ohne
Code-Eingriff. Schema: [TECH.md](TECH.md).
Alle Übungen, Sätze, Gewichte, Maschinen und Erklärungen stehen in
`config.json` - ohne Code-Eingriff. Das komplette Schema steht in der
[technischen Dokumentation](TECH.md).
## Automatischer Build (CI/CD)
Ein Push auf `main` baut automatisch ein Docker-Image und legt es in der
Gitea-Registry ab (`git.somantis.net/j4stmarkus/trainingsplan`). Dafür läuft
ein Gitea-Actions-Runner auf dem Server; die Workflow-Datei liegt unter
`.gitea/workflows/build-image.yml`. Die CasaOS-Installation
(`docker-compose.casaos.yml`) bezieht die App aus diesem Registry-Image.
Fürs lokale Entwickeln bleibt `docker-compose.yml` mit `build: .` bestehen.
## Daten & Privatsphäre
## Daten
- Alles liegt in `data/state.db` (SQLite) - backupbar, überlebt Neustart und
Container-Rebuild
- Datenverzeichnis frei wählbar (`TRAINING_STATE_DIR`)
- Keine externen Dienste, keine Telemetrie, keine Analyse deiner Daten
- Datenverzeichnis per `TRAINING_STATE_DIR` frei wählbar
- Keine externen Dienste, keine Telemetrie
## Roadmap
## Mehr
Die geplante Weiterentwicklung (Übungskatalog in der App bearbeiten,
herstellerunabhängige Info-Texte mit Bildern/Schritten, Plugin-System mit
Ollama/Cloud-Coach, Wearable-Import, CLI-Harness) steht in
[ROADMAP.md](ROADMAP.md).
## Design
Die verbindliche Design-Sprache (Tokens, Komponenten, Zustaende, Anti-
Patterns) steht in [DESIGN.md](DESIGN.md) - wiederverwendbar für weitere
Projekte.
- [TECH.md](TECH.md) - Architektur, API, Datenmodell
- [DESIGN.md](DESIGN.md) - Design-Sprache (Tokens, Komponenten, Anti-Patterns)
- [ROADMAP.md](ROADMAP.md) - geplante Erweiterungen
## Lizenz