Skip to content
SemCue

Horror Cinema · booking and payments

Time first.Film later.

Horror Cinema is a private horror cinema in Omsk: a room for one group, a film, a fear level, live actors. Its website schedule used to load from someone else’s widget, and prepayments were bank transfers backed by a screenshot of the receipt. We built the cinema its own booking system on the website, in Telegram and in VK. Now guests pick a time and prepay in about a minute, then set up the film and details later via a personal link.

Live · online payment since 6 September, new booking since 24 September 2026

Step 1 of 4: “When would you like to come?” — free dates only, plus “Pick a time with friends”
Summary before payment: time, rate, film and mode “choose after booking”, total 5,190 RUB and a 1,000 RUB prepayment
“My booking” page: time secured, full price, prepayment and balance on the day

How it started

In summer 2026 the cinema’s website showed its schedule through an aggregator widget. It took up to ten seconds to load, and until then the schedule was a blank space. The ad budget is small, so every visitor who reached the schedule and left was expensive.

Speeding up someone else’s widget made little sense: lazy loading and caching were half-measures. The bot offered “today” and “tomorrow” buttons, but people need to pick a date and time straight away. So the decision was to build our own booking.

The key question was where free times come from. The cinema’s calendar became the source of truth, with our own booking service on top. Every booking immediately creates a calendar event and a CRM deal. A 1,000-rouble prepayment holds the time for 30 minutes, and unpaid holds are released automatically.

  • June

    Own booking instead of a widget

    A Telegram bot and website booking take free times from the calendar. Guests book themselves; the manager sees a ready deal.

  • Summer

    VK and night rules

    The VK bot mirrors Telegram. After a self-service booking in the middle of the night, a rule for late same-evening bookings appeared.

  • August

    Funnel analysis

    The logs showed the site sometimes offered taken slots as free, and the on-screen price could differ from the CRM.

  • 6 September

    Time and prepayment first

    YooKassa online payment and a new order of steps: the film and mode come after payment.

  • 24 September

    The new booking

    “My booking”, “Pick a time together”, one server-side price for the website and the bots.

Where bookings got lost

At Horror Cinema you can’t just show a free hour in a calendar. One film runs about 80 minutes, another almost three hours. The group chooses a fear level and one or two actors. Both the time and the price depend on that.

So the old form demanded every decision before payment. Groups got stuck there: “which film?”, “who’s coming?”, “let’s decide tonight”. Nobody held the time. Prepayments were transfers by card number, then a receipt upload that a manager checked before confirming.

The funnel analysis turned up worse. The site sometimes showed a slot as free when it was already taken. And the on-screen price could differ from the CRM price: the last-minute discount got lost on the way to the server.

Before

  • Film, mode and actors first, payment later
  • Prepayment by transfer and a receipt a manager checks
  • Any change after payment goes through a manager
  • The time is agreed in a group chat, outside the system
  • Price calculated in several places and could drift

After

  • Time and a 1,000-rouble prepayment first, details later
  • YooKassa online payment: Faster Payments or card, receipt automatic
  • Film, mode and group size change via a personal link
  • A “Pick a time together” link for the group chat
  • One server-side price for the website, Telegram and VK

Payment secures the time; details come later

The new path is shorter: date, time, rough group size, one or two actors, contact and prepayment. The film and mode are chosen after payment on the “My booking” page.

That was the main engineering problem. With no film chosen yet, how long do you hold the room? A booking takes a standard 120 minutes straight away. A short film doesn’t shrink that window. A long film extends it only after a fresh calendar check, so it never runs into the next session.

Step 1 of 4: “When would you like to come?” — free dates only, plus “Pick a time with friends”
Summary before payment: time, rate, film and mode “choose after booking”, total 5,190 RUB and a 1,000 RUB prepayment
After payment: “The time is yours”, prepayment received, a “My booking” link to set up the session
“My booking” page: time secured, full price, prepayment and balance on the day
Interface on test data, text translated for this page: picking a time → summary and prepayment → “The time is yours” → “My booking”.

Every change on “My booking” is checked and repriced by the server first. If guests open the page in two tabs and change different things, the second tab can’t overwrite the first: the server says the booking has changed and shows the current version. If the rate changes, the new price appears before saving.

