perfectdesign.

App use cases

E-commerce and shopping app development

A shopping app is worth building when the same customers buy from you often enough to install something for it. We scope it around the commerce operation you already run, not around a feature list.

In short

An installed shopping app earns its place when the same people buy from you repeatedly, because it can hold a saved identity, a position on the home screen, notifications you have been permitted to send, and enough held locally to be useful before the network answers. None of that helps if your customers order twice a year. Scope it as a second client of the commerce operation you already run, so catalogue, stock, accounts and orders stay in one place, and settle what happens when stock is stale, a payment answers late or a notification is refused before anyone designs a screen.

Written for a business owner or e-commerce lead deciding whether a shopping app should sit on top of an existing store · 7 min read

What an app does that your mobile website cannot

An installed shopping app is not a faster version of your store. It is a second surface with four things a browser tab does not have: an identity that survives between visits without a login screen, a position on the home screen, notifications you have been given permission to send, and enough held on the device that the app opens to something useful before the network answers. Each of those is only worth paying for if the same people buy from you often. Someone who orders twice a year will not install anything. Someone who reorders every fortnight is a different proposition.

The rest of this page follows from one decision. The app shares the commerce operation you already run rather than replacing it, so your catalogue, your stock figures, your customer accounts, your orders and your fulfilment stay where they are, and the app becomes another client of them. That is what makes this a custom build scoped to your systems rather than a packaged app we resell, and it is why the system questions come before the screen questions.

Four things a browser tab does not have. All four only pay back when the same people order often, so start with how often they do. A full text version follows.

Four things a browser tab does not have

Editorial framework. All four only pay back when the same people order often, so start with how often they do.

Basis: Perfect Design: how ecommerce works. Reviewed .

Read the graphic as text
  • Saved identity. It survives visits without a login screen
  • A place on screen. An icon somebody chose to keep
  • Permitted push. A channel only while they allow it
  • Useful when slow. Opens to held data before the network answers
Download this infographic (SVG)

Which system owns the catalogue, stock, customers and orders

Before anyone draws an interface, write down the source of truth for six things: products and their variants, prices, stock, customer identity, orders, and fulfilment status. For each one, name the system that owns it, the person allowed to change it, and what is supposed to happen when two systems disagree. That exercise decides whether the app reads a figure or sets it, which side has to be corrected when a number is wrong, and how much of the work is integration rather than interface. If a website already runs your catalogue and search, the app should read the same data rather than keep a second copy that quietly drifts out of step.

Whether a connection is possible at all depends on four things outside the app: whether an interface exists, who can grant access to it, whether the data is clean enough to rely on, and what the provider's terms allow. Confirm those before they enter a scope rather than after. A hosted commerce platform usually publishes an interface an external system can read and write against. A spreadsheet and a chat group do not, and that gap is where app budgets disappear. If you are still deciding how the store itself should be built, e-commerce website development is the page for that decision.

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)

One app sharing one commerce backend

The table below works one shopping journey through three steps, using a fictional shop whose app shares a single commerce backend. The actors, the policies and the responses are assumptions made for illustration rather than a description of how your business runs or of a system we have built. The last column lists evidence to collect before sign-off, which is to say tests still to run rather than tests already passed.

A fictional shopping app sharing one commerce backend, worked through three steps
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Add a product to the cartAssumed shopperThe app selects the current variant and shows availability confirmed by the server rather than a cached figureA cached price or stock record is out of date, so it is rechecked before the item can be boughtA cache to server comparison and a variant test recording what the app displayed and what the backend held
Place an orderAssumed shopperThe agreed checkout runs and the payment attempt is linked to exactly one order in the commerce backendThe shopper submits twice, or the gateway answers late, so both paths have to stay reconcilableOrder and payment identifiers from a retry test showing one order created and no duplicate charge recorded
Follow order progressAssumed shopperThe app reads order status from the backend and sends notifications only where permission was grantedNotification permission is refused, so status has to remain readable inside the appA permission test, a status observation at each stage, and a return request traced to the person who owns it

Cart, submitted checkout, payment outcome and the recorded order

