Der Abnehm- & Fitness-Tracker dient zur Kontrolle, Auswertung und Motivation beim Abnehmen und fit werden.
Find a file
Tim Schleibach a7a996d85f feat(protocols): AI-Vial-Artworks via Gemini, gecacht (Phase 7 — D2)
- Medication.vialImagePath (Migration add_medication_vial_image)
- vialImageService: Generierung ueber gemini-2.5-flash-image, Prompt enthaelt
  ausschliesslich den Medikamenten-Namen (Backend-Proxy-Regel, keine User-
  Daten an Dritte); Antwort wird Magic-Byte-gesnifft (kein Vertrauen in den
  gemeldeten MIME) und unter UPLOAD_DIR/vials/ gecacht; Guard wie Metadaten-
  Edits: Besitzer bzw. Admin (globale Medikamente nur Admin) + 7 Service-Tests
- Routen: POST /catalogs/medications/:id/vial-image (generieren/erneuern),
  GET dito (Whitelist-MIME, inline, private Cache-Header)
- UI: Compound-Karten zeigen das Artwork statt des SVG-Vials, sobald eins
  existiert; 'Vial-Bild generieren/erneuern'-Button im CatalogManager-Editor
  (nur Peptide, mit Fehleranzeige); Fallback bleibt das prozedurale SVG-Vial

Hinweis: Live-Generierung braucht GEMINI_API_KEY — hier nur gegen Mocks
getestet, der erste echte Aufruf gehoert in den Praxis-Check.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 19:36:08 +02:00
.claude upgrade, deduplication, tech debt reduction 2026-05-15 13:47:30 +02:00
.github test: Coverage-Gate für Services auf pragmatische Schwellen 2026-07-27 23:09:23 +02:00
docs feat(protocols): AI-Vial-Artworks via Gemini, gecacht (Phase 7 — D2) 2026-07-28 19:36:08 +02:00
e2e added main chart with logic 2026-03-03 12:00:34 +01:00
k6 upgrade, deduplication, tech debt reduction 2026-05-15 13:47:30 +02:00
packages feat(protocols): AI-Vial-Artworks via Gemini, gecacht (Phase 7 — D2) 2026-07-28 19:36:08 +02:00
playwright-report added main chart with logic 2026-03-03 12:00:34 +01:00
scripts ops: standalone DB-Backup/Restore-Skripte + Deploy-Rollback-Todos (Phase 8) 2026-07-26 17:21:30 +02:00
test-results added main chart with logic 2026-03-03 12:00:34 +01:00
.dockerignore removed nutrition data from dockerignore, we need them in prod 2026-04-01 16:37:21 +02:00
.env.example security: Tier-1 hardening (Argon2id, rate-limiting, seed/DB) + docs 2026-07-01 13:13:38 +02:00
.gitignore upgrade, deduplication, tech debt reduction 2026-05-15 13:47:30 +02:00
.npmrc security: verify Tier-1 hardening green (typecheck/lint/test/docker) + fixes 2026-07-01 14:26:48 +02:00
.prettierrc initial implementation 2026-03-02 13:08:37 +01:00
backup-local-db.sh added local backup/restore 2026-03-07 14:39:19 +01:00
CLAUDE.md test: Coverage-Gate für Services auf pragmatische Schwellen 2026-07-27 23:09:23 +02:00
deploy.sh added admin function to import nutrition data from excel 2026-04-01 16:26:36 +02:00
docker-compose.registry.yml migrated from SQLite to PostgreSQL; created deployment stuff 2026-03-06 12:55:29 +01:00
docker-compose.yml security: Tier-1 hardening (Argon2id, rate-limiting, seed/DB) + docs 2026-07-01 13:13:38 +02:00
eslint.config.js security: verify Tier-1 hardening green (typecheck/lint/test/docker) + fixes 2026-07-01 14:26:48 +02:00
LICENSE Initial commit 2026-03-02 09:10:06 +00:00
package.json refactor(shared): Plan-Logik + UTC-Datumshelfer nach @weighttracker/shared (B1/B2/B4) 2026-07-28 18:00:07 +02:00
playwright.config.ts added main chart with logic 2026-03-03 12:00:34 +01:00
pnpm-lock.yaml security: verify Tier-1 hardening green (typecheck/lint/test/docker) + fixes 2026-07-01 14:26:48 +02:00
pnpm-workspace.yaml initial implementation 2026-03-02 13:08:37 +01:00
README.md security: Tier-1 hardening (Argon2id, rate-limiting, seed/DB) + docs 2026-07-01 13:13:38 +02:00
tsconfig.base.json initial implementation 2026-03-02 13:08:37 +01:00

Weighttracker Abnehm- & Fitness-Tracker

Der Abnehm- & Fitness-Tracker dient zur Kontrolle, Auswertung und Motivation beim Abnehmen und fit werden.

