The chain a ticketing site holds together
A ticket page is the visible part of something longer. Behind it sit an event with a real capacity, inventory that must never be sold twice, a buyer who becomes a named attendee, a payment you can trust, an entitlement issued against it, an admission recorded once at the door, and a route for the day a ticket changes hands or the event moves. Ticketing is also compressed in a way a shop is not. A shop can absorb a bad hour, while an on-sale lasts minutes and a door lasts twenty, both in front of the people who paid.
This page covers that workflow. Platform choice and gateway fees sit on the e-commerce route, the mechanics of taking money belong to payment and checkout, and deeper payment-event testing is a separate task with its own guide still to be published here.
Malaysia pays electronically now
Published statistic. An average Malaysian now makes more than ten electronic payments a week. A checkout that only takes cards on delivery is refusing the way the country pays.
Source: Bank Negara Malaysia: Annual Report 2025 and Payment Statistics T1. Reviewed .
Read the graphic as text
- 2020: 170.
- 2021: 220.
- 2022: 284.
- 2023: 343.
- 2024: 432.
- 2025: 538. Three times 2020
Chart scale: Electronic payments made per Malaysian, per year.
Settle the event model, capacity and release rules first
Name what you are selling. Free registration, paid admission, allocated seating, general admission and a capacity-limited session are five different builds. A single evening is not a three-day conference where a pass grants entry and each session inside it has its own smaller limit. Decide whether one ticket means one admission or allows re-entry, and whether attendance is capped by the venue, by a licence or by how many people you can actually feed.
Then decide how tiers and release timing behave, because that is where the arguments happen. A tier that closes on a date is a different rule from one that closes after a fixed number sells. Agree what happens when a tier runs out, the per-order cap, the holdback kept aside for sponsors and guest lists, and who may release it late. Write them as rules with owners, because on the night somebody will ask for an exception.
Odoo's event documentation, read on 19 September 2026, is one configured example of how a platform holds this. Its dashboard card shows the event name, the scheduled date, the location, the number of expected attendees and the responsible event manager, and the event form carries a Limit Registrations option for the maximum number of attendees allowed, with separate tabs for tickets, communication and attendee questions. That is one product's arrangement rather than a universal model, and it does not say what should happen when two buyers reach for the last two seats.
Most card spending is now remote
Published statistic. More than half of Malaysian credit card value is now spent without the card present. That is your checkout, and it is also where the fraud rules and the chargebacks live.
Source: Bank Negara Malaysia: Payment Statistics, Table T2.1 Payment Instruments, 2025. Reviewed .
Read the graphic as text
Credit card value
- Card not present: 52.9%. RM120.5 billion spent online or over the phone in 2025
- Card present: 47.1%. RM107.2 billion tapped or inserted in person
Inventory that cannot oversell
Overselling is the failure people remember, and the obvious design causes it. If a seat is only deducted when a payment succeeds, every checkout in progress is invisible and the last ten seats can sell thirty times. The safer shape is a hold taken when checkout begins, an expiry that returns abandoned stock, and availability re-checked against an authoritative figure before confirmation. Payment that confirms late, as bank transfers and FPX routinely do, has to be reconciled rather than assumed.
Two policies then become non-negotiable: one capacity figure, in one place, that the website, the back office and the door all read, and honest behaviour at release, when hundreds submit within seconds and somebody has to be told there are four seats left. Our PestaHub concept prototype shows the strict version, where inventory is a numbered lot on a live floor plan that is either free or gone.
The hold that stops a double sale
Editorial framework. Deducting only on a successful payment makes every checkout in progress invisible.
Basis: Stripe: Payment intents lifecycle. Reviewed .
Read the graphic as text
- Hold at checkout. The seat leaves availability before payment
- Expire it. An abandoned hold returns to the pool
- Recheck at confirm. Against one authoritative capacity figure
- Reconcile late pays. Transfers confirm after the page has closed
Map the journey from event to admission
The sequence is always the same: event or session, ticket request and capacity decision, payment or registration, entitlement issued, admission recorded, exception resolved. The table follows one deliberately simple example, a single-session event with a fixed assumed capacity and one admission per ticket. Every actor and policy in it is an assumption for illustration, and the last column lists checks to run on your build rather than results anybody has achieved.
| Workflow step | Assumed actor | Proposed system response | Exception | Acceptance evidence to collect |
|---|---|---|---|---|
| Reserve a ticket | Attendee | Hold the ticket against the agreed capacity rule and start the agreed payment or registration flow | Simultaneous requests must not silently exceed capacity, and an abandoned hold has to expire | Concurrency observations at release, hold-expiry tests, and a recount of issued tickets against the capacity figure |
| Issue the admission entitlement | Event system owner | Link the confirmed registration to a distinct ticket identifier and the attendee it belongs to | A delayed or repeated payment confirmation needs reconciling before entitlement is assumed | Order, attendee and ticket mapping tests across successful, delayed, failed and replayed payment events |
| Check in at the door | Admission staff | Record one admission for a valid ticket and show the result to the person scanning | Duplicate scans, cancelled tickets, transferred tickets and a venue network that drops all need an agreed response | Scan tests for valid, duplicate, cancelled and transferred tickets, plus offline and reconciliation observations |
Registration, ticket, attendee and admission are four records
Keeping them apart prevents rework. A registration is the purchase context, one order by one buyer. A ticket is the entitlement, the thing that grants entry once. An attendee is a person, with a name and perhaps a dietary requirement or a session choice. An admission is an operational state recorded at the door. One office manager buying six passes creates one registration, six tickets and up to six attendees, five of them unnamed at the moment of payment.
That is where the decisions surface: when the missing names are required, who supplies them, and what happens if they never arrive. Odoo again offers an attributed example rather than a schema, with a Questions tab for attendee questions beside the ticket configuration. For your project, agree the order identifier, the ticket identifier, the attendee identity, the payment state and the admission state, collect only the personal data the door and the organiser need, and decide how long it is kept before you collect it.
The door is where ticketing fails in public
Check-in is judged by people standing outside, and the arithmetic is unforgiving. A scan takes a few seconds, so the number of devices and trained staff sets the queue far more than the software does. Venue wifi is frequently poor, which makes an offline mode and a reconciliation routine scope items rather than extras. A duplicate scan may be a family sharing a screenshot or a genuine re-entry, and your policy decides what the scanner is told.
Our HORIZON 2026 concept prototype demonstrates this end of the chain rather than describing it: three pass tiers through a working checkout with a live order summary, a scannable QR e-ticket issued on purchase, an attendee space for building a personal agenda from a three-track programme, and an organiser back office with a door check-in console where a scan updates the checked-in, remaining and rate figures as it happens, beside an orders ledger with paid and refunded states. It is a prototype built by us, not a client event, and its attendee app runs as a web application rather than a store-published app.
The door is arithmetic, not software
Illustrative calculation. Hypothetical arithmetic: devices and trained staff set the queue, and a faster app barely moves it.
Basis: Perfect Design: business systems explained. Reviewed .
Read the graphic as text
- Two scan lanes: 25 min. Hypothetical: 600 scans at 5 seconds each
- Four scan lanes: 12.5 min. The same 600 scans, twice the lanes
- Six scan lanes: 8.3 min. The same 600 scans, three times over
Chart scale: Minutes to admit 600 people · common scale from 0 to 30.
Transfers, resale and refunds when the event moves
Tickets change hands. Decide whether a name change is allowed at all, who may make it, up to what deadline, whether it costs anything, and whether the original code stops working on transfer. Resale is the same question with money attached. If you do not provide a controlled route, an uncontrolled one appears anyway and arrives at your door as somebody holding a screenshot they paid for twice. A capped official resale keeps the entitlement inside your system, which is where the door needs it.
Then plan for the event moving. Postponement, a venue change and cancellation are three policies, each needing a decision on refund, credit or automatic transfer, plus partial refunds when one order covered six people and two cannot come. At that point refunds stop being a support inbox and become a queue that has to reconcile against payment records. Keep the ticket states explicit: held, issued, transferred, cancelled, refunded and admitted.
What a card payment costs, as published
Published statistic. The headline rate is half the decision. Settlement speed, the online banking fee and what a plan upgrade costs decide what you actually keep.
Source: toyyibPay pricing plans. Reviewed .
Also: Billplz pricing.
Also: Curlec by Razorpay pricing.
Also: Stripe Malaysia pricing.
Read the graphic as text
- toyyibPay: 1.50%. Cards carry a RM100 onboarding fee
- Billplz: 1.80%. 1.5% on the paid plan
- Curlec: 2.40%. 2.00% on the premium plan
- Stripe: 3.00%. Plus RM1.00 per transaction
Chart scale: Domestic card rate on the entry-level plan, read from each gateway on 18 September 2026.
Scope, ownership and acceptance
Write the scope as a checklist with names against it: event and session content, the capacity source, tier and release rules, registration fields, the payment handoff, the entitlement format, the admission rule and the devices that enforce it, exception policies for duplicates, transfers and refunds, integrations, content ownership after launch, and the acceptance evidence above. Separate the public event site from the operational system behind it, which needs roles, permissions and exception paths of its own.
Three adjacent decisions belong elsewhere. Attendee accounts and organiser logins are accounts and portals. Capacity that repeats, such as classes and appointments, is booking and scheduling. And if the project is really a store that happens to sell a few tickets, start at the e-commerce route instead.
What to bring to a first conversation
Bring the shape of the event, the capacity figure and where it comes from, the tiers and their release dates, how many tickets a typical order contains, whether every attendee must be named, how you want to take payment, and the door plan: devices, staff and the network inside the venue. Bring your transfer, cancellation and postponement policies, or say they are undecided, because deciding them is part of the work. Tell us about the event and we will say what we would build and what we would leave out.



