Engineering stability for BrowMagic

Developing app prototypes that made BrowMagic’s early demos possible

November 13, 2025

Overview

When our team joined the Brow Magic project, the handheld eyebrow printer still struggled with reliability. Long scan times, inconsistent brow measurements, and frequent SDK crashes stood between L’Oréal and a public demo. The goal was clear: make the technology dependable in weekly sprints, without rebuilding the entire app.

The challenge: three main blockers

  • Unstable brow length: Earlier builds took brow points from ARKit’s default mesh, leading to uneven results.
  • Slow scans: Processing full‑frame depth data for every capture took up to 40 seconds, far too long for a consumer product.
  • Virtual try‑on lag: The Modiface overlay stuttered when users adjusted control points, reducing the sense of quality.

Edge cases, like glasses, dim lighting, and sudden SDK crashes, needed solutions as well.

Project tech stack we chose

insert-tech

Key decisions

1. Replace mesh sampling with custom math We converted 2D brow landmarks from Modiface into precise 3D points using camera intrinsics and depth data. This removed guesswork and smoothed measurements.

2. Switch to side‑face captures 7 photos from each side locked the outer brow tip in place, improving accuracy even though the total photo count remained similar.

3. Process only essential pixels Rather than rebuilding the full depth map, we handled only the eight brow points per frame. Scan time dropped from around 40 seconds to roughly 3-4 seconds.

4. Trim the Bluetooth payload The printer needs only a vector outline, not the selfie. Sending this lightweight file through Prinker’s SDK reduced latency and protected privacy.

5. Stabilize the Modiface pipeline We cached static layers and requested only delta updates, eliminating most of the drag‑and‑drop lag.

6. Maintain a weekly proof cycle Every sprint ended with one approved build and a plain‑text changelog, keeping design and engineering in sync and avoiding unnecessary churn.

Impact at a glance

insert-stats

Takeaway

By focusing on targeted fixes, owning the critical math, trimming data processing, and simplifying communication with hardware we turned an almost‑ready prototype into a demo‑ready product. The foundation is now solid for future feature work.

client:
L’Oréal (innovation lab)
timeline:
7 weeks, start‑to‑finish
team:
1 designer, 2 devs, 1 pm
results:
scan time cut from 40 secs to 3 secs
let’s build together

FAQ

Why side scans instead of more front scans?
Side angles stabilise the outer brow tip, the spot most prone to error.
What tech stack runs the app?
Native iOS (Swift), ARKit, Modiface SDK, and the Prinker printing SDK over Bluetooth.
Is the Bluetooth payload encrypted?
It currently contains only vector data, but lightweight encryption is on the roadmap.
How do you handle glasses or poor lighting?
The app logs lighting conditions and prompts users when quality drops; glasses detection is in evaluation.
How big is the codebase?
About six thousand lines of Swift plus vendor SDKs.
Biggest lesson?
Own the critical algorithm instead of relying on defaults.
Next sprint focus?
Smarter lighting detection and broader color options in Modiface.
From 40 sec to 3 for a full scan.
scan time drastic cut
0.5 millimetre tolerance
for brow length in QA tests.
Drag latency is imperceptible
for virtual try‑on performance
From 20 photos to only 7
and a more natural scan.

/*

iOS app (Swift, UIKit)

ARKit for face tracking and pose

Modiface SDK for facial landmarks and live overlay

CoreBluetooth (BLE) for device communication

Prinker SDK for print-vector formatting and send

On-device 2D→3D landmark conversion with tunable tolerances (JSON config)

Vector-only payload to printer (no selfie frames)

Temporary remote image-to-print conversion step; roadmap: local conversion

All selfie data processed on device and auto-purged after print

Lightweight caching of static layers to keep overlay drag smooth

Custom error wrappers and retries around vendor SDK calls

Git + Xcode; weekly sprint builds with plain-text changelogs

Firmware version pinning per sprint; branch-then-merge policy

*/

Interested in working together? Schedule a call.

More insights

Beauty-tech
Business

From stalled prototype to trusted partner

Beauty-tech
Design

Turning a half‑built app into a brand‑ready experience

E-commerce
Tech

Rebuilding Netsuite’s gifting flow in 6 weeks