perfectdesign.

Website types

E-commerce website design and development

A store is a chain of promises: what you have, what it costs, when it arrives and what happens when something goes wrong. We build that chain on Shopify, on WooCommerce, or custom when your business genuinely needs it.

In short

Most online store projects go wrong before a platform is chosen, because the catalogue, the payment step, the stock policy and the person who packs the box were never treated as one system. Work out what you sell, who fulfils it and what happens when an order fails, and the platform question largely answers itself. We deliver Shopify, WooCommerce and custom builds, we lean towards custom when the decision is genuinely open, and we will tell you when the simpler route is the better one.

Written for a malaysian business owner deciding how to sell online and which build route fits · 10 min read

Choose your situation

What a store has to resolve before you choose a platform

An online store is a business website plus three things it cannot avoid: a catalogue people search, an order that takes money, and a promise about when the goods arrive. Planning one is a sequence of decisions rather than a design brief. What is the business model. What does the buyer actually do, from the first product view to the message confirming delivery. How complicated is the catalogue once variants, pricing and availability are real. Who operates the store day to day. And who carries the post-purchase responsibility when a parcel is late, a payment fails or a customer wants their money back.

The rest of this page uses one assumed example to keep those decisions concrete. A shopper picks physical products with variants from a catalogue. A store operator confirms the order. Stock is either owned by the store or routed to a supplier. Payment is confirmed before stock is allocated. A fulfilment operator receives the delivery handoff. A stock, payment or delivery problem can trigger a refund review. Those roles and policies are illustrative assumptions rather than our recommendation, and the real ones have to be agreed for your project. The worked table further down follows that example through the whole chain.

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)

Catalogue, stock and who actually fulfils the order

Your catalogue and your operations set the build boundary, far more than your design taste does. Six things decide it: how a product is identified, whether it carries variants with their own prices and stock, who owns the stock, which areas you deliver to, how the handoff to whoever ships the parcel works, and who is accountable when an exception occurs. A hundred products with three sizes each is not a hundred products. It is several hundred sellable items, each needing a price, a stock figure and a photograph that matches what arrives. How that data is structured decides whether filtering and catalogue search can work at all.

Fulfilment ownership changes the workflow more than anything else on that list. If you hold your own stock, allocation is an internal decision and you control the delivery promise. If a supplier ships on your behalf, your store is placing an order with someone else, and their acceptance, lead time and stock accuracy become part of a promise your customer thinks you made. Split fulfilment, where some lines ship from you and some from a supplier, needs an agreed rule for what happens when only half an order can be met.

Reservation timing is an operational policy, not a technical default, and platforms differ on it. Odoo, as one documented example, offers three reservation methods: at confirmation, manually, and a configurable number of days before the scheduled delivery date. That is an Odoo-specific example rather than a universal inventory design, but it frames the real question: at what moment does a unit stop being available to the next shopper. Deeper inventory, ERP, shipping and returns mechanics belong to their own guides rather than to this page.

Who actually ships the parcel. Fulfilment ownership changes the workflow more than any design decision on the page. A full text version follows.

Who actually ships the parcel

Editorial framework. Fulfilment ownership changes the workflow more than any design decision on the page.

Basis: Perfect Design: how ecommerce works. Reviewed .

Read the graphic as text
  • You hold the stock. Allocation and the delivery promise are yours
  • A supplier ships. Their lead time becomes your promise
  • Split across both. Needs a rule for a half filled order
Download this infographic (SVG)

Shopify, WooCommerce or a custom build

Compare the routes by who carries which responsibility, not by brand loyalty. A hosted platform such as Shopify takes hosting, security patching and payment plumbing off your hands and charges for that, in subscription, in app fees and often in a share of each sale. An open-source platform such as WooCommerce gives you the code and the flexibility, and gives you the hosting, the updates and the plugin conflicts along with it. A custom build means the checkout, the data model and the admin are written for your business, and nothing arrives that you did not ask for. Whichever route you take, the domain, the hosting, the platform and payment accounts, the catalogue data and the integrations should sit in your business name from the start. An integration-led route sits on top of whichever of those you choose, and its feasibility depends on the available APIs, the permissions you can get, how clean the data is and what the third party's terms allow.

