Inspiration

Delivery drivers, farmers and construction workers spend their whole working day in sun, wind, heat and dust. Skin care advice is written for an office day with a short walk outside. It rarely says what a full shift outdoors does to your skin, what to use about it, or how often to put sunscreen on again. We wanted a skin app that starts from the job.

What it does

  • Pick your job. Delivery driver, farmer, construction or other outdoor work. The job sets which hazards (sun, wind, heat, dust, shift fatigue) matter most.
  • Scan. One close-up selfie goes to YouCam AI Skin Analysis (HD), which scores eight skin concerns (redness, age spots, wrinkles, moisture, oiliness, pores, texture, dark circles) and returns a mask for each one. ShiftSkin links every concern to the hazards of the job that make it worse.
  • Get a protective-care kit. YouCam AI Fitzpatrick Skin Type says how quickly you burn. Combined with today's UV index, heat, wind and air quality from Open-Meteo for your work town, it sets the SPF level and the reapply interval. Every product in the kit says why it is there ("UV 9 today", "Redness needs attention").
  • See it on you. Protective hats can be tried on with YouCam AI Hat Virtual Try-On.
  • Shop. Add the whole kit, or single products, to the cart and place a demo order.
  • Track. Every scan is saved on the phone with all its scores. A trend chart per concern and "change since last scan" show whether the routine is helping.
  • Never a dead end. If a live scan cannot finish (no units left, the service busy or down, a timeout or no network), the app offers "See a sample result", clearly labelled Sample and never saved to history.
  • Honest by design. It is cosmetic skin-condition tracking, not a medical device. The results, the kit and the About screen say to see a dermatologist if a mole changes, a spot bleeds or does not heal, or irritation does not go away.

How we built it

  • Kotlin Multiplatform with one Compose Multiplatform UI for Android and iOS, using Koin, Ktor, kotlinx.serialization, Room (on-device history), Navigation Compose and Coil.
  • Three YouCam APIs:
    1. AI Skin Analysis v2.1 (HD): upload via POST /s2s/v2.0/file plus a signed PUT, create the task, then poll every 5 seconds (3-minute timeout). A live HD scan comes back in about 11 seconds, and its masks are drawn over the photo.
    2. AI Fitzpatrick Skin Type: the same selfie, cached per profile so the 10-unit call is not repeated for every kit.
    3. AI Hat Virtual Try-On: a second photo plus our own generated, brand-free hat images.
  • Open-Meteo (free, no key) for geocoding the work town and for current UV index, apparent temperature, wind, gusts and air quality.
  • Our own kit rules and catalog, because there is no product-catalog API. Hazards from the job and from today's weather, plus the concerns that need attention, map to products.
  • Fixture mode. Every YouCam and Open-Meteo call goes through one client interface. By default the app serves bundled sample responses, so almost all development used no units; the whole demo video used 44.
  • Privacy. There is no backend. History, profile and orders live in an on-device database. The only data that leaves the phone is the photo sent to YouCam and the work-town location sent to Open-Meteo.
  • Spec-driven. Every feature was specified, designed and tested before it was built (OpenSpec), with 150 Android and 134 iOS unit tests.

Challenges we ran into

  • The unit budget. An HD scan with eight concerns costs 16 units, so we built fixture mode first and developed nearly everything against bundled responses.
  • HD photo requirements. The long side must be at most 4096 px, the short side at least 1080 px, and the face wider than 60% of the image. The app resizes and checks the photo before it spends units, and turns every YouCam error code (face too small, too dark, bad pose) into a plain instruction to retake the photo.
  • Two photos for two APIs. Skin analysis needs a close-up; hat try-on works best with head and shoulders. The flows ask for the right photo at the right time.
  • Not breaking while judged. Our first live run hit "not enough credits". That shaped the sample fallback: if units run out or the service is down, the app shows a clearly labelled sample instead of an error, while a rejected key or a bad photo still shows the real problem.

Accomplishments that we're proud of

  • A complete loop on Android and iOS from one codebase: scan → hazards → kit → try-on → cart → trends.
  • Every recommendation explains itself, and nothing claims to be a diagnosis.
  • The demo runs on the live YouCam APIs, with the whole video costing 44 units.

What we learned

  • Linking a skin score to a cause the user recognises ("wind on the bike all day") makes it something they can act on.
  • Designing for a fixed unit budget is good engineering for any paid API: fixtures, caching, and checks before paid calls.

What's next for ShiftSkin

  • Reapply reminders driven by the hourly UV forecast for the shift.
  • Kits an employer can offer a whole crew.
  • More languages for seasonal and migrant workers.

Built With

  • android
  • buildkonfig
  • coil
  • compose-multiplatform
  • gradle
  • ios
  • jetpack-compose
  • koin
  • kotlin
  • kotlin-multiplatform
  • kotlinx-serialization
  • ktor
  • open-meteo
  • openspec
  • perfect-corp
  • room
  • sqlite
  • youcam-api
Share this project:

Updates

Submission history