Skip to content
SemCue

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

Art Quest booking, “Date and time” step: start 14:00, ends around 17:15, free times for Saturday 24 October, total 13,900 RUB and a 2,000 RUB prepayment
MORPHEUS booking before confirmation: show, 24 October 2026 at 18:00, 4 guests, total 6,990 RUB, prepayment 2,000 RUB

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 onlycleanup

this group only 14:00–17:15 · cleanup 17:15–17:45

“Time Machine” room

questcleanup

quest 14:00–15:00 · cleanup 15:00–15:30

Dark room

free, but the venue is taken by the party

Activity zone

challengedisco

challenge 15:05–15:35 · disco 15:40–16:10

Tea zone

tea party

tea party 16:15–17:15

A Classic birthday starting at 14:00: quest, challenge, disco and tea party. Durations and cleanup come from the live catalogue. The dark room is free, but it can’t be sold to another group.
Art Quest booking, “Choose a format” step: packages at 8,900 and 13,900 RUB with what’s included and how long it takes
Art Quest booking, “Date and time” step: start 14:00, ends around 17:15, free times for Saturday 24 October, total 13,900 RUB and a 2,000 RUB prepayment
The booking page on a stand with fictional data; the interface is translated for this page. The customer picks a format, and the server works out the end time and total length: 14:00 → around 17:15, 3 h 15 min.

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.

MORPHEUS booking: two shows with day and evening prices
MORPHEUS booking before confirmation: show, 24 October 2026 at 18:00, 4 guests, total 6,990 RUB, prepayment 2,000 RUB
Theatre booking on a stand with fictional data; the interface is translated for this page. Show prices are the live ones, and the server recalculates the total.

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

Next system

Bonuses instead of promo codes, and hot sessions in the bots →

SemCue / Let’s talk

What would you like to work on?

Tell us about your project and what you need. A rough idea is enough.

Get in touch on Telegram

We’ll discuss your goals, where things stand and the right next step.

Discuss your project on Telegram
In developmentThis site is still being built, so things may change.