Every route still needs the same order management underneath. WooCommerce documentation, taken as one scoped example, treats orders created at checkout, orders created manually in the admin, order statuses, payment handling, test orders and abandoned-order recovery as separate concerns to configure and check. That is a WooCommerce-specific example rather than a universal rule, but the list is a fair checklist for any route. Whichever platform you pick, somebody has to decide how each of those behaves.

Why we lean towards custom, and when we do not

When the decision is genuinely open, we tend to recommend building it. The reasons are practical rather than ideological.

  • The checkout follows your actual buying journey instead of the platform template, so the steps that lose customers can be removed.
  • You are not paying a percentage of every sale to a platform on top of your payment gateway fees.
  • Stock, orders and customers live in your own database, so connecting an existing system is an integration rather than a workaround.
  • No app subscriptions stacking up each month to restore features the platform left out.
  • The store is not held to a theme system, so performance and layout are yours to control.

Custom is not automatically right. A small catalogue with ordinary needs often ships faster and cheaper on Shopify or WooCommerce, and we will say so. If you sell forty products, take card and FPX payments, ship with one courier and have nobody in-house to run a system, the hosted route is the sensible one and paying for it is not a defeat. We would rather tell you that while we are scoping than bill you for a platform you did not need.

What Malaysian payment gateways publish

Gateway fees are an ongoing cost of trading, so they belong in the plan rather than in a footnote. The table below records what four gateways published on their own pricing pages, read on 18 September 2026. Nothing is interpreted, converted or averaged here, and where a page did not publish a figure clearly, the cell says so instead of guessing. Check the current rate at the source before you commit, because gateway pricing changes.

What each gateway published on its own pricing page, read 18 September 2026
GatewayTo startFPXCardsE-walletsPayout
toyyibPayNo fee on the FPX plan. Card payments carry a RM100 onboarding fee and RM100 a year from the second year.RM1.00 per consumer transaction, RM2.00 per business transaction1.50% local, 3.5% foreignDuitNow QR at 1.00% or RM1.00 per transactionFPX in one to four business days, cards in four, DuitNow QR in two
Curlec by RazorpayNo setup or annual fee on the basic plan. The premium plan is a one-off RM999.1.50% or RM1 per transaction, whichever is greater. 1.00% on the premium plan2.40% domestic, 3.30% foreign. 2.00% and 3.10% on premiumDuitNow Pay at 1.20%, Touch n Go and Boost at 1.50%Not published on the pricing page
BillplzFree basic plan. The standard plan is RM999 a year.A flat per-transaction fee, published without a unit label. Check the current figure on their page1.8% in ringgit, 3.8% otherwise. 1.5% and 3.5% on the standard planDuitNow QR, Touch n Go, Boost and GrabPay at 1.5%FPX next business day, cards in two business days, wallets next day
StripeNo setup, monthly or hidden feesListed on their pricing page. Confirm the current rate with Stripe3% + RM1.00 domestic, plus 1% international and 2% for currency conversionGrabPay at 3%, Alipay at 2.9% + RM1.00. DuitNow QR and Touch n Go are not listedNot stated on the pricing page. Instant payouts cost 1%, minimum RM2.00

Four gateways Malaysian merchants regularly ask about, iPay88, senangPay, Razer Merchant Services and Revenue Monster, do not publish transaction rates publicly and quote on application. Revenue Monster publishes a RM499 setup fee and terminal rental but no transaction rates. That is useful to know before you plan around a number heard second hand: a like-for-like comparison with those four needs a written quote from each, and the quote usually depends on your volume.

What settlement speed does to cash. Hypothetical figures: settlement speed decides when the money is usable, which a tenth of a per cent rarely outweighs. A full text version follows.

What settlement speed does to cash

Illustrative calculation. Hypothetical figures: settlement speed decides when the money is usable, which a tenth of a per cent rarely outweighs.

Basis: Stripe: Payouts. Reviewed .

Read the graphic as text
  • Daily sales: RM 10,000. A round figure chosen for the example
  • Next day payout: RM 10,000. About one day of sales in transit
  • Four day payout: RM 40,000. About four days of sales in transit
  • The difference: RM 30,000. Cash you cannot spend on stock this week
Download this infographic (SVG)

Match the workflow to what you sell

