mirror of
https://github.com/DocNR/POWR.git
synced 2025-04-22 16:51:33 +00:00
159 lines
3.8 KiB
Markdown
159 lines
3.8 KiB
Markdown
# POWR - Cross-Platform Fitness Tracking App
|
|
|
|
POWR is a local-first fitness tracking application built with React Native and Expo, featuring integration with the Nostr protocol for decentralized social features and improved control of your fitness data.
|
|
|
|
## Features
|
|
|
|
### Current
|
|
- Exercise library management with local SQLite database
|
|
- Workout template creation
|
|
- Local-first data architecture with Nostr sync capability
|
|
- Cross-platform support (iOS, Android)
|
|
- Dark/light mode support
|
|
- Nostr authentication and event publishing
|
|
|
|
### Planned
|
|
- Workout record and template sharing
|
|
- Enhanced social features
|
|
- Training programs
|
|
- Performance analytics
|
|
- Public/private workout sharing options
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
- Node.js (v18 or later)
|
|
- npm or yarn
|
|
- EAS CLI (`npm install -g eas-cli`)
|
|
- iOS Simulator (for iOS development)
|
|
- Android Studio (for Android development)
|
|
|
|
### Installation
|
|
|
|
1. Clone the repository
|
|
```bash
|
|
git clone https://github.com/docNR/powr.git
|
|
cd powr
|
|
```
|
|
|
|
2. Install dependencies
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Install development client modules
|
|
```bash
|
|
npx expo install expo-dev-client expo-crypto expo-nip55
|
|
```
|
|
|
|
### Development Using Expo Dev Client
|
|
|
|
POWR now uses Expo Dev Client for development instead of Expo Go. This allows us to use native modules required for Nostr integration.
|
|
|
|
1. Configure EAS (if not already done)
|
|
```bash
|
|
eas build:configure
|
|
```
|
|
|
|
2. Create a development build
|
|
```bash
|
|
# For Android
|
|
eas build --profile development --platform android
|
|
|
|
# For iOS
|
|
eas build --profile development --platform ios
|
|
```
|
|
|
|
3. Start the development server with dev client
|
|
```bash
|
|
npx expo start --dev-client
|
|
```
|
|
|
|
4. Install the build on your device and scan the QR code to connect
|
|
|
|
## Project Structure
|
|
|
|
```plaintext
|
|
powr/
|
|
├── app/ # Main application code
|
|
│ ├── (tabs)/ # Tab-based navigation
|
|
│ ├── (workout)/ # Workout screens
|
|
│ └── _layout.tsx # Root layout
|
|
├── components/ # Shared components
|
|
│ ├── ui/ # UI components
|
|
│ ├── sheets/ # Bottom sheets
|
|
│ └── library/ # Library components
|
|
├── lib/ # Shared utilities
|
|
│ ├── db/ # Database services
|
|
│ ├── hooks/ # Custom React hooks
|
|
│ ├── stores/ # Zustand stores
|
|
│ └── mobile-signer.ts # Nostr signer implementation
|
|
├── types/ # TypeScript definitions
|
|
└── utils/ # Utility functions
|
|
```
|
|
|
|
## Technology Stack
|
|
|
|
### Core
|
|
- React Native
|
|
- Expo (with Dev Client)
|
|
- TypeScript
|
|
- SQLite (via expo-sqlite)
|
|
- Zustand (state management)
|
|
|
|
### UI Components
|
|
- NativeWind/Tailwind
|
|
- React Navigation
|
|
- Lucide Icons
|
|
|
|
### Nostr Integration
|
|
- NDK (Nostr Development Kit)
|
|
- Custom mobile signer implementation
|
|
- Local event caching
|
|
|
|
## Database Architecture
|
|
|
|
POWR uses a SQLite database with a service-oriented architecture:
|
|
- Exercise data
|
|
- Workout templates
|
|
- Nostr event caching
|
|
- User profiles
|
|
|
|
Each domain has dedicated service classes for data operations.
|
|
|
|
## Nostr Integration
|
|
|
|
POWR implements the Nostr protocol via NDK with:
|
|
- Secure key management using expo-secure-store
|
|
- Event publishing for exercises, templates, and workouts
|
|
- Profile discovery and following
|
|
- Custom event kinds for fitness data
|
|
|
|
## Building for Production
|
|
|
|
```bash
|
|
# Build for iOS
|
|
eas build -p ios
|
|
|
|
# Build for Android
|
|
eas build -p android
|
|
```
|
|
|
|
## Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Commit your changes
|
|
4. Push to the branch
|
|
5. Open a Pull Request
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## Acknowledgments
|
|
|
|
- [Expo](https://expo.dev/)
|
|
- [React Native](https://reactnative.dev/)
|
|
- [NDK](https://github.com/nostr-dev-kit/ndk)
|
|
- [Nostr Protocol](https://github.com/nostr-protocol/nostr) |