[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82890":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},82890,"goose","b-nnett\u002Fgoose","b-nnett","Goose Swift proof-of-concept README",null,"Rust",2447,594,43,12,0,53,751,1131,246,30.32,false,"main",true,[],"2026-06-12 02:04:29","# Goose - Local Companion for WHOOP 5.0\n\n**Alpha proof of concept. This build is for developers to evaluate whether a project of this scope is viable. It is not ready to use as an app for tracking personal health data yet.**\n\nIf you don't know what Xcode is, or how to build the Rust core, this build is not for you. Come back on 13 June 2026 for the first public beta on TestFlight.\n\n![Goose app hero showing a connected WHOOP 5.0 device](docs\u002Fassets\u002Freadme-hero.png)\n\nThis prototype targets WHOOP 5.0 only. Other WHOOP generations are not supported in this build.\n\nThe app and backend have had very little attention put into performance. The app will lag, very considerably. Performance PRs are welcome, or you can wait until I address it in due course.\n\nGoose is a local-first WHOOP 5.0 data and health metrics project. The iOS app connects to WHOOP 5.0 bands, routes packet data through the Goose Rust core, and turns that data into daily health, recovery, sleep, strain, stress, cardio, energy, coach, and debug views.\n\n## Project Layout\n\n```text\nGooseSwift\u002F                         SwiftUI app source\nGooseWorkoutLiveActivityExtension\u002F  Live Activity widget extension\nRust\u002F                               iOS static library, headers, per-platform outputs\nScripts\u002Fbuild_ios_rust.sh           Xcode build phase for the Goose Rust core\ndocs\u002Fgoose-swift-mvp\u002F               MVP plans, contracts, and data-readiness docs\nGooseSwift.xcodeproj                Xcode project\n```\n\nKey Swift entry points:\n\n- `GooseSwiftApp.swift`: app lifecycle and deep-link handling.\n- `RootView.swift`: onboarding gate and global sync toast host.\n- `AppShellView.swift`: tab shell and shared health store wiring.\n- `GooseAppModel.swift`: app state, BLE ownership, lifecycle, and bridge summaries.\n- `GooseBLEClient.swift`: Bluetooth scan\u002Fconnect\u002Fsync logic.\n- `GooseRustBridge.swift`: Swift wrapper around the Rust C bridge.\n- `HealthView.swift` and `Health*` files: health dashboards, metric pages, trends, and sheets.\n- `CoachView.swift` and `Coach*` files: coach UI and chat support.\n- `MoreView.swift`: operational\u002Fdebug\u002Fsettings surfaces.\n\nThis is an active prototype. Because the data pipeline is still evolving, some metrics appear as empty or unavailable until the app has a source for them.\n\n## Independence\n\nGoose is an independent project and is not affiliated with WHOOP. This repository does not include or reference source code owned by WHOOP. The app communicates with WHOOP 5.0 bands over Bluetooth using services and data exposed by the device, then parses and stores that local data through the Goose Rust core. Product names are used only to describe compatibility.\n\n## Design Credit\n\nThe current health metric UI draws heavily from [Bevel](https:\u002F\u002Fwww.bevel.health\u002F), especially the Sleep, Recovery, Strain, Stress, and trend-detail surfaces. Bevel is not affiliated with Goose; this credit is here because their product design has been a major visual reference.\n\n## Current Scope\n\n- SwiftUI app shell with Home, Health, Coach, and More tabs.\n- Onboarding and persisted profile state.\n- CoreBluetooth scan\u002Fconnect flows for WHOOP 5.0 devices.\n- JSON-over-C bridge into the Goose Rust core.\n- Health metric surfaces for Sleep, Recovery, Strain, Stress, Cardio Load, Energy Bank, Health Monitor, Packet Inputs, Algorithms, References, and Calibration.\n- HealthKit sleep import and workout write support.\n- Coach surfaces that summarize local metrics and explain missing data.\n- More\u002FDebug operational surfaces for device state, capture, sync, algorithms, storage, privacy, and support.\n- Workout Live Activity extension.\n\n## Requirements\n\n- macOS with Xcode installed.\n- iOS 26 SDK and an iOS 26 capable simulator\u002Fdevice.\n- Apple Developer signing configured for the `com.goose.swift` bundle identifier.\n- Rust and Cargo for building the Goose Rust core from the committed `Rust\u002Fcore` source.\n- iOS Rust targets installed with `rustup`; see the Rust Core Bridge section below.\n\nBuilt Rust `.a` archives are generated locally during Xcode builds and are not committed. Set `GOOSE_SKIP_RUST_CORE_BUILD=1` only when the matching local archive already exists for the active Xcode platform.\n\n## Build\n\nOpen `GooseSwift.xcodeproj` in Xcode and build the `GooseSwift` scheme, or build from the command line.\n\nSimulator build:\n\n```sh\nxcodebuild \\\n  -project GooseSwift.xcodeproj \\\n  -scheme GooseSwift \\\n  -configuration Debug \\\n  -destination 'platform=iOS Simulator,name=iPhone 17' \\\n  -derivedDataPath \u002Ftmp\u002Fgoose-swift-deriveddata \\\n  build\n```\n\nPhysical device build:\n\n```sh\nxcodebuild \\\n  -project GooseSwift.xcodeproj \\\n  -scheme GooseSwift \\\n  -configuration Debug \\\n  -destination 'platform=iOS,id=\u003Cdevice-id>' \\\n  -derivedDataPath \u002Ftmp\u002Fgoose-swift-deriveddata-device \\\n  -allowProvisioningUpdates \\\n  build\n```\n\nList connected devices:\n\n```sh\nxcrun devicectl list devices\n```\n\n## Reinstall On A Device\n\nAfter a successful physical-device build, reinstall and launch:\n\n```sh\nxcrun devicectl device uninstall app \\\n  --device \u003Cdevice-id> \\\n  com.goose.swift\n\nxcrun devicectl device install app \\\n  --device \u003Cdevice-id> \\\n  \u002Ftmp\u002Fgoose-swift-deriveddata-device\u002FBuild\u002FProducts\u002FDebug-iphoneos\u002FGooseSwift.app\n\nxcrun devicectl device process launch \\\n  --device \u003Cdevice-id> \\\n  --terminate-existing \\\n  com.goose.swift\n```\n\n## Rust Core Bridge\n\nThe Rust bridge source is committed in `Rust\u002Fcore`. Do not commit built `.a`\narchives; Xcode generates them locally through `Scripts\u002Fbuild_ios_rust.sh`.\n\nPrerequisites:\n\n- Xcode command line tools.\n- Rust via `rustup`.\n- iOS Rust targets:\n\n```bash\nrustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios\n```\n\n`Scripts\u002Fbuild_ios_rust.sh` builds `Rust\u002Fcore` for the active Xcode platform:\n\n- `iphoneos` -> `aarch64-apple-ios`\n- `iphonesimulator` on Apple Silicon -> `aarch64-apple-ios-sim`\n- `iphonesimulator` on Intel -> `x86_64-apple-ios`\n\nOutputs are staged into:\n\n```text\nRust\u002Fiphoneos\u002Flibgoose_core.a\nRust\u002Fiphonesimulator\u002Flibgoose_core.a\n```\n\nThe Swift target links `Rust\u002F$(PLATFORM_NAME)\u002Flibgoose_core.a` and reads the C\nbridge header from `Rust\u002Fcore\u002Finclude\u002Fgoose_core_bridge.h`. The default Cargo\ntarget directory is `build\u002Frust-target\u002Fgoose-core`, so Rust build products stay\noutside the committed source tree.\n\nManual builds:\n\n```bash\n# Simulator on Apple Silicon\nPLATFORM_NAME=iphonesimulator CURRENT_ARCH=arm64 Scripts\u002Fbuild_ios_rust.sh\n\n# Physical iPhone\nPLATFORM_NAME=iphoneos CURRENT_ARCH=arm64 Scripts\u002Fbuild_ios_rust.sh\n```\n\nYou normally do not need to run these by hand; the Xcode build phase runs the\nscript before compiling Swift.\n\n## Data And Privacy\n\n- Metric views show empty, stale, or unavailable states when a source is missing.\n- Metric rows and trend sheets show where values came from when that information is available.\n- Raw packet payloads stay in debug\u002Fexport flows rather than everyday health views.\n- Coach responses use the same local metric summaries shown in the app.\n- Health and fitness data is local by default. Any future backend or AI feature will need its own consent flow and privacy notes.\n\n## Documentation\n\nDetailed implementation plans live in `docs\u002Fgoose-swift-mvp\u002F`:\n\n- `Home.md`: Home tab contract and remaining work.\n- `Health.md`: Health surfaces, metric pages, packet inputs, trends, and acceptance checks.\n- `Coach.md`: Coach tab plan and chat architecture notes.\n- `More.md`: operational settings\u002Fdebug\u002Fcapture\u002Fprivacy surfaces.\n- `CodexCoachServer.md`: viability notes for a future Codex-powered coach.\n- `RemainingDataTodo.md`: unresolved data-source and persistence work.\n\nRecovery-specific follow-up work is tracked in `recovery-todo.md`.\n\n## Contributing\n\nThis project moves quickly, so small focused changes are easiest to review.\n\nWant to talk to other contributors? [Join the group here](https:\u002F\u002Fx.com\u002Fi\u002Fchat\u002Fgroup_join\u002Fg2061785795330019536\u002F3SHQtt2O8f).\n\n- Keep changes close to the feature or bug you are working on.\n- Match the existing SwiftUI style before introducing new patterns.\n- Build after touching Swift, Rust bridge, project, or signing settings.\n- Check both empty and populated states for metric UI when possible.\n- Keep user-facing health copy plain and careful. Avoid medical claims.\n- Put debug tooling, packet details, and raw export behavior under More or Debug surfaces.\n- Update the relevant MVP doc when a change completes or changes an open task.\n- Mention any build warnings, skipped checks, or device-only assumptions in the PR notes.\n\n## Development Notes\n\n- Prefer small, typed Swift models over displaying raw summary strings.\n- Keep Home, Health, Coach, and More routes modular enough to work independently.\n- Metric pages should still look polished when data is missing.\n- Before installing to a device, run a simulator or device build and check that the Rust library target matches the destination platform.\n","Goose是一个针对WHOOP 5.0设备的本地健康数据和指标项目。它通过Rust核心处理来自WHOOP 5.0手环的数据，并在iOS应用中呈现包括日常健康、恢复、睡眠、压力等在内的多种视图。该项目目前处于概念验证阶段，主要面向开发者评估其可行性，尚未准备好作为个人健康管理应用使用。Goose采用本地优先的设计理念，通过蓝牙连接WHOOP 5.0手环并解析数据，适合对性能优化有兴趣或等待后续改进的专业人士探索。请注意，此项目独立于WHOOP公司，仅用于展示与特定硬件的兼容性开发。",2,"2026-06-11 04:09:33","CREATED_QUERY"]