The commerce model decides the workflow, because each one has a different central entity and a different handoff. Storefront retail turns on a buyer and a product. B2B or dealer ordering turns on an approved account with its own pricing rules, so the catalogue and the price change depending on who is logged in, and an order may need approval before it is real. A marketplace turns on buyer, seller and settlement, which means you are running someone else's shop as well as your own and you owe them a payout. Our Aruva Marketplace prototype follows one order through all six roles a marketplace has to run: buyer, seller, platform operations, warehouse, carrier and support.

The models we are asked for after those are custom builds scoped to the business rather than off-the-shelf packages. Subscriptions turn on a recurring agreement and a renewal that can quietly fail. Digital products turn on entitlement, so what is delivered is access rather than a parcel. Rentals turn on a timed asset that has to come back in one piece. Event ticketing turns on capacity and admission, and course sales on enrolment and continuing access. Restaurant ordering turns on menu availability, preparation time and a pickup or delivery window. Our PestaHub prototype shows the timed-inventory shape: a live floor plan where a lot is either free or gone.

Payment, the order record, inventory and the admin view are shared subsystems across all of them. What is never shared is the exception rule. A failed subscription renewal, an unreturned rental and a missed collection slot are three different problems with three different owners. Our own checkout work has covered physical goods, services and digital products, with the fulfilment step changing according to what is being sold.

Online banking carries Malaysian checkouts. FPX is the rail Malaysian buyers reach for first. A store that hides it behind a card form is choosing the more expensive, less familiar option for its customers. A full text version follows.

Online banking carries Malaysian checkouts

Published statistic. FPX is the rail Malaysian buyers reach for first. A store that hides it behind a card form is choosing the more expensive, less familiar option for its customers.

Source: Bank Negara Malaysia: Payment Statistics, Table T3 Payment Systems. Reviewed .

Read the graphic as text
  • 2020: 367m.
  • 2021: 639m.
  • 2022: 646m.
  • 2023: 714m.
  • 2024: 826m.
  • 2025: 956m. RM465 billion

Chart scale: FPX transactions per year, in millions.

Download this infographic (SVG)

The chain every store shares

Whatever the model, one chain runs underneath: product selection, checkout and confirmed payment, stock allocation, fulfilment, then exception and refund handling. The table walks the assumed example through it. The right-hand column is the part most plans leave out, and every entry in it is a test to run or a record to collect before launch, not a result being claimed in advance. The actors and policies remain assumptions to agree.

The shared chain, using the assumed store as the example
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Product selectionShopperAdd the selected variant to the cart at its agreed priceThe variant is unavailable, or its price changed after the page loadedCatalogue and cart identity checks, price checks and availability checks
Checkout and confirmed paymentShopperSubmit the order and wait for an authoritative payment status before confirming anythingPayment fails, is delayed, or a confirmation arrives twiceObserved success, failure, delay and replay payment events, with the order state recorded after each
Stock allocationInventory ownerAllocate under the agreed post-payment policy, or route the line to the supplierStock is short, or the supplier rejects the routed lineAllocation timing tests, concurrent-order tests and supplier routing tests
FulfilmentFulfilment operatorRecord the agreed handoff and keep the order status moving as the parcel doesThe handoff is missed, or only part of the order shipsStatus transitions, customer notifications and delivery references, observed end to end
Exception and refund handlingSupport and finance ownersLink the refund to its order and reconcile stock under the agreed policyA refund is requested twice, or the payment and order records disagreeA duplicate refund test and a partial-return test, with payment identifiers, order transitions and stock-ledger reconciliation
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)

When implementation help is worth paying for

The honest test is where the boundaries fall. If the catalogue, payments, fulfilment, integrations, permissions and exception paths all sit inside one platform, a hosted store and a good theme may be all you need. Once any of those cross a system boundary, into an accounting package, a supplier feed, a dealer price list or a customer database you already run, the work stops being configuration and starts being engineering.

For a useful first conversation, bring six things: where you are now, what you want to change, who it affects, what you already use, any constraint we should know about, and what would make you call the result accepted. Design and build deliverables are scoped and accepted separately from search visibility, measurement and ongoing care, and the platform, integration and maintenance responsibilities are agreed for your actual project rather than assumed. Tell us what you sell on the contact page and we will tell you which route we would take and why.

What you get

What is actually delivered

01

Catalogue and variant model

Products, variants, per-variant price and stock, categories and the facets buyers actually narrow by, structured before any interface is designed.

