docs: add project README with setup and architecture overview
This commit is contained in:
@@ -0,0 +1,162 @@
|
|||||||
|
# SwimBuddy
|
||||||
|
|
||||||
|
Swimming workout tracker with Apple Watch and WearOS companion apps.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Create and manage swimming workout templates
|
||||||
|
- Track workouts with detailed set/rep/lap data
|
||||||
|
- Apple Watch companion for real-time workout tracking
|
||||||
|
- WearOS companion for Android smartwatches
|
||||||
|
- HealthKit integration (iOS) and Health Services (WearOS)
|
||||||
|
- Multi-language support (EN, NL, DE, FR, IT, ES, PL, PT, DK)
|
||||||
|
- SWOLF score calculation
|
||||||
|
- Workout history and statistics
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
- **Framework**: Expo 57 + React Native 0.86
|
||||||
|
- **Styling**: NativeWind v5 (TailwindCSS for React Native)
|
||||||
|
- **Database**: expo-sqlite + Drizzle ORM
|
||||||
|
- **Navigation**: React Navigation 7
|
||||||
|
- **State**: react-native-mmkv (settings), SQLite (workouts)
|
||||||
|
- **Watch**: Swift/SwiftUI (Apple Watch), Kotlin/Compose (WearOS)
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Node.js 18+
|
||||||
|
- Expo CLI (`npm install -g expo-cli`)
|
||||||
|
- Xcode 15+ (for iOS/Watch development)
|
||||||
|
- Android Studio (for WearOS development)
|
||||||
|
- CocoaPods (for iOS)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Generate database migrations
|
||||||
|
npm run db:generate
|
||||||
|
|
||||||
|
# Start development server
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start Expo dev server
|
||||||
|
npm start
|
||||||
|
|
||||||
|
# Run on iOS
|
||||||
|
npm run ios
|
||||||
|
|
||||||
|
# Run on Android
|
||||||
|
npm run android
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
### iOS & Apple Watch
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build for iOS
|
||||||
|
npx expo run:ios
|
||||||
|
|
||||||
|
# Open in Xcode for Watch target
|
||||||
|
open ios/SwimBuddy.xcworkspace
|
||||||
|
```
|
||||||
|
|
||||||
|
### WearOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build debug APK
|
||||||
|
./scripts/build-wearos.sh debug
|
||||||
|
|
||||||
|
# Build release APK
|
||||||
|
./scripts/build-wearos.sh release
|
||||||
|
|
||||||
|
# Generate launcher icons
|
||||||
|
./scripts/generate-wearos-icon.sh assets/icon.png
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── components/ # Shared UI primitives
|
||||||
|
├── config/ # App configuration
|
||||||
|
├── constants/ # Stroke types, pool lengths, colors
|
||||||
|
├── db/ # Drizzle schema, migrations, operations
|
||||||
|
├── features/
|
||||||
|
│ ├── active-workout/ # Live workout tracking
|
||||||
|
│ ├── history/ # Workout history
|
||||||
|
│ ├── settings/ # App settings
|
||||||
|
│ ├── templates/ # Workout template management
|
||||||
|
│ └── workout-builder/ # Create/edit workout templates
|
||||||
|
├── hooks/ # Shared React hooks
|
||||||
|
├── i18n/ # Translations (en, nl, de, fr, it, es, pl, pt, dk)
|
||||||
|
├── modules/
|
||||||
|
│ ├── watch-connectivity/ # Apple Watch WCSession bridge
|
||||||
|
│ └── wear-connectivity/ # WearOS Data Layer bridge
|
||||||
|
├── navigation/ # React Navigation setup
|
||||||
|
├── providers/ # DatabaseProvider, SettingsProvider
|
||||||
|
├── types/ # TypeScript types
|
||||||
|
└── utils/ # Utility functions
|
||||||
|
|
||||||
|
targets/
|
||||||
|
├── watch/ # Apple Watch app (Swift/SwiftUI)
|
||||||
|
└── wearos/ # WearOS app (Kotlin/Compose)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Database
|
||||||
|
|
||||||
|
The app uses SQLite via Drizzle ORM with the following tables:
|
||||||
|
|
||||||
|
- `templates` - Workout templates with JSON data
|
||||||
|
- `workouts` - Completed workout sessions
|
||||||
|
- `sets` - Individual sets within workouts
|
||||||
|
- `laps` - Lap data for each set
|
||||||
|
|
||||||
|
### Schema Changes
|
||||||
|
|
||||||
|
After modifying `src/db/schema.ts`, regenerate migrations:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run db:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
## Watch Integration
|
||||||
|
|
||||||
|
### Apple Watch
|
||||||
|
|
||||||
|
- Uses WCSession for phone↔watch communication
|
||||||
|
- HealthKit for swim workout tracking
|
||||||
|
- App Groups for data sharing between iPhone and Watch
|
||||||
|
- Real-time sync during workouts
|
||||||
|
|
||||||
|
### WearOS
|
||||||
|
|
||||||
|
- Uses Wear Data Layer API for communication
|
||||||
|
- Health Services for swim tracking
|
||||||
|
- Jetpack Compose with Wear OS Compose libraries
|
||||||
|
|
||||||
|
## Internationalization
|
||||||
|
|
||||||
|
Supported languages:
|
||||||
|
- English (en)
|
||||||
|
- Dutch (nl)
|
||||||
|
- German (de)
|
||||||
|
- French (fr)
|
||||||
|
- Italian (it)
|
||||||
|
- Spanish (es)
|
||||||
|
- Polish (pl)
|
||||||
|
- Portuguese (pt)
|
||||||
|
- Danish (dk)
|
||||||
|
|
||||||
|
Translation files are in `src/i18n/{locale}/`.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
Reference in New Issue
Block a user