mirror of
https://github.com/Dvorinka/ClubLogos.git
synced 2026-06-04 20:12:57 +00:00
11 KiB
11 KiB
🚀 Major Update Summary
What's New - Enhanced Feature Set
🎯 Critical Enhancements Completed
1. Separate Home & Admin Pages
- ✅ Home Page (
/) - Public logo gallery with search - ✅ Admin Page (
/admin.html) - Upload interface with club search - ✅ Navigation - Easy switching between pages
- ✅ Optimized Bundles - Separate JS files for each page
2. Dual Format Support (SVG + PNG)
- ✅ Upload SVG - Automatically converted to PNG
- ✅ Upload PNG - Optimized and stored
- ✅ Dual Storage - Both formats kept (
logos/svg/andlogos/png/) - ✅ Primary PNG - PNG served by default for compatibility
- ✅ Format Selection -
?format=svgor?format=pngquery params - ✅ Auto-conversion - SVG → PNG (512x512px)
- ✅ Optimization - PNG compression applied
3. Club Website Integration
- ✅ Website Field - Added to database and forms
- ✅ Browser Search - "Search Online" button for finding club websites
- ✅ Google Integration - Quick link to search for official site
- ✅ FAČR API - Retrieves website from API when available
- ✅ Demo Data - Demo clubs include website URLs
4. Required Club Name Validation
- ✅ Backend Validation - Club name required in POST request
- ✅ Frontend Validation - Form won't submit without name
- ✅ GitHub Actions - PR validation checks for club name
- ✅ Clear Warnings - UI shows requirements prominently
- ✅ Auto-rejection - Missing club name = rejected upload
5. GitHub Actions Logo Validation
- ✅ Automated PR Checks - Validates logo uploads
- ✅ UUID Validation - Filename must be valid UUID
- ✅ Format Check - Only .svg and .png allowed
- ✅ Metadata Check - PR must include club name and ID
- ✅ Auto-comments - Adds success/failure comments
- ✅ PR Template - Dedicated template for logo uploads
6. List Logos Endpoint
- ✅ GET /logos - Returns all uploaded logos
- ✅ Full Metadata - Name, city, type, website, formats
- ✅ Sorted Output - Alphabetical by club name
- ✅ Gallery Support - Powers homepage gallery
7. Correct FAČR API Usage
- ✅ Fixed URL - Now uses
https://facr.tdvorak.dev - ✅ Search Integration -
/club/search?q={query} - ✅ Club Details -
/club/{id} - ✅ Demo Fallback - Works offline with demo data
🗄️ Database Changes
Updated Schema
CREATE TABLE logos (
id TEXT PRIMARY KEY,
club_name TEXT NOT NULL, -- NOW REQUIRED ✨
club_city TEXT,
club_type TEXT,
club_website TEXT, -- NEW FIELD ✨
has_svg INTEGER DEFAULT 0, -- NEW FIELD ✨
has_png INTEGER DEFAULT 0, -- NEW FIELD ✨
primary_format TEXT DEFAULT 'png',-- NEW FIELD ✨
file_size_svg INTEGER, -- NEW FIELD ✨
file_size_png INTEGER, -- NEW FIELD ✨
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
Migration from Old Schema
If you have existing data, the table will be automatically recreated with new fields on first run.
📁 File Structure Changes
New Files Created
frontend/
├── admin.html # NEW: Admin panel page
├── src/
│ ├── home.js # NEW: Home page logic
│ └── admin.js # NEW: Admin page logic
backend/
├── image_converter.go # NEW: SVG to PNG conversion
├── handlers.go # UPDATED: New endpoints & logic
.github/
├── workflows/
│ └── validate-logo-upload.yml # NEW: GitHub Actions
└── PULL_REQUEST_TEMPLATE/
└── logo_upload.md # NEW: Logo upload PR template
docs/
├── FEATURES.md # NEW: Complete feature list
└── UPDATE_SUMMARY.md # NEW: This file
Updated Files
backend/main.go- Added logo subdirectories, list endpointbackend/go.mod- Added image processing dependenciesbackend/facr_client.go- Added Website field to Club structfrontend/vite.config.js- Multi-page build supportfrontend/src/main.js- Moved to home.js
🔧 Setup Requirements
Backend Dependencies
# Go modules (already configured)
go mod tidy
# Optional: Image conversion tools
# Install ONE of these for SVG → PNG conversion:
# Option 1: ImageMagick (recommended)
# Windows: choco install imagemagick
# Mac: brew install imagemagick
# Linux: sudo apt install imagemagick
# Option 2: Inkscape
# Windows: choco install inkscape
# Mac: brew install inkscape
# Linux: sudo apt install inkscape
Note: SVG conversion is optional. If neither tool is installed, SVG files will still be stored, just not auto-converted to PNG.
Frontend Dependencies
cd frontend
npm install # Already configured, no new deps
🚀 How to Use New Features
1. Browse Logos (Home Page)
# Start services
docker-compose up
# Visit
http://localhost:3000/
# Features available:
- View all uploaded logos
- Search/filter logos
- Click to copy logo URL
2. Upload Logos (Admin Page)
# Visit
http://localhost:3000/admin.html
# Steps:
1. Search for a club
2. Click "Select" on search result
3. Fill in club details (name is REQUIRED)
4. Optionally search for club website
5. Upload SVG or PNG logo
6. Submit (both formats will be available)
3. Use API with Format Selection
# Get logo (PNG by default)
curl http://localhost:8080/logos/{uuid}
# Get specific format
curl http://localhost:8080/logos/{uuid}?format=svg
curl http://localhost:8080/logos/{uuid}?format=png
# List all logos
curl http://localhost:8080/logos
# Get logo metadata
curl http://localhost:8080/logos/{uuid}/json
4. Upload via GitHub PR
1. Create PR with logo file named {uuid}.svg or {uuid}.png
2. Use PR template to provide:
- Club Name: AC Sparta Praha
- Club ID: 22222222-3333-4444-5555-666666666666
3. GitHub Actions will validate
4. Auto-approved if valid, auto-rejected if invalid
📊 API Changes
New Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /logos |
NEW - List all logos |
Enhanced Endpoints
| Method | Endpoint | Changes |
|---|---|---|
| GET | /logos/:id |
Now supports ?format=svg or ?format=png |
| GET | /logos/:id/json |
Returns has_svg, has_png, both URLs |
| POST | /logos/:id |
Requires club_name, stores both formats |
Response Changes
GET /logos/:id/json - New Response:
{
"id": "uuid",
"club_name": "AC Sparta Praha",
"club_city": "Praha",
"club_type": "football",
"club_website": "https://www.sparta.cz", // NEW
"has_svg": true, // NEW
"has_png": true, // NEW
"primary_format": "png", // NEW
"logo_url": "http://localhost:8080/logos/uuid?format=png",
"logo_url_svg": "http://localhost:8080/logos/uuid?format=svg", // NEW
"logo_url_png": "http://localhost:8080/logos/uuid?format=png", // NEW
"file_size_svg": 12345, // NEW
"file_size_png": 8192, // NEW
"created_at": "2024-01-01T12:00:00Z",
"updated_at": "2024-01-01T12:00:00Z"
}
POST /logos/:id - New Required Field:
curl -X POST http://localhost:8080/logos/{uuid} \
-F "file=@logo.svg" \
-F "club_name=AC Sparta Praha" \ # NOW REQUIRED
-F "club_city=Praha" \
-F "club_type=football" \
-F "club_website=https://sparta.cz" # NEW FIELD
⚠️ Breaking Changes
1. club_name is now REQUIRED
- Old: Could upload without club name
- New: Upload rejected without club_name
- Migration: Existing logos without names need manual update
2. Logo file paths changed
- Old:
./logos/{uuid}.svg - New:
./logos/svg/{uuid}.svgand./logos/png/{uuid}.png - Migration: Run migration script or move files manually
3. Database schema updated
- Old: Single file_extension and file_size columns
- New: Separate columns for SVG and PNG
- Migration: Database recreated on first run (backup first!)
🔄 Migration Guide
For Existing Installations
Step 1: Backup Data
# Backup database
cp db.sqlite db.sqlite.backup
# Backup logos
cp -r logos logos.backup
Step 2: Update Code
git pull origin main
cd backend && go mod tidy
cd ../frontend && npm install
Step 3: Migrate Files
# Create new structure
mkdir -p logos/svg logos/png
# Move existing files (manual process)
# SVG files to logos/svg/
# PNG files to logos/png/
Step 4: Update Database
# Database will auto-migrate on first run
# Or manually run SQL migration
Step 5: Restart Services
docker-compose down
docker-compose up --build
🧪 Testing New Features
1. Test SVG Upload
# Visit admin panel
http://localhost:3000/admin.html
# Upload SVG file
# Check: Both SVG and PNG should be created
ls logos/svg/{uuid}.svg
ls logos/png/{uuid}.png
2. Test Format Selection
# Get PNG
curl http://localhost:8080/logos/{uuid}?format=png
# Get SVG
curl http://localhost:8080/logos/{uuid}?format=svg
# Default (PNG)
curl http://localhost:8080/logos/{uuid}
3. Test Logo List
curl http://localhost:8080/logos | jq
4. Test GitHub Actions
# Create PR with logo upload
# Check that Actions run
# Verify validation messages
📈 Performance Impact
Improvements
- ✅ Faster Loading - PNG serves faster than SVG
- ✅ Better Caching - Optimized PNG files
- ✅ Dual Format - Clients can choose best format
- ✅ Code Splitting - Separate bundles for pages
Considerations
- ⚠️ Storage - 2x storage (SVG + PNG)
- ⚠️ Upload Time - Slightly longer (conversion)
- ⚠️ Dependencies - ImageMagick/Inkscape optional
🎉 Summary
What You Get
- ✅ Complete Gallery - Beautiful homepage with all logos
- ✅ Professional Admin - Full-featured upload interface
- ✅ Dual Formats - SVG and PNG support
- ✅ Website Links - Club websites integrated
- ✅ Auto-validation - GitHub Actions protection
- ✅ Better API - More endpoints and options
- ✅ Required Fields - Data quality enforced
Ready to Use
All features are production-ready and tested. Simply run:
docker-compose up
Then visit:
- Home: http://localhost:3000/
- Admin: http://localhost:3000/admin.html
- API: http://localhost:8080/logos
🎊 Update Complete! All Features Enhanced! 🎊