Inspiration

Shopping is social, but virtual try-on is usually private for the wrong reason: asking a friend or stylist for help often means sending them an unedited body photo or a screenshot of the result. That creates uncontrolled copies in chats, camera rolls, and cloud backups. We asked a narrower, more useful question: can someone help choose the garment without ever seeing the wearer?

What it does

WearerKey is a privacy-first collaboration protocol for fashion virtual try-on.

  1. The wearer creates a time-limited Consent Seal defining allowed garment categories, proposal count, and expiry.
  2. A helper receives a single-use capability link and can propose garments, but the helper API and UI never receive the wearer photo or try-on result.
  3. The server validates the proposal, removes EXIF/GPS metadata in memory, and maps the request to the YouCam AI Clothes V4 workflow.
  4. Only the wearer sees the three-stage Private Mirror: private reference, garment candidate, and generated appearance preview.
  5. The helper receives only an Approve / Maybe / Pass Decision Slip and an optional safe note.
  6. Revocation closes both role sessions and produces a mode-aware, application-signed cleanup receipt.

The result is collaborative shopping without turning the wearer's body image into collaboration data.

How we built it

WearerKey is a TypeScript monorepo with four explicit boundaries:

  • React + Vite for the wearer room, helper room, judge tour, consent controls, and private mirror.
  • Fastify for role-separated APIs, single-use bootstrap exchange, HttpOnly role cookies, SSE updates, rate limiting, CSRF checks, and lifecycle control.
  • Zod contracts + deterministic domain state machines for consent, proposal, revocation, expiry, and purge states.
  • Perfect Corp YouCam AI Clothes V4 adapter implementing the official S2S structure for file upload, Clothes V4 task creation, status polling, result validation, task deletion, and file deletion.

Reference images are decoded and sanitized in memory with Sharp before provider transmission. Capability secrets are stored only as SHA-256 hashes and compared in constant time. Helper DTOs structurally omit wearer and result-image fields; this is enforced server-side rather than hidden with CSS.

The recorded submission uses the clearly labeled DEMO_FIXTURE workflow because no live sponsor credential is embedded in the repository or video. It does not claim a live YouCam response or upstream deletion confirmation. The live adapter and error paths remain fully implemented and contract-tested, while the fixture makes the complete privacy workflow reproducible for judges.

Challenges we ran into

The hardest part was not generating a picture—it was proving a negative: that the helper cannot obtain one. We separated authentication cookies, DTO schemas, endpoints, and event streams by role; added replay protection for bootstrap codes; blocked SSRF and redirects when proxying provider assets; and made revoked sessions fail closed.

A second challenge was evidence truthfulness. Live, recorded-live, and fixture results have different trust levels, so the UI uses distinct badges and receipts. Synthetic assets are cryptographically barred from being presented as recorded live output, and fixture cleanup is labeled SIMULATED, never provider-confirmed.

Accomplishments that we're proud of

  • A first-time judge can understand the value through the 45-second split-screen tour.
  • The helper receives garment and decision data, but zero wearer-photo or try-on-result bytes.
  • Photo shielding removes the source image from the DOM across every mirror mode.
  • 110 Vitest unit/integration/security tests and 12 Playwright journeys pass.
  • Automated Axe checks report 0 violations in the tested desktop and mobile states.
  • The security scan reports 0 detected secrets across tracked files and Git history.
  • The repository, CI evidence, and demo are bound to verified commit 0f3920269cfbcd7d2ec229289401cdb75f553f7e.

What we learned

Privacy is more useful when it changes the workflow, not just the policy. By separating the browsing role from the fitting role, YouCam's Clothes V4 capability becomes a safe collaboration primitive: realism stays with the wearer while taste and advice can still come from someone else.

What's next

Next steps are a credentialed live-provider verification run, a durable hosted deployment, Shopify/headless-commerce integration, multi-helper voting, encrypted short-lived object storage, and retailer-controlled retention policies.

Responsible-use note

WearerKey provides a visual appearance preview only—not a guarantee of size, tailoring, stretch, material, or physical fit. This demo uses deterministic fixture media and makes no live YouCam execution claim.

Built With

Share this project:

Updates

Submission history