HAAM-produkter

HAAM produktudgave · Today’s session

Compass

Compass turns a local check-in — sleep, energy, soreness, symptoms, time, equipment — into a session you can read. Build, base, restore, or pause. Pause carries no exercises. The web host uses demo data. It is a general-fitness prototype.

Compass Today view with a full-body foundation session, readiness score, and the reasons for the plan.
Reasons stay attachedDemo data on the web host

modes

4

Build, base, restore, pause. Pause has no exercises. Fifteen-minute cap in the plan engine.

cardiac warning

Hold

A cardiac symptom in the check-in pauses training. Swaps cannot remove the hold.

web host

Demo

compass.haam.co is an Expo web export over fixture data.

plan engine

Local

buildDailyPlan is deterministic. Covered by Node unit tests.

The job

Decide the session for this day, and show why.

I wanted today’s work decided from sleep, energy, soreness, symptoms, time, and equipment, with the reasons visible, and with a way to swap or stop.

A recovery score that does not produce a session still leaves the morning unplanned. A black-box generator hides the judgement. Compass keeps the prescription on the page: mode, duration, exercises, and the hold if it fired.

Diagnosis, treatment, medical-device claims, and genome-driven training are out of the loop.

The morning

Check in. Read the plan. Swap or stop.

The public host is the demo path. HealthKit exists in source and is unverified on a signed device in the evidence file.

01

Make the check-in

Sleep, energy, soreness, symptoms, available minutes, and equipment. The plan is only as current as this input.

02

See the mode

The engine chooses build, base, restore, or pause from the check-in. Cardiac warning forces pause and an empty exercise list.

03

Read the reasons

The session shows why it landed there. Equipment swaps can filter exercises. They cannot lift a safety hold.

04

Keep a local log

The day’s plan can be kept locally. Optional narrative APIs stay off unless someone pastes their own keys, and then they receive summaries, not raw samples.

Design decisions

What had to stay true in the interface.

compass.haam.co

Safety

Pause is empty on purpose.

If the check-in includes a cardiac symptom, safetyHold is true, mode is pause, duration is zero, and exercises is []. Swaps cannot refill that list. I wrote the hold before I wrote the session library.

  • Cardiac symptom → pause with no exercises
  • Warmup and cooldown also empty under the hold
  • Covered by plan-engine unit tests

Transparency

The session has to name its reasons.

A person who already moves a lot still needs to see why today is restore instead of build. The interface keeps the prescription and the inputs in the same glance.

  • Four modes with sleep and energy shift
  • Equipment swap filter that cannot lift the hold
  • Fifteen-minute cap in the engine

Claim boundary

The web host is the demo, and HealthKit stays labelled as source.

compass.haam.co is fixture data. The HealthKit adapter is in the repository. This evidence file does not claim a signed-device run or a TestFlight submit.

  • Demo/fixture feed as the intended web path
  • HealthKit unverified on a signed device here
  • Optional LLM off by default

The working stack

What actually runs.

Engine

buildDailyPlan

Local, deterministic, unit-tested. Cardiac hold short-circuits exercises.

Runtime

Expo 57

React Native 0.86, React 19. Web export is the public host.

Sources

Demo adapter

Fixture feed on the web. HealthKit adapter in source, unverified on device here.

Host

compass.haam.co

Vercel Expo web export. Not production-used as a health product.

In evidence

What a reviewer can check.

01A check-in produces a readable session with mode and reasons

02Cardiac warning yields pause with an empty exercise list

03Equipment swaps cannot remove the safety hold

04The public host can be explored on demo data

Where it stops

Source is waiting on a signed-device run.

HealthKit is implemented in source and was not verified on a signed device in the evidence file. There is no TestFlight submit in this pass. Wearable OAuth and a genome viewer are out.

This is a general-fitness prototype. It is not a medical device, diagnosis, or treatment. No fitness-outcome language belongs here.

HAAM’s role

I wrote the safety hold before I wrote the session.

Compass loop, sibling classification, claim boundary, plan engine, demo adapter, docs, and unit tests. Direct work, 2026.

Help improve this website?

Optional analytics. Google Analytics and Clarity load only if allowed; form, email, and chat content are excluded.