📌 Co musisz zrobić TERAZ
✅ iPhone install DONE (2026-05-20 19:31)
Cable connected — wszystkie 100+ commits dziś aktywne na iPhone
Cold launch app (multitasking swipe-up + reopen)
Verify: Settings > App > "App logs (debug)" — nowy AppLogger visible
1. Test fix: skeleton "Skipped" overwrite bug
Nagraj workout
Settings > Recordings → "Last:" status
✓ "✓ Sent NN KB gzipped" preserved nawet po subsequent retries
Wcześniej: każdy retry overwrote z "Skipped" mimo że success
2. Tailscale protection — alert banner + pre-flight
Jeśli Tailscale OFF na iPhone — banner pojawi się na Today gdy ≥3 failures
Tap "Test PC connection" — manual probe
Jeśli OK → counter clears + auto-retry pending
✓ Pre-flight 2s probe zamiast 30s timeout per failed upload
✓ Banner z 3-step troubleshooting (Tailscale status / toggle / WiFi vs cellular)
3. Hub-Claude komunikacja: Supabase claude_handoff
Otwórz: health-dashboard.f1th4p.workers.dev/handoff?token=...
UI: pending threads między ios ↔ hub ↔ bartek, send/ack buttons
Powiedz Hub-Claude: "switch do Supabase claude_handoff" (instrukcje w HANDOFF.md deprecated notice)
✓ Replaces git-based HANDOFF.md (eliminates race conditions)
Helper na Mac: ./scripts/handoff list/send/ack/resolve
1. Cold launch app (ZAWSZE PO MOIM INSTALL)
Multitasking switcher (swipe-up od dołu, hold)
Swipe-up DailyMe card off screen
Open z home screen ponownie
⚠️ Bez tego app dalej ma stare assets. Wszystkie fixes potrzebują fresh launch.
2. Test fix #1 (PoseFrameRecorder race — 5 min)
Settings → App → "App logs (debug)" → filter "PoseFrame"
Train tab → Push-ups quick start → 1 set (5 reps) → End workout
Wróć Settings → App logs sprawdź ostatnie linie
✓ SUCCESS : start engine=vision → stop building payload — N frames
❌ NADAL BUG : stop returned nil — wasCapturing=false frames=0 (zgłoś)
3. Test fix #2 Phase B (BG upload — survives lock)
Nagraj workout (30s wystarczy) → End
Status: "Queued (background upload — survives lock)..." — NIE czekaj
Zablokuj phone OD RAZU
Czekaj 2-5 min (lub całą noc)
Otwórz app → Settings → App logs → filter "BGUpload"
✓ BGUpload enqueued FILE.mov
✓ BGUpload ✅ FILE.mov uploaded (XX MB) — completed mimo locked screen
4. Auto-detect peak hour (po 14d use)
Używaj app codziennie 1-2 tyg z natural patterns
Po ~20 events morning hours: Settings → Notifications → Daily workout reminder
Sprawdź hint "✨ Suggested anchor: 07:00 [Adopt]"
⏳ Wymaga zebrania min 20 morning events przed pojawi się suggestion
5. Setup habits starter pack (NEW user)
Today → scroll do HabitsInventoryCard (hidden gdy empty inventory)
Jeśli pusty: tap pencil icon (top-right card)
"Starter packs" → wybierz "Sleep stack" lub "Recovery stack"
✓ 3 habits dodane → Today card pokazuje je z streak counters
📲 Tools dla ciebie :
• health-dashboard.f1th4p.workers.dev/test?token=... — ta strona
• .../usage?token=... — live usage analytics
• App: Settings > App logs (real-time debug)
🆕 Today — verify per workflow
SHIPPED
Camera Quick Start auto-launch0b19744 / 9dfd63b
Today → tap chip "Push-ups" (lub Squats, Pike, Diamond)
Powinno: switch do Train tab + auto-start session (camera ON, set 1 active)
✓ Camera ON immediately, "Set 1" timer counting, voice cue "Set 1, ready"
SHIPPED
Skeleton upload status displayd40fe53
Nagraj 30s pushup (Train → Push-ups quick start)
End workout → wait few seconds dla upload
Settings > Recordings → scroll do "Upload skeleton keypoints" toggle
✓ "Last: ✓ Sent ~87 KB · HH:MM" zielony checkmark
⚠ "⚠ Skipped: no frames" gdy pose detection failed
○ "Off — toggle disabled" gdy toggle OFF (mimo że myślałeś że ON)
SHIPPED
Multi-region pain log z severity color5107b12 / 9bf988a
Today → tap "Log pain / discomfort" button
Tap 2-3 chips z różnych grup (np. Left knee, Lower back, Left shoulder)
Każdy chip ma slider — ustaw różne severity (yellow 1-3, orange 4-6, red 7+)
Sprawdź ludziku (figure.stand) — kolory glow per region matching severity
Tap "Log all (3)" → save
✓ History pokazuje 3 entries z różnymi kolorami
SHIPPED
"All good today" baseline + body-check protocols9bf988a
Pain map → tap zielony "All good today" button (zamiast chips)
Tap "How to check if it hurts?" expandable section
6 self-check protocols (single-leg stand, toe touch, etc.)
✓ Entry "All clear" zapisany z severity=0
✓ Po 3 dniach all-clear w rzędzie → PainLogStatusButton zmieni state na green "Clear streak · 3d"
SHIPPED
Caffeine entry edit (time + mg + delete)bf0385e / 264ca24
Today → tap Espresso / Full cup chip → entry zapisany
W "Today (N)" list pod chips → tap entry
DrinkEntryEditSheet: zmień time (cofnij godzinę), mg, lub delete
✓ Caffeine total przeliczone live w CaffeineBudgetCard
SHIPPED
Adaptive ★ badge dla most-tapped preset6017f48 / 32c083a
Tap ten sam drink preset 3+ razy w ciągu kilku dni (Espresso × 5)
Wracaj na Today co dzień
✓ Po 3 tapach na Espresso → ★ yellow badge + thicker yellow border pojawia się na tym chipie
SHIPPED
Adaptive Today reorder by dwell (14d)fbe7b2e
Używaj normalnie 14 dni z natural patterns
Cards (Drink / Camera / Caffeine) reorderują się based na total dwell time
✓ Najbardziej-engaged card surface na góra group
⚠ Cold-start (<10 events) = default order (Drink → Camera → Caffeine)
SHIPPED
HabitsInventory starter packsec595b9
Today → HabitsInventoryCard tap pencil icon (gdy empty inventory)
"Sleep stack" / "Recovery stack" / "Mind stack" — tap 1 z nich
✓ 3 habits dodane automatycznie z dedup (jeśli już istnieje, skip)
SHIPPED
Habit "at risk" highlight (streak ≥3 + ≥18:00 nieukończony)c6d0b33
Mieć habit z ≥3-day streak
NIE check today, czekać do 18:00+
✓ HabitsInventoryCard row dla tego habitu pokazuje orange "at risk" badge + red flame + orange background
SHIPPED
Smart combos w AddMealSheet0d1d12f
Loguj te same 2-3 items razem ≥3 razy w 30d (np. Espresso + Whey + Banana)
Add new meal → sekcja "Often together" pojawia się
✓ Tap combo → both items added do current sheet
SHIPPED
Auto re-parse legacy shake/meal0bdb205 / 9bcd718
MealsView → tap old entry "10g kreatyna + 30g whey + 250ml mleko"
AddMealSheet edit mode otwiera się
Po 2-5s composite item zastąpiony LLM-split items
✓ 3 separate items z proper grams + macros
SHIPPED
Watch habit check (1-tap z zegarka)d3a1d5f
Apple Watch → DailyMe app
Tap zielony "Habit ✓" button (po Quick add section)
✓ iPhone toggle primary pending habit (highest streak, unchecked today)
✓ Status na Watch "✓ Habit done"
SHIPPED
Anchor time suggestion z usage datab2cdc27
Używaj app codziennie ~7:00 przez 2 tyg (≥20 events morning hours)
Settings > Notifications > Daily workout reminder
✓ Hint "✨ Suggested anchor: 07:00 [Adopt]"
✓ Tap Adopt → anchor zmieni się + reschedule notification
SHIPPED
Usage live dashboard (Europe/Warsaw TZ)62fd536
Otwórz: health-dashboard.f1th4p.workers.dev/usage?token=…
Auto-refresh 30s
✓ Total events, top 15 by count, hour-of-day histogram (PL czas), weekday distribution, recent timeline 100
⏱ Time buckets dla each event reflect Europe/Warsaw NIE UTC
SHIPPED
Pain chronic pattern + clear streak signalbc0a109 / 665ef55
Log same region (e.g. Left knee) ≥3× w 14d z severity ≥4
OR log "All clear" 3+ consecutive days
⚠ Chronic: red "Pattern: Left knee ×4 (avg 5.5/10)" w PainLogStatusButton
✓ Clear streak: green "Clear streak · Nd" gdy ≥3 consecutive clear days
SHIPPED
🐛 Fix #1: PoseFrameRecorder race conditionb3afaf0
Settings > App > "App logs (debug)" → filter "PoseFrame"
Train tab → Push-ups quick start → 1 set → End
Sprawdź logger:
[PoseFrame] start engine=vision — capturing frames…
[PoseFrame] stop building payload — N frames (success)
✓ Settings > Recordings → "Last: ✓ Sent ~87 KB" zielony
❌ Gdy nadal "Skipped: not capturing" → zgłoś, refactor pójdzie głębiej
SHIPPED
🐛 Fix #2 Phase B: background URLSession (survives lock/suspend/kill)4e02547
End workout — status "Queued (background upload — survives lock)..."
Zablokuj phone OD RAZU, nawet zabij app
iOS kontynuuje upload w tle indefinitely (1h timeout per file)
Settings > App logs filter "BGUpload" po następnym otwarciu app
✓ [BGUpload] enqueued FILE.mov
✓ [BGUpload] ✅ FILE.mov uploaded (XXB) — upload completed w background
✓ [BGUpload] iOS resumed app dla session: ... — iOS wakes app post-completion
SHIPPED
iOS → Hub workout_meta multipart9f167e6
Nagraj workout normalnie
Settings > App logs filter "Upload"
✓ [Upload/BGUpload] attached workout_meta: NB
Hub side: D:\health-recordings\{stem}.workout_meta.json + .analysis.json ma workout_meta: {...} NOT null
SHIPPED
Friday reflection notificationa54d6f4
Settings > Notifications > enable "Weekly reflection reminder"
Friday ≥19:00 LUB Saturday rano
Push: "Week wrap — 2 min reflection"
⏳ Wymaga aktualnego dnia (Friday eve / Sat morning), throttle 1× per Sat-Fri week
SHIPPED
Time-aware Today greetingbe23358
Otwórz Today o różnych porach
✓ Header pokazuje "Morning, Bartek" / "Evening wind-down" / etc. matching current hour
SHIPPED
Habits long-press → Ask coache58d566
Today → HabitsInventoryCard
Long-press habit row
Tap "Ask coach"
✓ AskCoach opens z context-aware query (at-risk / high-streak / normal variants)
SHIPPED
Plan tab — CapacityBuckets tap-to-coach93eebd5
Plan tab → CapacityBucketsCard (visible gdy workouts > 0 w 14d)
Tap individual bucket cell (e.g. "Power · missing")
LUB tap "Ask coach dla missing buckets" footer button
✓ AskCoachSheet opens z pre-filled query
✓ LLM auto-sends → odpowiedź z bucket-specific exercise suggestion
SHIPPED
🐛 Fix #2: auto-retry pending uploads (scenePhase.active)21f06de
Nagraj workout, lockuj phone PRZED upload finished
iOS po 30s kill upload → file zostaje pending
Otwórz app później (godziny, dzień — wszystko jedno)
Settings > App logs filter "Upload"
✓ [Upload] auto-retry N pending recording(s)
✓ [Upload] auto-retry FILE.mov: ✅ Sent (X MB · Ys)
SHIPPED
In-app logger + auto-push do Supabasec7c8bdd
Settings > App > "App logs (debug)" → real-time viewer
Filter tag chips na górze (All / PoseFrame / Upload / ...)
Menu (⋯) > "Ship logs to Supabase now" — manual trigger
Claude może query: scripts/sb "SELECT ts, tag, message FROM app_logs WHERE ts > NOW() - INTERVAL '1 hour' ORDER BY ts DESC"
✓ Auto-flush co 5s (debounce) + on scenePhase.background
✓ Real-device only (sim skipped)
⏳ Pending verification (Hub-side)
PENDING HUB
Skeleton upload end-to-end630ef80 / Hub 7305b52
iOS: nagraj workout (skeleton toggle ON default)
Console log iOS: [Upload] attached ios_skeleton: NB JSON → MB gzipped
Hub side: D:\health-recordings\{stem}.ios_skeleton.json should appear
Hub side: {stem}.analysis.json ma ios_skeleton: {...} NOT null
⏳ Hub-Claude HANDOFF czeka na pierwsze nagranie post-`d40fe53` build
PENDING HUB
Dashboard /usage shows real-device events11a04fe / b7da718
Use app na fizycznym iPhone (NIE sim)
Tap habit, drink, sheet open, tab switch
Czekaj 30s + scenePhase background
Refresh dashboard /usage
⏳ Events powinny pojawić się: tab_changed, sheet_opened, habit_toggle, drink_quick_log
📋 Test commands (Bartek convenience)
Cold launch + verify install
Multitasking switcher → swipe-up DailyMe app card
Reopen z home screen
Settings > App → Version "0.1.0 (1)"
Verify sim/Catalyst WRITE block
Use app na sim — log meal, habit, pain
Sprawdź Supabase: SELECT COUNT(*) FROM meals WHERE date >= NOW() - INTERVAL '1 hour'
✓ Zero new rows z sim use (real iPhone only writes)
📝 Auto-updated po każdym moim commit. Aktualna wersja: 665ef55.
🐛 Bugs zgłaszaj w chacie — dodam do "Known issues" sekcji.
🔄 Refresh page dla najnowszego state.