perfectdesign.

App use cases

Booking and appointment app development

A booking app is a policy document with an interface on top. Get the availability rules and the cancellation terms right and the screens become straightforward.

In short

Before a booking app is designed, four things have to be written down: what can be booked, the rules that turn those resources into an available slot, the states a booking moves through from request to completion or no-show, and who may change it at each state. Availability shown on a phone is always a snapshot, so the scheduling system rather than the app has to decide whether a request is accepted. Deposits, cancellation windows and reminders are policy decisions first, and they shape the build more than any screen does.

Written for a business owner or operations lead deciding whether an appointment workflow needs an app, and what must be specified first · 7 min read

What has to be settled before a booking app is designed

Start with the rules, not the screens. Four things have to be written down before anyone designs a screen: what can be booked, the rules that turn those resources into an available slot, the states a booking moves through from request to completion, and who is allowed to change it at each state. Get those wrong and no amount of interface work rescues it, because the app will confidently sell time that does not exist.

This page covers the mobile surface and the decisions immediately behind it. The scheduling system itself, the one holding the calendar and deciding whether a request is accepted, is a larger subject covered by booking and scheduling. Both are custom builds shaped around how you operate rather than a product we configure, which is why the questions below are about your rules rather than our features.

How Malaysians actually pay. Credit cards come last, and a checkout built card-first is built for the method fewest people reach for. QR and online banking are the default here. A full text version follows.

How Malaysians actually pay

Published statistic. Credit cards come last, and a checkout built card-first is built for the method fewest people reach for. QR and online banking are the default here.

Source: MCMC: Internet Users Survey 2024, cashless transactions. Reviewed .

Read the graphic as text
  • QR code: 69.1%.
  • Debit card: 50.6%.
  • E-wallet: 45.9%.
  • Online banking: 43.1%.
  • Credit card: 25.7%. Last

Chart scale: Most used cashless methods among Malaysian internet users, 2024. More than one answer allowed..

Download this infographic (SVG)

Resources, staff, rooms and the rules that create a slot

A resource is anything with finite capacity that a booking consumes: a person, a room, a chair, a bay, a table. Availability is not a calendar. It is what remains after your rules have been applied to that calendar. Service duration, the gap needed between appointments, preparation or cleaning time, opening hours per location, public holidays, individual leave, how far ahead somebody may book, how late they may book, and how many bookings one resource can hold at once. Every rule removes slots, and the combination is what the app is allowed to show.

Then decide what the customer chooses and what the system assigns. Letting someone pick a named member of staff is a feature when the relationship matters and a liability when it does not, because it fragments availability and leaves gaps nobody can fill. Many operations are better served by the customer choosing a time while the system chooses the resource, with a preference recorded rather than promised. Where several locations or time zones are involved, agree which one the app displays and label it on the screen, because a customer who books in the wrong hour blames the app and is right to.

A calendar is not availability. Invented figures: every rule removes slots, which is why availability is calculated. A full text version follows.

A calendar is not availability

Illustrative calculation. Invented figures: every rule removes slots, which is why availability is calculated.

Basis: Perfect Design: business systems explained. Reviewed .

Read the graphic as text
  • Opening hours: 8 h. One invented room, open for the day
  • Break: -1 h. Removed before anything can be booked
  • Service and reset: 40 min. Thirty minutes of work, ten to turn round
  • Bookable slots: 10. Seven hours in 40 minute blocks, rounded down
Download this infographic (SVG)

Two people, one slot

Double-booking is the defining failure of this category, and it is a design decision rather than an accident. Availability drawn on a phone starts ageing immediately: the customer may have opened the screen ten minutes ago, put the phone in a pocket and come back to it. So the display is never the authority. The moment a customer commits, the request goes to the scheduling system, which revalidates against the live calendar and answers with one of a small set of outcomes: accepted, rejected because the slot has gone, held for a short window while payment completes, or expired because that window passed.

That gives the app four states to design instead of one, and the rejected state decides whether a customer tries again or gives up. An error message is not enough. Show the nearest alternatives, keep whatever they had already entered, and make the retry a single tap. Behind it, record every transition with the person or process that caused it. A booking that changed hands twice, against a customer who insists they were confirmed, is an argument you can only settle from a history.

Our own PestaHub concept puts that problem on a live floor plan: merchants take a numbered lot, so two people reaching for the same one is settled by the system rather than by an organiser afterwards. It is a concept prototype rather than client work, and a web platform rather than a published app.

One appointment app connected to one scheduling system

The table works a fictional advisory practice through three steps of one appointment. The roles, policies and responses are assumptions made for illustration, and the last column lists evidence to collect before sign-off, meaning tests still to run.

