












Milieu
Crafting a mobile app for a startup redefining personalized skincare using DNA
Background
The Why
Have you ever considered that your skincare wasn’t made for your skin? Most of it wasn’t — mass-produced for an average face, with ingredient lists most people can’t parse.
Milieu’s answer starts in the post.
A kit arrives
A microbial DNA swab, posted to the customer.
The sample goes back
Sequenced into a reading of what lives on that skin.
The questions
How the skin behaves after cleansing, and the one priority.
The routine
Products chosen against the reading and the answers together.
Neither half works alone — the biome says what is there, the answers say what to fix.
Then it repeats. The next sample resets the reading — a subscription, not a result.
All of it lived on desktop. But a routine happens in a bathroom, standing up, minutes long — nowhere near a laptop. So the brief was narrow: a native app at parity with the web, not a responsive shrink of it.
Research
Understanding Users
The question was never whether people wanted their skin data. It was what reaching it cost them.
I designed for Linda: 28, sensitive skin that flares easily, does her routine minutes before work. She was never going to open a laptop to check whether her barrier score had moved.
So I built four tasks, one landing in each main view — no part of the app could pass by being skipped.
01Home
Track six months of skin health.02Biome
Find a resilience level.03Profile
Repurchase a gel cleanser.04Flora AI
Ask what order to use the products in.
Round one ran on the desktop frame resized to a phone — not a mobile design, just the web at phone width. Four tasks, 36 seconds average, and a lot of scrolling past the thing they were looking for. The comment afterwards was about comprehension rather than speed: “I was unsure what all the different microbiomes meant.”
Translation
Mobile Patterns
There are two ways to put a product on a phone, and only one of them was worth five months.
| Responsive page | Native app |
|---|---|
| A menu at the top of a long scroll | Bottom navigation, inside thumb reach |
| Hover states, on a device with no hover | Swipe and tap — gestures the device has |
| Every level of detail present at once | Progressive disclosure: detail available without being present |
| Related readings stacked down the page | Card carousels putting them side by side |
On desktop the skin journey spreads across a wide timeline with four score cards beside it. Resize that and both fall past the fold — which is what round one demonstrated.


Only the pair shows the hierarchy: photography stays, while the timeline and the primary score come up to meet the fold. Three pattern changes let them.
Score carousel. Related readings stay in one row rather than stacking down the page.
Primary
Derma Biome Score
Overall skin microbiome health
8.4out of 10
+35.5%
Skin Balance
Microbiome diversity & equilibrium
8.3out of 10
+27.7%
Defense
Protective barrier strength
6.1out of 10
+27.1%
Resilience
Skin’s adaptive response
9.1out of 10
+24.7%
Derma Biome Score — 1 of 4
Range chips. Time ranges become selection states, and all four trend lines stay in one card rather than behind a hover reveal.
Progress Timeline
Hover over lines to highlight specific metrics
6M — January to June.
Highlight a line
Look at that card’s subtitle: “Hover over lines to highlight specific metrics.” The interaction was rebuilt for tap; the instruction to hover shipped anyway, because copy sat outside the component work. A copy audit catches that; a component audit does not.
Hover becomes a scroll. The web’s donut reveals each species on hover. A phone has no hover, and a donut segment is not a tap target — so the hidden layer became a visible one.

