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.
- 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
- Workout record and template sharing
- Enhanced social features
- Training programs
- Performance analytics
- Public/private workout sharing options
- 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)
- Clone the repository
git clone https://github.com/docNR/powr.git
cd powr
- Install dependencies
npm install
- Install development client modules
npx expo install expo-dev-client expo-crypto expo-nip55
POWR now uses Expo Dev Client for development instead of Expo Go. This allows us to use native modules required for Nostr integration.
- Configure EAS (if not already done)
eas build:configure
- Create a development build
# For Android
eas build --profile development --platform android
# For iOS
eas build --profile development --platform ios
- Start the development server with dev client
npx expo start --dev-client
- Install the build on your device and scan the QR code to connect
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
- React Native
- Expo (with Dev Client)
- TypeScript
- SQLite (via expo-sqlite)
- Zustand (state management)
- NativeWind/Tailwind
- React Navigation
- Lucide Icons
- NDK (Nostr Development Kit)
- Custom mobile signer implementation
- Local event caching
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.
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
# Build for iOS
eas build -p ios
# Build for Android
eas build -p android
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.