Layout-Fix Satz-Zeile (mobil), README knapp/oeffentlich, Roadmap aktualisiert
Image bauen und in die Registry schieben / build (push) Successful in 6s
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:
1 parent
1759da8437
commit
7c5045cec8
4 files changed
+92
-136
No files matched your search
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user