Inspiration

Trying on clothes was always a social act, but every virtual try-on product deleted the friend: shoppers guess alone, second opinions arrive as screenshots after the fact, and carts get abandoned without the nudge of someone saying "that one". The cost is measurable: clothing is the most-returned online category, with U.S. online apparel return rates around 26% per NRF and Happy Returns data, and fit uncertainty is the dominant reason. Co-shopping features exist (shared carts, live-shopping streams, watch-together widgets), but none of them put the clothes on your friend's actual body.

What it does

Up to four friends join one private room, each gets a mirror built from their own full-body photo, and anyone can dress themselves or each other from the boutique's rack with photoreal YouCam Apparel VTO renders, guided by a stylist whose color-harmony notes are grounded in measured YouCam Skin AI readings, ending in one shared cart built for hand-off to the storefront's checkout. Dress Circle's core move is cross-body try-on with consent designed in at the protocol level, which is why it feels like a changeroom instead of a feed.

A shopper opens the boutique's room link, picks a name and a full-body photo (a sample model, or their own upload plus a quick face photo), and steps into a private websocket room. Their photo becomes a mirror. Pressing "Try on me" or "Dress Sofia" renders that garment onto the chosen person's body through YouCam's cloth pipeline (live renders land in roughly 12 to 25 seconds while the room keeps chatting; the demo wardrobe answers in a couple of seconds from cache), and often draws a note from the Velloa Stylist, whose warm/cool verdicts come from a CIELab classification of the lip color YouCam Skin AI measured for that exact person. Styling someone else is consent-gated server-side: pause your toggle and every control aimed at you refuses. Looks the group loves go to a shared lookbook, then into one cart with each piece tagged to its wearer, ending at a checkout hand-off (a stand-in modal here; the storefront cart API is the integration seam, and VELLOA is a fictional demo boutique).

The staged demo session seats you at one of four mirrors mid-visit, with seeded looks, group chat, and cart; every demo try-on resolves from a pre-rendered matrix of genuine cloth output, so exploring costs nothing and never rate-limits. Uploading your own photo exercises the live path end to end: a real Skin AI read at join, then real cloth renders on your own body, with all media deleted when the room closes.

How we built it

Cloudflare-native: one Worker serves the static app from the edge CDN and routes the dynamic surface to Durable Objects, with one room object per fitting room (websocket hibernation, authoritative state, chunked media) and a singleton lobby (room registry, render and skin-read budgets). The client is vanilla HTML/CSS/JS over one websocket; no framework, no build step.

Both YouCam API streams run through one server-side S2S client that owns RSA id_token auth and the shared file → task → poll pipeline:

Apparel VTO (cloth) renders every styled image in the product. The demo wardrobe is a 92-image matrix (23 garments × 4 models), every tile genuine cloth output rendered through the same client and cached so judge exploration spends no units; uploaded photos render live with per-category garment mapping (dresses → full_body, skirts/trousers → lower_body, otherwise upper_body) and immediate download into Durable Object storage so nothing depends on the two-hour result URL. Live renders are budget-gated per room and globally.

Skin AI (skin-tone-analysis) grounds the stylist. Each sample model carries a reading taken against a gate-accepted reference portrait; a visitor's face photo is read live at join, with the API's face-quality gate surfaced as retake guidance. The returned lip_color is classified into warm/cool by CIELab hue, and the stylist speaks deterministically from undertone × garment palette, staying silent when the measurement is ambiguous. Skin reads are budget-capped and degrade gracefully: the visitor always joins, the stylist just goes quiet.

Challenges we ran into

Deriving undertone honestly was the hard part. A controlled dose-response probe (painting known hue shifts into the same accepted face) showed the whole-face skin_color coming back hue-stable across our probe set, while lip_color tracked the shifts roughly 1:1, so lip color became the classifier. The face-quality gate also rejected our first synthetic reference portraits until we regenerated them with level gaze and even light, and we sized the whole room protocol to Durable Object storage limits with chunked media and hard state bounds.

Accomplishments that we're proud of

  • 92 pre-rendered styled images (23 garments × 4 sample models), every one genuine YouCam cloth output
  • Live render measured at 2 API units and 12–25 seconds per try-on in production; live skin read at 20 units with free quality-gate rejections
  • 116 assertions across four suites (protocol 38, browser e2e 52, lifecycle GC 7, budget degradation 19), all green on a credential-less cold clone; the protocol and browser suites (90 assertions) also ran green against the production deployment
  • Consent as architecture, not UI: styling permissions are enforced in the room's Durable Object, and uploaded photos, face reads, and renders are deleted with the room
  • A budget system that cannot strand a judge: the demo wardrobe never spends units, skin-read caps degrade to a quiet stylist with the visitor still joining, and a live-render cap says so plainly while saved looks keep working

What we learned

That the API rewards measurement over assumption. We nearly shipped the stylist as a fashion-rule gimmick; probing what skin-tone-analysis actually returns, channel by channel, turned it into the feature we're proudest of, and taught us exactly which channels behave as stable instruments for this purpose (lip_color) and which do not (skin_color). And that social features need consent designed in from the first line, not audited in later.

What's next for Dress Circle

Dress Circle is white-label by design: the room is skinned by a logo and one CSS token, and the checkout hand-off is a clean integration seam for any storefront's cart API. The credible next steps are a boutique pilot with a real catalog, richer Skin AI use (foundation-depth and seasonal palettes from the same measured profiles), and rooms that outlive a session so a group can keep a shared lookbook going.

Built With

Share this project:

Updates

Submission history