A fictional appointment app connected to one scheduling system, worked through three steps
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Choose an appointmentAssumed customerThe app shows current availability with the displayed time zone labelled on the screenA cached slot is out of date and has to be revalidated by the server before it can be takenTime zone and stale-availability tests recording what the app displayed and what the calendar held
Confirm a bookingAssumed customerA booking state is recorded, with reminders sent only through channels the customer has permittedPush permission is refused, which must not remove the booking or the confirmationBooking and reminder identifiers, plus a test of the refused-permission path end to end
Change an appointmentAssumed customer and coordinatorThe agreed cancellation or rescheduling policy is applied to the booking and to any deposit takenA late change, or a replacement slot already taken, needs an explicit decision by a named ownerCapacity checks and a change history reconciling the original booking, the replacement and the money

Deposits, cancellation and rescheduling are policy before they are code

Money changes this workflow more than anything else, so answer the policy questions first. Do you take a deposit, the full fee or nothing at the point of booking. If a deposit, is it authorised now and captured later, or taken immediately. What is the cancellation window, and what happens to the money on each side of it. May a customer reschedule themselves, how often, and up to how long before the appointment. Does a reschedule carry the deposit across or start again. And what counts as a no-show, who records it, and what it costs.

Each answer becomes a state and a permission rather than a paragraph in your terms. Somebody has to be able to waive a fee and somebody else must not be, and a refund has to reach the same payment record the money came from, which is why this side belongs with payment and checkout rather than being bolted onto a booking screen. A deposit is the usual lever against casual no-shows, and it also turns away customers who would have come. That trade is yours to make rather than ours to assume.

The payment finishes in a banking app. Paying by FPX or DuitNow means leaving your site for a banking app and coming back. If that return journey is untested on a phone, that is where the order is lost. A full text version follows.

The payment finishes in a banking app

Published statistic. Paying by FPX or DuitNow means leaving your site for a banking app and coming back. If that return journey is untested on a phone, that is where the order is lost.

Source: Bank Negara Malaysia: Annual Report 2025, payments chapter. Reviewed .

Read the graphic as text

Online banking

  • Mobile banking: 64%. 25 million active users, growing 8.7% in 2025
  • Internet banking: 36%. 21 million users, and falling
Download this infographic (SVG)

Reminders, and the honest limit of them

Reminders are the most requested feature here and the most misunderstood. A reminder is a message you are permitted to send, not a message that definitely arrives. Android's documentation, read on 18 September 2026, describes a runtime notification permission introduced in Android 13 and states that an app whose user declines it cannot send notifications unless it qualifies for an exemption. That is Android-specific guidance on the date we read it, and iOS differs. So the booking, the confirmation and the appointment details have to be readable in the app regardless, and email, SMS or a messaging service the customer already uses are separate decisions with their own delivery uncertainty.

Then agree the rules: how far ahead, how many, what they say, whether they carry a one-tap confirm or cancel, and what happens when the appointment moves. A reminder for an appointment rescheduled an hour earlier does more damage than no reminder at all, so reminder state has to follow booking state.

A reminder is permission, not delivery. Reminder state has to follow booking state, or you warn somebody about the wrong hour. A full text version follows.

A reminder is permission, not delivery

Primary-source guidance. Reminder state has to follow booking state, or you warn somebody about the wrong hour.

Source: Android: Notification runtime permission. Reviewed .

Read the graphic as text
  • Inside the app. Always readable, whatever was permitted
  • Push. Only while the runtime permission is granted
  • Email or messaging. Separate decisions, each with its own risk
Download this infographic (SVG)

Which systems have to stay in step

Six records usually exist in a booking operation and they are rarely in one place: the booking, the resource calendar, the staff view, the payment record, the reminder queue and whatever the business runs on afterwards. For each boundary, agree what is exchanged, in which direction, how quickly, and what happens when one side is unavailable. Where customers and staff both need to sign in and see different things, accounts and portals covers that layer. HORIZON 2026, also a concept prototype and also a web platform, carries the other end of it: a pass issued at purchase and scanned at a door against a live check-in console.

What WhatsApp actually charges for. Answering customers costs nothing. Interrupting them costs money and needs approval, which is the right way round for a business to think about it. A full text version follows.

What WhatsApp actually charges for

Published statistic. Answering customers costs nothing. Interrupting them costs money and needs approval, which is the right way round for a business to think about it.

Source: Meta for Developers: WhatsApp Business Platform pricing. Reviewed .

Read the graphic as text
  • Customer writes first: 24h. Opens a service window. Every reply you send inside it is free
  • From a click-to-WhatsApp ad: 72h. A longer free window, which is what makes those ads efficient
  • You write first: Paid. Marketing, utility and authentication templates are billed per message, and templates need approval before use
Download this infographic (SVG)

What to bring to a scoping conversation

Bring your rules rather than your feature ideas: what can be booked and by whom, the durations and the gaps between them, your deposit and cancellation policy exactly as you apply it today including the exceptions you make, the systems holding your calendar and your payments, and one recent booking that went wrong. That last item is usually the most useful in the room.

Mobile app development covers the decisions common to any app, the core systems we build covers what sits behind this one, and a scoped enquiry is the quickest route to an honest view of which parts are ready to build.

What you get

What is actually delivered

