Local first, in plain language

Your data.
Your choice to share.

What stays in your browser, what the host sees, and what you choose to share.

Your training records are saved in this browser.

Setup, custom definitions, plans, logs, feedback and selected normalized Garmin CSV records are stored in IndexedDB in this browser. CSV files are read locally, not uploaded. Activity titles, locations and raw CSV text are not retained. Visiting /app/ on the same HTTPS domain does not upload records; brief sharing is a separate, explicit action.

There is no account, application backend, automatic cloud backup, advertising profile or training-data sync. Anyone with access to your browser profile may access records. Browser storage does not promise encryption or permanent retention.

Backups are your choice, and your responsibility.

Export a local JSON backup from Settings. Import it in another browser or device to transfer records. Backups can contain personal training information; store them somewhere you trust.

Start a new plan keeps previous logged work as read-only history. It does not upload that history or create a remote backup. Clearing site data, private browsing or storage eviction can remove records, including previous plans.

Localhost, pages.dev previews and this domain have separate storage with no automatic exchange.

No telemetry, analytics or error-reporting scripts.

No analytics beacons, advertising trackers, session recording, browser error reporting or tracking cookies. Fonts, graphics and app assets are served with the site, not third-party services.

Cloudflare serves and protects the static site, handling IP addresses and ordinary request metadata. Local-first does not mean a website makes no network requests. See Cloudflare’s privacy policy.

AI is a separate, explicit connection.

AI is optional at the final setup review and weekly review. Visiting, entering Goal or Routine, or opening a panel sends nothing to AI. Preview the brief, copy it into your own AI chat and paste the final JSON reply back. Copying alone contacts no provider. Opening a provider link visits that provider but does not send the brief automatically. Direct API integration is future work.

A setup brief includes your goal and date, desired routine, confirmed current-training facts when available, equipment and space, availability and fixed sessions, exercise selection, custom definitions, eligible catalog and profiles, reference cards and relevant planned sessions. Setup sharing does not include campaign session logs.

A weekly-review brief additionally includes this week’s actual training records: sets, repetitions, seconds, weights, duration, effort, notes and recorded health flags, plus easier/as-expected/harder feedback, optional distance and average heart rate, stopped-early outcomes and recorded changes. Partial work, skip reasons, removals, omissions and unlogged sessions stay distinct. Missing records remain unknown, not assumed completion. These records may be sensitive; preview them before sharing.

A separate default-off choice includes confirmed normalized Garmin records and their summary: activity type, local timestamp, timer duration, and optional distance, average heart rate, moving and elapsed time. Activity titles, locations and raw files are excluded. Prior-plan archives are not exported. The external provider or chat has its own terms and privacy policy.

This MVP does not ask for provider API keys or send requests through a Hybrid Coach proxy. Optional AI may cost money; manual planning, custom exercises and weekly review need no AI.

Browser-local in the same profile.

The MVP saves your plans, library and logs in this browser profile. Reopen the planner in the same browser to continue with local records. AI chats require connectivity, and another browser or device needs an exported backup to see the same data.

Questions or corrections.

The source and public issue tracker are on GitHub. Do not post private records or pasted handoff JSON in a public issue. This site has no contact form, mailing-list signup, or data-collection endpoint.