Software

A white-label ticketing and employee-benefits platform

The context

A French employee-benefits operator sells tickets, admissions and discounted offers to employees, usually through their company’s works council. Seen from the beneficiary, the business looks simple: a page, a reduced price, a ticket in the inbox. Seen from the inside it is much less so, because nothing upstream is uniform.

Every supplier delivers tickets its own way. Some provide PDFs in advance, some want to approve each booking by hand, some expose a ticketing API with its own catalogue, availability and cancellation rules. Every works council, meanwhile, wants its own domain, colours, catalogue and subsidy rules. And a seat sold twice is not a display bug: it is a beneficiary turned away at the door.

What we did

We designed, built and now operate the whole thing: the public site, the works-council portals, the back office, and the services running behind them.

Five supplier fulfilment modes behind one buying journeyFive supplier fulfilment modes — pre-supplied PDFs, generation on demand, partner approval, internal approval and a synchronised third-party ticketing API — all feed a single normalised stock model. Downstream, every purchase follows the same three steps: basket and hold, payment, then ticket, invoice and email.Five supplier fulfilment modesPre-suppliedPDFsGeneratedon demandPartnerapprovalInternalapprovalThird-partyticketing APIOne normalised stock modelBasket and holdPaymentTicket, invoice, email
Supplier complexity stops at the normalisation layer. Adding a supplier means picking an existing fulfilment mode, not extending the buying journey.
  • A stock model that absorbs supplier heterogeneity. Pre-supplied tickets, generation on demand, partner approval, internal approval, or a synchronised third-party ticketing catalogue: four fulfilment modes and external inventories, behind a single buying journey. That is the opposite of the usual reflex, which is to let the buyer carry the supplier’s complexity.
  • Transactional availability. Seats are held the moment they enter the basket and released if payment does not complete, with conditional writes so two simultaneous purchases of the last seat cannot both succeed. Fixed-date and flexible-period stock coexist, and recurring slots are generated from weekly templates rather than entered by hand.
  • White-label multi-tenancy. Dozens of works councils get their own domain, theme, catalogue subset and content — news, media library, polls, banners. Their own administrators manage all of it, under fine-grained permissions, with no access to internal functions and without a single line of code being forked per client.
  • The financial chain, which is the least glamorous part. Wholesale, public and negotiated prices coexist, with fees, add-on options, targeted discounts, flash sales and council subsidies. The hard part is VAT: ticket resale mixes margin-scheme and standard VAT, which forces a line-by-line breakdown that has to agree across the ticket, the invoice and the accounts.
  • Ticket and document delivery. PDF generation with QR codes and barcodes, invoices, confirmation emails. We invested as much in deliverability — bounces, complaints, suppression list — as in the rest, because a ticket that does not arrive costs a support call and some trust.
  • Activity search, as semantic search built on Amazon Bedrock embeddings and Amazon S3 Vectors, which avoids running and paying for a dedicated vector database at this scale.
  • GDPR compliance, treated as an architecture question: analytics tracking removed from the public front end, emails with no open tracking, and data-subject rights tooled rather than handled by hand.
White-label tenancy resolved from the domainEach works council has its own domain. The domain resolves to a tenant, and the tenant determines four things: theme and branding, the filtered catalogue, its own content and polls, and its delegated administrators with fine-grained rights.One domain per works councilCouncil domain ACouncil domain BCouncil domain CTenant resolved from the domainTheme andbrandingFilteredcatalogueContent, news,pollsDelegated admins,fine-grained rights
One codebase, one deployment. Opening a council is configuration: nothing is forked per client, and its administrators manage their own space without internal access.

The outcome

The platform is in production and we operate it. Opening a new works council is configuration, not development. Connecting a new supplier means picking an existing fulfilment mode, without touching the buying journey.

The most useful lesson concerns VAT and discounts. We first treated the breakdown as an invoicing detail, and it became the area that needed the most rework: in ticket resale, price calculation is the product, not a display concern. The second lesson is more mundane and just as expensive to ignore: half the work of a ticketing platform happens after the payment.

All case studies

Talk to us directly

Write to us directly. No salesperson, no qualification call. One of us two replies, within 24 hours.

contact@onescale.io

We reply within 24 hours, and it is one of us who replies.

Based in Lyon, working with clients in France, across Europe and internationally.