HAAM-produkter

HAAM produktudgave · The small daily things

Consistency

Consistency keeps the small daily things — especially morning and evening brush and floss — on a today list that waits for a tap. The iPhone app and the web companion share a catalog and a confirmation rule. They do not share a database.

Consistency Today view with Brush teeth as the next routine and the morning list waiting for a tap.
Health may hintTwo surfaces, no sync

surfaces

2

SwiftUI/SwiftData on iPhone, and a separate web companion. Same brush and floss catalog.

confirmation

Tap

Completions need a tap or an explicit confirmation. Brushing is never auto-verified from Health.

export

v1

formatVersion 1, covered by tests. Reset clears SwiftData, App Group, Keychain, and notifications in source.

public host

Preview

consistency.haam.co uses the in-browser session fallback. No D1 on that host.

The job

Keep the small care without pretending the phone already knows.

Morning and evening brush and floss are easy to mark done if Health or a busy calendar is allowed to speak for you. I wanted a today list that still waits for a person.

The iPhone can have widgets, Shortcuts, and Live Activities. The web companion can be opened on another machine. They share a catalog and a rule. They do not sync.

Clinical guidance, social accountability, third-party OAuth, and a public App Store listing are not in this evidence.

The day

See today’s list. Confirm what happened. Keep the surfaces honest.

Simulator tests cover catalog, day keys, export version, and undo. HealthKit, widgets, and CloudKit need a signed device and are not claimed as verified here.

01

Open today

The default catalog is morning and evening brush and floss. Parity tests keep the web list aligned with the iPhone list.

02

Let a signal suggest

Health and Calendar may add context. They do not tick the row. Completions require a tap or an explicit confirmation.

03

Undo if you missed

A completion can be taken back. The in-memory SwiftData tests cover that path.

04

Export or reset

Export writes formatVersion 1. Reset is a full local clear on device. The web host does not offer an in-app reset in this pass.

Design decisions

What had to stay true in the interface.

consistency.haam.co

Confirmation

The person remains the source of whether it happened.

A wearable can notice movement. It cannot floss for you. I kept brushing and flossing off the auto-complete path even when Health or Calendar is connected.

  • Tap or explicit confirmation for completions
  • Health as suggestion, not proof
  • Calendar as event-count context, not a tick

Independence

Two companions, one rule, two stores.

Sync would have been the attractive lie. CloudKit is configured for signed devices and is not two-device verified. There is no CloudKit↔D1 bridge. Each surface owns its own check-ins.

  • SwiftData on iPhone, in-browser fallback on the public web host
  • Catalog parity tests between the two trees
  • No live web↔iOS sync in this evidence

System surfaces

Widgets and Shortcuts share a snapshot, when a signed device exists.

App Group snapshot, widgets, Shortcuts, and Live Activities are in source. Simulator success is not a physical iPhone log. The public web host is a preview of the companion, not the iPhone.

  • Widgets, Shortcuts, and Live Activities in the iOS tree
  • Snapshot unit tests only for those surfaces
  • TestFlight / App Store public listing not evidenced

The working stack

What actually runs.

iPhone

SwiftUI + SwiftData

Today, confirm, sources, privacy, export, reset. iOS 26 / Xcode 27 locally.

Web

Companion UI

Same catalog. Public host uses in-browser session fallback; D1 is optional and not on consistency.haam.co.

Tests

Catalog and undo

Web npm test in CI. Swift tests for catalog, dayKey, export version, completion undo.

Host

consistency.haam.co

Vercel Next.js of the web companion. iOS remains a local/TestFlight prototype.

In evidence

What a reviewer can check.

01A today list that waits for a tap

02Matching brush and floss catalogs on iPhone and web

03Export formatVersion 1 in tests

04A public web preview that does not pretend to be the signed iPhone

Where it stops

The preview host is the web companion.

HealthKit, Calendar, notifications, widgets, Shortcuts, Live Activities, and CloudKit are not recorded as passed on a physical iPhone in the evidence file. Two-device iCloud is not verified.

Do not say it syncs across iPhone and web. Do not claim a public release or habit outcomes.

HAAM’s role

I kept the confirmation in the person’s hands.

Human-in-the-loop rule, two-surface independence, default catalog, SwiftUI/SwiftData tree, web companion, tests, and privacy docs. Direct work, 2026.

Help improve this website?

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