What changed in numbers

  • ×2more website visitors start a booking3.3% → 6.8%, statistically significant
  • +158%visitors reach a confirmed booking1.3% → 3.4%, a preliminary estimate
  • 34% → 57%share of self-service website bookings among all the cinema’s deals
13-day windows before and after the steps were reordered: 24 August – 5 September and 11–23 September 2026. Visits from Yandex Metrica, bookings and deals from the CRM.

The biggest effect came from reordering the steps: once the film moved after payment, twice as many people started a booking. Online booking became the cinema’s main channel: more than half of deals now go through without messaging a manager. Part of the growth is people who used to write in messengers and now book themselves.

Pick a time together

The slowest part of booking is agreeing when everyone is free. That used to happen in a chat we couldn’t see. Now the organiser sends one link to the group chat. Everyone ticks the options that suit them, and the page shows real free sessions that work for most people.

Voting doesn’t hold a slot. The chosen session is checked again before booking. Votes are stored without names: the browser gets a random identifier, and only its hash stays in the database.

“Pick a time together” page: best options from the group’s answers and a calendar of free sessions

After payment nobody has to forward screenshots. The organiser sends an invitation to the chat: date, time, address and when to arrive. The invitation link can’t manage the booking, so it’s safe to share with the whole group.

Invitation for the group chat: date, time and address with no access to managing the booking

The money path

Payment is where a mistake costs money and trust. So the amount comes only from the booking stored on the server. A browser, bot or link can’t change it.

The payment provider sometimes answers slowly, and a server can restart at the worst moment. So the YooKassa request and its key are saved before sending. After a restart the system repeats the same request, and YooKassa doesn’t create a second payment. The system doesn’t take a payment notification on trust either: it re-reads the payment and checks the amount, currency and booking.

Where people book

WebsiteTelegramVK

One booking engine and one set of pricing rules across every channel

Booking

Booking serviceFresh calendar check, price from a single pricing module, slot held until payment

Payment

Payment sessionThe amount comes from the stored booking, never from the browser. Request and idempotency key are saved before sending
YooKassaFaster Payments (SBP) by default or card, fiscal receipt

Confirmation

Notification checkThe payment is re-read through the API: amount, currency, booking. A late “cancelled” cannot overwrite “paid”
OutboxEvery follow-up action is written down first and retried without duplicates
  • amoCRMpayment note
  • Google Calendarevent marker
  • Botconfirmation to the guest
One booking on its way to confirmation. The CRM note, the calendar marker and the message to the guest go into a queue and are retried without duplicates.
  • 0bookings paid twice
  • 0successful payments without a fiscal receiptrefunds have receipts too
  • 3brands on one payment setupHorror Cinema, MORPHEUS, Art Quest
Reconciliation of YooKassa payments, the CRM and bookings as of 14 October 2026.

How it was built

How we built it

Online payment went live within a week: the first test payment on the website on 30 August, the first real payments on the website and in the bots on 6 September. The new booking with “My booking” and picking a time together was released on 24 September.

The cinema sets the business rules. For example, guests can’t cancel a booking themselves; a manager does it. Rules like that can’t be guessed in code; they had to be agreed up front.

  • The cinemaBooking and cancellation rules, prices and discounts, what guests and managers see.
  • SemCueThe booking service, pages, bots, YooKassa payments, calendar and CRM sync, the funnel analysis.
  • ManagersCancellations, changes and a second actor; a ready deal instead of chats and receipts.

For technical readers

How it’s built

Channels
Website, Telegram bot, VK bot. One booking service and one set of pricing rules. MORPHEUS and Art Quest use the same payment setup.
Booking service
Node.js in Docker. Availability from Google Calendar with a fresh check before writing, and a lock per room.
Booking changes
A personal key link, a version number on every change, server-side repricing before saving.
Payments
YooKassa, three shops. The idempotency key is saved before sending; notifications are re-checked via the API.
Sync
A job queue per payment: amoCRM note, calendar marker, confirmation to the guest — without duplicates.

Where the numbers come from

Metrica, CRM and payments

Next system

Party booking and theatre booking on one core →

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.