perfectdesign.

Commerce use cases

Event ticketing website development

Selling the ticket is the easy half. The hard half is a capacity that cannot oversell, an entitlement that survives a transfer, and a door that keeps moving when five hundred people arrive in the same ten minutes.

In short

An event ticketing website is a chain running from a capacity figure to a scanned ticket at the door, and it is judged in public on the night. Six things decide the build: where the capacity number comes from, how tiers and release times behave, at what moment a seat stops being available, what the entitlement is and whose name is on it, how the door records exactly one admission, and what happens when a ticket is transferred or the event moves. Ticketing is a custom build for us, scoped to your event, because those exception rules are the part nobody else can write for you.

Written for an organiser or operations lead deciding what an event ticketing website must coordinate before it is scoped · 7 min read

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. 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. A full text version follows.

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.

Download this infographic (SVG)

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. 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. A full text version follows.

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
Download this infographic (SVG)

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. Deducting only on a successful payment makes every checkout in progress invisible. A full text version follows.

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
Download this infographic (SVG)

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.

The ticketing chain, using an assumed single-session event as the example
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Reserve a ticketAttendeeHold the ticket against the agreed capacity rule and start the agreed payment or registration flowSimultaneous requests must not silently exceed capacity, and an abandoned hold has to expireConcurrency observations at release, hold-expiry tests, and a recount of issued tickets against the capacity figure
Issue the admission entitlementEvent system ownerLink the confirmed registration to a distinct ticket identifier and the attendee it belongs toA delayed or repeated payment confirmation needs reconciling before entitlement is assumedOrder, attendee and ticket mapping tests across successful, delayed, failed and replayed payment events
Check in at the doorAdmission staffRecord one admission for a valid ticket and show the result to the person scanningDuplicate scans, cancelled tickets, transferred tickets and a venue network that drops all need an agreed responseScan 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. Hypothetical arithmetic: devices and trained staff set the queue, and a faster app barely moves it. A full text version follows.

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.

Download this infographic (SVG)

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. The headline rate is half the decision. Settlement speed, the online banking fee and what a plan upgrade costs decide what you actually keep. A full text version follows.

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.

Download this infographic (SVG)

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.

What you get

What is actually delivered

01

Event and session model

Events, sessions, passes and their relationships, with one authoritative capacity figure that the website, the back office and the door all read.

02

Tier and release rules

Ticket tiers with prices, sales windows, per-order caps, holdbacks and an agreed behaviour when a tier sells out, built as rules rather than manual edits on the night.

03

Inventory that holds under load

A hold taken at checkout, an expiry that returns abandoned stock, availability re-checked before confirmation, and honest behaviour at release instead of silent overselling.

04

Checkout and payment handoff

A ticket purchase flow built against the gateway you choose, with delayed, failed and repeated payment confirmations reconciled rather than assumed.

05

Digital tickets and attendee records

A distinct entitlement per ticket, a scannable digital ticket, attendee-level details where you need them, and a deadline for names on multi-ticket orders.

06

Door check-in console

Scan or search check-in with a clear result for the person scanning, live checked-in and remaining figures, and defined behaviour when the venue network drops.

07

Exception paths for transfers and refunds

Name changes, cancelled and transferred tickets, partial refunds on multi-ticket orders and a postponement route, each with an owner and an explicit ticket state.

08

Organiser back office and handover

Sales, orders, attendees and per-session capacity in one place for your team, plus the code, the domain, the hosting and every service account in your business name.

How it runs

Decide the rules, then build the chain

Ticketing projects rarely fail on design. They fail on a capacity rule nobody agreed, a refund policy written during the crisis, and a door plan that assumed the venue wifi would hold.

  1. 01

    Event model and capacity

    We work through sessions, passes, the capacity figure and where it comes from, and the tier and release rules you want enforced rather than managed by hand.

  2. 02

    Policies and exceptions

    We settle the hold and expiry rule, the admission rule, and what happens on a duplicate scan, a transfer, a cancellation and a postponed date, before any of it is built.

  3. 03

    Prototype the buying and door journeys

    You click through the purchase, the digital ticket and the check-in console on a live link, so the scope is judged from the thing rather than from a document.

  4. 04

    Build, integrate and check the on-sale

    We build the approved scope, connect the systems whose access and terms are confirmed, and exercise the release, the concurrency behaviour and the payment events as checks.

  5. 05

    Rehearse the door, then hand over

    Valid, duplicate, cancelled and transferred scans are tested on the actual devices, offline behaviour is proven, then the accounts, the code and the data are handed to you.

