-
-
Verdict: put your skincare on trial and know if it works before the return window closes.
-
Today: what is due, trials on the litmus strip, agent notes and settled verdicts.
-
A trial: the litmus strip fills scan by scan, plotted against the retailer return window.
-
Each metric charted against your own noise band from two baseline YouCam scans; onset day marked.
-
Keep: 84% confident, measured on YouCam raw scores, a day before returns close.
-
Trial designer agent: reads the label, picks metrics, plans purge windows, routine clashes and return deadline.
-
A real YouCam Skin AI scan: 12 concerns, skin age, and the YouCam texture mask over the photo.
-
Shelf: proven vs untested spend and clash detection across the routine.
-
Ditch: no change beyond the noise, so the app drafts the return before the window closes.
Inspiration
The challenge describes the exact moment I built for: standing in front of a mirror deciding whether a product is working. Nobody can answer that by looking. Most skincare actives need 4–12 weeks to make a measurable change. A typical beauty return window is 30 days. And a single selfie swings more with lighting and angle than most serums change your skin in a month. So people guess, the return window closes, and they keep paying for products that don't work.
What it does
Verdict puts every new skincare product on trial and tells you to keep it or send it back before the return window closes.
- The trial designer agent plans the experiment. Paste the ingredient list. The agent identifies the actives and predicts which skin metrics should move and from which day (niacinamide shifts oil from about week 2; retinal shifts texture from about week 3). It flags retinoid purge windows, finds clashes with the rest of your shelf, and fits the scan schedule to the retailer's return deadline. If a full read won't fit, it adds a checkpoint scan two days before returns close. Every decision is explained in plain language.
- Two baseline scans measure your noise floor. They're taken a minute apart, before the first use. How much YouCam's readings disagree between them is your personal measurement noise.
- Guided scans on schedule. An oval guide and a ghost overlay of your baseline photo keep framing consistent. On-device light and evenness checks catch bad photos before they cost API units. YouCam Skin AI scores 12 concerns per scan (HD when the camera allows) and returns a skin age and per-concern masks, which I overlay on the photo.
- A verdict with evidence. A change counts only when it clears 2× the noise, after the active's expected onset. Breakouts inside a purge window aren't held against a retinoid. Dim scans are set aside. Overlapping trials and logged confounders (period, sun, short sleep, stress) are surfaced so a rough week isn't blamed on a good product.
- Act on it. Keep sets a reorder reminder. Ditch drafts the return message for the retailer, with the measurements, and suggests ingredients with a different mechanism to try next. Not yet lays out your options against the deadline.
Who it's for. Skincare buyers spending $30–$80 a product who want to know if it's working. Also retailers and brands that want fewer blind returns and products backed by evidence. A retailer could offer a "Verdict-backed guarantee" and learn which products actually move which concerns.
How I built it
- YouCam Skin Analysis API (v2): file registration → pre-signed upload → task → polling, with all 12 concerns. HD or SD is chosen from capture resolution (never mixed), mask overlays are enabled, and skin age and masks are parsed. API errors are translated into instructions people can act on ("face too small, move closer"). Sample portraits are scored by URL (
src_file_url), so anyone can try a real scan without a selfie. - Verdict engine: a per-metric noise estimate from paired baselines (with a per-metric floor), z-scores computed on raw_score, onset gating, purge handling, and a "litmus strip" showing what the verdict was at each scan. YouCam documents
ui_scoreas adjusted to be encouraging, which would bias a before/after test, so I don't use it for the statistics. - Trial designer agent: a knowledge base of 21 actives with onset and peak timelines, purge windows, irritation guards and clashes. It reasons step by step and streams its reasoning to the user.
- Stack: Next.js 16 (App Router, server actions), React 19, Tailwind CSS 4, Clerk for auth, Neon Postgres with Drizzle ORM, deployed on Vercel. Mobile-first and installable as a PWA.
- Privacy: photos go to YouCam for scoring and stay on the device. I store scores, not faces.
- Built for a public demo: a no-signup guest mode with a month of realistic sample data, and daily caps that protect the API unit budget.
Challenges I ran into
Making a cosmetic score statistically honest. A naive before/after would declare most products winners or losers by chance. The noise floor, onset gating and raw scores are what make a "Keep" mean something. I also had to design around timelines: a retinoid trial looks like failure in weeks 2–5 unless you model purging.
Accomplishments that I'm proud of
- A verdict you can audit: every claim on the verdict screen traces back to a chart with a noise band.
- An agent whose plan changes with the store's return window, not just the product.
- A full product, not a demo: onboarding, scheduling, scanning, log, shelf, verdicts, return notes and data export.
What I learned
The hard part of skin AI isn't getting a score. It's knowing when a change in the score is real. Treating YouCam as a measurement instrument, with repeat measurements and error bars, made the product far more useful than showing a single number.
What's next
- Zone analysis from YouCam's masks, to separate purging (usual breakout zones) from new breakouts.
- Retailer integrations that pull the purchase date and return policy automatically.
- Opt-in, anonymised efficacy data: which products actually move which concerns, for which skin types.
Built With
- clerk
- drizzle-orm
- neon
- next.js
- perfect-corp
- postgresql
- react
- tailwindcss
- typescript
- vercel
- youcam-api
Log in or sign up for Devpost to join the conversation.