Our second own product: a system for salons, built and operated entirely by us.
Overview
A salon never finds out that it has lost a client. It finds out months later, looking at the diary and no longer seeing her there.
RITORNI is our product for beauty salons. It has three surfaces: a public page where the client books for herself, a morning dashboard for the owner, and a website of its own for every salon. It runs in Italian, Romanian and English, across three markets, each with its own currency and content. The product site is at ritorni.eu.
As with Invuna, the decisions, the costs and the consequences here are ours.
The product, briefly
- 3
- Active languages
- 3
- Markets
- 3
- Product surfaces
- 9
- Demonstration sites
The challenge
The industry already has booking software. Nearly every product on the market treats the calendar as the product: book, confirm, take payment. What almost none of them do is look at each client's rhythm.
A colour client comes in every six weeks. Another every ten. When one of them runs three weeks past her own rhythm, nothing visible happens: the diary still looks full, the day carries on, nobody rings to say they are not coming back. The loss only becomes visible much later, when it can no longer be recovered.
That is where we built the product. Not around the booking — around the return.
01 · Booking, from the client's side

The approach
The product has three surfaces, designed for three different people.
For the client — the booking page. She picks the service, the person and the time, at any hour of the day or night. She gets the confirmation, and a reminder the day before.
For the owner — the morning dashboard. Not a control panel with twenty charts, but the answer to a single question: what do I do today? The day's takings, the diary, the gaps that can still be filled, and the short list of clients who have drifted past their rhythm — each with the message already written, ready to send.
For the salon — its own website. Every salon gets a site with its services, prices, team and opening hours, wired directly into online booking.
The application was designed for the phone from day one. The owner does not sit down at a computer to find out what needs doing; she looks at her phone, between two clients.
The solution
A design decision: a product for an aesthetic industry
A salon sells taste. Software that walks into a salon has no business looking like an accounting form — and much of what exists on the market looks exactly like that: corporate blue, rounded cards, a panel that could just as easily belong to a logistics company.
We deliberately went the other way and built an editorial design system rather than an application one:
- Palette: ivory, burgundy and gold. Salon colours, not admin-panel colours.
- Typography: a display serif for headlines, a grotesque for body text, a monospace for figures and labels. Times, prices and durations live in monospace, like a printed docket.
- A signature motif: a gold diamond and a fine rule that draws itself on scroll. It appears in all three languages and on every surface, holding the product together without repeating a logo endlessly.
- No emoji. Nowhere, on no screen, in no language. It is a rule, not a preference.
Three languages, three markets — not a translation
The easiest mistake in an international product is to build in English and lay a translation layer over the top. It shows immediately: wrong currencies, phrasing that reads like a manual, the week starting on somebody else's day.
We treated language and market as properties of the salon, not as settings belonging to the visitor. Each salon has its own language, currency and timezone, and the application never infers anything about the person opening it: the salon decides. A salon in Cluj sees prices in lei and an interface written in Romanian — not translated from Italian. A salon in New York sees dollars and an interface written for its own market.
The same rule applies to the product site: the RITORNI product site exists in full in Italian, Romanian and English, with structure and content of its own for each market.
03 · Three markets

One design system, sites that look nothing alike
Every salon gets its own website. The real challenge was not building one site, but building a system that produces sites which do not recognise each other.
The test we set ourselves: put two sites side by side, hide the palette, and a stranger has to say within two seconds which is the hairdresser and which is the barber. If they cannot, the system has failed and what you actually built was the same site in another colour.
To pass it, each trade has its own art direction — not just another colour: a different opening composition, a different rhythm of sections, a different signature motif, a different photographic treatment. The hairdresser opens on an editorial double page. The barber puts the price list straight into the opening, like a board on the wall. The aesthetic clinic runs on a calm, clinical band.
The three trades covered today are a starting point, not a limit: every new salon gets its own direction.

You can open them and check for yourself — these are demonstration sites, with fictional salons: hairdresser, aesthetic clinic, barbershop. The same three exist in Italian and in English as well — nine in total, from a single system.
Key moments
The greyscale test
The easiest thing to do with a design system is to produce the same site in different colours. We wanted the opposite, so we kept the test simple and verifiable: side by side, without colour, someone who knows nothing about the project has to name the trade within two seconds. Composition, rhythm and typography have to do the work, not the palette.
It is the only proof an outsider can run without taking our word for it — which is why it is on this page.
04 · The proof

Translations cannot fall behind
The three language dictionaries are bound together through the type system: a new feature shipped in only one language does not compile. There is no “we'll translate it next week” — either it ships in every language, or it does not ship.
It is a constraint we imposed on ourselves and it cost us time at the start. It has paid for itself on every release since.
AI that never receives personal data
The product uses AI assistance for the messages sent to clients. The model never receives the client's name, her phone number, or the salon's name. It receives the service type, the rhythm and the language, and writes with placeholders; the application fills them in locally once the answer comes back.
Every feature that uses AI also has a hand-written, deterministic version that takes over if the external service does not respond. The product does not stop because somebody else stopped.
The figures say the same thing everywhere
The same amount, calculated in two places in the application, has to produce the same result — otherwise the product lies politely. The calculation rules are covered by automated tests that run on every change, and the booking flow is verified end to end before every release.
Technologies
Application Next.js · React · TypeScript
Database PostgreSQL, hosted in the European Union
Salon websites WordPress with a custom theme, driven by presets
Product site Static, three languages, per-market structured data
AI assistance Via API, with no personal data in the request
Testing Unit tests and end-to-end verification of booking
Languages Italian, Romanian, English
The result
RITORNI is in production. The product site is public in three languages, the application is running, and the website system covers three trades in each of the three markets.
We keep building it — feature by feature, market by market.
Two doors
Do you run a salon? See the product, the pricing and how it works: open ritorni.eu.
Do you have a project? We have been building digital products since 2017 — strategy, design, development, launch. RITORNI is the evidence that we build them for ourselves too, not only on an invoice.

