Skip to content

Integrations Roadmap — Seven Tracks

Living checklist for Onset integration work. Staging smoke tests reference ENVIRONMENTS.md.

Status overview

Track Phase Status
Onset Clinic sync A Shipped (v1 loop + check-ins)
Apple Health + cycle B Shipped (menstrual read + import UX)
Watch / Widgets / Shortcuts D Shipped; performance Shortcut fix
Calendar export C Shipped (time blocks export)
Lab PDF polish C Shipped (cloud re-parse, biomarkers, portal badge, tests)
Affiliate / reorder D Shipped (inventory search + UTM; handout affiliate existing)
LastVet outbound E Scaffold (tables + Settings UI; API pending)

Track 1 — Onset Clinic sync

Shipped

  • [x] A1 Clinic share closed loop: claimClinicShare → completePostConnectSync → practitioner refresh + data push
  • [x] A2 Unified Care team hub (CareTeamView) in More
  • [x] A3 protocolEngineV2 = true
  • [x] A4 fitnessProtocols enabled in production builds
  • [x] A5 shared_checkins migration + iOS upload + portal daily journal panel

Staging smoke test

  1. Install Onset TestFlight or Debug build (see ENVIRONMENTS.md)
  2. Claim a clinic org code via Care team → Share with clinic
  3. Confirm patient appears on clinic.theonset.app
  4. Log daily journal → verify Daily journal card on patient detail

Remaining (A+)

  • [ ] Multi-practitioner connection list on iOS
  • [ ] Implement or remove "Full" share level Apple Health copy

Track 2 — Apple Health + menstrual cycle

Shipped

  • [x] B1 menstrualFlow in HealthKit authorization
  • [x] B2 User-initiated import in CycleTrackingEditorSheet
  • [x] B4 Updated Health privacy strings (Info.plist)
  • [x] B5 Authorization probe checks menstrual or step samples

Smoke test

  1. Connect Apple Health on device
  2. Cycle settings → Import period dates from Apple Health
  3. Confirm cycle day/phase updates from imported start date

Track 3 — Watch / Widgets / Shortcuts

Shipped

  • Watch app, widgets, Live Activities, four App Intents (existing)
  • [x] D1 Start performance timer intent sets default performanceEventTime
  • [x] D2 Complete item RoutineItemEntity disambiguation in Shortcuts
  • [x] D3 Interactive widget — Complete next in current block (medium)
  • [x] D6 Widget snapshot refresh after clinic protocol v2 apply

Pending

  • (none for v1 companions polish)

Track 4 — Calendar export

Shipped

  • [x] C1 CalendarExportService + NSCalendarsUsageDescription
  • [x] C2 Settings → Export daily time blocks (Wake/Morning/Midday/Evening/Night)
  • [x] C3 Performance prep one-shot export from prep sheet
  • [x] C4 Per-block toggles + delete exported events

Track 5 — Lab PDF import

Shipped

  • [x] C5 Share lab to practitioner immediately on save (when consent on)
  • [x] C6 Warning when PDF exceeds 3 cloud-parse pages
  • [x] C7 Re-analyze with cloud on empty OCR imports (+ stored page images for repair)
  • [x] C8 Expanded biomarker patterns (ApoB, insulin, ferritin)
  • [x] C9 Portal parse-source badge on shared lab sets
  • [x] C10 OCR fixture tests (LabResultParserTests)

Pending

  • (none for v1 lab polish)

Track 6 — Affiliate / reorder

Shipped

  • [x] D7/D9 Inventory row Find opens neutral product search (Amazon)
  • [x] D8 UTM attribution on inventory product search URLs
  • Clinic invite handout affiliate (existing via affiliate_shortcode on handouts)

Track 7 — LastVet outbound share

Shipped

  • [x] E2 Supabase migrations: patient_aggregator_connections, data_share_events
  • [x] E3/E4 LastVetSyncService scaffold + Settings → Connected health records

Pending (requires LastVet team)

  • [ ] E1 LastVet OAuth server + /me/sync admits source=onset
  • [ ] Token exchange on onset.theonset.app/lastvet/callback
  • [ ] Full payload sync + background refresh
  • [ ] E6 7-day pilot soak

Template for future aggregators: same tables + patient-initiated OAuth + append-only audit.


  1. Clinic loop + lab share-on-save
  2. Protocol v2 + fitness prod (requires TestFlight migration validation)
  3. Health cycle + Calendar + LastVet scaffold
  4. Lab polish + companion polish + commerce

Compliance guardrails

  • Wellness organizer framing only — no advice, scores, or warning language
  • Calendar events use neutral block titles
  • Product search is user-initiated outbound links, not endorsements
  • Clinic channel and aggregator channel stay separate (ADR-001)