Project Overview
Objective
Extended an event-photo platform into multimodal discovery across selfie, text, BIB/OCR, and reference-image search, with duplicate grouping and event-scoped privacy controls.
Stack
Delivery highlights
- Developed a four-service event photography system composed of customer and back-office Next.js applications, a NestJS API, and a FastAPI vision engine. PostgreSQL stores event and photo records, Redis and BullMQ coordinate background work, S3-compatible storage holds media, and Qdrant stores face and image vectors.
- Extended the original consent-gated selfie search with OpenCLIP semantic text search, reference-image similarity search, EasyOCR-based BIB lookup, Florence-generated captions, and near-duplicate or burst grouping. Every query remains scoped to an event so results do not leak across unrelated photo collections.
- Photographers upload event photos through presigned URLs and managers can trigger enrichment jobs that generate face embeddings, image embeddings, OCR text, captions, and duplicate-group metadata. Customers receive ranked photo IDs and short-lived signed image URLs through the web interface.
- Preserved the privacy-focused selfie flow: the API checks consent, the query selfie is processed in memory, and its embedding is used for search without being added to the vector index. The reviewed phase-2 snapshot documents this design, while production proxy logging and network isolation still require deployment-level verification.
- The phase-2 AI enrichments are suitable for a technical pilot, but synchronous CLIP/OCR/caption triggers still need capacity testing. Real biometric data should not be used until PDPA/legal review, model and dataset licence review, retention policy validation, and operational monitoring are complete.