# Motorcycle Adventure Community 🏍️ A modern Flask-based web application for motorcycle enthusiasts featuring adventure stories, interactive GPS route sharing, and community engagement. ## ✨ Features ### 🎨 Modern UI/UX Design - **Tailwind CSS Integration**: Complete redesign with modern gradient backgrounds and glass morphism effects - **Responsive Design**: Mobile-first approach with optimized layouts for all screen sizes - **Interactive Components**: Smooth animations, hover effects, and modern card-based layouts - **Consistent Design Language**: Unified color scheme and component patterns throughout the app ### πŸ—ΊοΈ Advanced GPS & Route Features - **Interactive Maps**: Leaflet.js integration with OpenStreetMap tiles - **GPX File Support**: Upload, download, and visualize GPS tracks - **Route Statistics**: Distance, elevation gain, max elevation, and track points - **Start/End Markers**: Visual indicators with custom icons for route endpoints - **Map Fitting**: Automatic zoom and centering to display complete routes ### πŸ“Έ Enhanced Media Management - **Photo Gallery**: Grid-based layout with modal view and zoom functionality - **Image Thumbnails**: Automatic thumbnail generation for optimized loading - **Cover Image System**: Designated cover photos for adventure posts - **Image Descriptions**: Support for photo captions and descriptions - **Hover Effects**: Interactive image previews with smooth transitions ### πŸ‘₯ Community & Social Features - **Adventure Posts**: Rich content creation with titles, subtitles, and detailed stories - **Comment System**: Community discussions on adventure posts - **Like System**: Engagement tracking with real-time updates - **Real-time Chat System**: Modern chat interface with room management - **Post-linked Discussions**: Chat rooms connected to specific adventure posts - **Chat Categories**: Organized rooms for different topics (general, technical, routes, etc.) - **Mobile API Integration**: RESTful API for mobile app connectivity - **User Profiles**: Personal dashboards with adventure statistics - **Difficulty Ratings**: 5-star system for adventure difficulty assessment - **Publication Workflow**: Admin approval system for content moderation ### πŸ” User Management & Authentication - **Secure Authentication**: Flask-Login with session management - **User Profiles**: Personal information and adventure history - **Role-Based Access**: User and admin permissions - **Adventure Statistics**: Published vs pending post counts - **Registration System**: Email-based user registration ### πŸ› οΈ Admin Panel & Analytics - **Comprehensive Dashboard**: User and post management interface with statistics - **Content Moderation**: Review and approve community posts - **User Analytics**: User engagement and activity metrics with page view tracking - **Post Management**: Bulk operations and detailed post information - **Chat Management**: Full chat room administration with merge capabilities - **Password Reset System**: Admin-controlled password reset with secure tokens - **Mail System Configuration**: SMTP settings and email template management - **System Configuration**: Admin-only settings and controls ### οΏ½ Real-time Chat System - **Modern Chat Interface**: App-style design with gradient backgrounds and card layouts - **Room Management**: Create, join, and manage chat rooms with categories - **Post Integration**: Link chat rooms to specific adventure posts for focused discussions - **Admin Controls**: Comprehensive chat administration with room merging and moderation - **Mobile API**: RESTful API endpoints for mobile app integration - **Real-time Updates**: JavaScript polling for live message updates - **Message Features**: Text messages with editing, deletion, and system notifications ### οΏ½πŸ“± Mobile-Optimized Experience - **Touch-Friendly Interface**: Optimized buttons and interactions for mobile devices - **Responsive Grids**: Adaptive layouts that work perfectly on phones and tablets - **Progressive Enhancement**: Graceful degradation for older browsers - **Fast Loading**: Optimized images and efficient CSS delivery ## πŸš€ Technology Stack - **Backend**: Python Flask 3.0.0 with Blueprint architecture - **Database**: SQLAlchemy with PostgreSQL/SQLite support - **Authentication**: Flask-Login with secure session management - **Email**: Flask-Mail for notifications and verification - **Forms**: WTForms with comprehensive validation - **Frontend**: Tailwind CSS 3.x with custom components - **Maps**: Leaflet.js with OpenStreetMap integration - **File Handling**: Secure media uploads with thumbnail generation - **Chat System**: Real-time messaging with WebSocket-ready architecture - **API**: RESTful endpoints for mobile app integration - **Deployment**: Docker with Gunicorn WSGI server ## πŸ“ Project Structure ``` / β”œβ”€β”€ app/ β”‚ β”œβ”€β”€ __init__.py # Flask app factory with extensions β”‚ β”œβ”€β”€ models.py # Database models (User, Post, Image, GPX, Comment, Like) β”‚ β”œβ”€β”€ forms.py # WTForm definitions for all features β”‚ β”œβ”€β”€ extensions.py # Flask extensions configuration β”‚ β”œβ”€β”€ media_config.py # Media handling and upload configuration β”‚ β”œβ”€β”€ routes/ # Route blueprints β”‚ β”‚ β”œβ”€β”€ main.py # Landing page and general routes β”‚ β”‚ β”œβ”€β”€ auth.py # Authentication and user management β”‚ β”‚ β”œβ”€β”€ community.py # Community features and post management β”‚ β”‚ └── admin.py # Admin panel and analytics β”‚ β”œβ”€β”€ templates/ # Jinja2 templates β”‚ β”‚ β”œβ”€β”€ base.html # Base template with navigation β”‚ β”‚ β”œβ”€β”€ index.html # Landing page with hero section β”‚ β”‚ β”œβ”€β”€ auth/ # Authentication templates β”‚ β”‚ β”œβ”€β”€ community/ # Community feature templates β”‚ β”‚ β”‚ β”œβ”€β”€ index.html # Community homepage β”‚ β”‚ β”‚ β”œβ”€β”€ new_post.html # Adventure creation form β”‚ β”‚ β”‚ β”œβ”€β”€ edit_post.html # Adventure editing interface β”‚ β”‚ β”‚ β”œβ”€β”€ post_detail.html # Detailed adventure view with maps β”‚ β”‚ β”‚ └── profile.html # User profile dashboard β”‚ β”‚ β”œβ”€β”€ admin/ # Admin panel templates β”‚ β”‚ β”‚ β”œβ”€β”€ dashboard.html # Analytics dashboard β”‚ β”‚ β”‚ β”œβ”€β”€ posts.html # Post management β”‚ β”‚ β”‚ └── users.html # User management β”‚ β”‚ └── errors/ # Error pages (404, 500) β”‚ └── static/ # Static assets and media β”‚ β”œβ”€β”€ favicon.ico β”‚ β”œβ”€β”€ images/ # App images and logos β”‚ └── media/ # User-uploaded content β”‚ └── posts/ # Post media organized by ID β”œβ”€β”€ instance/ # Instance-specific files β”‚ β”œβ”€β”€ uploads/ # Legacy upload directory β”‚ └── *.db # SQLite database files β”œβ”€β”€ migrations/ # Database migration scripts β”œβ”€β”€ config.py # Multi-environment configuration β”œβ”€β”€ requirements.txt # Python dependencies β”œβ”€β”€ run.py # Application entry point β”œβ”€β”€ manage_media.py # Media management utilities β”œβ”€β”€ test_media.py # Media system tests β”œβ”€β”€ Dockerfile # Docker configuration └── docker-compose.yml # Docker Compose setup ``` ## οΏ½ API Documentation The platform provides a comprehensive RESTful API for mobile app integration and third-party services. ### Base URL ``` https://your-domain.com/api/v1 ``` ### Authentication All API endpoints use session-based authentication. Mobile apps can authenticate using: ```http POST /auth/login Content-Type: application/json { "email": "user@example.com", "password": "password" } ``` ### Chat API Endpoints #### Get Chat Rooms ```http GET /api/v1/chat/rooms ``` Response: ```json { "rooms": [ { "id": 1, "name": "General Discussion", "category": "general", "post_id": null, "created_at": "2024-01-01T10:00:00Z" } ] } ``` #### Join Chat Room ```http POST /api/v1/chat/rooms/{room_id}/join ``` #### Send Message ```http POST /api/v1/chat/rooms/{room_id}/messages Content-Type: application/json { "content": "Hello, world!" } ``` #### Get Messages ```http GET /api/v1/chat/rooms/{room_id}/messages?page=1&per_page=50 ``` ### Posts API Endpoints #### Get Posts ```http GET /api/v1/posts?page=1&per_page=20 ``` #### Create Post ```http POST /api/v1/posts Content-Type: multipart/form-data title: "Adventure Title" content: "Post content" images: [file uploads] gpx_file: [GPX file upload] ``` ### User API Endpoints #### Get User Profile ```http GET /api/v1/users/{user_id} ``` #### Update Profile ```http PUT /api/v1/users/profile Content-Type: application/json { "bio": "Updated bio", "location": "New location" } ``` ## οΏ½πŸš€ Quick Start ### Local Development 1. **Clone the repository** ```bash git clone cd motorcycle-adventure-community ``` 2. **Create virtual environment** ```bash python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 3. **Install dependencies** ```bash pip install -r requirements.txt ``` 4. **Set environment variables** ```bash export FLASK_APP=run.py export FLASK_ENV=development export SECRET_KEY="your-secret-key-here" export DATABASE_URL="sqlite:///instance/moto_adventure_dev.db" ``` 5. **Initialize database** ```bash flask db init flask db migrate -m "Initial migration" flask db upgrade ``` 6. **Create media directories** ```bash mkdir -p app/static/media/posts mkdir -p instance/uploads ``` 7. **Run the application** ```bash python run.py ``` 8. **Access the application** - Open http://localhost:5000 in your browser - Register a new account to start sharing adventures - Upload GPX files and photos to test the full functionality ### 🐳 Docker Deployment 1. **Build and run with Docker Compose** ```bash docker-compose up --build ``` 2. **Access the application** - Web application: http://localhost:8100 - PostgreSQL database: localhost:5432 - API endpoints: http://localhost:8100/api/v1 3. **Production deployment** ```bash # Set production environment variables export FLASK_ENV=production export SECRET_KEY="your-secure-production-key" export DATABASE_URL="postgresql://user:password@localhost:5432/moto_adventure" export MAIL_SERVER="your-smtp-server.com" export MAIL_USERNAME="your-email@domain.com" export MAIL_PASSWORD="your-email-password" # Run in production mode docker-compose -f docker-compose.prod.yml up -d ``` ### πŸ”§ Configuration #### Environment Variables - `SECRET_KEY`: Flask secret key for session management - `DATABASE_URL`: Database connection string - `MAIL_SERVER`: SMTP server for email notifications - `MAIL_PORT`: SMTP port (default: 587) - `MAIL_USE_TLS`: Enable TLS for email (default: True) - `MAIL_USERNAME`: Email account username - `MAIL_PASSWORD`: Email account password - `UPLOAD_PATH`: Custom upload directory path - `MAX_CONTENT_LENGTH`: Maximum file upload size #### Admin Configuration To create an admin user: ```bash # Access the container docker exec -it moto-adventure-app bash # Run Python shell python >>> from app import create_app, db >>> from app.models import User >>> app = create_app() >>> with app.app_context(): ... admin = User(email='admin@example.com', is_admin=True) ... admin.set_password('secure_password') ... db.session.add(admin) ... db.session.commit() ``` ### πŸ“± Testing Features 1. **Create an Adventure Post** - Register and login to your account - Click "Share New Adventure" - Upload photos and GPX files - Add title, subtitle, and adventure story 2. **Explore Interactive Maps** - View adventure posts with GPS tracks - See route statistics and elevation data - Download GPX files for your own use 3. **Admin Panel Access** - Create admin user in database - Access /admin for content management - Review and approve community posts - PostgreSQL database: localhost:5432 ## βš™οΈ Configuration The application supports multiple environments through environment variables: ### Core Settings - `FLASK_ENV`: development, testing, production - `SECRET_KEY`: Flask secret key for sessions and CSRF protection - `DATABASE_URL`: Database connection string (SQLite/PostgreSQL) ### Media & Upload Settings - `UPLOAD_FOLDER`: Directory for user uploads (default: instance/uploads) - `MEDIA_FOLDER`: Directory for processed media (default: app/static/media) - `MAX_CONTENT_LENGTH`: Maximum file upload size (default: 16MB) ### Email Configuration - `MAIL_SERVER`: SMTP server for email notifications - `MAIL_USERNAME`: Email username for authentication - `MAIL_PASSWORD`: Email password or app-specific password - `MAIL_USE_TLS`: Enable TLS encryption (default: True) ### Development Settings - `FLASK_DEBUG`: Enable debug mode (development only) - `WTF_CSRF_ENABLED`: Enable CSRF protection (default: True) ## 🌟 Features Overview ### 🏠 Enhanced Landing Page - **Hero Section**: Stunning Transalpina panorama background with glass morphism overlay - **Featured Adventures**: Carousel showcasing community highlights - **Statistics Dashboard**: Live counters for users, adventures, and community engagement - **Call-to-Action**: Prominent registration and exploration prompts - **Pensiune BuonGusto**: Integrated accommodation promotion ### πŸ” Advanced Authentication System - **Secure Registration**: Email validation with password strength requirements - **Session Management**: Persistent login with "Remember Me" functionality - **Password Security**: Bcrypt hashing with salt for maximum security - **User Profiles**: Comprehensive profile management with statistics - **Role-Based Access**: Granular permissions for users and administrators ### πŸ—ΊοΈ Interactive Community Features - **Rich Post Creation**: Multi-step form with media upload and GPS integration - **Adventure Gallery**: Beautiful grid layout with filtering and search - **Real-time Engagement**: Like system with instant feedback - **Threaded Comments**: Nested discussion system for each adventure - **Social Sharing**: Easy sharing of favorite adventures - **Content Moderation**: Admin approval workflow for quality control ### πŸ“Š Comprehensive Admin Panel - **Analytics Dashboard**: User growth, post statistics, and engagement metrics - **User Management**: Detailed user profiles with activity tracking - **Content Review**: Streamlined post approval and moderation tools - **System Health**: Monitoring and configuration management - **Bulk Operations**: Efficient management of multiple users or posts ### 🎨 Modern Design System - **Tailwind CSS**: Utility-first CSS framework with custom components - **Glass Morphism**: Modern translucent effects and backdrop blur - **Gradient Backgrounds**: Beautiful color transitions throughout the app - **Micro-interactions**: Smooth animations and hover effects - **Accessibility**: WCAG compliant design with keyboard navigation support ## 🀝 Contributing We welcome contributions from the motorcycle community! Here's how you can help: 1. **Fork the repository** 2. **Create a feature branch** (`git checkout -b feature/amazing-feature`) 3. **Commit your changes** (`git commit -m 'Add some amazing feature'`) 4. **Push to the branch** (`git push origin feature/amazing-feature`) 5. **Open a Pull Request** ### Development Guidelines - Follow PEP 8 style guidelines for Python code - Use semantic commit messages - Add tests for new features - Update documentation for any changes - Ensure mobile responsiveness for UI changes ### Reporting Issues - Use the GitHub issue tracker - Include steps to reproduce the problem - Provide browser and device information - Include screenshots for UI issues ## πŸ“„ License This project is licensed under the MIT License - see the LICENSE file for details. ## πŸ™ Acknowledgments - **Beautiful Transalpina Panorama**: Stunning background image showcasing Romania's scenic highway - **Tailwind CSS**: For providing an excellent utility-first CSS framework - **Leaflet.js**: For powerful and flexible mapping capabilities - **Flask Community**: For comprehensive documentation and support - **OpenStreetMap**: For providing free and open map data - **Font Awesome**: For beautiful and consistent iconography - **Motorcycle Community**: For inspiration and feedback during development ## 🚧 Roadmap ### Upcoming Features - [ ] **Real-time Chat**: Live messaging between community members - [ ] **Event System**: Motorcycle meetups and group ride organization - [ ] **Weather Integration**: Route weather conditions and forecasts - [ ] **Mobile App**: Native iOS and Android applications - [ ] **Advanced Search**: Filter adventures by location, difficulty, and tags - [ ] **Social Features**: Follow users and curated adventure feeds - [ ] **Offline Support**: PWA capabilities for offline map viewing ### Performance Improvements - [ ] **Image Optimization**: WebP conversion and lazy loading - [ ] **Caching**: Redis integration for improved performance - [ ] **CDN Integration**: Asset delivery optimization - [ ] **Database Optimization**: Query optimization and indexing --- **Built with ❀️ for the motorcycle adventure community** For support or questions, please open an issue or contact the development team.