02

A complete checkout path

Cart, address and delivery, payment and a confirmation the customer can act on, built as payment and checkout rather than a payment button.

03

Malaysian payment methods

FPX, DuitNow QR and cards presented as equals, in ringgit throughout, built against the gateway you choose on fees, settlement and method coverage.

04

An order record worth having

Items and variants, the delivery promise made at purchase time, the price actually charged after discounts, and a contact route when something goes wrong.

05

Stock and reservation policy

An agreed rule for when a unit stops being available, availability re-checked at the moment of payment, and a defined route for supplier-fulfilled lines.

06

Fulfilment handoff and notifications

Order statuses that move as the parcel does, the handoff record your operation needs, and the messages the customer gets at each step.

07

Exception and refund paths

Failed payments, duplicate confirmations, short stock, partial shipments and refunds, each with an owner and a tested path rather than an email to somebody.

08

Admin, accounts and handover

One order list your team works from, plus the code, the domain, the hosting and every service account handed over in your business name.

How it runs

Decide the model, then the platform

The platform argument is the loudest part of a store project and the least important one. We settle what you sell, who fulfils it and what happens when an order breaks, then the route follows from that.

  1. 01

    Model and catalogue

    We work through what you sell, how the catalogue is really structured once variants and stock are included, and who operates the store after launch.

  2. 02

    Route recommendation

    You get a straight recommendation between Shopify, WooCommerce and a custom build, with the reasons and the costs of each, including the cases where we would not build custom.

  3. 03

    Prototype the buying journey

    You click through the real journey on a live link before anything is committed, so the scope is judged from the thing rather than from a document.

  4. 04

    Build and integrate

    We build the approved scope and connect the systems whose APIs, permissions, data quality and terms are confirmed, keeping the rest as a documented later phase.

  5. 05

    Test the unhappy paths, then hand over

    Failed payments, short stock, partial shipments and duplicate refunds are exercised as checks, then the accounts, the code and the data are handed to you.

Proof

Work you can click through

Both Aruva Marketplace and PestaHub are concept prototypes built by us to demonstrate commerce workflows. Neither is a client store, and no client results are implied.

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

Platform choice

Shopify, WooCommerce or a custom build

We build on Shopify and WooCommerce, and we build custom stores. All three are real options and the right one depends on what you sell and how you operate. Custom is not automatically right. A small catalogue with ordinary needs often ships faster and cheaper on Shopify or WooCommerce, and we will say so.

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 e-commerce websites

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

What does an online store cost?

Our e-commerce package starts from RM 5,999 and is published openly on the pricing page. What moves the number is catalogue complexity, how much of the operation the store has to run, and whether anything connects to a system you already use. A custom build is quoted against the scope we agree, not from a list.

Shopify, WooCommerce or custom?

All three are real options here and the right one depends on what you sell and how you operate. We lean towards custom when the decision is open, because the checkout follows your buying journey, the data stays in your own database and there is no platform share of each sale. A small catalogue with ordinary needs often ships faster and cheaper on Shopify or WooCommerce, and we will tell you when that is your situation.

Which payment gateway should we use?

We are provider agnostic and build against the one you pick. Compare on the fees each publishes, on settlement speed and on whether the methods your buyers actually use are covered. The table above records what four gateways published on 18 September 2026, and four others, iPay88, senangPay, Razer Merchant Services and Revenue Monster, quote on application rather than publishing rates.

Can you build subscriptions, rentals, ticketing or restaurant ordering?

Yes, and they are custom builds scoped to your business rather than an off-the-shelf package. Each has its own central entity and its own exception rules: a renewal that fails, an asset that does not come back, a capacity limit, a collection window. We scope those explicitly rather than bolting them onto a shop.

How long does a store take to build?

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. Catalogue data is usually the part that decides the pace, not the code.

Can you migrate our existing products from another platform?

Yes, and it is usually the first task. We have migrated catalogues out of WordPress, spreadsheets and legacy systems, normalising them into a structured database and reconciling them against whatever secondary sources exist. You review the imported data before launch, so you are not carrying old inconsistencies across.

Who owns the store when it is finished?

You do, completely. The code, the domain, the hosting account, the platform account and the merchant account are in your business name, and we hand them over. If you move to another provider later, everything 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.