Anı Kutusu
Event-photo platform
A web application where guests upload photos through a QR code and event hosts collect them in a shared gallery.

- Who is it for?
- Event hosts and guests sharing photos
- My contribution
- Independent project · Full-stack development
- Period
- Initial version: 2025 · Later moved to a shared Go backend
The need to solve
Event photos are scattered across guests. Participation needs to be simple while uploads and viewing permissions stay scoped to the event.
What it enables
Share a QR link for an event, collect guest photos and view them in a gallery with event-specific access permissions.
What I built
I developed guest photo uploads through a QR code and the event gallery. Within the shared server infrastructure, I implemented rules that restrict photo access to the relevant event’s permissions.
Application screens
Choose a screen to explore the end-to-end flow: from the QR mobile guest experience and OS-adaptive upload forms to venue administration and the shared wedding gallery. Screenshots show the Turkish interface.
Explore development details
For readers interested in the technical approach: workflows, technologies and implementation decisions.
How does the process work?
A simple QR guest experience is backed by event scoping, direct object uploads, completion validation and cleanup.
Main flow
Prepare the event and gallery
Create an event-linked gallery and QR sharing link.
Join the event through QR
The guest’s event token determines the upload and gallery-access scope.
Validate the upload intent
Check file type, size and event scope before issuing an upload intent.
Upload the file directly
Use a presigned URL to send the file straight to private MinIO storage, bypassing the application server.
Complete and associate the upload
Validate the object and ownership on completion; associate the media with the event gallery.
Open the gallery with authorized access
Provide media links within the guest token or authorized user-session scope.
Alternative and supporting processes
If an upload remains incomplete
- Expire the upload intent
Expired or incomplete upload intents enter the cleanup process.
- Clean up orphan objects
Remove objects that were never associated with the gallery through orphan cleanup.
When the event owner accesses the gallery
- Verify the session
Validate the event owner’s JWT / OTP session.
- Apply the permission scope
The shared backend limits media and gallery access to the user’s permissions.
The approach
- Built event and gallery management with QR-linked guest media uploads, using event tokens to scope access.
- Implemented upload intents, direct uploads to private MinIO through presigned URLs and completion validation; added file-type/size and media-ownership checks.
- Implemented OTP/JWT sessions and authorized media access on the backend shared with Mezuniyet Yıllığım; developed cleanup of expired upload intents and orphan objects.
Technologies
- Next.js
- Go
- TypeScript
- PostgreSQL
- Redis
- MinIO
- Docker Compose