Synthesis
What Success Looked Like
Four metrics carried the goals, agreed before I drew anything.
Cognitive load
Dense biome detail sits behind progressive disclosure, not one wall of UI.Purchases
The repurchase path is findable without hunting for it.Mobile-web parity
Labels and structure match the web, so nobody relearns the product.Diagram interpretation
The charts can be read on a phone, not merely displayed on one.
Naming Purchases as a design metric mattered more than it looks. It is the one that stops “make the data legible” from quietly becoming the whole brief.
Ideation
Information Architecture
Two designers were building different halves of the same app, so the map came before the screens.
- Milieu App
- Notification
- Recent updates
- Insights
- Quiz & kit updates
- Home
- Skin Journey
- Biome Score
- Recent Updates & Insights
- Quick Actions
- Microbiome
- Your biome type
- Bacterial Composition
- Pie chart
- List breakdown
- Biome 1
- Biome 2
- Biome 3
- Biome 4
- Know more ⇢ Flora AI
- Flora AI
- Questions
- Facts
- What makes a biome different
- Different biomes
- Skin
- Profile
- Notification
Home and Notifications carry the highest-frequency reads. Deeper biome science sits one level down, so the first screen stays a status check rather than a textbook.
One branch I left open. Every sidebar item found a home except pop-ups, which I annotated “will be nested in Profile later on.” Writing the uncertainty into the file was more useful than resolving it to look decisive.
Accessibility
Contrast and Cognitive Load
Partway through, the question changed from how to get this onto a phone to how to make it legible on one.
Contrast. The design system leaned on glassy translucent panels over photography, and photography is a hostile substrate for text.
Over #8a847b, 3.71:1 — fails the 4.5 minimum.
Over #757660, 4.65:1 — clears the 4.5 minimum.
Over #4c553a, 7.87:1 — clears the 4.5 minimum.
Over #1e212c, 16.04:1 — clears the 4.5 minimum.
3.71:1 to 16.04:1, depending only on where it lands.
Two pass, one passes by a fifteenth of a point, one fails — and which you get depends only on where the text lands. The problem is the variance, not the picture, so the text moved onto a solid panel.

Cognitive load. Then I marked up the Microbiome Analysis screen and started taking things out.

- Repeated information — the chip row restates the cards below it.
- High, Strong, Excellent. Three readings, nothing to do about them.
- A dropdown that opens onto nothing.
The third pin is the cognitive-load metric in miniature: a number nobody can act on isn’t information, it’s decoration.
Final Product
High Fidelity
Two prototypes cover the core loops — skin status and progress, and the membership side.
Flora AI. Complex biome concepts get a conversational layer, so explanation doesn’t have to live inside charts.

Onboarding. A long form becomes focused steps with progress, so users know where they are and what’s left.
Register the kit
The six-character code on the test kit — a checklist over the app.
Skin Goals
Two questions, two selection rules, one screen.
The one priority
A single concern from seven. The routine gets built against this.
Then the routine — these answers read against the biome data from the kit.
No tab bar, and a close control top right: onboarding takes the app over for as long as it runs.
Skin Goals
Answer it and the control shape is the only thing telling you the rule: circles take one, squares take several.
Auth. The mossy landing and short forms set brand tone before the first dashboard read.

Validation
The Same Four Tasks
Then I ran the same four tasks again, this time on the mobile UI.
The same four tasks, run twice
- Round 1 — 36 seconds average per task, on the desktop frame resized to a phone
- Round 2 — 28 seconds average per task, on the mobile app
- One participant per round — and not the same person in both
- Averages only — per-task times were never recorded
So the eight-second gap is a direction, not a measurement. The honest ceiling is that nothing got worse, and the new components were used without explanation.
What I trust more is where someone went unprompted.
- Milieu App
- Profile
- Subscription — reached first try, unprompted
- Skin
- Resilience — reached first try, unprompted
- Profile
“I associated Profile with subscription and anticipated that was where I would re-purchase the gel cleanser.” Not a stopwatch reading — but it says the architecture matched what someone expected before they touched it, which is what the IA was for.
Outcome
What Shipped
I owned the dashboard, membership, onboarding, and Flora AI; a second designer owned Skin and Biome, with eight analysts implementing in SwiftUI.
Cognitive load
Skin and Microbiome combined into one view, cutting the redundancy between them.Purchases
Repurchase nested under Profile, where testing showed people looked first.Mobile-web parity
Every desktop interaction given a mobile equivalent, not a smaller copy.Diagram interpretation
Every graph redrawn for a phone-width read, not scaled down to one.
The information architecture became the shared reference across web and mobile, so both designers could work in parallel without diverging.
Looking Forward
What I Took Away
01Working inside someone else’s language
Milieu already had a polished design system. My work was translation into mobile — visual craft and constraint more than discovery — which sharpened how carefully I work when every hierarchy call has to land under a shipping clock.
02An IA is what lets you stop coordinating
Building a mobile-first architecture that stayed cohesive across two designers’ work was the highest-leverage thing I did. The map is what let us work apart.
03Close enough to launch to watch it go out
Working beside project managers and engineers that near to ship is a different practice from designing toward a deadline nobody ships against.
What comes next is the gap in all of it: keep interviewing, so the qualitative findings rest on more than one person per round, and set up A/B testing so the quantitative ones are measured rather than indicative.