Two cinema chains: booking against seats that cannot be double-sold
Booking applications for Cinepolis Indonesia and Play Cinemas: showtimes, live seat inventory, payment and ticketing across iOS and Android. Built by PremitiveKey, delivered through KRS Infoserve.
A seat is a single physical thing. Two people can want it in the same second, and a chain sells a session out in the minutes after a big release opens. A booking platform that is almost right sells the same seat twice, and the customer finds out at the door.
Both applications had to hold inventory correctly under real load, across two chains, two mobile frameworks and more than one payment gateway.
- Cinepolis Indonesia on Flutter, Play Cinemas on React Native: two shipped frameworks, so the choice on the next product is made on constraints rather than on habit.
- Showtimes by city and cinema, seat selection held while payment completes, and a session released on timeout so an abandoned checkout never blocks a seat.
- Payment then ticket, with Stripe and local Indonesian gateways across the two properties, and booking history per user.
- One backend shared by app and web, hosted on Azure, with the mobile applications and the AI agent layers as PremitiveKey’s work.
- AI agent layers above both platforms, built and in acceptance testing: interest-based film recommendation, city and genre demand prediction, and re-engagement offers to lapsed moviegoers. Orchestrated on LangGraph, where a loop, a retry or a branch is a modelled edge rather than control flow buried in a service.
Held while paying, released on timeout
The correctness problem is the hold. Everything else is a screen.
Building a consumer product under real load?
Sixty minutes on inventory, concurrency and the parts of the booking path that decide whether a customer trusts the app twice.