perfectdesign.

Commerce workflows

Digital product store development

When you sell a file, the thing you actually deliver is a permission. Build the permission properly and the shop in front of it becomes straightforward.

In short

A digital product store has no stock to count, no courier and no delivery address. What the customer buys is an entitlement: a record saying this person may have this thing, under these licence terms, until this moment. Scope the build around that record, then decide separately how a purchase becomes access, how access is recovered when a buyer loses the file, and what a refund does to a permission you cannot take back off their hard drive.

Written for a business owner scoping the sale of downloadable files or paid digital access · 7 min read

What a digital product store actually sells

A digital product store sells files or paid access: templates, presets, fonts, e-books, audio, video, datasets, software. There is nothing to pick, pack or ship, which removes half the work of a physical shop and replaces it with a subtler job. The customer is buying an entitlement, meaning the record that says who may have what, under which terms, until when. Almost everything difficult on this page follows from that record.

It is worth separating this from the projects it gets confused with. A physical store owes a parcel and a delivery promise. A catalogue-only site shows work without taking money. A recurring plan is an agreement to bill again on a schedule, which belongs with subscription e-commerce. Platform choice, gateway fees and the order chain every store shares sit with e-commerce website development.

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)

The licence is the product

What separates a cheap template from an expensive one is rarely the file. It is what the buyer may do with it. Licence tiers are the product being sold, so they need writing before anything is priced: personal use, commercial use, a single client project, a number of seats, resale forbidden.

  • Tiers and permissions. What each tier allows and forbids, in language a buyer understands, shown before payment rather than buried in a document nobody opens.
  • Where it is stored. The licence recorded on the order as sold, so a question two years later is settled by a record rather than by memory.
  • Seats and scope. Whether one purchase covers one person, one team or one client project, and the route a buyer takes when they need more.
  • Duration. Perpetual access, a fixed access window, or access while something else is current, decided per product instead of inherited by accident.
  • Changing the terms. New terms apply to new purchases, and existing buyers keep what they bought unless you have a reason and a message for doing otherwise.

Upgrades between tiers are a normal request and an awkward one if nobody planned for them. An upgrade is a new entitlement plus a price adjustment rather than a second purchase of the same file.

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)

Purchase, payment and entitlement are three separate events

An order is created, a payment is confirmed, an entitlement is granted. Collapsing those into one step is behind most cases of a customer who has paid and received nothing. Some payment methods confirm in a second and some do not, while the buyer sits on a screen expecting an instant download. The rule is simple: never grant access before an authoritative payment status, and never leave the buyer guessing which state they are in.

Delivery then has two shapes and is usually best as both. An emailed link is the notification. An account library holding every purchase, licence and current file version is the durable delivery, because email addresses change, filters swallow messages and a link sent in March is useless in November. Sign-in, purchase history and permissions are accounts and portals work, and building them early saves most of the support load later.

The table follows one fictional store selling downloadable design templates under a licence the merchant defines. The roles, rules and responses are assumptions made to show the shape of the workflow, and the final column lists evidence to collect during testing rather than results anybody has achieved.

A fictional template store, worked through three steps
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Buy a templateAssumed customerShow the licence being purchased and record a payment state linked to the orderA failed or delayed payment leaves entitlement unresolved rather than grantedLicence-display and payment-to-entitlement tests recorded together for one order
Request a downloadAssumed entitled buyerGive access scoped to the purchased product and the agreed access periodA copied or expired link must follow the chosen access rulePermitted and denied download observations, including an expired link and a shared one
Replace or refund a fileAssumed store operatorVersion the file and apply the agreed entitlement or refund policyOlder versions and revoked entitlements need a recorded support decisionVersion, entitlement and revocation tests traced back to one purchase
Three events people treat as one. Granting access at purchase instead of at payment is how digital stores give away stock. A full text version follows.

Three events people treat as one

Editorial framework. Granting access at purchase instead of at payment is how digital stores give away stock.

Basis: Stripe: Payment intents lifecycle. Reviewed .