Features

  • Tägliche Einträge: Gewicht, Körpermaße, Herzdaten, Protein, Food Noise, Verdauung, Notizen
  • Medikamente & Supplemente: Tracking von Peptiden, Supplementen und Medikamenten mit Dosierung
  • Aktivitäten: Kraft- und Cardio-Training mit Dauer
  • Fotos: Fortschrittsfotos (Front, Back, Side) pro Tag
  • Dashboard: Übersicht mit Gewichtsverlauf, Trends und Kennzahlen
  • Multi-User: Registrierung mit Admin-Freigabe, Rollen (ADMIN/USER)
  • Dark Mode: Umschaltbar zwischen Light und Dark Theme

Tech Stack

Bereich Technologie
Frontend React 18, Vite, TypeScript, Tailwind CSS, shadcn/ui
Backend Node.js, Fastify, TypeScript
Datenbank SQLite mit Prisma ORM
Auth Argon2id (@node-rs/argon2) + Session (Oslo.js), RBAC
Charts Recharts
State Zustand (UI), TanStack Query (Server)
Monorepo pnpm Workspaces

Projektstruktur

weighttracker/
├── packages/
│   ├── backend/          # Fastify API Server
│   │   ├── src/
│   │   │   ├── index.ts          # Server Entry Point
│   │   │   ├── routes/           # API Route Handler
│   │   │   ├── services/         # Business Logic
│   │   │   ├── middleware/       # Auth Middleware
│   │   │   └── lib/              # Auth Utilities, Prisma Client
│   │   └── prisma/
│   │       ├── schema.prisma     # Datenbank-Schema
│   │       └── seed.ts           # Test-Daten
│   │
│   ├── frontend/         # React SPA
│   │   ├── src/
│   │   │   ├── pages/            # Route-Seiten
│   │   │   ├── components/       # UI-Komponenten
│   │   │   ├── hooks/            # TanStack Query Hooks
│   │   │   ├── stores/           # Zustand Stores
│   │   │   ├── services/         # API Client
│   │   │   ├── contexts/         # Auth Context
│   │   │   └── lib/              # Utilities
│   │   └── index.html
│   │
│   └── shared/           # Geteilte Schemas & Types
│       └── src/
│           ├── schemas.ts        # Zod Validierungsschemas
│           ├── types.ts          # TypeScript Types
│           └── index.ts
│
├── docs/
│   ├── features/                 # Feature-Dokumentation
│   └── feature_requests/         # Feature-Anforderungen
│
├── pnpm-workspace.yaml
└── package.json

Schnellstart

Voraussetzungen

  • Node.js >= 20.0.0
  • pnpm >= 9.0.0

Installation

# Dependencies installieren
pnpm install

# Datenbank einrichten
cd packages/backend
npx prisma generate
npx prisma migrate dev
npx tsx prisma/seed.ts

# Zurück ins Root
cd ../..

Entwicklung starten

# Beide Server gleichzeitig starten (Backend: 3001, Frontend: 5173)
pnpm dev

Oder einzeln:

# Backend
cd packages/backend
pnpm dev

# Frontend (in neuem Terminal)
cd packages/frontend
pnpm dev

Test-Accounts

Rolle E-Mail Passwort
Admin admin@weighttracker.local admin123
User max@weighttracker.local user1234

Häufige Befehle

# Entwicklung
pnpm dev                    # Alle Dev-Server starten

# Build
pnpm build                  # Alle Packages bauen
pnpm typecheck              # TypeScript prüfen

# Tests
pnpm test                   # Alle Tests
pnpm test:coverage          # Tests mit Coverage

# Code-Qualität
pnpm format                 # Code formatieren (Prettier)
pnpm format:check           # Formatierung prüfen

# Datenbank
cd packages/backend
npx prisma studio           # Prisma Studio öffnen
npx prisma migrate dev --name <name>  # Neue Migration
npx prisma db seed          # Seed-Daten laden

API-Endpunkte

Auth

Methode Pfad Beschreibung
POST /api/auth/register Registrierung
POST /api/auth/login Anmeldung
POST /api/auth/logout Abmeldung
GET /api/auth/me Aktueller User

Tageseinträge

Methode Pfad Beschreibung
GET /api/entries Alle Einträge
GET /api/entries/:date Eintrag nach Datum
POST /api/entries Neuer Eintrag
PATCH /api/entries/:id Eintrag aktualisieren
DELETE /api/entries/:id Eintrag löschen

Medikamente

Methode Pfad Beschreibung
GET /api/medications Alle Medikamente
POST /api/medications Neues Medikament (Admin)
DELETE /api/medications/:id Löschen (Admin)

Admin

Methode Pfad Beschreibung
GET /api/admin/users Alle User
PATCH /api/admin/users/:id/status Status ändern
PATCH /api/admin/users/:id/role Rolle ändern
GET /api/health Health Check

Lizenz

Siehe LICENSE.