Case study · Own product, in production

Clairvin

The SaaS that makes a wine’s e-label compliant with the European regulation, in five minutes per cuvée.

Role: design, development, deployment2024 — 2025Duration: 3–5 weeks, from the first mock-up to productionNext.js · Supabase · Stripe · Vercelclairvin.com ↗
The same Château Vireloup 2022 e-label on two phones: French on the left, English on the right. One address, two languages.
01/ Context

A legal obligation with nothing to meet it

Since December 2023, European regulation 2021/2117 has required every wine of the 2024 vintage onwards to carry an e-label reachable by QR code: ingredients, nutrition values, allergens. Clairvin is a SaaS I designed, built and shipped on my own to answer that obligation.

02/ The problem

Information that does not fit on a bottle

  1. 01

    The information has to be readable in the language of the country of sale — up to 24 official EU languages. Physically impossible on a bottle.

  2. 02

    The regulation forbids any marketing content and any data collection on the e-label. Ordinary QR shorteners therefore put the producer outside the law without them knowing it.

  3. 03

    The QR is printed on the bottle: the URL can never change again, while its content has to stay correctable for the whole life of the vintage.

03/ Solution

One permanent URL per cuvée, content that stays editable

The producer enters a cuvée once: ingredients, nutritional analysis, allergens, mandatory statements. Clairvin generates a compliant page, translated, served on a permanent URL, and the QR code ready for the printer: vector PDF, at the dimensions of the label.

No tracking, no advertising redirect, no commercial content on the public page. Compliance is the feature.

The list of cuvées in the producer workspace: vintage, category, volume, ABV, publication status and scan count for each wine.
04/ Key decisions

Four choices that had to be defended

Why one URL per cuvée rather than a dynamic QR?

A dynamic QR runs through a redirection service: if that service shuts down or changes hands, tens of thousands of bottles point at nothing. The Clairvin URL is served from a domain the producer can take over in their own name, and the page stays reachable even if their subscription stops. Permanence is a regulatory obligation, not a premium feature.

Why fixed translations rather than machine translation?

Mandatory statements have an exact legal wording in each language. They are stored as a catalogue of approved terms, not translated on the fly: the producer only ever enters values, never sentences. Free-text fields are limited to what the regulation allows, and they are listed explicitly in the form.

Why no analytics on the public page?

The regulation forbids data collection on the e-label, and the GDPR covers the rest. The public page therefore loads no cookie, no third-party script and no remote font. The statistic the producer actually needs — the number of scans per cuvée — is counted server-side, with no identifier and no cookie, and never leaves the application.

Why three addressing schemes at once rather than one?

An e-label can be served on `chateau-x.clairvin.com`, on `clairvin.com/e/{slug}`, or on a domain the producer owns (`etiquette.chateau-x.fr`) wired up through the Vercel Domains API. All three point at the same content and stay valid together, because the QR is already printed by the time the producer decides to move to their own name. It is the permanence requirement pushed one notch further: it is not Clairvin that has to stay alive, it is the address.

05/ Visuals

The screen and the bottle

The publication panel: fourteen compliance conditions, thirteen green, one red — the ingredients are missing — and the Publish button disabled.
1440 px · the screen no QR shortener shows you
The e-label as it opens after a scan: language picker, ingredients, nutrition values, sulphites statement.
390 px · the view the buyer gets
06/ Internals

The data model, the rendering, the weight

The frame holds in three tables — tenants, wines, elabels — and the regulated content in three more: wine_ingredients, wine_nutrition, wine_allergens. Mandatory statements are never typed out in full: they come from term_translations and the catalogues (ingredient_catalog, allergen_catalog, additive_categories), the only source for those fields. A tombstone table, deleted_elabel_slugs, keeps the address of every deleted e-label so it can never be handed out again.

Public pages are static, regenerated on edit, served from the European CDN. The QR is produced as SVG then composed into a vector PDF at the dimensions of the label. The producer workspace is an authenticated application, separate from the public domain. A parallel /01/{gtin} scheme compliant with GS1 Digital Link is already in place, ready for the moment the trade moves onto it, around 2027.

A public page with no third-party script and no remote font: first render under 1 second on 4G. The scan often happens in a cellar or an aisle, on a poor network. That constraint is what dictated the weight budget.

07/ Results

What it produced

3–5weeks from the first screen to production
24official languages covered by the term catalogue
5 minfor a cuvée to be compliant and its QR ready for the printer
0third-party scripts, public page

Clairvin is a product I carry myself, and it has no paying user yet. What is demonstrated here is therefore not commercial traction, it is a complete chain: read a European regulation, draw a data model out of it, and put the result into production in three to five weeks, alone. That is exactly the work you are buying when you have a product built.

  • —Application in production and domain
  • —Code repository and full access
  • —Operations documentation
  • —QR templates ready for the printer

A project of the same order? Describe it in five lines.

A reply within 1 hour, a quote within 24 hours, on working days. A message binds you to nothing.

or contact@kolomiiets.fr