Aetrium: skincare guided by face analysis technology
A commerce backend, an admin, the product line and its content, and an on-device face scan that turns a measurement into a routine from the line, for a science-led skin and body care brand.
27
data models in the backend
38
API routes
20
products and bundles, 3 ranges
60+
integration tests
Challenge
Aetrium sells serums, moisturisers and supplements on one promise: measure first, then formulate. A shop template could not keep it. The promise needed prices and stock that can be trusted, a catalogue that carries ingredients and concentrations, a way to look at a face and say something honest about it, and a tone that never claims more than the evidence allows. That made four jobs of one: a commerce system, a product line with its copy and design, a measurement that runs on a phone, and the rules that keep the advice responsible.
Solution
A backend that owns the truth
A Fastify API with its own database, a separate admin, server-side quotes, idempotent checkout, stock that bundles share, and an audit trail on every order.
The line and its words
Fifteen products in three ranges, five bundles, a claims policy, a voice and a design system, written together with the software.
A scan that stays on the device
Face landmarks and zone measurements in the browser, an optional model step for lines, pores and spots, and no photo stored.
From score to bag
A protocol with explicit safety rules that links each concern to a product by its reference code and fills the bag in one step.
Results
Aetrium is built and runs locally; it has not launched, so there are no sales or customer results to report. The Index scan is a demo: its scale is a placeholder calibration and it has not been validated, which the interface says in plain words. Before launch the plan is a repeatability pilot, a test-retest study, a privacy impact assessment and legal review, payment provider integration, hosting, and a printable report.
(01)
A backend where the server decides
The storefront can say anything it likes about a price or a stock level. The backend does not believe it. Every cart is quoted again on the server, prices are kept in whole cents, and an order is a snapshot of what was true at the moment of checkout.
Checkout is a single transaction: stock is deducted, the coupon is consumed, the line items are frozen and the confirmation email is queued. A client-generated key makes it safe to retry, so a double tap or a flaky connection never produces two orders. The email goes out after the commit, so a mail problem can never roll back a paid order.
Around that core sits what a shop team needs every day: a separate admin for orders, products, bundles, promotions, vendors and categories, an audit trail on every order change, and stock that bundles share instead of double counting. Payment status, fulfilment status and payment method are separate fields with centralised transitions, so a payment provider can be added later without rewriting orders.
- data models
- 27
- API routes
- 38
- languages in the admin
- 2
- integration tests
- 60+
01
Quote
The server prices the cart: bundles, one percentage coupon, shipping. The browser's numbers are ignored.
02
Reserve
Stock is checked and deducted in the same transaction as the order, including the last unit in a race.
03
Snapshot
Line items, prices and the coupon are frozen on the order so later catalogue changes never rewrite history.
04
Fulfil
Invoice paid, shipped with tracking, delivered. Cancelling restores stock exactly once.
05
Audit
Every transition records who did it and what it was before, shown as a timeline in the admin.

(02)
Measuring a face on the phone
The Aetrium Index starts from one guided photo. A face landmark model runs in the browser, so the first step happens on the device: it checks that there is one face, that it is the right distance away, that the head is straight, and that light and sharpness are good enough. It keeps the best of three frames.
From that frame the face is split into six zones: forehead, both cheeks, nose and both under-eye areas. Per zone the app measures colour evenness and visible redness in a perceptual colour space, shine in the T-zone, the brightness difference under the eyes and texture. A separate five-question barrier check asks how the skin feels and stays outside the score.
Lines, pores and spots are graded 1 to 10 against a fixed written rubric, and only if the person opts in. Four small crops go to a vision model three times and the median is kept. Without that step the app falls back to its own estimates and says so on the result. Photos are not stored. Scores are kept on the device, not in an account.
- face landmarks per frame
- 478
- measured zones
- 6
- Index, weights published
- 0–100
- photos stored
- 0
01
Consent
18+ and a separate opt-in for the model step.
02
Capture
Live quality gate on pose, light, sharpness and expression; best of three frames.
03
Measure
Colour, redness, shine, under-eye and texture per zone, on the device.
04
Score
Five weighted metrics make the Index. The change since the first scan is shown against normal variation.
05
Protocol
A short routine built from the line, with the limits spelled out.

(03)
From a measurement to a routine
The result page is the report: the photo with its zones, the Index and what changed since the baseline, a card per metric, the barrier check, and plain statements of what the scan cannot see and when to see a doctor. The weights and the method are disclosed on the page itself.
The protocol connects the numbers to the shop. A concern below 70 points to one product by its reference code: lines to the retinal serum, tone and spots to vitamin C, pores to niacinamide, under-eyes to the caffeine eye cream. Rules keep it sensible: at most three actives, one retinoid, vitamin C in the morning and retinal at night, sunscreen whenever actives are used, and a pause on actives if the barrier check comes back irritated. Supplements sit in their own group and are never triggered by a score. The page loads the live catalogue and adds the whole routine to the bag in one step.


(04)
Content and design: measure first, then formulate
We wrote the product line, the claims rules and the design system alongside the software. The line is fifteen products in three ranges of five (serums, moisture, supplements) plus five bundles, each with a permanent reference code, the ingredient and concentration on the label, and no secret blends.
The voice is calm and lab-note: short sentences, numbers instead of adjectives. Claims follow EU cosmetics rules and authorised supplement wording only, and the excluded ingredients are written down. The design system, Calibrated, uses frosted glass, a mist-to-taupe ground and measurement graphics as the only ornament, set in Inter Tight and IBM Plex Mono.



Next step
Want something like this?
Tell us about your version of this problem.

