Isaac Mineo

In development · iOS, Watch & Web

Bodiivo

An adaptive training app that uses your workouts and health data to guide what comes next.

For People following a training plan who want it to respond to what they actually did, without it rewriting the plan behind their back.

Visit Bodiivo (opens in a new tab)Read the source notes

iOS / Apple Watch / Web · Notes reviewed 20 September 2026

Bodiivo Today screen with a Progress reading from four of five signals, a note on missing measurements, and sleep and HRV cards.
Today: what to do, and the signals behind it.

One place for the plan, the workout and what should change next.

The problem

A static plan cannot account for every missed session, conflicting goal or change in performance. An adaptive system creates a different risk: it can make several unexplained changes at once, confuse incomplete data with failure, or rewrite a person’s program without clear permission.

The goal

Bodiivo connects training plans, workouts, nutrition and health observations so the next recommendation can be grounded in what happened. The goal is an understandable next action, not another dashboard of unexplained numbers.

The product

01Screen · Phone

Today: what to do, and the signals behind it.

iOS simulator with the app's demo data; the sleep and HRV values are fixtures, 14 September 2026.

02Screen · Phone

A session: prescribed load, actual reps, effort.

iOS simulator with demo data, 14 September 2026.

03Screen · Phone

Mobility counts named drills, not generic minutes.

iOS simulator with demo data, 20 September 2026.

04Screen · Phone

Changes arrive as proposals with evidence, to accept or decline.

iOS simulator with demo data, cropped below the navigation bar. The demo mixes pounds and kilograms.

05Screen · Phone

What the model knows, and what it still needs.

iOS simulator with demo data, cropped below the navigation bar, 14 September 2026.

Interactive demo Computed in your browser

Would this change go ahead?

A fictional plan, one proposed change. Change the conditions and see who decides.

Proposed change

Barbell back squat

Take the working load from 185 to 190 lb next session.

What kind of change

Your setting

Evidence

Other changes

  1. Quality checks
  2. Pacing
  3. Confidence
  4. Your setting

Outcome

Applied

Your autonomy settings allow the system to adjust exercise load automatically, so this was applied and logged.

Decided at: Your setting

Portfolio demo with fictional training data; not training advice. The decision is computed in this browser by a re-implementation of Bodiivo's documented order: quality checks, then pacing, then confidence, then your autonomy setting. It is checked against the outcomes Bodiivo's own tests record.

Every outcome, as text
  • Adjust exercise load, setting auto, no supporting sessions, nothing else being measured → Held back. Load change needs at least 2 supporting observations; Bodiivo has 0. (proposals.test.ts:595-600)
  • Adjust exercise load, setting auto, 8 supporting sessions, nothing else being measured → Applied. Your autonomy settings allow the system to adjust exercise load automatically, so this was applied and logged. (proposals.test.ts:602-607)
  • Adjust exercise load, setting auto, low confidence, nothing else being measured → Suggested. Your settings would allow this automatically, but Bodiivo is not confident enough in the evidence to make it without you. (proposals.test.ts:609-615)
  • Adjust exercise load, setting confirm, 8 supporting sessions, nothing else being measured → Needs your confirmation. Your autonomy settings require explicit confirmation before the system will adjust exercise load. The change is prepared but not applied. (proposals.test.ts:617-622)
  • Modify nutrition targets, setting auto, 8 supporting sessions, nothing else being measured → Needs your confirmation. Your autonomy settings require explicit confirmation before the system will modify nutrition targets. The change is prepared but not applied. (never-auto-is-never-auto.test.ts:37-47)
  • Adjust exercise load, setting auto, 8 supporting sessions, change budget already in use → Held behind something else. It can proceed once the changes already in flight have had time to show an effect, so the outcome stays attributable. (an-override-is-not-a-bypass.server.test.ts:85-106)
Where this comes from

