尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗An open-source, AI running coach for iOS — built in the open as a CodeYam showcase.
Otterpace is a friendly running coach in your pocket: it pulls your activity from Apple HealthKit (or, optionally, Strava), keeps you moving toward your daily 10,000 steps, and gives kind, never-shame-based coaching through Buddy, a mood-reactive otter mascot.
It's one of the CodeYam showcase apps, alongside CodeYam Counter and TabCommand — worked examples built with codeyam-editor.
Otterpace is live — available on the App Store.
The end-to-end launch sequence that got us there is preserved as a runbook: ▶ docs/go-live-runbook.md — with a verification check at each phase.
Area deep-dives: site + DNS · AI coach · Strava + analytics · TestFlight prep.
The Today dashboard, a native SwiftUI screen that shows:
The Ask Coach chat, reached from a Today/Coach tab bar or the "Ask Buddy" button on the coach card:
CoachEngine
(Sources/AppCore/CoachEngine.swift) answers, so the coach always works and
captures stay reproducibleThe Weekly Review, opened from the Coach tab — a read-only recap the coach
generates from your weekly training load: what went well, what changed, training
risk, suggested next week, and one focus area, with Buddy's mood and an amber
safety callout when load spikes. Built by the deterministic WeeklyReviewEngine.
The Activity History, opened from the Today dashboard — recent
workouts grouped by week, each week fronted by its mileage / run-count / rest-day
rollup, with a friendly empty state for day one. Grouping is the testable
ActivityHistory.groupByWeek.
Settings, reached from the gear on the dashboard, gathers the account and integration controls:
The whole UI scales with Dynamic Type and meets WCAG AA contrast, and the app ships a code-generated app icon (see below).
The Today screen is driven by a single TodayState (see Sources/AppCore/Model.swift),
populated from HealthKit (or imported Strava activity) in the real app and from
each CodeYam scenario's deviceState preferences in the simulator preview.
Production starts empty; each scenario carries its own seeded state.
Otterpace is a worked example of building a native iOS app with the CodeYam editor — a scenario-driven loop where every feature is developed against seeded, captured states that render in a live simulator preview.
The core idea: a single TodayState (Sources/AppCore/Model.swift) drives the
UI, and each scenario (.codeyam/scenarios/*.json) seeds that state at launch
through a deviceState.preferences map (the rb* / otterpace* UserDefaults
keys) injected into the simulator. "Goal Crushed", "Recovery Caution", and
"Day One — Connect" are the same screens rendered from different seeds, each
captured as a screenshot the editor verifies.
Two patterns keep that loop reliable:
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