Lash Consultation
+ AR Try-On
A photo-based consultation tool with a built-in AR try-on. Clients get a safety-checked lash recommendation from a few reference photos and a few questions, preview it live on their own face, then leave with an exportable spec sheet and signed consent form, ready to share with their lash technician at the appointment.
Clients book lash styles they have never actually seen on themselves
Lash consultations typically happen verbally: a client describes what they want, the artist interprets it, and the result is a coin flip. Mismatched expectations lead to unhappy clients, costly corrections, and low rebooking rates. Worse, an artist has no way to verify what "medium fullness" or "almond eyes" actually means for a specific client, and an over-eager recommendation can genuinely damage natural lashes. There is no tool that replaces guesswork with measurement, caps the result at what's actually safe, and lets a client see it on their own face before committing. Every feature below exists because of a specific piece of that problem.
What's in the app, and why it's built that way
The problemClients describe their own eye shape and lash condition inconsistently, and an artist can't verify "medium fullness" or "almond eyes" before the appointment. A naive version of this also has an equity problem: any measurement built on raw photo brightness gets less reliable on darker skin, where a natural lash and the skin behind it sit closer together in tone: exactly the clients a one-size-fits-all detector would under-serve.
The decisionMade reference photos mandatory and camera-only, no file upload, so an on-screen guide can fix the mm scale and enforce the lighting/no-makeup conditions the measurement depends on. Then used MediaPipe face landmarks to auto-detect eye shape and an auto-measurement step that recalibrates its own contrast to each individual photo rather than a fixed brightness cutoff, so accuracy holds across skin tones instead of only the lightest ones. The exact calibration method is part of the app's engine and isn't detailed here, for the same reason the recommendation logic lives server-side (see Feature 02).
The problemVerbal consultations are a coin flip, and swapping that for an LLM call just trades one kind of guessing for a slower, costlier, unverifiable one.
The decisionEncoded real lash-application logic as deterministic rules: zero marginal cost, instant, no hallucination risk. When the entire ruleset turned out to be readable in browser devtools, the engine was moved behind a thin serverless relay: the client sends only anonymised answers, the server returns the result, and the proprietary logic never ships in the bundle.
The problemExtensions that are too long or too heavy for a client's natural lash cause real damage, and it's an easy mistake to make when a client just says "make it dramatic."
The decisionHard-coded the industry length rule (natural length +3mm or 1.5x, whichever is smaller) and a physics-based weight model (weight scales with diameter²) that caps how many fans the natural lash can carry; the engine silently downgrades an unsafe request and explains why.
The problemEven a perfect recommendation is just words and numbers until a client sees it on their own face. That's the original problem this project set out to solve.
The decisionChose a lightweight, real-time canvas overlay mapped to MediaPipe eyelid landmarks (the same technique behind Snapchat/Meitu-style filters) over a heavier 3D face mesh, so try-on runs smoothly on an ordinary phone camera. Lash length is drawn true to the recommended mm against the eye's own measured width, not a stylized approximation, so the length slider changes what a client sees at real scale.
The problemLive AR is great for "does this suit my face," but poor lighting or tracking jitter can obscure the actual shape and density of the fan itself.
The decisionPaired the live AR with a separate, pre-baked 3D model viewer (rotatable GLB models per style and diameter, tilted to match the recommended curl) so a client can inspect the exact geometry of a recommendation independent of camera conditions.
The problemA recommendation is easy to lose between the consultation and the actual appointment, especially with a different technician, and lash extensions are a medical-adjacent service with real contraindications, usually gated by a paper waiver disconnected from everything else.
The decisionGenerate an exportable spec sheet (style, curl, lash map, diameter, aftercare; exported as PDF, image, text, or native share) so the recommendation survives the handoff, and built a full digital health-screening and consent waiver with an on-screen signature pad into the same flow.