https://github.com/arqueffe/crux_gym
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (8.2%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: arqueffe
- License: agpl-3.0
- Language: Dart
- Default Branch: master
- Size: 842 KB
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Crux - Climbing Gym Management System
A modern climbing gym management application with Flask backend and Flutter mobile app.
Quick Start
Backend
bash
cd backend
pip install -r requirements.txt
python app.py
Server runs on http://localhost:5000
Frontend
bash
cd frontend
flutter pub get
flutter run
Features
- Route Management: Browse, create, and filter climbing routes
- User System: Registration, login, and user profiles
- Interactions: Like, comment, grade proposals, and warnings
- Tick Tracking: Log attempts, sends (TR/Lead), and flashes
- Analytics: Performance statistics and grade progression
- Localization: English and French support
- Mobile UI: Material Design 3 with responsive layouts
Sample Data
Login with: admin / admin123 or alice_johnson / password123
Tech Stack
- Backend: Flask, SQLAlchemy, JWT, SQLite
- Frontend: Flutter, Provider, Material Design 3
- Database: SQLite with auto-initialization
Project Structure
├── backend/ # Flask REST API
├── frontend/ # Flutter mobile app
└── VERSION.md # v0.8.0
License
MIT License
Project Structure
Crux/
├── backend/ # Flask REST API
│ ├── app.py # Main Flask application with full API
│ ├── requirements.txt # Python dependencies
│ ├── climbing_gym.db # SQLite database (auto-generated)
│ ├── cli.py # Command-line interface for DB management
│ └── README.md # Backend documentation
├── frontend/ # Flutter Mobile App
│ ├── lib/
│ │ ├── main.dart # App entry point with auth wrapper
│ │ ├── models/ # Data models (Route, User, Profile)
│ │ │ ├── route_models.dart # Route, Like, Comment, Warning, Tick models
│ │ │ ├── user_models.dart # User authentication models
│ │ │ ├── profile_models.dart # User statistics and profile models
│ │ │ └── climbing_wall_models.dart # 3D wall visualization models
│ │ ├── providers/ # State management
│ │ │ ├── auth_provider.dart # Authentication state
│ │ │ ├── route_provider.dart # Route data and filtering
│ │ │ └── profile_provider.dart # User profile and statistics
│ │ ├── services/ # API communication
│ │ │ ├── api_service.dart # Main API service
│ │ │ ├── auth_service.dart # Authentication service
│ │ │ └── climbing_wall_service.dart # 3D wall service
│ │ ├── screens/ # App screens
│ │ │ ├── login_screen.dart # Authentication UI
│ │ │ ├── main_navigation_screen.dart # Bottom navigation
│ │ │ ├── home_screen.dart # Routes listing with filters
│ │ │ ├── route_detail_screen.dart # Detailed route view
│ │ │ ├── add_route_screen.dart # Route creation
│ │ │ └── profile_screen.dart # User profile with statistics
│ │ └── widgets/ # Reusable UI components
│ │ ├── route_card.dart # Route display cards
│ │ ├── route_interactions.dart # Like, comment, tick buttons
│ │ ├── filter_drawer.dart # Advanced filtering UI
│ │ ├── interactive_climbing_wall.dart # 3D wall viewer
│ │ ├── performance_summary_card.dart # Statistics cards
│ │ ├── grade_statistics_chart.dart # Performance charts
│ │ ├── ticks_list.dart # User's completed routes
│ │ └── likes_list.dart # User's liked routes
│ ├── pubspec.yaml # Flutter dependencies
│ ├── assets/models/ # 3D model assets
│ └── README.md # Frontend documentation
├── commit.sh # Version management script
├── VERSION.md # Current version (0.3.0)
└── README.md # This file
Features
Authentication & User Management
- Secure JWT-based authentication
- User registration and login
- Persistent session management
- User profile management
Route Management
- Complete CRUD operations for climbing routes
- Detailed route information (grade, setter, wall section, lane, color)
- Route filtering by multiple criteria (wall section, grade, lane, setter)
- Advanced sorting options (newest, oldest, difficulty, popularity)
- Route search and discovery
User Interactions
- Likes: Express appreciation for routes
- Comments: Share detailed feedback and beta
- Grade Proposals: Suggest alternative difficulty ratings with reasoning
- Warnings: Report safety issues, broken holds, or maintenance needs
- Ticks: Track successful ascents with attempt counts and notes
- Flash Tracking: Record first-try completions
Profile & Statistics
- Comprehensive climbing statistics
- Performance analytics by grade and time period
- Personal achievement tracking
- Tick history with detailed information
- Grade progression tracking
- Wall section diversity metrics
- Average attempts and flash rate calculation
Advanced Features
- Interactive 3D climbing wall visualization
- Real-time data synchronization
- Offline-capable design
- Responsive Material Design UI
- Advanced error handling and loading states
- Pull-to-refresh functionality
API Endpoints
Authentication
POST /api/auth/register- User registrationPOST /api/auth/login- User loginGET /api/auth/me- Get current user info
Routes
GET /api/routes- Get all routes (with filtering: wall_section, grade, lane)GET /api/routes/{id}- Get specific route with all interactionsPOST /api/routes- Create new route
Route Interactions
POST /api/routes/{id}/like- Like a routeDELETE /api/routes/{id}/unlike- Unlike a routePOST /api/routes/{id}/comments- Add commentPOST /api/routes/{id}/grade-proposals- Propose grade changePOST /api/routes/{id}/warnings- Report warning/issuePOST /api/routes/{id}/ticks- Record successful ascentDELETE /api/routes/{id}/ticks- Remove tickGET /api/routes/{id}/ticks/me- Check if user has ticked route
User Profile
GET /api/user/ticks- Get user's completed routesGET /api/user/likes- Get user's liked routesGET /api/user/stats- Get comprehensive user statistics
Utility Endpoints
GET /api/wall-sections- Get all unique wall sectionsGET /api/grades- Get all grades used in gymGET /api/lanes- Get all lane numbers
Database Schema
Core Models
- User: Authentication and profile information
- Route: Complete route details with metadata
- Like: User appreciation for routes
- Comment: Detailed user feedback
- GradeProposal: Alternative difficulty suggestions
- Warning: Safety and maintenance reports
- Tick: Successful ascent records
Key Relationships
- Users can have multiple likes, comments, proposals, warnings, and ticks
- Routes contain aggregated counts for all interaction types
- Unique constraints prevent duplicate ticks per user-route combination
Sample Data
The system initializes with sample data for immediate testing:
Users:
- admin / admin123 (Administrator)
- alice_johnson / password123
- bob_smith / password123
- charlie_brown / password123
Sample Routes: - "Crimpy Goodness" (V4) - Technical crimps with dynamic finish - "Slab Master" (V2) - Balance and footwork focused - "Power House" (V6) - Raw power moves with big holds - "Finger Torture" (V5) - Tiny crimps and pinches - "Beginner's Delight" (V1) - Perfect for new climbers - "The Gaston" (V3) - Lots of gaston moves
Technologies Used
Backend
- Flask: Python web framework with RESTful API design
- SQLAlchemy: Object-relational mapping with SQLite
- Flask-JWT-Extended: Secure JWT authentication
- Flask-Bcrypt: Password hashing and security
- Flask-CORS: Cross-origin resource sharing
Frontend
- Flutter: Cross-platform mobile app framework
- Provider: State management and dependency injection
- Material Design 3: Modern UI components and theming
- HTTP: RESTful API communication
- SharedPreferences: Local data persistence
- JWT Decoder: Token validation and management
- Flutter 3D Controller: Interactive 3D visualizations
Development Features
Version Management
- Automated versioning with
commit.shscript - Semantic versioning (major.minor.patch)
- Synchronized version updates across components
Code Quality
- Comprehensive error handling throughout the stack
- Loading states and user feedback
- Responsive design patterns
- Clean architecture with separation of concerns
Color System
- Backend-Driven Colors: All grade and hold colors are managed in the backend database
- Hex Color Support: Colors are stored as hex codes for precise color matching
- Centralized Color Utilities: Shared
ColorUtilsclass for consistent color parsing - Fallback Mechanism: Graceful degradation to default colors if backend data is unavailable
- Visual Consistency: Uniform color representation across all UI components
Future Enhancements
- Route setting scheduling and management
- Social features (following other climbers, competitions)
- Photo uploads for routes
- Advanced analytics and reporting
- Push notifications for new routes
- Offline mode with data synchronization
- Admin dashboard for gym management
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes following the existing code style
- Test thoroughly on both backend and frontend
- Use the version management script:
./commit.sh "Your commit message" patch - Submit a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For questions, issues, or feature requests: - Open a GitHub issue with detailed information - Check existing documentation in backend/ and frontend/ README files - Contact the development team
Current Version: 0.3.0
Last Updated: January 2025## Project Structure
Crux/
├── backend/ # Flask API
│ ├── app.py # Main Flask application
│ ├── requirements.txt # Python dependencies
│ ├── setup.bat # Setup script
│ └── README.md # Backend documentation
├── frontend/ # Flutter app
│ ├── lib/ # Dart source code
│ ├── pubspec.yaml # Flutter dependencies
│ ├── setup.bat # Setup script
│ └── README.md # Frontend documentation
└── README.md # This file
Features
Backend Features
- Route CRUD operations
- User interaction tracking (likes, comments, grade proposals, warnings)
- Gym topology management (wall sections)
- RESTful API design
- Sample data initialization
Frontend Features
- Modern Material Design UI
- Real-time data updates
- Filtering and search capabilities
- User-friendly interaction forms
- Responsive design
- Error handling and loading states
API Endpoints
Routes
GET /api/routes- Get all routes (with optional filtering)GET /api/routes/{id}- Get specific route with detailsPOST /api/routes- Create new route
User Interactions
POST /api/routes/{id}/like- Like a routeDELETE /api/routes/{id}/unlike- Unlike a routePOST /api/routes/{id}/comments- Add commentPOST /api/routes/{id}/grade-proposals- Propose grade changePOST /api/routes/{id}/warnings- Report warning
Utility
GET /api/wall-sections- Get all wall sectionsGET /api/grades- Get all grades used
Data Models
Route
- Basic information: name, grade, route setter, wall section
- Optional: color, description
- Statistics: likes count, comments count, warnings count
User Interactions
- Likes: Simple user appreciation
- Comments: Text feedback and beta sharing
- Grade Proposals: Suggest different difficulty with reasoning
- Warnings: Report issues (broken holds, safety concerns, etc.)
Development
Adding New Features
- Backend: Add new endpoints in
app.py, update models if needed - Frontend: Add new screens/widgets, update API service and provider
Database Schema
The SQLite database includes:
- route - Route information
- like - User likes
- comment - User comments
- grade_proposal - Grade change suggestions
- warning - Route condition warnings
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Owner
- Name: Arthur Queffelec
- Login: arqueffe
- Kind: user
- Website: https://arqueffe.github.io/
- Repositories: 1
- Profile: https://github.com/arqueffe
GitHub Events
Total
- Push event: 9
- Create event: 1
Last Year
- Push event: 9
- Create event: 1
Issues and Pull Requests
Last synced: 10 months ago
Dependencies
- async 2.12.0
- boolean_selector 2.1.2
- characters 1.4.0
- clock 1.1.2
- collection 1.19.1
- cupertino_icons 1.0.8
- fake_async 1.3.2
- ffi 2.1.4
- file 7.0.1
- flutter 0.0.0
- flutter_3d_controller 2.2.0
- flutter_inappwebview 6.1.5
- flutter_inappwebview_android 1.1.3
- flutter_inappwebview_internal_annotations 1.2.0
- flutter_inappwebview_ios 1.1.2
- flutter_inappwebview_macos 1.1.2
- flutter_inappwebview_platform_interface 1.3.0+1
- flutter_inappwebview_web 1.1.2
- flutter_inappwebview_windows 0.6.0
- flutter_lints 2.0.3
- flutter_test 0.0.0
- flutter_web_plugins 0.0.0
- http 1.4.0
- http_parser 4.1.2
- jwt_decoder 2.0.1
- leak_tracker 10.0.8
- leak_tracker_flutter_testing 3.0.9
- leak_tracker_testing 3.0.1
- lints 2.1.1
- matcher 0.12.17
- material_color_utilities 0.11.1
- meta 1.16.0
- nested 1.0.0
- path 1.9.1
- path_provider_linux 2.2.1
- path_provider_platform_interface 2.1.2
- path_provider_windows 2.3.0
- platform 3.1.6
- plugin_platform_interface 2.1.8
- provider 6.1.5
- shared_preferences 2.5.3
- shared_preferences_android 2.4.10
- shared_preferences_foundation 2.5.4
- shared_preferences_linux 2.4.1
- shared_preferences_platform_interface 2.4.1
- shared_preferences_web 2.4.3
- shared_preferences_windows 2.4.1
- sky_engine 0.0.0
- source_span 1.10.1
- stack_trace 1.12.1
- stream_channel 2.1.4
- string_scanner 1.4.1
- term_glyph 1.2.2
- test_api 0.7.4
- typed_data 1.4.0
- vector_math 2.1.4
- vm_service 14.3.1
- web 1.1.1
- xdg_directories 1.1.0
- flutter_lints ^2.0.0 development
- flutter_test {"sdk" => "flutter"} development
- cupertino_icons ^1.0.2
- flutter {"sdk" => "flutter"}
- flutter_3d_controller ^2.2.0
- flutter_inappwebview ^6.0.0
- http ^1.1.0
- jwt_decoder ^2.0.1
- provider ^6.0.5
- shared_preferences ^2.2.2
- Flask ==2.3.3
- Flask-Bcrypt ==1.0.1
- Flask-CORS ==4.0.0
- Flask-JWT-Extended ==4.5.3
- Flask-SQLAlchemy ==3.0.5
- Werkzeug ==2.3.7
- python-dotenv ==1.0.0