5.4 KiB
Gallery System Implementation
Overview
Comprehensive album-based gallery system with Zonerama integration, displaying albums with photo previews, detailed album pages, and interactive photo modals.
Features Implemented
1. Homepage Gallery Section
File: frontend/src/components/home/PhotosSection.tsx
- Displays 5 most recent albums from Zonerama
- Each album shows:
- Cover image (first photo from album)
- Album title
- Date
- Photo count
- Links to individual album detail pages
- "Zobrazit vše" button linking to full gallery page
- Zonerama copyright attribution notice
2. Gallery Page (Album Grid)
File: frontend/src/pages/GalleryPage.tsx
- Shows all available albums in a responsive grid (1/2/3 columns)
- Albums sorted by most recent first (based on API response order)
- Each album card displays:
- Cover image or placeholder
- Album title
- Date and photo count
- View count badge (if available)
- Click on album navigates to album detail page
- Zonerama attribution banner at top
- Loading, error, and empty states
3. Album Detail Page
File: frontend/src/pages/AlbumDetailPage.tsx
- Displays all photos from a specific album
- Breadcrumb navigation (Home → Galerie → Album)
- Album header with:
- Album title
- Date, photo count, view count
- "Zobrazit na Zonerama" button (external link)
- Responsive photo grid (2/3/4/5 columns based on screen size)
- Zonerama attribution notice
- Click on any photo opens modal preview
4. Photo Modal
File: frontend/src/components/gallery/PhotoModal.tsx
Interactive modal for photo viewing with:
- Full-size photo display - Shows image at max 80vh height
- Copy button - Copies image to clipboard (with fallback to URL copy)
- Download button - Downloads image to user's device
- View Original button - Opens photo on Zonerama website
- Album title display
- Zonerama copyright notice
- Dark backdrop with blur effect
- Responsive design
5. Backend Updates
File: internal/controllers/gallery_controller.go
Fixed: Album fetching to properly parse Zonerama API response structure:
- Zonerama API returns
{"input_link": "...", "albums": [...]} - Updated
FetchAlbumto handle wrapped response correctly - Extracts first album from albums array
6. Routing
File: frontend/src/App.tsx
Added route for album detail pages:
/galerie/album/:id
API Endpoints Used
Public Endpoints
GET /api/v1/gallery/albums- Get all albumsGET /api/v1/gallery/albums/:id- Get single album with photos
Admin Endpoints (existing)
GET /api/v1/admin/gallery/profile- Get Zonerama profile metadataPOST /api/v1/admin/gallery/albums/fetch- Fetch single album from ZoneramaDELETE /api/v1/admin/gallery/albums/:id- Delete album
Data Flow
-
Prefetch Service (
internal/services/prefetch_service.go)- Periodically fetches albums from Zonerama API
- Stores in
cache/prefetch/zonerama_albums.json - Also maintains
cache/prefetch/zonerama_profile.jsonfor metadata
-
Gallery Controller serves cached albums to frontend
- Albums ordered by most recent first (based on fetch order)
- Includes full photo data for each album
-
Frontend Components
- HomePage shows 5 most recent albums
- GalleryPage shows all albums
- AlbumDetailPage displays individual album photos
- PhotoModal provides interactive photo viewing
Zonerama Attribution
Copyright notices added to:
- PhotoModal: Footer with Zonerama link
- AlbumDetailPage: Info banner above photo grid
- GalleryPage: Info banner in header
- PhotosSection (Homepage): Small banner above album grid
Format: "📸 Všechny fotografie jsou z platformy Zonerama"
User Experience Flow
- User visits homepage → sees 5 recent albums
- Clicks "Zobrazit vše" → navigates to full gallery
- Clicks on album → views all photos in album
- Clicks on photo → opens modal with copy/download/view original options
- Can navigate back via breadcrumbs or browser back button
Responsive Design
- Mobile (base): 1 column albums, 2 column photos
- Tablet (md): 2 column albums, 3 column photos
- Desktop (lg): 3 column albums, 4 column photos
- Large Desktop (xl): 5 column photos in album detail
Future Enhancements (Optional)
- Pagination for large album collections
- Image lazy loading optimization
- Lightbox navigation (prev/next photo in modal)
- Album search/filter functionality
- Share functionality for photos/albums
- Photo metadata display (if available from Zonerama)
Testing Checklist
- Homepage displays 5 most recent albums
- Gallery page shows all albums
- Album detail page loads correctly with photos
- Photo modal opens on photo click
- Copy button works (image or URL fallback)
- Download button downloads photo
- View original link opens Zonerama page
- All Zonerama attributions visible
- Responsive layout works on mobile/tablet/desktop
- Loading and error states display correctly
- Empty states show appropriate messages
- Navigation and breadcrumbs work correctly
Files Modified/Created
Created:
frontend/src/components/gallery/PhotoModal.tsxfrontend/src/pages/AlbumDetailPage.tsxGALLERY_SYSTEM_IMPLEMENTATION.md
Modified:
frontend/src/pages/GalleryPage.tsxfrontend/src/components/home/PhotosSection.tsxfrontend/src/App.tsxinternal/controllers/gallery_controller.go