Articles ·
Clair Contour: what a gallery system solves, and what I learned
An online system for galleries, artists and collectors: trying a work on your wall at real size, private catalogues, resale-royalty records. And what eight weeks of building taught me.
Clair Contour is an online system for people who present and sell unique, physical and valuable objects: galleries, independent artists, and design or vintage shops. Each of them gets their own exhibition-quality website, plus a workspace where they manage the inventory, the sales and the mandatory reports. The first line of code was written on 13 August; today claircontour.com runs as a closed test.
In this article I write about the problem it was built for, who it is good for and why, and what I learned while building it.
The problem
A small or mid-sized Hungarian gallery typically works with three separate things today. A website, often heavy and slow. An Excel sheet of the works, the sales and the buyers. And a quarterly obligation: the resale royalty due on sales has to be reported to HUNGART, the Hungarian collecting society, and for sales of HUF 3 million or more the buyer has to be identified and kept on record. The three do not talk to each other.
For the collector, the problem is different. A photo of a painting always looks the same size on a phone. Whether it fits above the sofa, and whether it really looks the way it does in the picture, can only be decided in person.
For the artist, it is that the big online marketplaces take a commission, and their work appears there among thousands of other artists, not as a body of work of their own.
Who it is for, and why
For galleries. A website in their own look, on their own domain, with eleven pre-designed looks in which any section can be changed. Behind it, a workspace that replaces the Excel sheet: works, artists, exhibitions, sales with the buyer, and the quarterly royalty report, which is calculated from the sales automatically. Invoices are issued by the gallery’s existing invoicing service (Számlázz.hu or Billingo); the system only connects to it. Whatever is not needed can be switched off: a gallery that only wants a catalogue does not see royalties or invoicing.
For artists. A free basic plan, with no commission. The artist gets their own site with a biography, studio photos and their work, and if they want, their works also appear on a shared discovery wall, next to those of other artists and galleries. The shared wall exists because an artist’s site standing on its own does not bring visitors.
For collectors. No account needed. The gallery sends a personal link on which the collector sees only what was selected for them: no menu, no full inventory. The link expires and can be revoked one by one. On the artwork page, the collector can photograph their own wall and the work is placed on it at real size; on Android and iPhone, one tap shows it in their room, with no app to install. And the image can be zoomed from the high-resolution original, right down to the weave of the canvas.
What I learned
A white wall is not a wall
The original plan was that trying a work on the wall would run in live augmented reality (AR): the phone recognises the wall, and the work can be hung on it. On the first day we tried it on a phone. On a patterned, detailed wall it worked. On a plain white wall it did not, because the phone looks for features in the camera image, and an empty white surface gives it nothing to measure. This is not our bug; every AR app behaves this way. It just happens that in Hungarian homes, the plain white wall is the norm.
So we reversed the order. The main path became a photo-based solution: the collector photographs their wall, marks an object of known size on it (a light switch is 80 mm), and the work is placed on the picture relative to that, accurate to the centimetre. No luck involved, and it works on every phone and computer. Live AR stayed as an extra.
What works on my machine does not yet work on the phone
For Android, we once wrote our own AR viewer that could also rotate the work in the plane of the wall. On the development machine, every measurement was fine. On my own phone it stuttered and recognised the wall badly. We took it out and went back to Google’s built-in solution; we measured that on real phones end to end, and today AR works well on both Android and iPhone. Since then the rule is that what has not been measured end to end on a real device is not promised on the website.
“It works” has to be measured in both directions
At one point it turned out that every page of the gallery answered with HTTP 200 even when the requested work did not exist. The visitor saw a “no such page” message, but a search engine saw an existing page. After the fix, it was not enough to check that a non-existent work returns 404. We also had to measure that all nine real pages still return 200, because the worst failure of a gate like this is not letting something through, but making a real page disappear.
A half-finished field is a silent bug
Our most common family of bugs was a database field that existed at only one end: something read it but nothing wrote it, or the other way round. The menu had an “About us” item, but the page behind it was never built. The catalogue’s colour theme was saved from a field that did not exist, so every save reset it. Neither threw an error. Since then, the first question for every new field is: what writes it, and what reads it?
A number on its own means nothing
The initial load of the gallery page came to 338 KB. On its own that says nothing, so we measured two working Hungarian gallery websites in the same browser, the same way: one was 6,761 KB, the other 12,072 KB. A twenty- to thirty-five-fold difference, which on mobile data is measured in seconds. We do not name them, because both are potential clients.
“Data stored in the EU” should be true, not just sound good
The first live version ran on one American cloud provider and the database on another, both in Frankfurt data centres. The storage was in the EU, but the website promises that the data stays in the EU, and that is hard to state cleanly through a chain of American companies. At the end of August the whole system moved to a server in Germany. Nothing had to be rewritten, because the code was never tied to either provider. The price is that backups and updates are now our job.
AI speeds things up; the mistakes log teaches
I build Clair Contour with the help of AI too, the same way I described in the KlipTrack article. The project has a separate file of the machine’s more serious mistakes; today it has nearly thirty entries. Most of the lessons above come from there. Deployments and changes to the live server stay with me: nothing runs them without asking.
Where it stands
The system runs as a closed test. The catalogue, zooming, trying a work on the wall, AR on Android and iPhone, the private catalogue, the three languages (Hungarian, English, German), the royalty and buyer records, and the system emails are done and checked. The code for the invoicing services and online payment (Barion) is done, but has not yet run with a real account. There are no prices yet.
If you run a gallery, are an artist, or are simply curious, you can ask for a demo at claircontour.com. And if you are thinking about a similar custom web system, the web application development service is about exactly that.