| Service | Local URL | Tailscale URL | Public (Funnel) |
|---|---|---|---|
| pose_server | http://localhost:8001 |
http://100.109.129.16:8001 |
https://desktop-e7102ja.tailc2b192.ts.net |
| dashboard | http://localhost:8080 |
http://100.109.129.16:8080 |
via path-mount /webhook/github |
| blender | http://localhost:8002 |
http://100.109.129.16:8002 |
β |
| LM Studio | http://localhost:1234 |
β | β |
POSE_UPLOAD_TOKEN env (User scope). Format: 32-byte base64url. Wymagany dla:POST /upload-recording Β· GET /queue-status Β· POST /retry-failed Β· POST /pose Β· POST /pose-batch Β· GET /frame-skeleton/{filename} Β· GET /version
GH_WEBHOOK_SECRET env. GitHub Settings β Webhooks β Secret matches.YOLO11x-pose ensemble (z opcjonalnym DWPose Wholebody fallback). Spawn analyze_recording.py per uploaded workout. Sweep nightly task (3 AM systemd timer) re-analyzes invalid sidecars. Webhook self-update przez dashboard.
POST /upload-recording β iPhone HealthIOS upload .mov + metadata + optional iOS skeletonPOST /pose-batch β multi-frame pose detection (analyze worker internal)GET /queue-status β analyzing + pending + done + failedPOST /retry-failed β sweep trigger (sweep-nightly task lub manual)GET /frame-skeleton/{stem}.mov?idx=N&n=4 β rendered skeleton frame thumbnails dla iOS UIGET /sessions β per-set grouped workouts (post v18 schema)Health probes per service, restart triggers, GitHub webhook receiver, live progress widget dla pose_server analyses. Migration page /migration z live status.
/ Β· /recordings Β· /sessions Β· /migration Β· /hosts Β· /docs-page
Headless Blender render queue. Default 4.5.8 LTS, version manager dla rΓ³ΕΌnych Blender installs.
Local VL inference dla qwen2.5-vl-7b. Fallback gdy Gemini cloud unavailable. Manual start via tray icon (lub systemctl --user po Linux migration).
VL inference dla form analysis. analyze_recording.py tries Gemini first, falls back do qwen2.5-vl-7b on 429 quota / network error / parse fail.
Post-analyze auto-push workout bundle (video.mov + analysis.json + ios_skeleton.json + thumbnails) do gdrive:health-workouts/{stem}/. Zero marginal cost (Bartek's existing Google One subscription).
Cross-instance Claude coordination (hub-Claude β iOS-Claude β Bartek). Table claude_handoff w project xctrcwunonuggrgnlggw. Scripts: scripts/handoff.ps1 + scripts/sb.ps1.
Mesh VPN dla hub β iPhone β Mac β klient PC. Funnel exposes pose_server :8001 publicly via HTTPS dla iPhone mobile data uploads (bypass DERP relay).
Probe pose_server :8001/health + dashboard :8080/health. Down β Start-ScheduledTask (Windows) lub systemctl restart (Linux). 30s timeout + 3-strike debounce eliminuje false-positive restart pod load.
| Job | Cron | Co |
|---|---|---|
| pc-services-watchdog | every 5 min | Health probe + auto-restart |
| pc-services-sweep-nightly | 03:00 daily | POST /retry-failed (reanalyze invalid sidecars) |
| pc-services-backup-blender-projects | 04:00 daily | Blender projects backup |
| pc-services-cleanup-blender-jobs | Sunday 03:30 | Old Blender render jobs cleanup |
| pc-services-renew-cert | Sunday 02:00 | Tailscale cert renewal (Funnel) |
iPhone HealthIOS pose_server :8001
βββββββββββββββββ βββββββββββββββββββββ
record workout (.mov) ββ
β X-Pose-Auth header
βΌ
Tailscale Funnel HTTPS
desktop-e7102ja.tailc2b192.ts.net
β
βΌ
POST /upload-recording ββ D:\health-recordings\
β β
β spawn analyze_recording.py
β β
β ffmpeg extract 12 frames
β β
β ββ Gemini 2.5 Flash (cloud) ββ
β β (primary VL form-check) β
β βββββββββββ¬βββββββββββββββββββ
β β on 429/error
β βΌ
β qwen2.5-vl-7b (LM Studio fallback)
β β
β motion detection (YOLO pose-batch)
β β
β per-rep VL + kinematics
β β
β sidecar.analysis.json (v22 schema)
β β
β Supabase form_checks upsert ββ iOS Coach
β rclone push β gdrive:health-workouts/{stem}/
β
βΌ poll /analyze-status
iOS shows verdict + per_rep + drill_recommendations