Four things get treated as one, and that causes most of the trouble. The cart is a working list held by the app. A submitted checkout is an intention. A payment outcome is a message from a gateway that can arrive late, twice or not at all. The recorded order is what the commerce backend actually holds, and it is the only one of the four that counts. Agree a single identifier that ties a payment attempt to exactly one order, name the system that is authoritative when they disagree, and make sure the app never presents an unconfirmed order as complete. The deeper mechanics belong with payment and checkout.

Where the money is taken is a platform policy question as well as a commercial one. Apple's App Review Guidelines, read on 18 September 2026, state that an app enabling people to purchase physical goods or services that will be consumed outside of the app must use purchase methods other than in-app purchase, such as Apple Pay or traditional credit card entry. That is Apple's guidance for its own store on the date we read it, not legal advice, and both stores revise their rules. If part of what you sell is consumed inside the app, check the current wording before the payment design is fixed.

What Malaysians actually carry. There are roughly five e-money accounts and two debit cards for every credit card in the country. A checkout designed around credit cards is designed around the smallest group. A full text version follows.

What Malaysians actually carry

Published statistic. There are roughly five e-money accounts and two debit cards for every credit card in the country. A checkout designed around credit cards is designed around the smallest group.

Source: Bank Negara Malaysia: Payment Statistics, Table T2.2 Cards and Users, end-2025. Reviewed .

Read the graphic as text
  • E-money accounts: 188m. Wallets, card and network based
  • Debit cards: 55m.
  • Credit cards: 12m.

Chart scale: In circulation at the end of 2025, in millions.

Download this infographic (SVG)

Notifications are a permission, not a channel you own

Push is the capability most often used to justify an app, and the one most often assumed. Android's documentation, read on 18 September 2026, describes a runtime permission for sending notifications introduced in Android 13, and states that if the user declines it the app cannot send notifications unless it qualifies for an exemption. The same page recommends asking in context, at a moment the person has created, and gives submitting an order for food delivery as an example of that moment. It is Android-specific guidance on the date we read it, and iOS handles the question differently.

Two consequences for scope. Order status has to be readable inside the app whether or not the permission was ever granted, so a refused prompt costs you a channel rather than a feature. And the prompt itself is a design decision: asking on first launch, before the customer has any reason to want a message from you, is the fastest way to lose it permanently. Be honest about what push then does. It can bring somebody back to an abandoned cart or tell them a parcel is out for delivery. It cannot make anyone buy, and we will not put a retention figure in a proposal. Decide which events justify a message and which belong in the order screen alone, because frequency has a price and the price is uninstalls.

Design the failures before you design the happy path

A demonstration of the normal path proves very little, because the normal path is the easy half. The exceptions worth scoping are known in advance: a price or stock figure that was cached and is now wrong, an item that sells out between payment and allocation, a shopper who taps pay twice, a gateway that answers a minute late or never, a notification permission that was refused, and a customer who wants to send something back. Each needs four things agreed: who owns the decision, what the customer sees while it is unresolved, which identifier reconciles the records afterwards, and what evidence you will collect to accept it. They belong in the scope, written as tests to run.

Four records people treat as one order. Only the last one counts, so an unconfirmed order must never be shown as complete. A full text version follows.

Four records people treat as one order

Editorial framework. Only the last one counts, so an unconfirmed order must never be shown as complete.

Basis: Stripe: Payment intents lifecycle. Reviewed .

Read the graphic as text
  • Cart. A working list held by the app
  • Submitted checkout. An intention, and nothing more
  • Payment outcome. A gateway message that can arrive late
  • Recorded order. What the commerce backend actually holds
Download this infographic (SVG)

What to bring to a scoping conversation

Four things make a first conversation useful: the commerce systems you run today and who administers each of them, one real order that went wrong and what it took to put right, roughly how often a typical customer buys from you, and any constraint you already know about, such as a stock system that cannot change. We will tell you which parts look solid, which need confirming before anything could be built, and whether the honest answer is a better mobile store instead of an app.

Mobile app development covers the decisions that apply to any app whatever it does. If you would rather start from the systems, the core systems we build lists the pieces that usually sit behind a shopping app, and a scoped enquiry is the quickest route to a real answer.

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)

What you get

What is actually delivered

01

A scope you can argue with

Roles, the buying journey end to end, the normal and exception states for each step, the systems behind them and the acceptance criteria you will judge the build against.

