Registers 17 body composition and measurement placeholders with complete metadata: Weight & Trends (5): - weight_aktuell: Latest weight snapshot - weight_trend: 28d delta with direction (increasing/decreasing/stable) - weight_7d_median: 7d median for noise reduction - weight_28d_slope: Linear regression slope (kg/day, 28d window) - weight_90d_slope: Linear regression slope (kg/day, 90d window) Body Composition (5): - kf_aktuell: Latest body fat percentage - fm_28d_change: Fat mass delta (28d) - lbm_28d_change: Lean body mass delta (28d) - waist_hip_ratio: Waist-to-hip ratio - recomposition_quadrant: FM/LBM change classification (optimal/cut_with_risk/bulk/unfavorable) Circumference Deltas (5): - waist_28d_delta: Waist circumference change (28d) - arm_28d_delta: Arm circumference change (28d) - chest_28d_delta: Chest circumference change (28d) - hip_28d_delta: Hip circumference change (28d) - thigh_28d_delta: Thigh circumference change (28d) Summaries (2): - caliper_summary: Body fat text summary (BF% + method + date) - circ_summary: Circumference summary (Best-of-Each strategy) All placeholders with evidence-based tagging: - 22 metadata fields per placeholder (374 total fields) - CODE_DERIVED: Technical fields, formulas from code inspection - DRAFT_DERIVED: Semantic fields from canonical requirements - MIXED: Calculation logic, formulas, thresholds - TO_VERIFY: Architecture layer decisions Critical formulas documented in known_limitations: - Linear Regression: slope = Σ((x - x̄)(y - ȳ)) / Σ((x - x̄)²) - FM/LBM Calculation: FM = weight × (BF% / 100), LBM = weight - FM - Circumference Delta Logic: latest IN window vs. oldest BEFORE window (can span >28d) - Recomposition Quadrants: Sign-based (FM sign × LBM sign → quadrant) - Best-of-Each (circ_summary): Each measurement point shows individually latest value (mixed dates) Known limitations captured: - weight_trend: Zeit-Inkonsistenz (canonical requires 28d, code accepts parameter) - Circumference Deltas: Reference logic can extend beyond window if measurements sparse - FM/LBM: Requires same-date weight + body_fat_pct measurements - Recomposition: No tolerance zone for "stable" (small changes trigger quadrant flips) - Summaries: Text format (canonical recommends structured JSON, kept as-is per NO-CHANGE rule) Evidence distribution: - CODE_DERIVED: 62% (metadata from code inspection) - DRAFT_DERIVED: 18% (from canonical requirements) - MIXED: 15% (formulas, calculation logic) - TO_VERIFY: 5% (architecture decisions) - UNRESOLVED: <1% Registry now contains 31 placeholders total (14 Nutrition + 17 Body). Files: - backend/placeholder_registrations/body_metrics.py (NEW, 1307 lines) - backend/placeholder_registrations/__init__.py (UPDATED, +body_metrics import) Framework: PLACEHOLDER_REGISTRY_FRAMEWORK.md (verbindlich ab 2026-04-02) Change Plan: .claude/task/rework_0b_placeholder/BODY_CLUSTER_CHANGE_PLAN.md Code Inspection: .claude/task/rework_0b_placeholder/BODY_CLUSTER_CODE_INSPECTION.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .gitea/workflows | ||
| backend | ||
| docs | ||
| frontend | ||
| nginx | ||
| .env.example | ||
| .gitignore | ||
| CLAUDE.md | ||
| docker-compose.dev-env.yml | ||
| docker-compose.dev.yml | ||
| docker-compose.yml | ||
| find-container.sh | ||
| README.md | ||
| SETUP.md | ||
| test-pipeline-api.sh | ||
| test-pipeline-backend.sh | ||
| test-unified-migration.sh | ||
BodyTrack
Körpervermessung & Körperfett Tracker – selbst gehostet, PWA-fähig.
Features
- Umfänge & Caliper-Messungen (4 Methoden) mit Verlauf
- Abgeleitete Werte: WHR, WHtR, FFMI, Magermasse
- Verlaufsdiagramme (Gewicht, KF%, Taille, …)
- KI-Interpretationen via Claude (Anthropic)
- Fortschrittsfotos mit Galerie
- PDF & CSV Export
- PWA – installierbar auf iPhone-Homescreen
- Alle Daten lokal auf deinem Server (SQLite)
Schnellstart
1. Voraussetzungen
# Docker & Docker Compose installieren (Ubuntu)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Neu einloggen
2. Projekt klonen / kopieren
mkdir ~/bodytrack && cd ~/bodytrack
# Dateien hierher kopieren
3. API Key setzen
cp .env.example .env
nano .env
# ANTHROPIC_API_KEY=sk-ant-... eintragen
4. Starten
docker compose up -d
App läuft auf: http://DEINE-IP:3000
5. iPhone – Als App installieren
- Safari öffnen →
http://DEINE-IP:3000 - Teilen-Button (□↑) → „Zum Home-Bildschirm"
- BodyTrack erscheint als App-Icon
6. Von außen erreichbar (optional)
# Tailscale (einfachste Lösung – VPN zu deinem MiniPC)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Dann: http://TAILSCALE-IP:3000
Updates
docker compose pull
docker compose up -d --build
Backup
# Datenbank & Fotos sichern
docker run --rm -v bodytrack-data:/data -v bodytrack-photos:/photos \
-v $(pwd):/backup alpine \
tar czf /backup/bodytrack_backup_$(date +%Y%m%d).tar.gz /data /photos
Konfiguration
| Variable | Beschreibung | Standard |
|---|---|---|
ANTHROPIC_API_KEY |
Claude API Key (für KI-Analyse) | – |
Ports
| Port | Dienst |
|---|---|
| 3000 | Frontend (Nginx) |
| 8000 | Backend API (intern) |