Oscar Hoang
Projects

2025 · Built end to end

DanceRecap

Finds every photo and video a dancer appears in at a festival from one selfie, and pays organizers and photographers automatically.

Role
Built end to end
Stack
Next.js · React · Supabase · AWS Rekognition · Lambda · SNS · SQS · S3 · Stripe Connect · Google Drive · Vercel

What I did

  • Built selfie-based face matching with AWS Rekognition against photos synced from photographers' Google Drive folders.
  • Built a separate video-matching pipeline on AWS (Lambda, SNS, SQS).
  • Built Stripe Connect payouts that split each sale between the organizer, the photographer, and the platform.
  • Designed the flows for dancers, organizers, and photographers.

Key decisions

  • Only dancers' selfies are indexed in Rekognition. Event photos are search queries and are never stored as faces.
  • Stripe can't transfer from a Canadian platform to Thai organizers, so THB platform and photographer shares run through an internal ledger settled by bank transfer.
  • Matching thresholds are tuned against cached Rekognition results, so experiments never re-run recognition.
  • Each Stripe webhook is claimed exactly once, so a retried event can't record a sale twice.

Outcome

215 attendees matched at 92% AI accuracy, confirmed by attendees, across 2,500+ photos and videos.

What it is

DanceRecap finds every photo and video a dancer appears in at a festival, using one selfie. Dancers buy the shots they want, and organizers and photographers get paid automatically.

How it works

Photos sync in from the photographers' Google Drive folders, and AWS Rekognition matches faces against attendee selfies. Video matching runs on its own pipeline on AWS (Lambda, SNS, SQS), and Stripe Connect splits each sale between the organizer, the photographer and the platform.

Who it serves

Dancers, who scan the event QR code, upload a selfie and get a private gallery. Organizers and photographers, who link their Drive folders, track matches and get paid from every sale.