-
-
On the web, in any browser: finished trials on YouCam's sample faces, with YouCam AI Skin Analysis splitting each map at the face's midline.
-
A shop puts "Test it on half your face" next to Add to bag. Kestrel & Fern is a made-up brand.
-
In the Android app, photos come from the camera or the gallery. Here, YouCam's sample face, staged by a script.
-
A photo lit from one side is refused before it is sent, so it costs no units: side light would fake a difference.
-
The promise: YouCam AI Skin Simulation draws what the claims promise on this face, on the half that gets the product.
-
Every scan: YouCam AI Skin Analysis maps each concern, and SideProof measures the treated half against the control.
-
The verdict, claim by claim: oiliness 3.7 times past the noise, but the 8-hour shine claim is too early after a run of minutes.
-
Over a full day (staged, with the clock moved forward) the same claim comes out supported.
-
For shops and brands: outcomes per claim from real faces, by skin type from YouCam AI Fitzpatrick Skin Type.
Inspiration
The Skin AI brief names the moment: standing in front of a mirror, deciding whether a product is working. Every skin app answers it the same way, with today's selfie against last week's. But between those photos the light changed, you slept differently, the weather turned. A score that moved four points can't tell you whether the serum did it. On YouCam's own sample face the whole-face oiliness score moved from 45 to 56 and gave no hint of which side had changed.
Dermatologists settled this long ago with the split-face trial: the product goes on one half, the other half is the control, and whatever happens to both halves is not the product. SideProof puts that design in anyone's pocket, measured by YouCam Skin AI.
What it does
- Plans from the claims. Type the product's claims or photograph its label. An AI agent maps each claim to what YouCam Skin AI can measure, picks at most four concerns (one scan), sets how long the trial runs from how fast each concern can move, and flags ingredients that should not go on a face without a doctor.
- Takes fair photos only. Before a photo is sent, SideProof checks the pose, the sharpness and that both halves get the same light, because side light would fake a difference. A refused photo costs nothing.
- Measures the person's own noise. Two baseline photos give the face's own left-right difference and how much a measurement moves between photos.
- Shows the promise. YouCam AI Skin Simulation draws what the claims promise on the person's own face, on the half that gets the product, before anything goes on.
- Measures each half. YouCam AI Skin Analysis returns a map per concern. SideProof splits every map at the face's midline and compares the treated half with the control. Only a change past 2.5 times the person's noise counts.
- Picks the next step, and stops for safety. After each scan the agent decides what comes next from the steps the trial math allows. If redness or breakouts rise on the treated half, the trial stops, whatever the agent would say.
- Gives an honest verdict, claim by claim. Supported, not supported, too early, or not measured. It won't call a claim the trial hasn't covered: in the video a live run shows oiliness 3.7 times past the noise, yet "Controls shine for up to 8 hours" is too early, because the run took minutes.
- Works for shops and brands. A "Test it on half your face" link next to Add to bag, or on the sample pack. A dashboard with outcomes per concern and per Fitzpatrick skin type, and a claim audit that won't call a claim backed on fewer than three trials.
- Web and Android. A Next.js web app and a Flutter Android app on the same backend.
How we built it
- YouCam AI Skin Analysis (v2.1, SD): the scores and the per-concern masks SideProof splits by half. One scan of up to four concerns costs 9 units.
- YouCam AI Skin Simulation: the promise, on the person's baseline photo, at 4 units.
- YouCam AI Fitzpatrick Skin Type: once per trial, on the photo YouCam already holds, so a brand sees results per skin type.
- MediaPipe face landmarks find the midline and drive the photo checks. Each mask is measured per half, and plain statistics do the rest: the baseline mean and spread, then (treated minus control now) minus (treated minus control at baseline), counted only past 2.5 times the noise.
- The agent is a small tool loop on Gemini (3.5 Flash, with 3.1 Flash-Lite as the fallback; DeepSeek wired as a text-only backup). It decides and explains; it never measures. Every number it writes is checked against what the tools returned, and an answer with an invented number is sent back.
- The backend is FastAPI with SQLite in Docker on our own server, and it keeps numbers only. The web is a Next.js static export served by the same backend. The Android app is Flutter.
- Built solo, with Claude Code as a coding assistant.
Challenges we ran into
- Making a split meaningful: the untouched half still moves a little between photos, so the noise has to be measured per person, not assumed.
- Side light is the enemy of a split-face test. The light-balance check came from that.
- The face landmarks stop mid-forehead while YouCam's maps go up to the hairline, so the measured region is stretched upward to cover the whole map.
- Keeping a language model honest about numbers: the number check, and letting the trial math decide which steps are allowed. One model sometimes dropped the answer wrapper and invented claims, so every reply is validated before it counts.
- A real trial takes hours to weeks. For the demo, YouCam's sample face and a digital filter on one half stand in for the product. The video and the app say so.
Accomplishments that we're proud of
- The split works: a local change on one half moved that half's oiliness from 12.2 to 2.9 while the other half stayed at about 10, where the whole-face score could not say which side had changed.
- The trial in the video is real, end to end through the live API, in the Android app: the plan, a refused photo, two baselines, the promise, three scans, the verdict.
- An agent whose every claim is traceable to a measurement, and a verdict that says "too early" when that is the truth.
What we learned
- One before-and-after photo is mostly noise. The control half is what makes a change readable.
- Light matters more than the camera: light from one side fakes a left-right difference, so the app refuses that photo before spending anything.
- A language model is good at planning and explaining, as long as every number comes from the measurement.
- What is still open: the real noise floor of everyday phone photos over days. That is the first thing to measure with volunteers.
What's next for SideProof
- Multi-day trials with volunteers, to measure real phone-photo noise.
- Scan reminders on the phone.
- A clinic mode: the same engine for a treatment a professional applies to one side.
- Inside YouCam's AI Skin Diagnostic and brand pages, "recommended" becomes "proven on your face", and brands get causal, per-skin-type evidence from real customers.
Privacy
Photos go from the phone to our server, which measures them in memory and keeps only numbers. YouCam receives the photos for analysis and, under its file retention policy, deletes uploads after 30 days. The language model never sees a face: only the claims and, if you add one, a photo of the label.

Log in or sign up for Devpost to join the conversation.