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