Web Frontend for a Face-Search Event-Photography Platform
A stock-image / visual-content marketplace
Overview
The React web frontend for a face-search event-photography platform. Organizers use it to bulk- upload an event’s photos; attendees use it to browse galleries and find the pictures they appear in via facial recognition. It handles large uploads, rich gallery and lightbox browsing, in-browser face detection, and social activity feeds against the platform’s AdonisJS API.
The Challenge
The platform lives or dies on two experiences: organizers must push many high-resolution event images quickly and reliably, and attendees must effortlessly surface “photos of me” out of thousands, then browse galleries and engage socially, all in a responsive web UI.
What We Built
A React app (src/ with components, containers, logic, styles, and a dedicated uppy
module) using Kea (kea, kea-thunk) for state and Bulma/rbx for UI. Uploads are powered by
the Uppy stack (@uppy/core, @uppy/dashboard, @uppy/aws-s3, @uppy/aws-s3-multipart,
@uppy/xhr-upload) for resumable, direct-to-S3 multipart transfers, alongside FilePond with EXIF
orientation and image-preview plugins. Face detection runs client-side via face-api.js. Browsing
uses react-grid-gallery, react-photo-gallery, react-images, and FsLightbox. Social features
come from react-activity-feed (GetStream), with react-facebook-login for auth and
react-autosuggest search. The app is containerized with a Dockerfile and build.sh.
Technologies & Approach
React + Kea kept state predictable; Uppy and FilePond solved the hard parts of large multi-file,
direct-to-S3 uploads; face-api.js enabled face cues in the browser to complement server-side
Rekognition; GetStream’s React components delivered ready-made social feeds. Bulma/rbx gave a
clean, fast component layer.
Outcome / Impact
Shipped the full consumer web experience for the marketplace, robust bulk uploading, polished gallery/lightbox browsing, and integrated social feeds, on top of the face-recognition backend.
Capabilities Demonstrated
- Resumable, direct-to-S3 multipart upload UX (Uppy, FilePond)
- In-browser face detection with face-api.js
- Photo gallery and lightbox interfaces at scale
- Social activity feeds via GetStream React components
- Componentized React + Kea architecture, containerized for deployment