Photography product
Case studyPhotorunning
A multi-tenant photography platform capable of ingesting up to 400,000 images per event and retrieving them by race bib or face.
A walkthrough of the product’s core journey.
Context
Race and triathlon photographers upload massive image sets that participants need to search quickly.
Challenge
Absorb upload spikes, orchestrate multiple AI workloads, and enforce strict tenant data isolation.
Solution
An asynchronous, idempotent AWS architecture using S3, SQS, Lambda, Rekognition, PostgreSQL, and a decoupled RF-DETR GPU pipeline.
Contribution
Designed an end-to-end journey connecting ingestion, AI processing, observability, and delivery through a coherent product experience.
System design · ingestion pipeline
Massive, asynchronous, observable ingestion.
The critical path absorbs uploads, then distributes OCR, face, and preview workloads. GPU object detection scales independently.
Compute deterministicId
Tenant + flag validation
Original + metadata
Retry · DLQ · at-least-once
DetectText · confidence ≥ 90
Collection per category
Resize · watermark · JPEG
Runs after Rekognition
Photo · BibDetection · Face
preview-wm · private originals
requested_objdet
People + bicycles
Fencing token + status
PersonBbox · BicycleBbox
Only pay for GPU compute while it is working.
A permanent RF-DETR fleet would sit idle between events. Capacity therefore follows durable workload state and is recalculated periodically.
Product architecture · bib-face resolution
A better gallery, without requiring a selfie.
OCR alone fails as soon as a race bib is hidden. Combining visible numbers with faces retrieves more relevant photos without adding friction to discovery and purchase.
Return relevant photos even when the bib is not visible in every image.
Removing an extra action keeps the discovery and purchase journey fluid.
A hand, posture, or another runner can hide the number and pollute OCR-only galleries.
Bib OCRVisible numbers
Face embeddingsVisual similarity
Person detectionRF-DETR bounding boxes
Group photos that likely contain the same runner.
Link each face cluster to the most credible bib.
Persist the associations used by the gallery.
Photos remain discoverable even when their bib is hidden.
Key outcomes
- 50K–400K photos per event
- Bib OCR and face indexing
- Asynchronous GPU object detection
- Scale-to-zero with controlled costs
- Idempotent and observable pipeline
Technologies