mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-03 18:22:57 +00:00
d166e8bd2a20041832308f65e04eb954fbcaf4a9
MyClub - Football Club Management System
A comprehensive content management system for football clubs, featuring visual page building, team management, match tracking, and engagement tools.
🚀 Quick Start
# Clone and start with Docker (recommended)
git clone <repository-url>
cd fotbal-club
make docker-up
# Or manual setup
docker-compose up -d postgres
cd backend && go run main.go &
cd frontend && npm start
Visit: http://localhost:3000 (frontend) | http://localhost:8080 (API)
📋 System Requirements
Minimum Requirements
- RAM: 2GB
- CPU: 1 core
- Storage: 10GB free space
- OS: Linux/macOS/Windows (with Docker)
Recommended Requirements
- RAM: 4GB+
- CPU: 2+ cores
- Storage: 20GB+ SSD
- OS: Ubuntu 20.04+ / CentOS 8+ / macOS 12+
Dependencies
- Docker: 20.10+ (recommended) or native installation
- Docker Compose: 2.0+ (for Docker setup)
- Node.js: 18+ (for manual development only)
- Go: 1.21+ (for manual development only)
- PostgreSQL: 14+ (managed by Docker or native)
🏗️ Architecture
High-Level Overview
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Backend │ │ Database │
│ (React) │◄──►│ (Go/Gin) │◄──►│ (PostgreSQL) │
│ Port: 3000 │ │ Port: 8080 │ │ Port: 5432 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Nginx Proxy │ │ File Storage │
│ Static Assets │ │ /uploads/ │
└─────────────────┘ └─────────────────┘
Technology Stack
Backend
- Framework: Go with Gin
- ORM: GORM
- Database: PostgreSQL (supports SQLite/MySQL)
- Authentication: JWT with CSRF protection
- File Storage: Local filesystem (/uploads)
- Email: SMTP with templates
- Background Jobs: Newsletter automation, data prefetching
Frontend
- Framework: React 18
- UI Library: Chakra UI
- State Management: React Query
- Routing: React Router
- Build Tool: CRACO (Create React App Configuration Override)
- Rich Text: Quill.js
- Visual Editor: Custom MyUIbrix page builder
Infrastructure
- Containerization: Docker & Docker Compose
- Reverse Proxy: Nginx
- Monitoring: Prometheus metrics
- Logging: Structured logging with request IDs
📁 Project Structure
fotbal-club/
├── backend/ # Go backend application
│ ├── main.go # Application entry point
│ ├── internal/ # Internal application code
│ │ ├── controllers/ # HTTP handlers
│ │ ├── models/ # Database models
│ │ ├── services/ # Business logic
│ │ ├── middleware/ # HTTP middleware
│ │ └── routes/ # Route definitions
│ ├── pkg/ # Reusable packages
│ │ ├── database/ # Database utilities
│ │ ├── email/ # Email service
│ │ └── httpclient/ # HTTP clients
│ ├── database/ # Database migrations
│ └── cache/ # Cached data files
├── frontend/ # React frontend application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API services
│ │ ├── layouts/ # Layout components
│ │ └── styles/ # CSS/styling
│ ├── public/ # Static assets
│ └── package.json # Dependencies
├── uploads/ # User uploaded files
├── dist/ # Built frontend assets
├── docker-compose.yml # Docker configuration
├── Dockerfile # Backend Docker image
├── Makefile # Development commands
└── README.md # This file
🎯 Core Features
1. Visual Page Builder (MyUIbrix)
- Drag & Drop: Elementor-style page building
- Live Preview: Real-time editing with instant feedback
- Responsive Design: Mobile/tablet/desktop preview modes
- Custom CSS: Advanced styling capabilities
- Component Library: 17+ pre-built page sections
- Template System: Save and reuse page layouts
2. Content Management
- Articles/Blog: Rich text editing with media support
- Gallery: Zonerama integration with automatic sync
- Videos: YouTube channel import and manual management
- Files: Document upload and organization
- Rich Text Editor: Quill.js with image upload
3. Sports Management
- Teams & Players: Roster management with profiles
- Matches: FACR integration with live results
- Standings: League tables and statistics
- Calendar: Event scheduling and management
- Scoreboard: Live match display system
4. Communication
- Newsletter: Automated weekly digests and notifications
- Contact Forms: Multi-channel contact management
- Comments: User engagement with reactions
- Polls & Surveys: Interactive content collection
5. Marketing & Engagement
- Sponsors: Banner management and display
- Merchandise: E-commerce for club products
- Rewards System: Gamification with points and achievements
- Shortlinks: URL tracking and analytics
6. Analytics & Monitoring
- Umami Integration: Privacy-focused analytics
- Performance Metrics: Prometheus endpoints
- Error Tracking: Centralized error reporting
- User Activity: Engagement tracking
🔧 Installation & Setup
Option 1: Docker (Recommended)
# 1. Clone repository
git clone <repository-url>
cd fotbal-club
# 2. Create environment file
cp .env.example .env
# Edit .env with your configuration
# 3. Start services
make docker-up
# 4. Initialize database (first time only)
docker-compose exec backend go run main.go -seed=true
Option 2: Manual Development Setup
# 1. Install dependencies
sudo apt update
sudo apt install postgresql nodejs npm golang-go
# 2. Setup database
sudo -u postgres createdb myclub
sudo -u postgres createuser myclub
sudo -u postgres psql -c "ALTER USER myclub PASSWORD 'password';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE myclub TO myclub;"
# 3. Start backend
cd backend
export DATABASE_URL="postgres://myclub:password@localhost/myclub?sslmode=disable"
go run main.go
# 4. Start frontend
cd frontend
npm install
npm start
Environment Configuration
Create .env file in project root:
# Database
DATABASE_URL=postgres://myclub:password@localhost:5432/myclub?sslmode=disable
# Security
JWT_SECRET=your-super-secret-jwt-key-here
CSRF_SECRET=your-csrf-secret-key-here
# Email
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# External APIs
FACR_API_KEY=your-facr-api-key
GOOGLE_MAPS_API_KEY=your-google-maps-key
YOUTUBE_API_KEY=your-youtube-api-key
UMAMI_WEBSITE_ID=your-umami-id
OPENAI_API_KEY=your-openai-key
# Club Settings
CLUB_NAME=FC Example
CLUB_DOMAIN=example.club
🚀 Deployment
Production Deployment
# 1. Build production images
docker-compose -f docker-compose.prod.yml build
# 2. Run database migrations
docker-compose exec backend go run main.go -migrate=true
# 3. Seed initial data
docker-compose exec backend go run main.go -seed=true
# 4. Start production services
docker-compose -f docker-compose.prod.yml up -d
Nginx Configuration
server {
listen 80;
server_name your-domain.com;
# Frontend
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Backend API
location /api/ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Static files
location /uploads/ {
alias /path/to/uploads/;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
📊 Performance & Scaling
Database Optimization
- Indexes: 25+ performance indexes on frequently queried columns
- Connection Pooling: GORM with optimized pool settings
- Query Timeouts: 15-second limit on database operations
- Caching: Optional Redis integration for frequently accessed data
Frontend Optimization
- Code Splitting: Lazy loading of admin pages
- Image Optimization: Automatic resizing and WebP conversion
- Bundle Size: <2MB total, <500KB initial load
- CDN Ready: Static asset optimization
Backend Performance
- HTTP Timeouts: Configurable timeouts (30s default, 5s fast)
- Circuit Breakers: Prevent cascading failures
- Rate Limiting: Configurable per-endpoint limits
- Memory Usage: <512MB for typical load (256MB minimum)
Actual Resource Usage (Docker Configuration)
Based on docker-compose.yml resource limits:
- Backend: 0.5-2.0 CPU cores, 256MB-1GB RAM
- Frontend: 0.25-2.0 CPU cores, 128MB-2GB RAM (build-time)
- PostgreSQL: 0.5-2.0 CPU cores, 512MB-2GB RAM
- Total Typical Usage: ~1.5 CPU cores, ~1GB RAM
Scaling Guidelines
- Small Club (100-500 users): Single instance, 2GB RAM sufficient
- Medium Club (500-2000 users): 4GB RAM recommended, consider read replica
- Large Club (2000+ users): 8GB+ RAM, load balancer + read replicas + Redis
🔐 Security Features
Authentication & Authorization
- JWT Tokens: Secure token-based authentication
- CSRF Protection: Double-submit cookie pattern
- Role-Based Access: Admin, Editor, User roles
- Session Management: Secure session handling
Data Protection
- XSS Prevention: Content Security Policy and sanitization
- SQL Injection: Parameterized queries via GORM
- File Upload Security: Type validation and sandboxing
- Rate Limiting: Prevent brute force attacks
Privacy Compliance
- GDPR Ready: Cookie consent and data management
- Data Minimization: Only collect necessary data
- Right to Deletion: User data export/removal
- Analytics: Privacy-focused (Umami) alternative to Google Analytics
🛠️ Development Guide
Adding New Features
- Backend Models: Add to
internal/models/ - Database Migration: Create in
database/migrations/ - API Endpoints: Add controllers in
internal/controllers/ - Frontend Components: Add to
frontend/src/components/ - Pages: Add to
frontend/src/pages/ - Routes: Update
internal/routes/and frontend routing
Code Standards
- Go: Follow standard Go formatting and conventions
- React: Use TypeScript, functional components, hooks
- CSS: Use Chakra UI theme system, avoid inline styles
- Database: Use GORM conventions, add indexes for performance
Testing
# Backend tests
cd backend && go test ./...
# Frontend tests
cd frontend && npm test
# Integration tests
make test-integration
Debugging
- Backend Logs:
docker-compose logs backend - Frontend DevTools: React DevTools, Redux DevTools
- Database:
docker-compose exec postgres psql -U myclub myclub - API Testing: Use Swagger UI at
/api/v1/docs
📚 API Documentation
Authentication
POST /api/v1/auth/login
POST /api/v1/auth/logout
POST /api/v1/auth/refresh
Content Management
GET /api/v1/articles
POST /api/v1/admin/articles
PUT /api/v1/admin/articles/:id
DELETE /api/v1/admin/articles/:id
Sports Data
GET /api/v1/matches
GET /api/v1/teams
GET /api/v1/players
GET /api/v1/standings
Full API Reference
Visit: http://localhost:8080/api/v1/docs (when running)
🆘 Troubleshooting
Common Issues
Database Connection Failed
# Check PostgreSQL status
docker-compose ps postgres
docker-compose logs postgres
# Reset database
docker-compose down -v
docker-compose up postgres
Frontend Build Errors
# Clear cache and reinstall
cd frontend
rm -rf node_modules package-lock.json
npm install
npm start
Backend Migration Issues
# Check migration status
docker-compose exec backend go run main.go -migrate-status
# Force re-run migrations
docker-compose exec backend go run main.go -migrate-force
Performance Issues
- Check database query logs for slow queries
- Monitor memory usage with
docker stats - Use browser dev tools for frontend profiling
- Check Nginx access logs for traffic patterns
Getting Help
- Check documentation in
/docsdirectory - Review error logs in Docker containers
- Use admin support button in the interface
- Check GitHub issues for known problems
📈 Monitoring & Maintenance
Health Checks
# Backend health
curl http://localhost:8080/api/v1/health
# Frontend health
curl http://localhost:3000
# Database health
docker-compose exec postgres pg_isready
Backup Procedures
# Database backup
docker-compose exec postgres pg_dump -U myclub myclub > backup.sql
# File backup
tar -czf uploads-backup.tar.gz uploads/
# Automated backup script
./scripts/backup.sh
Log Management
- Application Logs: Structured JSON logging
- Access Logs: Nginx access logs
- Error Logs: Centralized error tracking
- Performance Metrics: Prometheus endpoints
🤝 Contributing
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
Development Workflow
- Use feature branches for all changes
- Write tests for new functionality
- Update documentation for API changes
- Follow code style guidelines
- Ensure all tests pass before PR
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Chakra UI for excellent React component library
- GORM for powerful Go ORM
- FACR for Czech football data API
- Zonerama for gallery integration
- Umami for privacy-focused analytics
📞 Support
For support and questions:
- Documentation:
/admin/docs(when running) - Issues: GitHub Issues
- Email: support@your-domain.com
- Community: [Discord/Slack channel]
MyClub - Empowering football clubs with modern technology. modified content modified
Description
Languages
TypeScript
49.5%
CSS
23.3%
Go
18.9%
HTML
3.8%
JavaScript
2.2%
Other
2.1%