ByteNest Book a free call

Case study 07Ingredient scannerCroatiaLaunching soon

Haircode

Reads a hair product's ingredient list and explains it in Croatian.

The Haircode home screen in Croatian on a phone: an evening greeting, three care cards (nutrition, herbal treatment, reconstruction) and a flower whose centre shows the next wash, a herbal treatment in three days, wash 7 of 8
The Haircode scan guide in Croatian: a drawn bottle with its ingredient list inside a frame, and three steps for photographing the whole list in up to three photos
The newest build on a phone: home, and how a scan starts.

Haircode reads the ingredient (INCI) list on a hair product and gives Croatian-language guidance for that kind of product. Built for its product owner, it will be published under ByteNest's store accounts.

Role
App, integration and backend
Client
Its product owner
Status
Launching soon
Platforms
iOS and Android, in Flutter

The brief

Someone else's engine, in people's hands.

The product owner has a scanner engine that analyses ingredient lists. Haircode puts it in people's hands: photograph or paste the list, get guidance for that product's category (shampoo, mask, leave-in and more), and keep a care calendar. We built the Flutter app, the photo reader on Supabase and the integration that runs the engine on the phone.

System map

How it fits together

Haircode scan flowA user photographs or pastes a hair product's ingredient (INCI) list. Photos are read by a hosted Supabase edge function that keeps the API key on the server. The scanner engine, supplied by the product owner and embedded in the app, analyses the list on the phone. The Flutter app shows Croatian guidance for that product category, stored local-first.01 INPUT02 READ03 ANALYSE04 APP05 PEOPLELabel photoINCI listPasted listtyped or copiedPhoto readerhosted edge functionkey on the serverScanner engineproduct owner's,runs on the phoneHaircode appFlutterlocal-firstUsersguidance inCroatian123 Haircode scan flowA user photographs or pastes a hair product's ingredient (INCI) list. Photos are read by a hosted Supabase edge function that keeps the API key on the server. The scanner engine, supplied by the product owner and embedded in the app, analyses the list on the phone. The Flutter app shows Croatian guidance for that product category, stored local-first.01 INPUT02 READ03 ANALYSE04 APP05 PEOPLELabel photoINCI listPasted listtyped or copiedPhoto readerhosted edge functionkey on the serverScanner engineproduct owner's,runs on the phoneHaircode appFlutterlocal-firstUsersguidance inCroatian123
System map of Haircode. The four stages next to it describe each layer in words.
  1. 1
    A photo or a pasted listPeople photograph the ingredient list on the label, or paste it in
  2. 2
    Read in the cloud, analysed on the phoneAn edge function reads photos; the engine runs inside the app
  3. 3
    Guidance, kept on the deviceCategory guidance and a care calendar, local-first, in Croatian
  4. 4
    Three hard partsSomeone else's engine, our app

Three hard parts

Someone else's engine, our app

  1. A black box, kept black

    The engine belongs to the product owner. We embed it unchanged through QuickJS, and every new version must pass a parity check with zero mismatches before it ships.

  2. Offline by design

    Analysis should not depend on a good signal. Ingredient analysis needs no network: the engine and its data ship inside the app, and everything else is stored local-first.

  3. No keys in the app

    Anything shipped in an app can be pulled out of it. The photo reader runs on a Supabase edge function, so the API key never ships to phones.

On screen

A care routine, wash by wash

The Haircode routine screen in Croatian for wash 5 of cycle 1, a herbal treatment: the plan for the day, a choice of scrub, mild or stronger wash with product pickers, and a button to mark the wash done
One wash: the plan, the products and a button to mark it done.
The Haircode care calendar in Croatian for November 2026: a month view with a dot on every wash day and a legend for hydration, nutrition, protein and herbal treatment
The care calendar: every wash of the cycle on one month.

Stack

  • Flutter
  • Supabase
  • Edge functions
  • QuickJS
  • Local-first storage

Our role: app, integration and backend.

Book a free call Back to all work