Files
MyClub/DOCS/overview.md
T
Tomas Dvorak dfc079288f hot fix #1
2026-01-26 08:13:18 +01:00

7.3 KiB
Raw Blame History

MyClub - Project Overview

Project Description

MyClub is a comprehensive football club CMS and website platform. It combines a Go (Gin) REST API backend with a modern React frontend to power club operations endtoend: content/news, matches/standings (FAČR integration), teams/players, gallery and videos, banners/sponsors, newsletters, polls, comments, a live scoreboard overlay, and a powerful visual editor (MyUIbrix) for building the homepage.

Technical Stack

Backend

  • Go (Golang) with Gin Web Framework
  • PostgreSQL via GORM ORM; migrations in database/
  • JWT authentication with rolebased access (Admin, Editor, User)
  • REST API, static uploads at /uploads, email templates
  • Background jobs: prefetcher (FAČR/YouTube/Zonerama), newsletter automation
  • Prometheus metrics, rate limiting, CORS, gzip, request IDs

Frontend

  • React 18 (TypeScript) with Chakra UI, React Router, React Query
  • ClubThemeContext dynamic theming; dark mode and typography system
  • Built with CRA + CRACO; service worker/PWA setup
  • Modern UI components, responsive layouts, accessibility focus

DevOps & Infrastructure

  • Docker Compose for local dev (backend 8080, frontend 3000, Postgres 5432)
  • Nginx serving frontend build in production; static /uploads from backend
  • Prometheus metrics; productionsafe logging; health checks
  • CI/CD ready (GitHub Actions examples); Makefile helpers

Core Features

  • Website & CMS

    • Articles/blog with rich text editor (images, attachments), categories, tags, search
    • Comments with reactions and moderation; attachments open in new tab
    • Static/legal pages (Privacy, Terms, Cookie policy with preferences)
  • Sports

    • Teams and players (profiles, positions, numbers, nationality translations)
    • Matches: FAČR integration (schedule/results), upcoming/history, search with past scores
    • Tables/standings and competition aliases; team name/logo overrides
    • Scoreboard overlay and Remote controller; admin Scoreboard page
  • Media

    • Gallery via Zonerama integration with caching and album covers
    • Videos: auto import from YouTube channel + manual items, dedup + datesorted
    • Local uploads management; simplified file previews
  • Engagement

    • Polls with multiple styles (stars, scale, choices, chips/cards), live results, embedded on pages
    • Rewards (Odměny & Úspěchy): simplified admin, mandatory avatar upload unlock, unlimited stock support
  • Communication

    • Newsletter automation: weekly digest, match reminders, results, blog notifications
    • Recipient preferences, previews in admin, logs and scheduling
    • Contacts and messages with forms and saved locations for events
  • Marketing

    • Sponsors with categories and placements
    • Banners/ads management with presets and display rules
  • Navigation & Theming

    • Public navbar hides empty sections (articles, players, activities, videos, gallery)
    • Admin navigation with editable categories; perpage permissions (Editors on articles/activities/shortlinks)
    • Club theming via Chakra + ClubThemeContext; dark mode and typography controls
  • MyUIbrix Visual Editor

    • Draganddrop homepage builder, inline text editing, style/CSS editor, column layouts
    • Variants (e.g., hero/news/videos), bulletproof style system, viewport simulator
    • State controller, autosave, backend preview/validation endpoints, error boundary, safe DOM helpers
  • Analytics

    • Umami integration, admin dashboards, admin exclusion and debugging tools
  • Maps & Location

    • Google Maps integration, vector maps, map link importer, reusable saved locations
  • Security & Performance

    • JWT auth, CSRF, XSS protection, input validation, rate limiting, security headers
    • HTTP timeouts, circuit breakers, DB timeouts, performance indexes, Prometheus metrics
  • Admin & Tools

    • 30+ admin pages, global support button with context, docs viewer at /admin/docs
    • Shortlinks system; cache/prefetch tools

Project Structure

fotbal-club/
├── cmd/                      # Entry points / tools
├── internal/                 # Backend (controllers, middleware, models, routes, services)
├── pkg/                      # Reusable backend packages (email, httpclient, etc.)
├── database/                 # SQL migrations and seeds
├── frontend/                 # React app (Chakra UI, React Query, Router)
├── DOCS/                     # Documentation (guides, audits, quick starts)
├── diagrams/                 # Mermaid diagrams (see section below)
├── static/                   # Public static assets
├── templates/                # Email/templates if used
├── uploads/                  # Useruploaded files (served at /uploads)
├── docker-compose.yml        # Local dev stack
└── go.mod                    # Go module definition

Key Technical Components

Backend Architecture

  • RESTful API with modular controllers and services
  • Middleware: auth (JWT/optional), rate limiting, CORS, gzip, recovery with request IDs
  • Background jobs: FAČR/YouTube/Zonerama prefetch, newsletter automation
  • Static file server for /uploads; Prometheus metrics at /metrics

Frontend Architecture

  • Componentbased UI with Chakra UI
  • Data layer via React Query; React Router for routing
  • ClubThemeContext for dynamic colors; responsive design
  • PWAready; accessibility best practices

Security Features

  • CSRF protection
  • XSS prevention
  • Rate limiting
  • Secure password hashing (bcrypt)
  • Input validation and sanitization

Development Setup

Quick start (Docker Compose)

  1. Copy .env.example to .env and adjust settings
  2. Start the stack: make docker-up
  3. Health check: http://localhost:8080/api/v1/health
  4. Frontend: http://localhost:3000 (proxies API to backend)
  5. Optional seed: set SEED_DATABASE=true in .env and restart

Manual dev (advanced)

  • Backend: go mod download && go run main.go
  • Frontend: cd frontend && npm install && npm start

Deployment

  • Docker images for backend and frontend (Nginx) with environment configuration
  • Static uploads served by backend; configure reverse proxy and SSL as needed

API Documentation

  • See DOCS/DOCS_API_ROUTES.md for route references
  • Admin inapp docs viewer: /admin/docs
  • Health: GET /api/v1/health, Metrics: /metrics

Diagrams

Key Mermaid diagrams live under diagrams/ (open diagrams/index.html to browse rendered versions):

  • System: diagrams/system-overall.mmd, diagrams/system-overall-clean.mmd
  • Backend: diagrams/backend-routes-overview.mmd, diagrams/backend-middleware-pipeline.mmd, diagrams/backend-packages.mmd, diagrams/backend-jobs.mmd
  • Frontend: diagrams/frontend-architecture.mmd, diagrams/frontend-routes.mmd, diagrams/frontend-homepage.mmd, diagrams/frontend-overall.mmd, diagrams/frontend-everything.mmd
  • Data: diagrams/db-models.mmd, diagrams/db-er.mmd
  • Flows: diagrams/auth-flow.mmd, diagrams/comments-flow.mmd, diagrams/newsletter-flow.mmd, diagrams/shortlinks-flow.mmd, diagrams/upload-flow.mmd, diagrams/gallery-zonerama-flow.mmd, diagrams/scoreboard-flow.mmd
  • Admin: diagrams/admin-overall.mmd

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a new Pull Request

License

[Specify License]