AI Personalization · Kult

From broad segments to shopping state.

Contextual berry-color For You card
Rainy morning calm reset For You card

Beauty is impulse-led, but impulse does not mean random. It converts when the prompt feels specific to the customer’s current context.

The homepage had to move beyond broad segments and campaign banners. Even good ecommerce personalization often works at the persona level: “acne-prone,” “premium shopper,” “lipstick buyer,” “deal seeker.” For beauty, that was still too blunt.

We wanted the first screen to respond to a more complete shopping state: skin concern, hair context, shade comfort, routine gaps, price sensitivity, city, weather, time of day, recent behavior, and what similar users were already buying or trusting.

Surfacehomepage landing Systemrules + LLM copy Signalsprofile · behavior · product · twins · context Cards30–40 eligible at a time
The problem

The homepage had competing jobs.

The homepage had to balance launches, offers, priority brands, category discovery, replenishment, and newness — while still being useful to the individual user.

That made personalization harder than ranking products. A campaign could matter commercially but be wrong for the customer. A discount could be timely but still not relevant. A trending product could create confidence for one user and hesitation for another, depending on skin type, shade comfort, routine stage, price sensitivity, or trust.

The work was not to add another recommendation module. It was to decide what deserved the first screen for each user: a routine gap, a concern-led prompt, a replenishment nudge, a shade-safe product, a city or weather-led need, a relevant offer, a trusted brand, or proof from similar users.

What we built

A card orchestration layer for the landing page.

For You replaced a single generic hero slot with a dynamic card system. Each card had a job: complete a routine, recover intent, explain a pairing, surface a shade or concern match, use weather context, show what skin/hair/tone twins were buying, or nudge a timely action like restock or price drop.

The card became the unit of personalization: one prompt with a specific reason to act, not a feed of loosely relevant products.

Acne-safe night recovery card
Concern + time of day. Oily/acne-prone user sees a night recovery kit instead of a generic skincare banner.
Humidity-proof routine card
Routine gap + weather. Haircare card changes because humidity makes the missing product more urgent.
Skin twin product ranking
Similarity signal. Discovery uses skin/tone cohorts when there is enough similar-user density.
System design

How For You chose the first screen.

At any point, a user could have 30–40 eligible cards. The system had to collect profile and context, generate card candidates, and rank them in real time so only the strongest prompts reached the first screen.

Profile + context → ranked cards

Declared profile

Skin · hair · tone · undertone · preferences · shade comfort

Behavior

Search · browse · wishlist · cart · purchase · replenishment

Context

City · weather · humidity · season · time of day

Twin signals

Skin twins · hair twins · tone twins · similar intent cohorts

Unified shopping state

Persistent profile + recent intent + live context

Eligible card set

~30–40 candidates/user: routine gap · concern kit · shade match · restock · offer · twin proof

Rank + suppress

Relevance · urgency · confidence · business priority · freshness · fatigue rules

Homepage output

First screen + personalized feed. A small number of cards win; the rest wait, rotate, or get suppressed.

Rules handled eligibility, priority, confidence, and suppression. LLMs were used to turn structured logic into short contextual copy once a card had already earned its place.
Cold start

The first screen also collected signal.

For You needed profile depth to work well. Without skin, hair, tone, preference, or behavior signals, the app could not deliver a meaningfully different homepage.

So new and low-signal users saw lightweight prompts instead of weak recommendations: answer one skin question, choose a hair concern, confirm shade comfort, pick a routine goal, or share a category preference. Each input unlocked better cards over time.

The principle was simple: do not pretend to personalize without signal. Use the first screen to earn the next useful signal, then turn that signal into a more relevant experience.

Selection logic

Every eligible card had to compete for the first screen.

We prioritized cards across five questions: is it relevant to the user, is the signal strong enough, is the timing important, does it support a business priority, and has the user already seen or acted on something similar?

Time-sensitive cards like price drops, back-in-stock alerts, cart recovery, and replenishment could win when the intent was clear. Routine gaps and concern-led prompts won when they solved a specific next step. Twin-backed cards only appeared when there was enough similar-user density.

Actual card logic

Each card started with a user state, not a marketing message.

We mapped common shopping states to card types. The copy came last. First came the signal, the product logic, and the reason the card deserved homepage priority.

User state
Action
Example card
Owns one step in a routine
Purchased or browsed mapped companion products.
Complete the routine
“Your Wella routine isn’t humidity-proof yet.”
Concern signal + PM context
Oily/acne-prone profile and night-time usage.
Recommend a recovery kit
“Oily skin still needs moisture at night.”
Purchased a related active
Niacinamide owner with pairing opportunity.
Explain a pairing
“Pair it with salicylic acid. Here’s your top match.”
City + humidity signal
Mumbai user, high humidity, hair/frizz relevance.
Use environmental context
“Mumbai hair humidity = next-level frizz.”
Enough similar-user density
Skin/tone/hair twins with strong purchase activity.
Twin-backed discovery
“Top 10 amongst skin twins.”
Context in product

Location, weather, and time changed the reason to show a card.

Context was not decorative copy. It changed relevance. A humidity-led haircare prompt was stronger in Mumbai monsoon than as a generic anti-frizz campaign. A night recovery card made more sense in the evening than in the morning. A routine gap was more useful when it connected to what the user had already bought, browsed, or avoided.

Mumbai humidity contextual recommendation crop
Location + weather. City humidity made the haircare prompt immediate. The same surface also asked for small profile inputs when more signal would improve future matches.
Ingredient pairing recommendation
Ownership + product logic. A prior niacinamide purchase created a pairing recommendation rather than a random cleanser push.

For You turned the landing page from a campaign surface into a contextual shopping surface — one that could complete, recover, explain, match, remind, or discover based on what mattered for that user right now.

Kult · AI personalization · beauty commerce
Selected work
← All work