Go to file
Lars da803da816
All checks were successful
Deploy Development / deploy (push) Successful in 46s
Build Test / lint-backend (push) Successful in 0s
Build Test / build-frontend (push) Successful in 13s
feat: extract individual values from stage outputs (Issue #47)
FEATURE: Basis-Analysen Einzelwerte
Vorher: stage_1_body → {"bmi": 26.6, "weight": "85.2kg"} (1 Zeile)
Jetzt:  bmi → 26.6 (eigene Zeile)
        weight → 85.2kg (eigene Zeile)

BACKEND: JSON-Extraktion
- Stage outputs (JSON) → extract individual fields
- extracted_values dict sammelt alle Einzelwerte
- Deduplizierung: Gleiche Keys nur einmal
- Flags:
  - is_extracted: true → Wert aus Stage-Output extrahiert
  - is_stage_raw: true → Rohdaten (JSON) nur Experten-Modus

BEISPIEL Stage 1 Output:
{
  "stage_1_body": {
    "bmi": 26.6,
    "weight": "85.2 kg",
    "trend": "sinkend"
  }
}

→ Metadata:
{
  "bmi": {
    value: "26.6",
    description: "Aus Stage 1 (stage_1_body)",
    is_extracted: true
  },
  "weight": {
    value: "85.2 kg",
    description: "Aus Stage 1 (stage_1_body)",
    is_extracted: true
  },
  "stage_1_body": {
    value: "{\"bmi\": 26.6, ...}",
    description: "Rohdaten Stage 1 (Basis-Analyse JSON)",
    is_stage_raw: true
  }
}

FRONTEND: Smart Filtering
Normal-Modus:
- Zeigt: Einzelwerte (bmi, weight, trend)
- Versteckt: Rohdaten (stage_1_body JSON)
- Filter: is_stage_raw === false

Experten-Modus:
- Zeigt: Alles (Einzelwerte + Rohdaten)
- Rohdaten: Grauer Hintergrund + 🔬 Icon

VISUAL Indicators:
↳ bmi        → Extrahierter Wert (grün)
  weight     → Normaler Platzhalter (accent)
🔬 stage_1_* → Rohdaten JSON (grau, klein, nur Experten)

ERGEBNIS:
┌──────────────────────────────────────────┐
│ 📊 Verwendete Werte (8) (+2 ausgeblendet)│
│ ┌────────────────────────────────────────┐│
│ │ weight_aktuell │ 85.2 kg   │ Gewicht ││ ← Normal
│ │ ↳ bmi          │ 26.6      │ Aus St..││ ← Extrahiert
│ │ ↳ trend        │ sinkend   │ Aus St..││ ← Extrahiert
│ └────────────────────────────────────────┘│
└──────────────────────────────────────────┘

Experten-Modus zusätzlich:
│ 🔬 stage_1_body │ {"bmi":...│ Rohdaten││ ← JSON

version: 9.9.0 (feature)
module: prompts 2.4.0, insights 1.7.0
2026-03-26 12:55:53 +01:00
.gitea/workflows ci: fix workflows - prod deploys to bodytrack/, dev to bodytrack-dev/ 2026-03-17 13:11:53 +01:00
backend feat: extract individual values from stage outputs (Issue #47) 2026-03-26 12:55:53 +01:00
docs docs: update CLAUDE.md and add comprehensive membership system documentation 2026-03-20 15:44:29 +01:00
frontend feat: extract individual values from stage outputs (Issue #47) 2026-03-26 12:55:53 +01:00
nginx feat: initial commit – Mitai Jinkendo v9a 2026-03-16 13:35:11 +01:00
.env.example small update 2026-03-18 09:07:08 +01:00
.gitignore fix: AdminUserRestrictionsPage - use exact TierLimitsPage input system 2026-03-20 11:34:48 +01:00
CLAUDE.md docs: Issue #28 completion documentation (v9e) 2026-03-26 10:28:42 +01:00
docker-compose.dev-env.yml fix: add missing /app/data volume for SQLite migration 2026-03-18 12:11:37 +01:00
docker-compose.dev.yml feat: initial commit – Mitai Jinkendo v9a 2026-03-16 13:35:11 +01:00
docker-compose.yml docker-compose.yml aktualisiert 2026-03-19 08:28:30 +01:00
find-container.sh chore: rollback point before unified prompt system refactoring (Issue #28) 2026-03-25 10:42:18 +01:00
README.md feat: initial commit – Mitai Jinkendo v9a 2026-03-16 13:35:11 +01:00
SETUP.md feat: initial commit – Mitai Jinkendo v9a 2026-03-16 13:35:11 +01:00
test-pipeline-api.sh chore: add pipeline system test scripts (Issue #28) 2026-03-25 09:47:58 +01:00
test-pipeline-backend.sh fix: use postgres container for psql commands 2026-03-25 09:54:44 +01:00
test-unified-migration.sh fix: migration 020 SQL syntax - correlated subquery issue 2026-03-25 12:58:02 +01:00

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

  1. Safari öffnen → http://DEINE-IP:3000
  2. Teilen-Button (□↑) → „Zum Home-Bildschirm"
  3. 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)