What the evidence said, and where it changed my mind.
Desk research for the Halden storefront: what people actually complain about in this category, what it costs, what competitors publish and what they quietly do not. Then a research plan and interview guide for the primary study I would run if this were a live engagement, a synthesis, and the accessibility audit.
Read, not
assumed.
All accessed 3 August 2026. Where a source was weak I made the on-site claim weaker to match, rather than dressing it up. That is most of the method.
What I could not reach
- Trustpilot and Boots.com both returned 403 to automated fetching, so verbatim UK retail review sentences are thinner here than I wanted. Source 1 gives tag prevalence across 324 reviews but not the sentences people wrote.
- Reddit blocked fetching, which removes the richest source of the exact words customers use.
- PubMed Central served a CAPTCHA, so the niacinamide concentration literature is represented second-hand through source 13. The site's copy is worded to survive that: it says the data plateaus around 4 to 5% rather than citing a specific trial.
- Mintel's UK facial skincare reports are paywalled. UK-specific category spend is therefore missing, and source 9 is US data used directionally rather than as a UK figure.
- 01
The Ordinary Niacinamide 10% + Zinc 1%, aggregated user reviews
SkinSort
324 reviews, 3.1 / 5. Reviewer-applied tags with prevalence: Great Value 32%, Irritating 29%, Broke Me Out 27%.
https://skinsort.com/products/the-ordinary/niacinamide-10-zinc-1 - 02
Niacinamide 10% + Zinc 1% product page, UK
The Ordinary (Deciem)
£5.00 for 30 ml. Percentages sit in the product name; the ingredients block does not restate them. Claims visible results in 7 days.
https://theordinary.com/en-gb/niacinamide-10-zinc-1-serum-100436.html - 03
Moisturising Gel Cream product page
BYOMA
$14.99 / 50 ml, 4.55 from 549 reviews. An INCI Decoded panel groups ingredients by function and publishes no concentrations.
https://www.byoma.com/products/moisturizing-gel-cream - 04
Skin Barrier (Dr Melissa Piliang, MD), 14 December 2022
Cleveland Clinic
Causes of damage listed as harsh soaps, over-exfoliating or scrubbing, and not moisturising. Recovery described as three to four months.
https://health.clevelandclinic.org/skin-barrier - 05
5 Expert Tips for Exfoliating Without Disrupting the Skin Barrier
CeraVe
Warns that over-exfoliating causes redness, flaking and irritation, and then gives no frequency guidance at all.
https://www.cerave.com/skin-smarts/skincare-tips-advice/5-expert-tips-for-exfoliating-without-disrupting-the-skin-barrier - 06
Cart abandonment: documented reasons
Baymard Institute
Extra costs too high (shipping, tax, fees) 40%, delivery too slow 20%, no trust in card handling 19%, forced account 18%, cannot see total upfront 12%.
https://baymard.com/lists/cart-abandonment-rate - 07
Sunscreen and sun safety
NHS
UK consumers are taught the 5-star UVA system and household quantity measures, not ISO test values.
https://www.nhs.uk/live-well/seasonal-health/sunscreen-and-sun-safety/ - 08
Reference pricing, published 12 December 2016
ASA / CAP
Comparison prices must be genuine and previously charged for a reasonable period, with the material information a shopper needs to understand the comparison.
https://www.asa.org.uk/news/reference-pricing.html - 09
Beauty demand holds, but price concerns reshape spending, 29 August 2025
eMarketer, citing Circana
Only 14% of beauty buyers think a higher price means better quality. Mass beauty grew 4% in H1 2025 against 2% for prestige.
https://www.emarketer.com/content/beauty-demand-holds-price-concerns-reshape-spending - 10
68% of consumers seek clean beauty information
Cosmetics Business, reporting NPD Group
60% expect brands to disclose ingredient sources; 72% want clear explanations of what ingredients do. No sample size or field date is published, which is a real weakness.
https://cosmeticsbusiness.com/68-of-consumers-seek-clean-beauty-information-and - 11
Retinol vs Retinal
The INKEY List
Retinal converts to retinoic acid in one step where retinol takes two; the brand claims results up to 11x faster than retinol.
https://www.theinkeylist.com/blogs/news/retinol-vs-retinal-what-s-the-difference-and-which-one-should-you-use - 12
Reader comments on product pilling, 29 April to 12 May 2025
Skincarma
A reader posting as H2theD reports product balling happening daily and asks where the tipping point is; the host, Carmine Montalto, names mineral sunscreen as one possible culprit.
https://skincarma.substack.com/p/the-skincarma-pod-episode-23-cracking/comments - 13
Niacinamide, ingredient reference
SkinSort
Around 5% is cited for pigment benefit; true niacin flush does not occur with niacinamide; market products run from 0% to 20%.
https://skinsort.com/ingredients/niacinamide - 14
Are Beauty Brands Intentionally Hiding Their Ingredients?, 25 June 2020
Jessica DeFino
Disclosure law predates e-commerce, so 'transparency' has become a positioning claim that costs a brand nothing to make.
https://jessicadefino.substack.com/p/are-beauty-brands-intentionally-hiding-their-ingredients-694b38f0f11d
Method,
and why
that method.
Objective
Decide whether an ingredient-literate UK buyer will pay roughly nine times the category floor per millilitre for a serum whose only argument is published concentrations and a smaller range. Secondary: find out where in the page that decision is actually made.
Method, and why this method
Two methods, because the question has two halves. Semi-structured interviews (60 minutes, remote, 8 participants) for the why: motivations, past disappointments and the mental model people carry about percentages are all retrospective and attitudinal, which is what interviews are for and what analytics cannot reach.
Then moderated usability testing on the live build (45 minutes, 5 participants, think-aloud, first-click and time-to-answer on three set tasks) for the where: find the niacinamide percentage, work out what delivery costs on a single £48 order, decide whether 04 and 05 can be used on the same night. Behaviour under task is the only honest way to test whether the spec table really is doing the conversion work the layout assumes.
Not a survey. A survey would give me numbers on a population I have not yet defined, and the open question here is what the frame even is.
Recruitment and screener
In: UK residents, 25 to 50, who have bought a facial serum online in the last six months at £20 or more, and who answer an unprompted question about what is in their current serum with at least one ingredient name. That last item is the real screener; it separates the target from the general skincare buyer without telling anyone what I am looking for.
Quotas: at least 3 with self-reported sensitive or reactive skin, at least 2 who have had a reaction to a product in the last year, at least 2 outside the south-east of England, and a spread across price bands rather than only premium buyers.
Out: anyone working in cosmetics, retail beauty, dermatology or UX research. Out: anyone who has taken part in beauty research in the last six months, which filters the professional-participant problem.
Sample: 8 interviews, then 5 usability sessions with fresh participants. Eight is where thematic saturation usually arrives on a single-segment attitudinal study; five is the standard usability number, and any severe issue that survives five sessions will be obvious.
Timeline
Week 1 screener out and recruitment. Week 2 interviews, four a day for two days, with debriefs the same afternoon while it is fresh. Week 3 synthesis and a readout of themes. Week 4 usability sessions against the build, severity-rated findings, and a prioritised change list. Four weeks end to end, which is what this scope honestly needs.
Sixty minutes,
nothing leading.
The craft is in what is not asked. No question here supplies an answer, offers examples to pick from, or asks anyone to predict their own future behaviour. If a participant never mentions percentages, that silence is the finding and the guide does not rescue it.
1. Warm-up
5 minGet them talking about their own routine before the topic narrows.
- Talk me through what you put on your face this morning, in order.
- How long has that been the routine?
- What changed it last?
Probe on the last item only: what happened, when, and what they did next. Do not ask whether it was a good change.
2. Context
12 minUnderstand where products come from and who they trust, without naming any brand first.
- Where did the products you use now come from? Take them one at a time.
- Tell me about the last time you bought something for your skin that you had not used before.
- Who or what do you check before you buy something new, if anything?
- When did you last stop using something? What made you stop?
If a source is named, ask what makes that source useful rather than whether they trust it. Never supply examples: no 'do you use Reddit or TikTok?'
3. Deep dive
20 minGet at the mental model around ingredients, concentration and irritation without teaching it.
- Show me the back of something you are using. Read me anything that catches your eye.
- What does that tell you, if anything?
- You mentioned [ingredient]. How did you come to know about it?
- Tell me about a time a product did not agree with your skin. What did you do?
- How do you decide how much of something to use, or how often?
- Last time you compared two products, what were you comparing?
When a percentage comes up: 'what would a different number there mean to you?' Not 'is higher better?', which supplies the answer. If they do not raise percentages at all, that is a finding; do not rescue it.
4. Reaction
15 minReaction to the artefact, elicited by task rather than by opinion.
- Here is a product page. Spend as long as you like and tell me what you make of it.
- Find out how much niacinamide is in it.
- You are buying this one item and nothing else. What will it cost you delivered?
- What would you want to know that is not here?
- Who do you think this is for?
Silence is the tool. Where they stall, note the elapsed time and the element they were looking at, then ask 'what were you expecting there?' Never ask 'do you like it?' or 'is that clear?'
5. Wrap-up
8 minCatch what the structure missed.
- If this brand existed, what would have to be true for you to buy it?
- What would stop you?
- Is there anything I should have asked and did not?
Ask the last question and then wait. It routinely produces the most useful thirty seconds of the session.
Six themes,
counted.
Prevalence is expressed as a count of sources, not as a percentage of people. Fourteen sources is a small denominator and a theme carried by two of them is labelled as thin, because it is.
Who this is for
The list-reader
primary, and the one the page is built for
Reads INCI lists, knows what phenoxyethanol is, has an opinion about fragrance. Evidenced by the existence and traffic of ingredient-decoding tools, and by competitors shipping decoded-INCI panels to satisfy exactly this person. Buys on specifics and is repelled by atmosphere.
The barrier-repair arrival
secondary
Arrives after something went wrong, which the clinical sources describe as a three-to-four-month recovery. Wants to know what to stop doing more than what to start. This is why the thesis section argues subtraction before the range is shown at all.
The value-anchored comparer
the one most likely to bounce
Has a £5 serum in the cupboard that 32% of its reviewers call great value. Everything on the page has to survive being read next to that. Named here as a hypothesis: it is inferred from review-tag prevalence and category growth data, not from anyone I have spoken to.
- T1surfaced in 5 of 14 sources
Irritation, not inefficacy, is the category's failure mode
The most-reviewed niacinamide serum in the category holds 3.1 out of 5 across 324 reviews, and the two commonest complaint tags are Irritating (29%) and Broke Me Out (27%). Cleveland Clinic puts harsh soaps and over-exfoliating at the top of what damages a barrier. CeraVe warns about redness and flaking from over-exfoliation. Nobody in the set complains that a serum did nothing; they complain it did something unwanted.
over-exfoliating or exfoliating incorrectly can disrupt the skin barrier and result in redness, flaking, or irritation
CeraVe, source 5 · source ImplicationThe competitive opening is a lower dose stated confidently, not a higher one. A brand that says 4% and explains why is arguing against the thing 29% of reviewers actually experienced.
- T2surfaced in 2 of 14 sources, and it is the thinnest-sourced theme here
Texture under sunscreen is a named, specific complaint
Pilling, or balling, comes up as a lived daily problem in a public comment thread among people who follow formulation closely, with mineral sunscreen named as a likely culprit. It is a texture failure that only shows up in the third layer of a routine, which is exactly where a product page never tests itself.
a reader posting as H2theD reports product balling happening daily and asks where the tipping point is; the host names mineral sunscreen as one possible culprit
Skincarma comments, 29 April 2025, source 12 · source ImplicationWorth saying out loud on the page, but worth flagging as the finding I would most want to test with real people before leaning any harder on it. Two sources is a hypothesis, not evidence.
- T3surfaced in 4 of 14 sources
Transparency has become a claim rather than a practice
The category's cheapest serum puts its percentages in the product name and then does not restate them anywhere in the ingredients block. A barrier-led competitor ships an INCI Decoded panel that groups ingredients by function and publishes no concentrations at all. Reported survey data has 72% wanting clear explanations of what ingredients do, against 60% wanting disclosure of where they come from. The appetite is for the explanation, and the explanation is the part nobody ships.
72% want clear explanations of what ingredients do
NPD Group via Cosmetics Business, source 10 · source ImplicationPublishing the full w/w sheet is only half a differentiator. The other half is a sentence per row saying why that number and not another one.
- T4surfaced in 3 of 14 sources
Price has stopped signalling quality on its own
Only 14% of beauty buyers think a higher price means a better product. Mass beauty grew twice as fast as prestige in the first half of 2025. And the top tag on a £5 serum with 324 reviews is Great Value, at 32%, which is higher than either complaint tag. A £48 serum cannot rely on looking expensive; the £5 one has already claimed the value ground and has the reviews to hold it.
Only 14% of US beauty buyers think that higher prices mean better quality products
Circana via eMarketer, 29 August 2025, source 9 · source ImplicationThe premium has to be itemised. Per-ml price, batch size, fill location and what the money buys, stated as figures rather than implied by whitespace.
- T5surfaced in 1 of 14 sources, but it is the only quantitative behavioural study in the set
The basket is lost on cost, not on brand
Extra costs at checkout are the single largest documented reason people abandon a basket, at 40%, ahead of trust in card handling, forced account creation and checkout length. A further 12% abandon because they cannot work out the total cost upfront.
Extra costs too high (shipping, tax, fees)
Baymard Institute, source 6 · source ImplicationDelivery terms belong above the brand argument, not in the footer, and the shortfall to free delivery should be a live number rather than a banner.
- T6surfaced in 2 of 14 sources, by contrast rather than agreement
Nobody will tell you how often to use an active
A mass brand's own guide to exfoliating without wrecking your barrier warns about the consequences and then declines to name a frequency. The NHS, with nothing to sell, gives quantities in teaspoons and a two-hourly reapplication interval. The commercial incentive not to say a number is visible in the gap between those two documents.
As a guide, adults should aim to apply around 6 to 8 teaspoons of sunscreen if you're covering your entire body.
NHS, source 7 · source ImplicationPrinting an actual schedule, two nights a week and which nights, is a differentiator that costs repeat sales and is therefore credible.
Insight to opportunity
- 29% of reviewers of the category leader tag it irritating (T1)Dose at 4%, print the number, and put the reasoning next to itImpact: HighEffort: Low
- Transparency is claimed, percentages are not published (T3)Full w/w formula sheet with a why sentence per row and a carrier remainder that reconciles to 100%Impact: HighEffort: Medium
- Extra costs drive 40% of abandonment (T5)Delivery strip above the fold; live free-delivery shortfall in the drawer; say the £2 gap out loudImpact: HighEffort: Low
- Price no longer signals quality (T4)Per-ml price in the hero spec table; batch size and fill location stated as figuresImpact: MediumEffort: Low
- No one publishes usage frequency (T6)An AM/PM builder that shows which nights get neither activeImpact: MediumEffort: Medium
- Pilling under SPF is specific but thinly sourced (T2)Address it in the product blurb; test it with real users before building a whole page around itImpact: MediumEffort: Low
Six things
I had to
go back and fix.
- 01
I removed a strikethrough price, and that was the sharpest thing this research did
The routine builder showed the full AM set at £112 struck through beside £74, because 06 is out of stock. CAP guidance is that a comparison price must be genuine and must have been charged for a reasonable period. £112 was never charged and never withheld; nothing is on offer. On a site whose entire argument is that it does not mislead you, that was the worst thing on the page. It now reads 'Full set £112 once 06 is back on 19 August', in plain type.
- 02
Delivery moved above the brand argument
The hairline strip carrying free-delivery threshold, lead time, dispatch location and returns window sits directly under the hero, ahead of any argument about why the range is small. That ordering is a direct read of the abandonment data: extra costs beat trust, account creation and checkout length as a reason to leave. The cart drawer got a live shortfall figure for the same reason, and the hero says out loud that £48 is £2 under the £50 line rather than hoping nobody notices.
- 03
Dead ends became live buttons
Out-of-stock 06 rendered a greyed 'Unavailable' in the list and a disabled button labelled 'Email me when back' in the quick view, which promised an action the code refused to perform. In a category losing four in ten baskets to friction, a dead control on the one product that is genuinely unavailable is indefensible. Both are now live: they scroll the restock form into view and move focus into the field.
- 04
The niacinamide argument stopped being an assertion
The formulation note used to say 4% not 10% because the data plateaus. It now also carries the review-tag prevalence from the category leader: 29% of 324 reviewers tag it irritating. Same conclusion, but now it is checkable by anyone who clicks source 1.
- 05
A finding contradicted me, and the sunscreen copy changed
I had 06 Mineral Screen leading on UVA-PF 11.4 under ISO 24443, which is the number a formulator cares about. The NHS teaches UK shoppers a five-star system and gives quantities in teaspoons, so the ISO figure lands on almost nobody. The blurb now gives the lab value and the star equivalent, and the AM routine step measures the dose in fingers rather than mg/cm². The research said my instinct for specificity was pointing at the wrong specific.
- 06
I kept a claim smaller than the competition's
A UK competitor's own copy says retinal works up to 11x faster than retinol. 05 Retinal claims that 0.1% does roughly what a 0.5% retinol does, which is a fifth of that multiple. Where the category inflates, the credible move for this brand is to under-claim and let the reader notice.
Nine colours,
one radius.
All of it is declared in one `@theme` block in globals.css. There are no ad-hoc hex values anywhere in the components.
Colour
- --color-bone#F4F1EAPage ground
- --color-bone-2#ECE7DCFooter, announcement bar, row hover
- --color-ink#16150FBody type, primary buttons, Oslo band
- --color-stone#6B6455Muted copy, interactive borders. 5.20:1 on bone
- --color-olive#4A5240The only accent. Labels, bars, focus ring. 7.24:1
- --color-olive-2#3A4132Hairlines inside the ink band
- --color-clay#C4B7A2Hairlines; body copy on ink at 9.27:1. Never type on bone
- --color-clay-2#DDD5C5Row rules and bar troughs. Decoration only
- --color-rust#8A4B2FLow stock and form errors. 5.95:1 on bone
Type
- DisplayInstrument Serifclamp(2.05rem, 7.2vw, 5.2rem), leading 0.84 to 0.92
- BodyInter 40013 to 15px, leading 1.75 to 1.85
- Micro-labelInter 50010px, 0.16em tracking, uppercase
- NumeralsInter, tabularfont-variant-numeric: tabular-nums on every figure
Spacing, radius, motion, focus, targets
- SpacingTailwind 4px scaleSections py-16 at base, py-24 to py-28 from lg
- Containermax-w-[1500px]px-5 / sm:px-8, plus lg:pl-[88px] and xl:pl-[110px] for the rail
- Radius2pxButtons only. Nothing else on the site is rounded
- Motion400ms cubic-bezier(0.16, 1, 0.3, 1)Every transition. Disabled under prefers-reduced-motion
- Focus2px olive, 3px offsetClay inside .on-ink, where olive would be 2.24:1
- Targetmin-h-11 (44px)Every interactive element
Component: Button
Variants
- Primary
bg-ink, bone label, 12px uppercase, 0.14em tracking, 2px radius
Add to bag, checkout, add set - Bordered
1px stone border, ink label, transparent ground
Bag, Menu, Back to the range - Text
10px label, clay underline at 4px offset
Quick view, Close, Remove, Use a different address
States
- Rest
As above - Hover
Primary goes olive; bordered gains bone-2 ground; text goes olive. 400ms - Focus-visible
2px olive ring at 3px offset (7.24:1 on bone, 9.27:1 clay inside .on-ink) - Disabled
Only the checkout button has one: bone-2 ground, stone label, clay border, 4.76:1, and the label changes to say what to do instead - Loading
Not used. Nothing on this site posts to a server
Accessibility notes
- Always a real <button type='button'>. There is not one click handler on a div anywhere in the build.
- min-h-11 everywhere, so every target clears 44px on the vertical axis.
- Icon-only and repeated buttons carry the item name in an sr-only span: 'Add to bag' becomes 'Add to bag Ceramide Cream 03'.
- No button is ever disabled while its label promises an action. Out-of-stock buttons stay live and move focus to the restock form.
- aria-haspopup='dialog' on the two buttons that open one.
Found 13.
Fixed 13.
3 Critical and 10 Major, audited against the rendered pages at 390, 834 and 1440px rather than against class names. Ratios were computed with the WCAG relative-luminance formula, not estimated by eye. Five further issues were assessed and consciously accepted, with the reasoning written down rather than left out.
- Body copy floor stone on bone
- 5.20:1
- Muted on footer stone on bone-2
- 4.76:1
- Accent and focus ring olive on bone
- 7.24:1
- Inverted band body clay on ink
- 9.27:1
- Primary button bone on ink
- 16.21:1
- Errors and low stock rust on bone
- 5.95:1
- Concentration bars olive on clay-2
- 5.60:1
- CriticalWCAG2.4.7 Focus Visibleno indicator → 7.24:1
Focus indicator suppressed on the restock input
Removed focus:outline-none; the global focus-visible rule applies.
- CriticalWCAG4.1.2, 2.4.3n/a
Cart drawer had no dialog role, focus move, trap or restore
role=dialog, aria-modal, focus to Close on open, Tab cycled, Escape closes, focus restored to the trigger.
- CriticalWCAG2.5.3, 3.2.4n/a
Disabled buttons labelled with an action they refused to perform
Out-of-stock controls are live and move focus into the restock field.
- MajorWCAG1.4.31.75:1 → 16.21:1
Disabled 'Unavailable' row label, the only stock signal in the row
Disabled state removed with the finding above; label is now ink.
- MajorWCAG1.4.31.75:1 → 4.76:1
Disabled checkout button
bone-2 ground, stone label, clay border, and the label says what to do.
- MajorWCAG1.4.112.24:1 → 9.27:1
Focus ring below 3:1 on the inverted Oslo band
.on-ink :focus-visible switches the outline to clay.
- MajorWCAG2.5.5 / 2.2's 2.5.826 to 38px → 44px
Nine interactive elements under 44px, measured on the rendered page
min-h-11 on every one; the quantity steppers are 44 x 44.
- MajorWCAG4.1.2 + ARIA tabs patternn/a
Tab widget announced as tabs, behaved as two buttons
Roving tabIndex, arrow keys, Home and End, focusable panel.
- MajorWCAG1.1.1n/a
Six duplicate image descriptions for one decorative preview
Preview column aria-hidden with empty alt; cart and row thumbnails likewise.
- MajorWCAG1.4.111.75:1 → 5.20:1
Interactive borders at clay on bone
Input, stepper and tablist borders moved to stone. Decorative rules stay clay.
- MajorWCAG1.4.111.29:1 → 7.24:1
Empty rating stars nearly invisible
Unfilled stars are an olive outline; aria-label widened to 'n out of 5 stars'.
- MajorWCAG2.1.1, 2.4.3n/a
Mobile navigation had no Escape and no focus management
Focus moves in on open, Escape closes, focus returns to the Menu button.
- MajorWCAG4.1.3n/a
Subtotal and delivery meter changed silently
aria-live on the subtotal; role=progressbar with value attributes on the meter.
Accepted rather than fixed, with reasons: 10px micro-labels (no WCAG minimum type size, and all pass contrast); footer link rows at 33px rather than 44px (clears the 24px minimum, and 44 would push the legal block off a phone screen); decorative hairlines at 1.29 to 1.75:1 (1.4.11 exempts decoration); `hidden` on collapsed panels, which is correct and needed no change; and reflow at 320px equivalent, verified in the 390px capture with zero horizontal overflow.