02

A source-of-truth map

Which system owns products, variants, prices, stock, customer identity, orders and fulfilment, who may change each, and what happens when two of them disagree.

03

The shopping journey, built

Browse and search, product and variant selection, cart, the agreed checkout and order tracking, working against your real data model rather than sample content.

04

Integration with the operation you run

Connections scoped against confirmed interfaces, permissions, data quality and third-party terms, with anything unconfirmed kept out of the build scope until it is settled.

05

A notification plan with the permission designed in

Which events justify a message, when the prompt is asked for, and how the app behaves for a customer who refuses it or turns it off later.

06

Exception and reconciliation design

Stale stock, duplicate submission, late or missing payment responses, cancellations and return requests, each with an owner, a visible state and a reconciling identifier.

07

Device and interruption testing

Representative devices, permission prompts, interrupted checkouts, connection loss and duplicate prevention, evidenced by the test traces agreed in the scope.

08

Release and handover evidence

The agreed traces, the builds submitted on your behalf, the source code in your repository and every account in your business name.

How it runs

Qualify the surface, then the systems

Shopping app budgets are usually lost before any code is written, either on a surface the customers were never going to install or on an integration nobody confirmed was possible. We settle both first.

  1. 01

    Qualify the install

    We test whether purchase frequency justifies an installed app at all. If a responsive store does the same job for less, we say so rather than quote for the app.

  2. 02

    Name the source of truth

    We write down which system owns products, prices, stock, customers, orders and fulfilment, then confirm the interfaces, the access and the terms behind each connection.

  3. 03

    Prototype the journey

    You get the real browse, cart, checkout and order tracking path on a live link, including the staff side, so the scope is judged from something you can use.

  4. 04

    Build, integrate and test the exceptions

    We build in React Native unless a feature needs native code, connect the confirmed integrations, and test stale stock, duplicate submission, late payment responses and refused notifications 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. Aruva Marketplace is a concept prototype, not client work, and it runs as a web platform rather than a published mobile app. It is shown here because its buyer storefront, faceted catalogue, four-step checkout and order tracking carry the same records and states a shopping app has to share with a commerce backend.

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

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

Do we need an app, or would our mobile website do?

The website is the honest answer more often than the industry admits. An app earns its place when the same customers buy repeatedly, when a saved identity removes real friction from a reorder, or when permitted notifications are genuinely useful to them rather than to you. If your customers buy occasionally, a responsive store reaches them with nothing to install and nothing to update, and we will tell you so during scoping.

Is this an off-the-shelf shopping app?

No. It is a custom build scoped to your catalogue, your stock policy, your payment provider and the way your orders are actually fulfilled. We are not reselling a packaged app with your logo on it, which is why the questions on this page are about your systems rather than our feature list.

Can the app use the store we already have?

That is the intended shape: one commerce operation with the app as another client of it, so stock and orders are never held in two places. Whether it is possible depends on whether your platform exposes an interface, who can grant access to it, how clean the data is and what the terms allow. Those four things are confirmed before they enter a scope.

Does payment have to happen inside the app?

It depends on what you sell and on current store policy. Apple's App Review Guidelines, read on 18 September 2026, state that physical goods or services consumed outside the app must use purchase methods other than in-app purchase, such as Apple Pay or card entry. That is guidance for Apple's store on the date we read it rather than legal advice, so the current wording is checked against your category before the payment design is fixed.

What does a shopping app cost?

Website packages are published openly on the pricing page, but an app is quoted against its scope rather than sold as a package. The number moves with how many systems it has to integrate with, how much of the work is the staff side, and how much testing the exception paths need. A scoped conversation is the quickest route to a real figure.

Will notifications bring customers back?

A permitted notification can bring someone back to a cart or tell them a parcel is on its way. It cannot make anyone buy, and there is no figure we would put in a proposal for it. Notifications are also a permission the customer controls, so the app is designed to work fully for someone who refuses them.

Can it be published on the App Store and Google Play?

Yes, and the accounts stay in your business name. Nothing we have built is published to either store yet, and we would rather say that than imply otherwise. What we can show today is app-shaped work inside concept prototypes that run as web platforms, and more app samples are being built.

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.