← Projects

Case study · 2025-2026

AmBilet: a ticket marketplace moved off WordPress without losing its customers.

AmBilet sells tickets for concerts, stand-up, theatre, festivals and children’s events across Romania. In 2026 I rebuilt it on ePAS, the platform behind Tixello: a new site, a new customer account, a new panel for organisers. Existing customers logged in to the new site with the same password.

Role
Founder. Product, design, code, migration
Period
December 2025 - present
Status
Live on ambilet.ro
Built on
ePAS, the platform behind Tixello
The problem
The old AmBilet ran on WordPress, WooCommerce and a ticketing plugin, a system that had not been designed for seats, holds and settlements.
What I built
A new, fast site connected to ePAS: seating maps, a cart that holds the seat, gift cards, a customer account and a full panel for organisers.
The result
Live on ambilet.ro since April 2026, with the old events, orders, tickets and accounts moved into the new platform.
ambilet.ro
AmBilet home page, with the event of the day and the event list
  • 1,394 commits in ten months
  • 7,777 tickets moved in a single import
  • 3,080 orders moved, for 45 events
  • 453 ticket types brought over from the old site

Counted in git and in the import files, on 5 November 2026.

01 · The problem

A WordPress shop that sold tickets.

The old AmBilet was a WooCommerce shop with a ticketing plugin. For an ordinary shop that is enough. For tickets it is not: seats on a map, holding the seat while the customer pays, entry scanning and the settlement to the organiser were all added on top of a system that had not been designed for them.

I already had ePAS, the platform Tixello runs on. I moved AmBilet onto it, so it would get everything Tixello organisers already had.

02 · What it does

You find the event, pick your seat, get in with your phone.

The buyer searches by city, category, artist or day: today, tomorrow, this weekend. On the event page they pick their seat on the map. The seat stays held while it is in the cart, and the ticket arrives by email and in the account.

The organiser has their own panel: events created step by step, sales, attendees, discount codes, team, documents and settlements. For the entrance they have a web scanning app.

The AmBilet event list, with category filters
All events, with category filters: concerts, stand-up, theatre, festivals, children.
AmBilet on a phone
On a phone: the same page, laid out for the small screen.

03 · The architecture

A fast PHP site in front, ePAS behind.

AmBilet has no database of its own. It is a separate PHP site, with no framework, that asks ePAS for everything through a marketplace API. ePAS has 35 controllers just for this type of client.

  1. 01

    The visitor

    • HTML pages, through Cloudflare
    • Seating map drawn with Konva
    • Payment with Netopia or Stripe
  2. 02

    Three-level cache

    • Full pages on disk, for 5 minutes
    • API responses served even after expiry
    • Cleared by ePAS when something changes
  3. 03

    Marketplace API

    • Events, orders, payments, customers
    • Organisers, artists, venues, search
    • Server-side requests go direct, with no detour
  4. 04

    ePAS

    • Tickets, seat holds, settlements
    • Invoices and e-Factura (Romania’s national e-invoicing system)
    • The same modules as Tixello

When an organiser changes a banner or an event in ePAS, the platform notifies the site, and the page is rebuilt without waiting for the cache to expire.

04 · The migration

Existing customers logged in with the same password.

In mid-April 2026, AmBilet switched to the new platform. I wrote a guide that maps each type of data in WordPress to its equivalent in ePAS: events, ticket types, orders, tickets. Then I imported in batches, from CSV files, so every step could be checked.

The accounts came over with their encrypted WordPress passwords, so customers logged in to the new site with their old password. Links in old emails lead to a copy of the old site, so nobody lands on an empty page.

Events in Bucharest on AmBilet
A city page: the month’s events, with venue and starting price.
AmBilet gift cards
Gift cards, valid for any event on the site.

05 · Speed

Visitors from ads were getting the slowest page.

The page cache used the full URL as its key, including the parameters that Facebook and Google add to every click. Every visitor coming from an ad had a different URL, so they got a page generated from scratch. Exactly the people I was paying for. Now these parameters are removed from the key.

Another problem showed up in the logs: API requests that timed out after 3 seconds, although the server responded in about 600 milliseconds. The time was lost on the secure connection through Cloudflare. Server-to-server requests now go direct.

06 · Metrics

What I counted.

Measured in the repo and on the site, on 5 November 2026. Sales figures are not here, because I have not yet checked them against an export.

  • 1,394commits, between 27 December 2025 and 5 November 2026git
  • 239commits in January 2026, the busiest monthgit
  • 7,777tickets and 3,080 orders moved for 45 eventsmeasured
  • 5 minhow long a page stays in cache before it is rebuiltin code
  • 0.15 shome page response time, a single measurementmeasured
  • 35controllers in the ePAS marketplace APIin code

How much code

249
PHP files
~100k
lines of PHP
102
JavaScript files
~44k
lines of JavaScript
42
CSS files
27
migration commits

07 · What I learned

What I take with me.

A migration is done in small pieces

A large import that fails halfway is hard to restart. Imports by event and by data type are checked one at a time.

Do not make customers reset their password

Every account lost in a migration is a customer who may not come back. Encrypted passwords can be moved, if you know how they were encrypted.

Test the cache on real traffic

On clean URLs, the cache worked perfectly. On URLs from ads it did not work at all.

Hide what is not ready

Rewards and badges stayed hidden until they had real benefits. A button that does nothing hurts trust more than not having it.

08 · Further

The platform under AmBilet.

Everything runs on ePAS, the platform behind Tixello. The Tixello case study.

Has your shop or platform outgrown WordPress?

I do migrations without losing data or customers, onto a platform built for what you sell. Write to me and we will see if it fits.