fix: restore CLAUDE.md and protect it from expo prebuild --clean
prebuild --clean overwrote CLAUDE.md with an Expo-generated stub. Restored the original project plan and added ignorePaths in app.json so Expo skips CLAUDE.md on future prebuild runs.
This commit is contained in:
@@ -1 +1,93 @@
|
||||
@AGENTS.md
|
||||
# bincio-rec
|
||||
|
||||
GPS activity recorder for the bincio ecosystem.
|
||||
Companion to **bincio-autarchive** (archive/sync app): rec makes the data, autarchive stores and syncs it.
|
||||
|
||||
---
|
||||
|
||||
## Concept
|
||||
|
||||
A focused, minimal recording app for cycling, running, hiking, and walking.
|
||||
Records GPS track + BLE sensor data, saves to GPX, optionally uploads directly to a bincio-activity server.
|
||||
Future: live navigation / turn-by-turn instructions.
|
||||
|
||||
The app does one thing well: **record**. No browsing, no analysis — that's autarchive's job.
|
||||
|
||||
---
|
||||
|
||||
## Ecosystem
|
||||
|
||||
```
|
||||
bincio-rec → writes GPX files to shared storage
|
||||
bincio-autarchive → imports GPX, stores locally, syncs to server
|
||||
bincio-activity → server: parses GPX, stores activities, serves API
|
||||
bincio-auth → auth service: issues JWTs for all bincio apps
|
||||
```
|
||||
|
||||
bincio-rec can also upload directly to bincio-activity via `/api/upload/raw` (same endpoint autarchive uses), with instance URL + API token configured in settings.
|
||||
|
||||
---
|
||||
|
||||
## Tech Stack
|
||||
|
||||
**Expo Prebuild** (not managed Expo, not bare RN).
|
||||
|
||||
- Managed Expo ruled out: BLE requires native modules
|
||||
- Bare RN ruled out: Expo library ecosystem is valuable (location, notifications, file system)
|
||||
- Prebuild gives full native access while keeping Expo tooling and EAS Build
|
||||
|
||||
Key libraries:
|
||||
- `expo-location` + `expo-task-manager` — background GPS recording
|
||||
- `react-native-ble-plx` — BLE sensors (HR, power, cadence)
|
||||
- `@maplibre/maplibre-react-native` — live track map, future navigation
|
||||
- `expo-notifications` — km milestone alerts, future navigation cues
|
||||
- `expo-keep-awake` — keep screen on during recording (user-toggleable)
|
||||
- `expo-file-system` — write GPX/JSON to shared storage
|
||||
- `expo-sqlite` — local DB for past recordings list
|
||||
|
||||
Target: **Android first**, iOS second.
|
||||
|
||||
---
|
||||
|
||||
## v1 Screens
|
||||
|
||||
1. **Sensor pairing** — scan BLE, pair HR monitor / power meter / cadence sensor; persisted
|
||||
2. **Recording** — start / pause / resume / stop
|
||||
- Live stats: elapsed time, distance, current+avg speed, HR, power, cadence, elevation gain
|
||||
- Map with track drawn in real time
|
||||
- Keep-awake toggle
|
||||
3. **Post-recording summary** — stats overview, title field, save / discard
|
||||
4. **Saved recordings** — list of past sessions; tap to export GPX or upload to server
|
||||
5. **Settings** — bincio instance URL + API token; km notification toggle; upload format
|
||||
|
||||
---
|
||||
|
||||
## Output Format
|
||||
|
||||
**GPX with Garmin trackpoint extensions** — one `<trkpt>` per second with:
|
||||
- lat/lon/elevation from GPS
|
||||
- `<gpxtpx:hr>` — heart rate
|
||||
- `<gpxtpx:power>` — power (watts)
|
||||
- `<gpxtpx:cad>` — cadence (rpm)
|
||||
|
||||
bincio-activity already parses this format via `bincio.extract.parsers`.
|
||||
|
||||
Files saved to a user-accessible location (iOS Files app / Android shared storage) so bincio-autarchive can import them manually.
|
||||
|
||||
---
|
||||
|
||||
## Known Platform Concerns
|
||||
|
||||
- **Android battery optimization**: aggressive OEMs (Xiaomi, Samsung, Huawei) kill background tasks. Prompt user to whitelist bincio-rec in battery settings on first launch. Every recording app has this problem — no framework-level fix.
|
||||
- **iOS background location**: requires `location` background mode in `Info.plist` and "Always" location permission. Fine for sideloading/TestFlight; App Store submission requires clear justification.
|
||||
- **iOS foreground notifications**: notification sounds are suppressed when app is in foreground — use `expo-av` audio cue instead for km alerts while screen is on.
|
||||
|
||||
---
|
||||
|
||||
## Out of Scope (v1)
|
||||
|
||||
- Navigation / turn-by-turn routing
|
||||
- Auto-pause (stop lights, etc.)
|
||||
- Structured workouts / intervals
|
||||
- Offline maps
|
||||
- Live tracking / sharing
|
||||
|
||||
Reference in New Issue
Block a user