Read the graphic as text
  • Purchase. The order exists, nothing is granted
  • Payment. Authorised, then captured, sometimes later
  • Entitlement. Access granted, and revocable
Download this infographic (SVG)

Re-download, and the rules buyers actually hit

People lose files. A laptop dies, a folder is tidied away, a link from two years ago has expired, and somebody writes to ask for the thing they already paid for. That conversation happens on every digital store, so the rule is worth setting before support starts inventing one per email.

  • Signed links with a defined life, re-issued from the account rather than by resending an old email.
  • Whether re-downloads are unlimited, capped, or capped with an override, and who holds that override.
  • A record of every download attempt, allowed or refused and why, so support answers from evidence.
  • Large files served directly from storage and resumable, so a dropped connection is not a support ticket.
  • What a buyer of the first version gets when the second ships, decided as policy and published as a changelog.

Keeping old versions downloadable is cheap and prevents the worst conversation on a digital store, where a customer's project breaks after an update they never asked for. Version the file, keep the previous one reachable, and let the buyer choose.

Refunds that take the access back

A physical refund gets the goods back. A digital refund cannot. The entitlement flips to revoked, links stop working, and the buyer keeps whatever was already downloaded. That is the honest shape of it, and the policy should say so rather than implying a return that is not happening.

  • The refund window, and whether a completed download closes it.
  • Bundles: whether a refund is all or nothing, and what happens to the items already taken.
  • Chargebacks, and whether one revokes access automatically or opens a review first.
  • Who may revoke, what the customer is told, and the log entry recording the reason.

Publish that policy where it is read before payment and store the version the buyer accepted on the order. It turns a later argument into a lookup, which is worth more than any wording you could choose.

A refund has to reach the entitlement. The fourth state is the common one, because the gateway and the store were never connected. A full text version follows.

A refund has to reach the entitlement

Editorial framework. The fourth state is the common one, because the gateway and the store were never connected.

Basis: Stripe: Refunds. Reviewed .

Read the graphic as text
  • Refund issued. Money returned by the gateway
  • Entitlement revoked. Access ends, downloads stop
  • Record kept. Who had access, and until when
  • The gap. Refunded but still downloading
Download this infographic (SVG)

Piracy is a business decision, not a technical one

Any file a customer can open can be copied. Protection is a spectrum of friction, and each step up it costs honest buyers convenience and costs you engineering. The real question is not how to make copying impossible. It is how much inconvenience you are willing to charge the people who paid in order to slow down the people who did not.

  • Watermarking documents and media with a buyer reference, invisible in normal use and traceable if a file is republished.
  • Licence keys and activation for software, with a clear route for a customer who changes machine.
  • Streaming or view-only access when the value is the content rather than possession of the file.
  • Strict copy protection, which we rarely recommend: it fails for paying customers first and is worked around anyway.

The measure that works commercially is making the bought copy the convenient one: current versions, a changelog, an invoice, support, and a licence the buyer can prove if a client ever asks. Treat leakage as a cost with a routine for spotting and handling it rather than a problem to be engineered away.

The records that reconcile money with access

Support and finance need one view that traces a single purchase end to end, otherwise every query becomes detective work across a payment dashboard, an inbox and somebody's memory.

  • The order and its payment reference, with the method and the time it was confirmed.
  • The licence exactly as sold, rather than the current version of your terms.
  • Entitlement state and its history, including who changed it and why.
  • Every delivery attempt, granted or denied, and which file version was served.
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 a build is worth it, and when it is not

If you sell a handful of files under one licence, with no seats and nothing to connect to, a plugin on the store you already run is usually enough. WooCommerce development and Shopify development cover those routes and what each costs to run. Building becomes the better answer when licensing has tiers or seats, when entitlement has to unlock something in another system, when the catalogue is large enough to need catalogue and search, or when you sell software that has to validate its own keys.

Either way, digital products and licensing is a custom build scoped to how your business operates rather than an off-the-shelf package, and we would rather say which route fits during scoping than bill you for the bigger one.

What to bring to a first conversation

