Welcome to Fitiz, a comprehensive fitness application designed to motivate, track, and engage users in health and fitness activities through location-based challenges and community engagement.
- Location-Based Challenges: Participate in fitness challenges specific to your location, encouraging outdoor activities and exploration.
- Real-Time Leaderboards: Track your progress and compete with others in real-time with our dynamic leaderboard system.
- Fitness Metrics Tracking: Monitor various fitness metrics to analyze and improve your performance over time.
- Cross-Platform Support: Access Fitiz on your preferred device with our React Native frontend, ensuring a seamless user experience.
- fitiz-react-native: Infinite Red's battle-tested React Native project boilerplate + Expo
Fitiz is built using microservices architecture to ensure scalability, flexibility, and robustness. The system is composed of the following services:
- Challenge Service: Handles creation, management, and participation in fitness challenges.
- Fitness Metrics Service: Collects and processes fitness-related metrics and data.
- User Service: Manages user accounts, authentication, and profile information.
- Location Service: (not implemented yet) Manages location data and integration with external mapping services.
- Explore Service: (not implemented yet) Facilitates discovery of new locations and challenges.
Consumer groups for Kafka:
- cs-redis-consumer: Updates sorted set in Redis + Publishes leaderboard-change topic.
- cs-pg-consumer: Writes data to database to make it persistent. (we need to get persistent data for the sync mechanism in case of any failure in-memory database)
- cs-leaderboard-change-consumer: Manages real-time updates and top-10 leaderboard cache in Redis.
- leaderboard-websocket-service: Pushed leaderboard cache to challenge specific WebSocket channel.
- Workflow file: workflow.yml
- https://github.com/fitiz
- https://www.strava.com/challenges
- https://apps.apple.com/us/app/walker-pedometer-the-game/id1455639400
- https://github.com/GoogleCloudPlatform/cloud-sql-proxy
- https://www.youtube.com/watch?v=5XfgT9A9PHw
- https://blog.jannikwempe.com/github-actions-trunk-based-development
- https://dev.to/n3wt0n/everything-you-need-to-know-about-github-actions-environments-9p7
- https://github.com/fitiz/challenge-service/blob/main/.github/workflows/build.yml
- https://github.com/fitiz/challenge-service/tree/main/deployment
- https://devopscube.com/kustomize-tutorial/
- https://systemdesign.one/leaderboard-system-design/
- https://medium.com/@ilakk2023/designing-a-real-time-leaderboard-system-using-kafka-df6d44cdbd49
- https://redis.com/solutions/use-cases/leaderboards/
- https://redis.io/docs/data-types/sorted-sets/
- https://medium.com/@mayilb77/design-a-real-time-leaderboard-system-for-millions-of-users-08b96b4b64ce
- https://migratorydata.com/blog/realtime-gamification-to-millions-of-users/
- https://www.youtube.com/watch?v=MUKlxdBQZ7g
- https://github.com/aleksandarskrbic/kafka-leaderboard
- https://storyset.com/
- https://docs.expo.dev/eas-update/github-actions/
We welcome contributions from the community! Whether you're interested in fixing bugs, adding new features, or improving documentation, your help is appreciated. Please see our contributing guidelines for more information.
