A mannequin transcribes. Your cellphone decides.
Skinora images the again of a bottle and reads the ingredient checklist. The AI mannequin is requested to do precisely one factor: sort out what’s printed. What each title is, and what it does in a components, comes from a 634-ingredient desk bundled with the app and regarded up on the gadget.
That’s not a slogan, it’s the structure. The reply schema the mannequin solutions into has no subject for a perform, a score or a remark, and the rows on display are constructed from the bundled desk after the reply is parsed. There isn’t a code path wherein a mannequin’s opinion about an ingredient can attain a consumer.
Runs out of the field
Demo Directions — the sign-in display is a mock and contacts no server, so any credentials are accepted. Use [email protected] / demo1234, or just faucet Check in with the fields left empty. There isn’t a account to register, no API key to enter and no community required: Demo mode is on out of the field, so each display works on the gadget.
AI disclosure — one factor on this app is produced by a third-party AI mannequin at run time: transcribing the ingredient checklist off {a photograph} of a label. Nothing else is AI-driven — what every title is, what it does in a components, the six impartial marks, the ten routine findings and the period-after-opening dates are all regarded up or computed in plain Dart on the gadget, in opposition to a desk that ships contained in the app. The mannequin is bring-your-own-key: you or your customers provide a key for Google Gemini, OpenAI or Anthropic Claude, these companies invoice their very own utilization immediately, and no key, credit score or trial is included with this merchandise. With no key in any respect the app nonetheless runs finish to finish, as a result of Demo mode decodes the pattern shelf by the identical engine and the identical matcher. No pictures, illustration, audio or video is bundled, and no art work within the package deal is AI-generated: each floor within the app is drawn by Flutter at run time. The one bitmaps within the obtain are the platform launcher and splash icons — generated from the belongings/icon/make_icon.py script included with them, plus Flutter’s personal default launch picture — and the documentation’s screenshots and its two display recordings, captured from the working app. The three typefaces are SIL Open Font License 1.1 releases with the complete license textual content within the package deal, and the ingredient desk’s perform vocabulary follows CosIng, the European Fee’s public database.
Demo mode ships switched on. Each display works earlier than anybody indicators up for something. No backend, no Firebase, no actual account anyplace. Every thing lives on the gadget: the 634 elements, the ten routine guidelines, the period-after-opening dates, your shelf, your pores and skin log, and your API keys within the keychain. On a server: nothing. One request leaves the cellphone, solely whenever you ask for one, and it carries the photograph of a label.
flutter pub get flutter run
That’s the complete setup — 3 suppliers, convey your individual key, 5 dependencies, no vendor SDKs.
The mannequin transcribes. The cellphone decides.
It’s requested to sort out what’s printed, and nothing else. Each perform and each mark is a lookup. {Photograph} the again — the small print, not the entire bottle. A mannequin varieties it out: transcription solely, no opinions, no numbers. The gadget appears to be like it up, in opposition to 634 elements, offline.
634 elements, on the gadget
Curated by hand. Operate classifications comply with the general public CosIng vocabulary printed by the European Fee. One row carries the INCI title as a label prints it, what it does in a components, and — for six of them — a impartial mark: perfume, named on the label, fast-drying alcohol, acid exfoliant, retinoid, UV filter.
6 impartial marks. No rating, no score, no verdict — anyplace within the app. And a reputation the desk doesn’t know is proven as “not within the desk but” moderately than being matched to the closest factor it does know.
Each discovering names the elements behind it
10 guidelines, saved in an information file moderately than in code, so the wording you learn is the wording that runs. Morning and night, aspect by aspect. The foundations search for pairings routine recommendation often separates, two merchandise doing the identical job, the same old order skinny to thick, and a morning with no sunscreen in it.
Nothing known as harmful. Nothing is scored.
The little jar, lastly doing one thing
Printed on almost each beauty in Europe, and skim by virtually no one. Six months, twelve months, twenty-four months — or nothing printed in any respect. The shelf turns that image into an order: previous its window, working out, in use, no interval on the label, not opened but.
Three of the 5 are the app saying it doesn’t know — as a result of a countdown for a jar whose opening date was by no means entered is a quantity the app made up.
4 phrases, six observations, no images saved
An image can suggest an entry. The bytes are launched as quickly as the reply comes again. At the moment: decide it, or let a photograph suggest it. A month as a filmstrip — a skipped day is a spot, not a clean. Any two days, aspect by aspect, counted up on the gadget.
Nothing is a placeholder
16 screens, all of them wired up. Each display runs on the pattern shelf and the bundled desk, with no key and no community: one ingredient, a product, suppliers and keys, in regards to the knowledge — and the twelve others.
Every thing, and the explanations
- Full Flutter supply, 16 screens, GetX — view to controller to service, no mock knowledge in a view
- The 634-ingredient desk and its builder — add rows to a CSV, run one script, ship a much bigger desk
- 3 suppliers over plain REST, no vendor SDKs — Gemini, OpenAI and Claude, plus Demo mode
- Mild and darkish, one file of shade tokens — re-skinning is a day, not a rewrite
- Offline documentation, 18 chapters — written for the customer who has by no means touched Flutter
5 dependencies · no Firebase · no backend · no actual account.
Constructed to outlive its first yr
- Mannequin names are a setting, not a continuing. When a supplier retires an id, the app says so in plain language and gives a button that goes to the sector the place the repair is typed.
- Ten named error states, every with a sentence written for an individual, and a Settings button solely on the failures truly settled there.
- 135 unit assessments, run in opposition to the shipped knowledge moderately than fixtures — the matcher in opposition to the actual desk, each routine rule constructive and unfavourable, the jar arithmetic throughout month ends, leap years and daylight-saving modifications.
flutter analyzereviews zero points. Android compileSdk and targetSdk are pinned to 36.
Who that is for
Builders delivery a skincare, magnificence or personal-care app who need a full, working product to begin from moderately than a display equipment — and who would moderately clarify to their customers the place a reality got here from than hope no one asks.
What will not be included
- No backend and no cloud sync. The shelf and the log are held in a service layer; closing the app restores the pattern knowledge. The documentation reveals precisely the place your storage goes.
- No cost code. The Professional display is a mock finish to finish — plans, a counter, one flag. Wire your retailer’s buy name into one technique.
- No push or native notifications. The shelf tells you whenever you open it; it doesn’t ship you something.
- No digital camera barcode scanner. A barcode is typed in, and the pattern codes are one faucet. That retains the dependency checklist at 5 and the dwell preview working.
- No API keys. Each supplier is bring-your-own-key, and your customers’ utilization is billed to whoever owns the important thing.
- Auth is a mock. Any e mail and password get you in; nothing leaves the gadget.
- The ingredient desk is a curated subset, not the entire of INCI. A reputation it doesn’t know says so moderately than guessing — and including extra is a CSV edit and one command.
Third-party knowledge
Operate classifications comply with CosIng, the European Fee’s public beauty ingredient database. Barcode lookups use Open Magnificence Information beneath the Open Database License; the attribution is within the app’s About display in addition to within the documentation. The three typefaces ship beneath the SIL Open Font License 1.1.
Necessities
Flutter SDK 3.29 or newer, Dart 3.7+, Android Studio or VS Code. Android and iOS. No backend to arrange.
Help
Questions on setup, suppliers or re-skinning are answered by this merchandise’s feedback. Merchandise assist covers the template itself; it doesn’t cowl a supplier’s personal account, quota or billing.
Please notice
Skinora is for informational functions solely and isn’t an alternative to skilled medical or dermatological recommendation. It doesn’t rating, fee or grade something, and it by no means names a medical situation.

