Inspiration
You buy a serum. Four weeks later: is your skin better, or was it just a good-light day? Selfie before-and-afters can't answer that, because two photos of the same face never score exactly the same. We built Skinify to answer it honestly, with the numbers and the noise next to each other.
What it does
Skinify is a mobile-first web app (installable PWA, fully responsive on desktop). You add the products you use and the skin concern each one should help (acne, redness, pores, texture, oiliness, moisture, radiance, dark circles), then scan once a week: two photos, back to back. Each product gets a verdict that follows its own concern:
- Working: the target score improved by more than twice the normal scan-to-scan noise
- No visible change: the change is inside the noise
- Can't tell yet: not enough clean data, and it says what a rescan would fix
- Possible irritation: redness got clearly worse after starting
- Too early: under 4 weeks or under 3 later scans
Every verdict shows its evidence (how many scans, how many days, how big the change is compared with the noise), a radar overview of all 8 concerns, a weekly rhythm, optional email reminders, and a one-page printable report you can bring to a pharmacist or dermatologist. A read-only sample routine (six weeks of sample data) lets anyone explore without scanning.
How we use the YouCam API
All calls run server-side in Convex actions, so the key never reaches the browser. For each photo the server uploads the image, creates a skin-analysis task with our 8 concerns, polls it, and reads each concern's raw_score (1 to 100, higher is healthier) plus YouCam's overall score. The two photos of a scan are scored in parallel; their average is the score and their gap is the noise estimate. That noise is what the verdict engine compares every change against.
How we built it
React, Vite, TypeScript, Tailwind and shadcn/ui on the front end; Convex for the database and server functions; Clerk for sign-in (Google or email with a code); Resend for reminders; a free OpenRouter model that only rewrites a templated explanation from structured numbers (and is thrown away if it invents anything). The verdict engine is a pure, tested function with every threshold in one config file. 263 automated tests.
Challenges
- Telling a real change from noise: a skincare effect is a few points, and the same face moves a few points with light, angle and image size (we measured +4.8 on pores between two sizes of one selfie). So every photo goes through one fixed resize recipe, and lighting hints appear in the browser before a scan is sent.
- A tiny free budget: 24 YouCam units per scan from 1,000 free units. We added a per-user limit (3 scans per 24 hours), a global cap, and the seeded sample routine so judges can explore for free.
- Honesty: photos are sent to YouCam for analysis and never stored, logged or cached by us; we keep only scores. The app says plainly that scores are estimates, not a medical assessment.
What we learned
Showing uncertainty builds more trust than showing a confident number. Our noise thresholds are first guesses; tuning them on many real back-to-back photos is the next step.
What's next
Tune the thresholds on real data, support more concerns, and let a pharmacist or dermatologist receive the report directly.
Built With
- base-ui
- clerk
- convex
- openrouter
- perfect-corp-youcam-api
- pwa
- react
- resend
- shadcn/ui
- tailwind-css
- typescript
- vercel
- vite
- youcam-ai-skin-analysis-api