Jostar.id
Portfolio
Mobile App · AI · 2026

Skincare App with AI Skin Analysis — Face Scan, Skin Score & Routine Recommendations

A skincare app for an Indonesian beauty brand — the client's name and visual identity are confidential at their request, so the screenshots on this page deliberately carry no branding. The heart of the product is AI Skin Analysis: the user takes a face photo guided by an on-screen frame, the photo goes to Cloudinary, and a Cloudflare Worker verifies the login token, bounds the image size, and forwards it to an AI vision model. The model's answer is never taken at face value: the Worker normalises it into a fixed vocabulary — ten skin concerns, face zones, and 0–100 scores — so the app always receives the same shape of data even when the AI provider changes. Results appear as a marked-up face map (oil in the T-zone, clogged pores, hydration, tone), a daily skin score with four derived readings, and a trend chart against previous scans. From there the user moves on to a checkable daily routine and product recommendations that always state their reasoning — which concern found on this face the product actually targets. Beyond scanning, the app also carries an article journal, short-form educational video, a community forum with public profiles, and a personal skin progress log.

Platform
Android & iOS
Year
2026
Industry
Beauty & Skincare (client confidential)
Role
Full-cycle: Flutter app architecture, AI skin analysis flow design, the AI proxy on Cloudflare Workers, data model & Firestore security rules, Cloudinary integration

App screenshots

Click an image to zoom — swipe left/right to browse.

Face scan — a guiding frame and a progress indicator while the photo is assessed
Face map — AI findings pinned to the exact spot they belong to
Skin insight — the daily score, this month's change, and four derived readings
A product catalog curated around the user's skin condition
Product detail — why it matches, key ingredients, and the purchase link
Profile — skin progress log, saved favourites, and data privacy settings
Community — threaded comments on educational content

Key features

Guided face scan

An on-screen frame guides the user into position, with a progress indicator while the photo is assessed — not a shutter button followed by silence.

Marked-up face map

Findings are pinned to the exact spot they belong to — oil in the T-zone, clogged pores, hydration level, evenness of tone — so the result reads at a glance rather than as a report.

0–100 skin score & four metrics

One daily score alongside four derived readings (hydration, clarity, pores, dark spots). All point the same way — higher is better — and the worst finding decides, so one serious issue is never masked by something that happens to be fine.

Progress over time

Scan history is summarised into a trend chart and a month-over-month point difference, so users can see whether their routine is actually working.

Recommendations with reasons

Products are suggested from the concerns actually found on the user's face, and the reason is shown alongside — a recommendation without a reason just reads as an ad.

A routine you can tick off

Morning and evening steps with completed, next up, and later states — short enough that people actually follow it.

Journal, video, and forum

Educational articles, short videos, and a Q&A forum complete with public profiles, comments, and personal saves.

Per-user scan quota

Every account gets a daily scan allowance counted in Jakarta time, and an allowance is only spent once the analysis actually succeeds — a service failure never costs the user a scan.

Technical highlights

The advanced parts behind the scenes that make this system run smoothly.

  • The AI key is never compiled into the APK. The app calls a Cloudflare Worker, and that Worker verifies the caller's Firebase ID token against Google's JWKS before touching the AI provider — without it, anyone who found the URL could spend the client's AI balance as a free API.
  • The AI provider swaps with a one-line config change: LimitRouter (an OpenAI-shaped gateway running gemini-3.6-flash) is live, with Google AI Studio as the fallback path. The prompt, photo guards, output normalisation, token verification, and quota all live outside the provider file, so adding a provider rewrites none of those rules.
  • The prompt lives server-side rather than in the app — the piece that gets revised most often can ship in seconds without forcing every user to install a new build.
  • Model output is forced into a shared vocabulary (ten concern ids and a list of face zones) kept byte-identical between Worker and app, so old scan data stays readable and older app versions safely ignore newly added concerns.
  • The Worker bounds photos to 768px itself rather than trusting the size the app sends. Measured on face photos, scoring did not differ from 1024px while the payload dropped from ~370KB to ~175KB.
  • The prompt makes it explicit that this is a cosmetic assessment, not a medical diagnosis: the model may not name diseases, guess at medical conditions, suggest medication, or comment on the person's age, gender, or appearance.
  • The model only returns a list of concerns; the four metrics on the results screen are derived from that list inside the app — no numbers are invented in between.
  • All media (product photos, video, avatars, community uploads) goes through Cloudinary with an unsigned preset, which keeps Firebase to just Auth and Firestore.

Tech stack

FlutterDartRiverpod 3Firebase AuthCloud FirestoreFirestore Security RulesCloudflare WorkersCloudflare KVLimitRouter (gateway AI)Gemini 3.6 FlashGoogle AI Studio (jalur cadangan)Cloudinaryimage_pickervideo_player

Want an app like this for your business?

We've built systems like Skincare App with AI Skin Analysis from scratch all the way to production. Tell us what you need — the initial consultation is free, no strings attached.