modes
4Build, base, restore, pause. Pause has no exercises. Fifteen-minute cap in the plan engine.
HAAM produktutgåva · Today’s session
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.

modes
4Build, base, restore, pause. Pause has no exercises. Fifteen-minute cap in the plan engine.
cardiac warning
HoldA cardiac symptom in the check-in pauses training. Swaps cannot remove the hold.
web host
Democompass.haam.co is an Expo web export over fixture data.
plan engine
LocalbuildDailyPlan is deterministic. Covered by Node unit tests.
The job
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
The public host is the demo path. HealthKit exists in source and is unverified on a signed device in the evidence file.
01
Sleep, energy, soreness, symptoms, available minutes, and equipment. The plan is only as current as this input.
02
The engine chooses build, base, restore, or pause from the check-in. Cardiac warning forces pause and an empty exercise list.
03
The session shows why it landed there. Equipment swaps can filter exercises. They cannot lift a safety hold.
04
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
compass.haam.co
Safety
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.
Transparency
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.
Claim boundary
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.
The working stack
Engine
Local, deterministic, unit-tested. Cardiac hold short-circuits exercises.
Runtime
React Native 0.86, React 19. Web export is the public host.
Sources
Fixture feed on the web. HealthKit adapter in source, unverified on device here.
Host
Vercel Expo web export. Not production-used as a health product.
In evidence
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
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
Compass loop, sibling classification, claim boundary, plan engine, demo adapter, docs, and unit tests. Direct work, 2026.
Optional analytics. Google Analytics and Clarity load only if allowed; form, email, and chat content are excluded.