Skip to content
ROVE Labs
Web appsE-commerce

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

  1. 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.

  2. 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.

  3. 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.

  4. 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+
  1. 01

    Quote

    The server prices the cart: bundles, one percentage coupon, shipping. The browser's numbers are ignored.

  2. 02

    Reserve

    Stock is checked and deducted in the same transaction as the order, including the last unit in a race.

  3. 03

    Snapshot

    Line items, prices and the coupon are frozen on the order so later catalogue changes never rewrite history.

  4. 04

    Fulfil

    Invoice paid, shipped with tracking, delivered. Cancelling restores stock exactly once.

  5. 05

    Audit

    Every transition records who did it and what it was before, shown as a timeline in the admin.

Aetrium product page for Hyaluronic Acid 2% + B5 with labelled ingredients and an add-to-bag panel

(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
  1. 01

    Consent

    18+ and a separate opt-in for the model step.

  2. 02

    Capture

    Live quality gate on pose, light, sharpness and expression; best of three frames.

  3. 03

    Measure

    Colour, redness, shine, under-eye and texture per zone, on the device.

  4. 04

    Score

    Five weighted metrics make the Index. The change since the first scan is shown against normal variation.

  5. 05

    Protocol

    A short routine built from the line, with the limits spelled out.

The Aetrium Index scan page with a before and after slider, zone labels and an example Index score

(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.

An example Index report: the photo with six measured zones, the Index score and five metric cards
The protocol: morning, evening and after-shave steps with reference codes, the rules and the method
The protocol, with its rules and the published weights.

(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.

The serums range page: five formulas listed over a dropper and a drop
Serums
The moisture range page: five formulas listed over a swirl of cream
Moisture
The supplements range page: five formulas listed over a macro of capsules
Supplements

Next step

Want something like this?

Tell us about your version of this problem.