AI prompts
base on Athletix is a Flutter, Firebase and Gemini API-based platform for athlete management in India, offering performance tracking, injury management, AI recovery, and real-time messaging. Future upgrades include dashboards, finance, and AI career planning. <p align="center">
<img src="web/athletix_banner.png" alt="Athletix Banner" width="100%">
</p>
# Don't forget to star our repository
# ποΈ Athletix
**Athletix** is a Flutter-based mobile application designed to streamline collaboration between athletes, coaches, doctors, and sports organizations. It offers a centralized platform to manage tournaments, track performance and injuries, maintain schedules, and facilitate communication while respecting user roles.
---
## π Features
### π Authentication & Role-based Access
- **Firebase Authentication**: Secure login for all users.
- **Role-based Access (RBA)**:
- Four user roles: **Athletes**, **Doctors**, **Coaches**, and **Organizations**
- Each role has a distinct dashboard with specific permissions.
- Role checked via Firestore `role` field, redirecting users post-login.
- **Signup & Login**:
- Separate signup and login flows for Athletes, Doctors, and Coaches.
- Login-only access for Organizations.
### π Profiles
- **Athletes**: Includes personal details and their sport.
- **Doctors**: Includes personal details and specialization.
- **Coaches**: Includes their sport.
- **Organizations**: Associated with a specific sport.
### ποΈ Timetable & Notifications
- Users can create and save activity timetables in Firestore.
- Push notifications sent via **Firebase Cloud Messaging (FCM)** at the start of each activity.
### π Injury & Performance Logs
- **Athletes** can log:
- **Injury logs**: Details for doctors and monitoring.
- **Performance logs**: Track progress over time.
- Logs are securely stored in **Firestore** and accessible to doctors and coaches.
### πΊοΈ Tournaments with Google Maps
- **Organizations** can create tournaments with:
- Name, level (District, State, National, International), date, time, and location using **Google Maps SDK**.
- Data stored in Firestore under the `tournaments` collection.
- **Athletes** can:
- View upcoming tournaments filtered by their sport.
- See tournaments as markers on an interactive map.
- Tap markers to view tournament details (level, date, time, address) in a modal.
---
## π οΈ Setup Guide
### β
Prerequisites
- [Flutter SDK](https://docs.flutter.dev/get-started/install)
- [Git](https://git-scm.com/downloads)
- A physical Android device (recommended)
---
### π₯ Clone Your Fork
```bash
git clone https://github.com/<your-username>/Athletix.git
cd Athletix
```
### π¦ Install Dependencies
```bash
flutter pub get
```
### βΆοΈ Run the App
```bash
flutter run
```
> π± **Tip**: It's recommended to use a physical Android device for better performance during development.
---
### π§± Tech Stack
| Technology | Description |
|--------------------------|-------------------------------------------|
| π± Flutter | Cross-platform UI toolkit |
| π₯ Firebase | Auth \| Firestore \| FCM (notifications) |
| πΊοΈ Google Maps SDK | Interactive maps for tournaments |
| π¦ Flutter Local Notifications | For scheduling reminders |
---
## ποΈ Project Structure
```
Athletix/
βββ android/
βββ assets/
β βββ applogo.png
β βββ Running_Boy.json
βββ functions/
βββ ios/
βββ lib/
β βββ components/
β β βββ bottom_nav_bar.dart
β β βββ fcm_listener.dart
β βββ screens/
β β βββ athlete/
β β β βββ athlete_dashboard.dart
β β β βββ calendar_screen.dart
β β β βββ injury_tracker_screen.dart
β β β βββ performance_logs_screen.dart
β β β βββ tournaments_screen.dart
β β βββ coach/
β β β βββ coach_dashboard.dart
β β βββ doctor/
β β β βββ doctor_dashboard.dart
β β βββ organization/
β β β βββ add_tournament_screen.dart
β β β βββ manage_players_screen.dart
β β β βββ organization_dashboard.dart
β β βββ auth_screen.dart
β β βββ profile_screen.dart
β β βββ splash_screen.dart
β βββ main.dart
βββ linux/
βββ macos/
βββ test/
βββ web/
βββ windows/
βββ .firebaserc
βββ .gitignore
βββ .metadata
βββ analysis_options.yaml
βββ CODE_OF_CONDUCT.md
βββ DEVELOPMENT.md
βββ CONTRIBUTING.md
βββ firebase.json
βββ LICENSE
βββ pubspec.lock
βββ pubspec.yaml
βββ README.md
```
---
## π§© Troubleshooting
### 1. π₯ Firebase Configuration Missing
**Issue**: App throws Firebase initialization error.
**Solution:**
-Download your google-services.json file from Firebase Console.
-Place it in android/app/ directory.
### 2. π¦ Plugin Issues
**Issue**: Plugin not found or version mismatch.
**Solution:**
-Run flutter pub get to reinstall dependencies.
-Check for version conflicts in pubspec.yaml.
### 3. πΊοΈ Google Maps Not Showing
**Issue**: Map doesn't load or crashes.
**Solution:**
-Ensure you've added your Google Maps API key in the android/app/src/main/AndroidManifest.xml.
-Enable Maps SDK in your Google Cloud console.
### 4. π« Emulator Permission Issues
**Issue**: Notifications or Maps don't work on emulator.
**Solution:**
-Use a real device when possible.
-Emulators may lack Play Services or required permissions.
## π§ͺ How to Run Tests
To run the Flutter tests:
```bash
flutter test
```
This will execute all unit and widget tests in the `test/` directory.
---
## π€ How to Contribute
We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on how to get started, report issues, or submit pull requests.
---
## π« Contact / Support
For questions, suggestions, or support, please open an issue on GitHub or contact the maintainers via the repository.
## π License
This project is licensed under the **MIT License**
<p align="center">
<a href="#top" style="font-size: 18px; padding: 8px 16px; display: inline-block; border: 1px solid #ccc; border-radius: 6px; text-decoration: none;">
β¬οΈ Back to Top
</a>
</p>
", Assign "at most 3 tags" to the expected json: {"id":"14402","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"