intelligent-training-os @ 113a3d0

  • src/lib/domain/autonomy.ts:8-160 (modes, defaults, never-automatic, reasons)
  • src/lib/domain/proposals.ts:1227-1282 (decideProposal)
  • src/lib/domain/arbitration.ts (pacing budget)
  • src/routes/_authenticated/settings.tsx:55-59 (setting labels)
  • src/components/bodivo/proposals.tsx:22-47 (disposition labels, unblock wording)
  • src/lib/domain/__tests__/proposals.test.ts:595-622
  • src/lib/domain/__tests__/never-auto-is-never-auto.test.ts:37-87
  • src/lib/domain/__tests__/arbitration.test.ts:248-259
  • src/components/bodivo/proposals.tsx:263 (Held behind something else)

01 · System

How it fits together

Who proposed a change is kept separate from who is allowed to apply it.

Select a part to see what it is responsible for and what it connects to.

Every part and connection, as text
Web, iPhone and Watch Interface

TanStack Start on the web, SwiftUI on iPhone and watchOS.

→ Evidence: logged work

Evidence Data

Workouts, drills, nutrition and HealthKit reads, with imported and fixture data kept distinct.

Trade-off: No data and denied permission look the same in HealthKit, so neither is treated as proof of the other.

→ Proposal: observations

Proposal Service

A rule or model suggests a change, with the observations behind it.

→ Quality checks and arbitration: candidate change

Quality checks and arbitration Gate

Rejects contradictions, weighs goals, and limits how many changes are measured at once.

Trade-off: Lower-priority changes wait, with a stated reason.

→ Autonomy policy: surviving change

Autonomy policy Gate

Conservative defaults ask first; some change types can never become automatic.

→ Web, iPhone and Watch: ask for permission

→ Execution and audit: approved change

Execution and audit Service

Governed writers apply the approved change and record it, then track the outcome.

→ Evidence: outcome to measure

The web application uses React, TanStack Start and TypeScript over Supabase/Postgres, with native SwiftUI iPhone and watchOS clients. Domain modules are kept separate from authenticated service writers. The central change path is evidence → proposal → quality checks → arbitration → autonomy policy → execution → audit → outcome. This makes the authorization boundary distinct from whichever rule or model proposed a change.

02

What it does

  • Governed adaptation

    Conservative defaults require asking or confirmation. Goal-phase, nutrition-target and whole-program rebuild capabilities cannot be silently promoted to automatic changes.

  • Resolve conflicting proposals

    Arbitration checks contradictory changes, tensions between goals and the number of changes already being measured. Lower-priority changes can wait with an explicit reason.

  • Use actual drill evidence

    The current mobility work stores the person’s drill dose and distinguishes performed, partial and skipped work. Generic area minutes are not equivalent to evidence that a specific drill was completed.

  • Read health data carefully

    The iPhone HealthKit adapter requests read access, converts units and supports anchored data flows. Empty results must not be presented as proof the person denied permission.

03

Built with, and why

Client

One product across web, iPhone and Apple Watch.

React · TanStack Start · SwiftUI · watchOS

Backend

Domain modules and owned records.

TypeScript · Supabase · PostgreSQL

Platform

Health data, the watch link, and governed changes.

HealthKit · WatchConnectivity · Governed proposal services

04

Decisions and trade-offs

Giving adaptive software bounded authority

Approach

A proposal must pass quality, goal arbitration and the user’s capability policy before an executor writes it. The policy explicitly prevents several high-impact changes from becoming automatic.

Trade-off

More governance makes the flow harder to wire correctly across clients. A backend capability is not finished until the user can see, accept, reject and understand its result on the relevant device.

Measuring the result of a change

Approach

The sustained-adaptation design distinguishes pre-change observations from later evidence and limits simultaneous interventions.

Trade-off

A software change budget is a practical attribution heuristic, not clinical proof of causation. Sparse or confounded observations lead to a limited conclusion rather than a confident one.

05

Check the work

Links checked 21 September 2026

Ask about Bodiivo

Answers quote the source notes and cite them.