Inspiration
An event ends, but the photographer’s work continues: sorting photos, finding each guest, checking uncertain matches, and deciding what is ready to share. Late uploads and changing consent make delivery even harder to coordinate.
Face matching addresses one part of that problem. We built LensBridge to manage the complete journey from uploaded photos to approved personal galleries, with a conversational assistant helping organizers understand what needs attention and take the next action.
Our question was: could an Alexa+-style assistant help manage this workflow while keeping people in control of sensitive decisions?
What it does
LensBridge is a conversational workspace for event photo delivery and consent management. Our web simulator demonstrates an Alexa+-style experience backed by a working MCP integration and application backend.
The workflow follows an event from setup to delivery:
- The organizer creates an event and uploads photos.
- Guests enroll using a selfie and explicit consent.
- Face recognition proposes photo matches, while uncertain results are held for organizer review.
- The organizer previews the proposed release and approves it through an authenticated action.
- Guests receive access to their personal galleries.
The assistant helps coordinate these steps across sessions, including processing status, review requirements, and release readiness.
LensBridge also handles changes after the initial upload. Late photos enter the processing workflow, failed jobs can be addressed, and consent expiry or withdrawal affects access. Revocation is enforced when guests request galleries and media.
How we built it
We built the interface with Next.js and the backend with FastAPI. InsightFace/ArcFace generates facial embeddings, and DBSCAN supports face clustering. Supabase with pgvector stores application records and supports vector queries.
Uploaded photos are stored on our VPS, with the application enforcing permissions when serving galleries and media. This keeps the current deployment self-hosted for photo storage. Cloudinary is an optional integration we can add for managed image storage and delivery as the project grows.
A self-hosted MCP server over Streamable HTTP exposes application operations to the assistant. The simulator uses an MCP client for tool discovery and execution, connecting conversational requests to the working application.
Consent checks, matching workflows, publishing rules, and permissions live in shared backend services. This keeps the same rules in effect whether an action starts in chat or through the dashboard.
A Postgres-backed job queue and a separate vision worker support durable background processing. The system runs on a 2 vCPU, 4 GB Azure VM, which shaped our approach to CPU inference, batch processing, and local photo storage.
Challenges we ran into
The central challenge was deciding where the assistant’s responsibility should end. It can explain status and coordinate actions, but it cannot grant permissions or independently authorize publication. Similarity scores support matching proposals; backend rules and organizer review govern release.
We tied publication approval to an exact preview so that an outdated preview cannot silently authorize a changed release.
Consent also had to remain enforceable throughout the workflow. We needed to account for expiry and withdrawal during processing, publication, and subsequent gallery access.
CPU-only face processing required benchmarking and careful workload management. Storing photos on the VPS also made storage capacity and controlled media access practical considerations. We identified pretrained-model licensing as a constraint that must be resolved before commercial deployment.
To limit information exposed to the language model, it receives operational counts and opaque identifiers rather than face images or facial embeddings.
Accomplishments that we're proud of
- A working conversational integration: MCP tool discovery and execution connect the assistant to actual application operations.
- Approval tied to a specific release: authenticated approval applies to the preview the organizer reviewed, and stale publication attempts are rejected.
- Enforced consent and revocation: gallery and media access reflect consent changes.
- Visible uncertainty: ambiguous matches enter a review workflow instead of being silently released.
- Operation on modest infrastructure: background processing and VPS-based photo storage support the workflow on a CPU-only VM with limited resources.
Together, these features demonstrate a conversational assistant that helps move work forward while preserving meaningful human control.
What we learned
The difficult part of conversational automation is maintaining consistent state, permissions, and accountability across multiple steps.
We learned to separate the assistant’s interpretation of a request from the backend’s authority to execute it. Shared services help maintain consistent behavior across chat and dashboard interactions, while approval tied to a specific preview makes sensitive actions easier to verify.
We also learned that consent is an ongoing system requirement. It must affect processing, publication, and access throughout the life of an event.
Building within a small CPU, memory, and storage budget reinforced the importance of model selection, background jobs, and clear processing feedback.
What's next for LensBridge
Our next step is to interview photographers and event organizers to validate the workflow and identify the most valuable improvements.
We plan to strengthen processing reliability, add delivery notifications, and improve voice interaction. We also want to explore CLIP-based scene search to help organizers find photos by their content.
As storage requirements grow, we can extend the current VPS-based setup with a service such as Cloudinary for managed image storage and delivery, while preserving consent checks and access controls.
For broader integrations, we plan to implement a standards-compatible authorization flow for third-party MCP clients. Native Alexa+ integration remains a future goal, subject to platform access and end-to-end validation.
Before commercial deployment, we will resolve pretrained-model licensing through an appropriately licensed model or an alternative deployment approach.
Built With
- arcface
- azure
- caddy
- cloudinary
- fastapi
- fastmcp
- gemini-api
- insightface
- model-context-protocol
- next.js
- onnx-runtime
- pgvector
- postgresql
- python
- react
- scikit-learn
- supabase
- tailwind-css
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.