Bring the product list, the licence terms as you would explain them to a customer, and what a buyer should receive at the moment payment clears. Add how you handle re-downloads and refunds today, anything the entitlement has to unlock elsewhere, and any constraint that cannot move. Send that as a scoped enquiry and we will tell you which parts look ready to build and which need a policy decision from you first.

What you get

What is actually delivered

01

A licence model buyers understand

Tiers, permissions, seats and duration written in plain language, shown before payment and recorded on the order exactly as sold.

02

Entitlement records

The permission layer deciding who may access what and until when, with its own state history rather than a flag on an order row.

03

Payment-to-access handling

Pending, confirmed and failed states the buyer can read, with nothing granted before an authoritative payment result arrives.

04

Delivery and re-download

An account library alongside the confirmation email, signed links with a defined life, re-issue from the account and a record of every attempt.

05

File versioning

New versions published without breaking earlier buyers, previous versions kept reachable, and a changelog that explains what changed.

06

Refund and revocation paths

Refund windows, bundle rules, chargeback handling and a revocation that genuinely closes access, each with a named owner.

07

One reconciliation view

Purchase, payment reference, licence as sold, entitlement state, delivery attempts and exceptions on a single screen for support and finance.

08

Accounts and handover

The code, the domain, the hosting and every service account opened for the project, handed over in your business name.

How it runs

Entitlement first, then the storefront

A digital store is a permissions system with a shop in front of it. We settle what a purchase grants and how it is taken back, then build the pages around that.

  1. 01

    Products and licences

    What you sell, the tiers and what each permits, seats, duration and how the terms are shown to a buyer before payment.

  2. 02

    Separate payment from access

    Order, payment and entitlement get their own records and states, including what the buyer sees while a payment is still confirming.

  3. 03

    Agree the exception rules

    Re-downloads, expired links, suspected sharing, new file versions, refund windows and revocation are decided as policy, with the overrides named.

  4. 04

    Prototype the journey

    You buy, download, lose the file, come back for it and get refunded on a live link, with the operator view beside it, before anything is committed.

  5. 05

    Build and test both paths

    The happy path and the denied path are exercised together, including an expired link, a shared link and a revoked entitlement.

  6. 06

    Hand over

    Code, data and accounts go to you, with the policy decisions documented so whoever answers support inherits the reasoning too.

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 digital products

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

What does a digital product store cost?

Our published website and store packages are on the pricing page, and a digital store is quoted against the scope we agree. The number moves with how complicated the licensing is, whether entitlement has to unlock something in another system, and how large the catalogue gets.

Can we sell digital products from the store we already have?

Often, yes, and when the licensing is simple that is usually the cheaper answer. The limits appear once you need tiers, seats, entitlement that unlocks another system or a re-download policy of your own. We look at what you run today before recommending anything bigger.

What happens to access when we refund someone?

The entitlement is revoked, links stop working, and the buyer keeps any copy already downloaded. That is worth stating plainly in your refund policy, because a digital refund is a revocation rather than a return. What you decide is the window, whether a completed download closes it, and who may approve one.

Can buyers download their files again years later?

If you want them to, and that is a policy choice rather than a technical limit. An account library holding every purchase makes it easy and removes most re-download support. The alternatives are a capped number of downloads or a time-limited link, both of which produce more email.

How do we stop people sharing what they bought?

You reduce it rather than stop it. Watermarking with a buyer reference, licence keys for software, and access served through an account all raise the effort. Each also costs honest buyers convenience, so the sensible position is usually the lightest measure that fits what you sell.

Can a purchase unlock something outside the store?

Yes, where the other system has an API and permissions we can get: a course, a members area, an app or a client portal. The entitlement stays the source of truth and the other system is told about it, which keeps one answer to the question of who has access.

Which payment methods can we take?

Whatever your gateway supports, with ringgit pricing throughout. The e-commerce hub records what several Malaysian gateways published on their own pricing pages, including settlement times, which matters here because confirmation speed decides how long a buyer waits for a file.

Where to go next

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.