Table of Contents
Photo Gallery
Modern photo gallery with S3-compatible object storage, passkey authentication, and a Docker-based setup. Extended with FotoBattle — a competitive photo battle platform featuring Elo ratings and event sourcing.
Intended as a demo project and reference implementation.
| Property | Value |
|---|---|
| Repository | Watchdog/S3-image-gallery |
| Duration | 03/2026 – active |
| Commits | 29 (Gallery) + 5 (PhotoBattle) |
| Stack | PHP 8.4, Slim 4, MariaDB 11, RustFS, Docker |
| Status | Demo / Reference implementation |
Background
Originally designed for event photos of Freunde auf 2 Pfoten e. V. Since then, it has been further developed as a standalone demo project — the FotoBattle section could be used by the association in the future.
Tech Stack
| Layer | Technology |
|---|---|
| Language | PHP 8.4 |
| Framework | Slim 4 (Routing, Middleware, PSR-7) |
| Database | MariaDB 11 (InnoDB, utf8mb4) |
| Object Storage | RustFS (S3-compatible, Apache 2.0) |
| Auth (Gallery) | WebAuthn/FIDO2 Passkeys (lbuchs/webauthn) |
| Auth (FotoBattle) | Session-based (email/password, bcrypt) |
| Templates | slim/php-view (server-side rendering) |
| Web server | Nginx Alpine (reverse proxy) |
| Tests | PHPUnit 11, PHPStan Level 6, PHP-CS-Fixer 3 |
| Deployment | Docker Compose (5–7 services) |
Phases
Phase 1 — Gallery Infrastructure (completed)
12 features (S3G-1 to S3G-12), all deployed:
- Docker infrastructure and UI design system
- S3 image management (scan, catalog, thumbnails)
- Web gallery with directory navigation
- Passkey registration via one-time password
- Event gallery management (year/date hierarchy)
- Image upload and delete functions
- Battle submission from the gallery
- Test suite and QA audit (result: 7.3/10)
Phase 2 — PhotoBattle (fully deployed)
14 features (PHOTO-1 to PHOTO-14), all deployed:
- User registration, login, roles (Voter → Photographer → Admin)
- Photo upload, 1v1 Battle & voting
- Elo rating engine with event sourcing
- Ranking & leaderboard
- Comments, likes, follow system
- User profiles, categories, tags
- Battle history, statistics, notifications