Art Quest · MORPHEUS · Horror Cinema
A party takes five resources.No double bookings.
The company runs three venues: Art Quest escape rooms, a horror cinema and the MORPHEUS immersive theatre. A kids’ party at the escape rooms isn’t one slot in a calendar: it’s a quest in a room, a challenge, a disco and a tea party, all in one venue. We built a booking engine of its own for it, and moved the theatre from YClients onto the same shared booking core in one day.
Live · Art Quest booking with online prepayment since 9 October 2026, theatre booking since 4 August 2026


- 1 of 12simultaneous requests for the same time gets through; the rest see “this time is taken”load check, 5 September 2026
- 5venue resources a party occupies in phasestwo rooms, the tea zone, the activity zone and the whole venue
- 1 dayto move the theatre from YClients to its own booking4 August 2026
- 30 minan unpaid booking is held before the time frees up by itselfthe manager gets one task
A party isn’t a calendar slot. It’s five resources
Ordinary online booking sells one service at one time. A kids’ party works differently. First the children play a quest in a room, then move to the activity zone for a challenge and a disco, then to the tea zone. While they have tea, the room gets cleaned. And all along, the venue belongs to their group alone.
This used to be the manager’s maths: how long the party runs, whether the tea zone is free in an hour and a half, whether the room can be cleaned before the next group. We moved those rules into the engine. A party is made of phases, each phase takes its own resources, with 5 minutes to move between phases, 30 minutes of cleanup after a kids’ quest and 20 after an adult one. A kids’ party ends no later than 23:00.
Whole venue
this group only 14:00–17:15 · cleanup 17:15–17:45
“Time Machine” room
quest 14:00–15:00 · cleanup 15:00–15:30
Dark room
Activity zone
challenge 15:05–15:35 · disco 15:40–16:10
Tea zone
tea party 16:15–17:15


Two families can’t land on the same time
The worst thing in online booking is two bookings for the same time. On a Saturday afternoon it’s a real risk: several parents pick a time at once, and every phase of a party overlaps with its neighbours.
We closed this on two levels. When a customer picks a time, the engine locks every resource it needs and only then checks that it’s free. Confirmed bookings are also protected by a constraint in the database itself: even a bug in the code couldn’t write two overlapping parties into one room. The second customer immediately sees “this time is taken” and picks another.
There is also protection against repeats. If a customer’s connection drops and the page sends the same booking again, the engine recognises it by its key and doesn’t create a second one.
- 1 of 12simultaneous requests for one time gets the bookingload check, 5 September 2026
- 12 → 1identical repeats with one key produce one bookingand one calendar entry
- 1 of 2parallel requests went through on the live databaselaunch check, 29 August 2026
The engine also respects entries managers put into the shared calendar by hand: time taken there is never offered to customers.
Server-side price, and a prepayment holds the time
The server prices everything from a versioned catalogue: a quest for 6 children from 6,500 RUB, +800 RUB for each additional child, packages, challenges and extras. It ignores any amount sent by the page, and the payment amount is fixed when the payment is created.
A booking appears in amoCRM and the venue calendar straight away: yellow until prepaid, green after. The 2,000 RUB prepayment goes through YooKassa, and a note is added to the deal. If there’s no payment within 30 minutes, the time is released, the calendar event is removed and the manager gets one task. Every external step — CRM, calendar, payment — retries once a minute if it fails.
Booking with online prepayment went live on 9 October, after a 1 RUB test payment the night before. “Book” buttons sit on the kids’ quest pages, in the quiz and in the bot.
The theatre left YClients in one day
On 4 August the MORPHEUS theatre’s YClients subscription ran out, and it needed booking on its own website that same day. We didn’t repaint the cinema widget: it used cinema rates and recorded bookings as film sessions. Instead, the theatre got its own booking type on the shared core, which already handled theatre bookings and CRM fields.
What’s specific to the theatre stays specific. Shows have a day price until 18:00 and an evening price after, up to 4 guests in the price and +1,000 RUB for each additional one, 6 at most. The hall is separate, so a show can run alongside the cinema and the quests. The customer pays a 2,000 RUB prepayment and uploads the receipt, and the manager sees a link to it in the deal.


One core, three venues
Cinema, theatre and escape-room booking follow the same rules: the server sets the price, an unpaid booking is held for 30 minutes, a prepayment secures the time, and bookings land in the venue calendar and the CRM. Only the rates differ, along with what is being booked: a film session, a show or a party made of several phases.
So a new venue or a new format doesn’t need a new system. The theatre moved in a day because the core was ready. Kids’ parties needed a richer resource model, and it sits alongside the shared rules rather than replacing them.
How it was built
How we built it
The company set the catalogue, packages and venue rules: how long cleanup takes, how much time a move between zones needs, how late a kids’ party may end. We turned them into a model of resources and phases and built the engine, the booking page, payments and the calendar and CRM link.
Launch went step by step: first the engine on the live database in test mode, then a 1 RUB test payment, then live mode and the buttons on the website.
- The companyCatalogue and prices, packages, venue rules, launch timing.
- SemCueThe resource and phase model, double-booking protection, pricing, payments, calendar and CRM, the booking page, the theatre move.
- ManagersGet a task only for a booking that wasn’t paid in time.
For technical readers
Under the hood
- Resources
- Five venue resources; a party splits into phases with buffers: 5 minutes to move, 30 minutes of cleanup after a kids’ quest and 20 after an adult one.
- Double booking
- A lock on each resource while a time is chosen, plus a database constraint for confirmed bookings. Repeats are recognised by key.
- Price
- A versioned catalogue on the server; amount fields from the page are rejected, and the amount is fixed in the payment session.
- Payment
- YooKassa confirmed by notification, a note in the deal, time released after 30 minutes without payment.
- External systems
- amoCRM and Google Calendar: the event changes colour once paid, and every step retries once a minute on failure.
- Theatre
- A separate booking type on the shared service, its own hall, its own rates, receipt upload.
Where the numbers come from
Where the numbers come from
- The launch report of the Art Quest booking engine on the live database, 29 August 2026.
- The load check report, 5 September 2026.
- The service catalogue and the engine’s resource model.
- The decision log: booking with online prepayment live on 9 October 2026.
- The theatre booking description and the bot payment switch-on log.
Next system
Bonuses instead of promo codes, and hot sessions in the bots →