01

A written availability model

Every bookable resource, its capacity and location, service durations, buffers, opening hours, leave and blackout periods, and the advance and cut-off windows that decide which slots exist.

02

The booking lifecycle as states

Requested, held, confirmed, paid, rescheduled, cancelled, completed and no-show, each with the permissions that govern it and the record it leaves behind.

03

Server-authoritative acceptance

The revalidation step that decides accepted, rejected, held or expired, with the alternatives, retry path and audit history the app shows around it.

04

Deposit and cancellation handling

Authorisation or capture at booking, the cancellation window, refunds and forfeits, who may waive a charge, and how a reschedule carries or releases the money.

05

A reminder plan that follows booking state

Timing, channel, wording and confirm or cancel actions, with reminders that update when an appointment moves and an app that works for a customer who refuses them.

06

The staff and coordinator side

The queue, calendar and override tools the people running the schedule need, with permissions that separate what a coordinator may do from what a customer may do.

07

Integration boundaries

What the booking, calendar, payment, reminder and operational records exchange, in which direction, and what happens when one of them is unavailable.

08

Release and handover evidence

The agreed test traces including the collision and refused-permission paths, builds submitted on your behalf, source code in your repository and accounts in your name.

How it runs

Settle the rules, then build the screens

Booking projects fail on policy, not pixels. We write down the availability rules, the money terms and the exception owners before anything is designed.

  1. 01

    Map the resources and rules

    We write down what can be booked, the durations, buffers, working hours and windows, and the rules that decide which slots a customer may see.

  2. 02

    Agree the lifecycle and the money

    Deposits, cancellation windows, rescheduling limits and no-show handling are settled as states and permissions, including who may override each one.

  3. 03

    Prototype the journey

    You get the real booking, confirmation and change path on a live link, including the coordinator view, so the policy is judged from something you can use.

  4. 04

    Build, integrate and test the collisions

    We build in React Native unless a feature needs native code, connect the confirmed integrations, and test stale availability, competing requests and refused permissions on representative devices.

  5. 05

    Release and hand over

    Accounts are set up in your name, certificates and signing prepared, review builds distributed, submissions made on your behalf and the code handed to your repository.

Proof

Work you can click through

PantryCue is our own React Native app, with live camera scanning, local notifications, an offline pantry and a Cook Mode that reads steps aloud. You can try the web build, and there is an installable Android build; it is not on the App Store or Google Play. PestaHub and HORIZON 2026 are concept prototypes, not client work, and both run as web platforms rather than published mobile apps. They are shown here because they carry the parts a booking app depends on: live lot availability that two merchants can reach for at once, a checkout and confirmation, and a pass that is issued at purchase and verified at a door.

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.

App stores

The accounts stay in your name

Your business owns the Apple Developer and Google Play accounts. We set them up in your name, prepare certificates and signing, and submit builds for you.

  • Apple Developer and Google Play account setup in your name
  • Certificates, signing and provisioning
  • TestFlight and internal test tracks for review builds
  • Store listing preparation and submission on your behalf

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 booking apps

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

Do we need an app, or would a booking page on our website do?

A booking page is the honest answer for most low-volume appointment businesses, and we will say so. An app earns its place when the same customers book repeatedly, when your staff need the schedule in their hands while moving between rooms or sites, or when changes and reminders have to happen without a phone call.

How do you stop two people booking the same slot?

By never treating the screen as the authority. Availability on a phone is a snapshot that ages, so when a customer commits, the scheduling system revalidates against the live calendar and answers accepted, rejected, held or expired. The app is designed around all four outcomes, including a rejected state that offers the nearest alternatives and keeps what the customer had entered.

Can we take deposits, and handle cancellations automatically?

Yes, and the work is in the policy rather than the payment. We need your cancellation window, what happens to the money on each side of it, whether a reschedule carries the deposit across, who may waive a charge, and what counts as a no-show. Those answers become states and permissions, and the refund path is tested with the rest of the build.

Will reminders stop no-shows?

They can help, and no figure exists that we would put in a proposal. A reminder is a message you are permitted to send rather than one that is guaranteed to arrive, so the appointment details stay readable in the app whatever the customer has allowed, and the reminder plan is agreed alongside deposits, which is the other lever people use.

Is this a booking product you resell?

No. It is a custom build scoped to your resources, your rules and the systems already holding your calendar and your payments. If an off-the-shelf booking tool genuinely covers what you need, that is usually the cheaper answer and we will tell you during scoping.

What does a booking app cost?

Website packages are published openly on the pricing page, while an app is quoted against its scope. What moves the number is how complicated the availability rules are, how much of the build is the staff side, and how many systems have to stay in step. A scoped conversation is the quickest route to a real figure.

Can you show a booking app you have published?

Not on the stores, and we would rather say so. Nothing we have built is on the App Store or Google Play. What we can show is booking work inside concept prototypes that run as web platforms, including live lot selection in PestaHub and passes issued and scanned in HORIZON 2026.

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.