SnapAlbum is building a simple photo gallery service. Users can:
- Upload photos - drag and drop images (JPEG, PNG, WebP) up to 20 MB each. Auto-generate thumbnails (small, medium, large).•Albums - organize photos into albums with a title, description, and cover photo.•Sharing - generate public gallery links. Viewers can browse photos in a masonry grid layout.•EXIF data - extract and display camera info, date taken, and GPS coordinates (if present).•Slideshow - full-screen slideshow mode for viewing albums.•Download - download individual photos or entire albums as a ZIP file.
Targeting 20,000 users with 5 million photos total.
Design an image gallery service where users upload photos, organize them into albums, and share galleries. Build this architecture under realistic production constraints, then validate tradeoffs in the design lab simulation.
Request path: The solution keeps ingress, service logic, and stateful dependencies separated so each layer can scale independently.
Reference flow: Web Clients -> DNS -> CDN Edge -> API Gateway -> API Service -> Primary SQL DB -> Object Storage