Proof

Work you can click through

HORIZON 2026 and PestaHub are concept prototypes we built ourselves, not client events, and no client result is implied. HORIZON 2026 demonstrates tiered passes and checkout, a scannable digital ticket, an attendee app running as a web application, and an organiser door check-in console. PestaHub demonstrates cinema-seat style booth booking on a live floor plan, where a numbered lot is either free or gone.

Concept prototypes are labelled as prototypes everywhere they appear. They demonstrate what we can build, not work delivered for that named client. More client work is going live and will be added as it does.

How we work

The parts people ask about before they commit

How we build

React first, other languages when a project needs them

We build in React by preference, on both web and mobile, and we work in other languages when a project genuinely calls for it.

Timeline

Project dependent, and often quicker than expected

Timelines are project dependent. A focused build can go live in about a week, while a larger platform takes longer once scope is agreed.

Ongoing care

Quoted with the project, not bolted on

For a more complex website or a system with a real backend, ongoing care starts from RM 250 a month, with the plan confirmed against what was actually launched. Care is quoted with the project, not bolted on afterwards.

Getting hold of us

Normally under one working day

We normally respond to a support request in under one working day, and we work to solve problems as fast as we can. That is how we normally work rather than a contractual guarantee, and responding is not the same as resolving. If your operation needs a formal response or resolution commitment, we can write one into your scope.

Ownership

Everything belongs to your business

You own everything we build for you: the code, the content, the domain, the hosting account and every third-party account opened for the project. There is no lock-in. If you move to another provider, everything goes with you and we help with the handover.

  • Source code, handed over in your own repository
  • Domain and DNS, registered to your business
  • Hosting and every service account, in your name
  • Analytics, search and ad accounts, with us as a manager you can remove
  • All content, media and data in the system

Questions

Asked about event ticketing

Straight answers to what people ask before they commit. Anything else, message us.

What does an event ticketing website cost?

Our e-commerce package starts from RM 5,999 and is published openly on the pricing page. Ticketing is a custom build rather than a package, so it is quoted against the scope we agree. What moves the number is the capacity and tier rules, whether you need attendee-level data, the door setup, and whether anything connects to a system you already run.

Can you build the door check-in as well as the ticket sales?

Yes, and we would argue they are one system rather than two. The door reads the same capacity and entitlement records the website writes, which is what stops a cancelled ticket scanning successfully. Our HORIZON 2026 concept prototype includes a check-in console for that reason, though it is a prototype rather than a client event.

How do you stop the event overselling?

By holding the ticket when checkout begins rather than when payment succeeds, expiring abandoned holds, re-checking availability against one authoritative capacity figure before confirmation, and reconciling delayed payment confirmations instead of assuming them. We then exercise the release under concurrent requests as a check before you go on sale.

Can attendees transfer or resell their tickets?

Only if you decide they can, and that decision belongs in the scope rather than in support. We build the rule you choose: who may transfer, up to what deadline, whether it costs anything, and whether the original code stops working. If you do not offer a controlled route, an uncontrolled one tends to appear anyway and arrives at your door.

What happens if the event is postponed?

That is a policy question we scope with you before launch. Postponement, a venue change and cancellation each need a decision on refund, credit or automatic transfer, including partial refunds where one order covered several people. The system then has to make that route reachable at scale and reconcile it against your payment records.

Should we just use an existing ticketing platform?

Sometimes, and we will say so. If you run one straightforward event a year, a hosted ticketing platform is quick, and its per-ticket fee may cost less than a build. Building becomes worthwhile when those fees are significant at your volume, when the attendee data and the branding matter to you, or when ticketing has to connect to systems you already run.

How long does a ticketing build take?

Timelines are project dependent. A focused build can go live in about a week, while a larger platform takes longer once the scope is agreed. With events the fixed point is the on-sale date, so tell us that first and we will tell you honestly what fits before it.

Who owns the attendee data?

You do, along with everything else we build. The code, the domain, the hosting account, the payment account and the attendee records are in your business name and are handed over. If you move to another provider later, the data goes with you and we help with the handover.

Where to go next

Sources

Tell us what you need built

We will show you the closest thing we have already built, then scope the real version against your requirements.