Inspiration
Skincare often means weeks of spending and guesswork. A product may seem to help, but lighting, normal skin variation, and other changes in a routine can make the result difficult to interpret. SkinProof was built to help people track their own skin over time and make uncertainty visible instead of overstating what a single score can prove.
What it does
SkinProof turns a skincare trial into a personal experiment. Users select one product and one skin concern, record baseline and follow-up captures, and view YouCam Skin AI scores over time. A verdict compares raw scores with the experiment’s measurement noise and capture history. It can report Improved, No detectable change, Worse, or Inconclusive, alongside confidence and caveats. Weekly check-ins add context, while capture-history suggestions help identify gaps or changes in image quality. Users can also check an ingredient list against a deterministic reference and create a read-only report link that can be revoked. Synthetic eight-week examples are clearly labeled and are never presented as real outcomes.
How I built it
I built SkinProof as a full-stack application with a React and TypeScript frontend and a Spring Boot API in Java. PostgreSQL stores experiments, captures, analyses, check-ins, and verdict history. AWS hosts the application with CloudFront, S3, EC2, and Cognito. The backend integrates YouCam’s asynchronous Skin AI API. It stores raw and UI scores separately, uses raw scores for trend calculations, handles analysis retries, and de-duplicates repeat images. Capture images remain in private storage and are sent to YouCam only after the user consents.
Challenges I ran into
A score alone does not show whether a product made a difference. I had to verify YouCam’s score direction, distinguish raw scores from adjusted UI scores, and design verdict rules that account for measurement noise, capture quality, time, and confounding events. The analysis workflow also required careful handling of asynchronous results, retries, and image privacy. During deployment, Hibernate exposed mismatches between database column types and the Java model. I fixed them with forward-only migrations, backed up the database, and verified the hosted API recovered.
Accomplishments I’m proud of
I built SkinProof beyond a single-image analysis demo: it follows a product experiment from baseline through repeated measurement to an evidence-aware result. I’m especially proud that Inconclusive is a first-class outcome. The app makes the limits of the evidence visible, labels synthetic examples, requires consent before analysis, keeps images private by default, and supports owner-scoped reports that users can revoke.
What I learned
A favorable score is not proof that a product caused a change. Repeated captures, consistent conditions, enough time, and an honest account of confounds all matter. I also learned to distinguish published API unit estimates from actual account billing, and to treat schema compatibility, privacy, and deployment recovery as part of the product rather than afterthoughts.
What’s next for SkinProof
I plan to validate the guided camera flow on the target demo device, gather consented repeat-capture data to calibrate concern-specific noise floors, and test the experience with users. I also plan to strengthen the retailer mock and complete the public demo materials. Email reminders and AI-assisted ingredient parsing remain optional future work until consent, privacy, provider, and operating requirements are clearly addressed.
SkinProof reports cosmetic trends only. It is not medical advice, does not diagnose or treat conditions, and cannot prove that a product caused a change.
Built With
- amazon-web-services
- java
- postgresql
- react
- springboot
- typescript
- youcam

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