Noon Clone · Features

Noon Clone Features: One Catalog, Several Markets

Selling into a second state multiplies the things that have to agree. The same product needs a price in another currency, a VAT treatment that differs, a delivery promise that only holds for some destinations, and a settlement path for a buyer who pays cash at the door days later. All four are modelled in the schema here rather than left to operator discipline. Here is what ships, grouped by who touches it.

Request a Live Demo →See Pricing
A second market is configuration
6 surfaces, one REST API
6 days to deploy
New market
No redeploy
What Opening a State Actually Touches
01Currency added, operator sets the rate
02Tax class bound to the new zone
03Country code and zip allowlist opened
04Shipping cost overridden per category
05Locale enabled, translations filled
06Agents approved and zoned
131
Normalized MySQL Tables
4
Wallets Reconciled Per Order
6
Surfaces on One REST API
9
Order Statuses, Full History
By Role

Feature Set by Role

Six surfaces run against one REST API, so the grouping that matters is not web against mobile - it is who is holding the screen. Four identities, four sets of permissions, four wallets.

C

Customer

  • Prices quoted in the currency of their own market
  • Category tree of unlimited depth, brand directory, autocomplete search
  • Product pages carrying the variant matrix and photo reviews
  • One cart spanning several sellers at once
  • Guest cart tracked by session and merged on login
  • Coupon, wallet credit and loyalty points stacked on one order
  • Tax shown inclusive or exclusive per market, itemized on the invoice
  • Return opened with a reason and evidence, refunded to wallet or gateway
S

Seller

  • Registers with KYC, approved and suspendable by an operator
  • Product CRUD with the variant matrix, stock and bulk import
  • Per-locale content on a listing, not one shared description
  • AI-assisted descriptions, SEO titles and image alt text
  • Order queue with accept and reject, plus refund responses
  • Commission visible on the wallet, not reconciled after the fact
  • Sales analytics and a withdrawal request flow
  • Web panel or Android app against the same API
D

Delivery Agent

  • First-class identity with KYC, approval and zone assignment
  • Assignment feed with accept and reject
  • Navigation to the seller for pickup, then to the buyer
  • Live location broadcast while in transit
  • One-time code verified at the door before handover
  • Earnings held separately from cash collected
  • Cash balance carried per agent, settled to the operator
  • Payout request flow from the app
O

Operator

  • Currencies, tax zones, delivery countries and languages in one tab
  • Catalog moderation queue with approve, reject and bulk actions
  • Cross-seller orders with a full status timeline
  • Refund, payout and withdrawal queues
  • Agent cash settled against the operator wallet
  • Commission set globally, per category, per seller or per product
  • Every module behind its own permission
  • Reports over any date range, exported to Excel, CSV or PDF

The operator console is treated as a role rather than an afterthought because running several markets from one deployment makes the configuration surface as busy as the daily queues. A new state is opened from a settings tab, not from a migration.

Compare

Noon vs Miracuves Clone vs Building From Scratch

The same capability, three different paths. The rows that separate them are all multi-market rows - the places where a single-country commerce script quietly assumes there is only one answer.

CapabilityOriginal NoonMiracuves CloneSingle-market commerce script
Currency per marketYes, several GCC statesA currency catalog with operator-set rates; the default drives what each buyer is quoted at checkoutOne base currency, display conversion at best
VAT that differs by stateYes, handled centrallyTax classes bound per zone with per-product rules through a polymorphic binding, inclusive or exclusive per marketOne tax rate, or a plugin bolted on later
Where you can actually shipYes, mature logisticsDelivery country codes and zip allowlists deciding whether checkout is offered at all, plus per-category shipping overridesFlat shipping zones, no serviceability gate
Catalog in more than one languageYes, Arabic and EnglishEntity-level translation, so a listing carries its own content per locale rather than one shared descriptionInterface strings translated, catalog not
Cash on deliveryYes, in several marketsA settlement path: code verified at handover, cash balance per agent, operator-set handling fee, reconciliation to the operator walletA payment method flag with no accounting behind it
Money held per actorInternalFour wallets - buyer, seller, agent, operator - each with an append-only history written inside the same transaction as the balance moveOne balance field, updated in place
Delivery fleetOwn and partner fleetsAgent identity with KYC, approval, zone assignment, assignment feed, live location and verified handoverUsually absent, or a courier webhook
Source codeNot availableComplete Laravel 12 backend and all three Flutter projects, unobfuscated, no licence callbackOften encrypted files or a licence check
Time to liveNot applicableSix working days, markets configured with you at deploymentWeeks, then months on the multi-market gaps

The last four rows are the ones that decide a rebuild. A script that treats currency as a display filter and tax as a single percentage will carry your first market perfectly well and then quietly fail your second.

End to End

How It Works, End to End

One order, traced across four identities and two currencies, with every state change and every wallet movement written down.

01

The market decides what is possible

Before a price is shown, the buyer market sets three things: which currency the catalog is quoted in, which tax class applies to each line, and whether the destination zip is served at all. A zip outside the allowlist does not get a shipping quote and a checkout to abandon - it does not get a checkout.

02

The cart spans several sellers

One cart can hold items from several sellers at once, each with its own shipping estimated before checkout. A guest cart is tracked by session and merged into the account on login, so the basket built before signing in is not lost.

03

Checkout stacks the discounts and applies the zone

A coupon, wallet credit and loyalty points can all apply to the same order. Tax comes from the zone rules with per-product overrides, and it is displayed inclusive or exclusive according to the market. Placement is guarded by an idempotency check, so a double submit does not become two orders.

04

The seller works a queue, not an inbox

The order lands in a seller queue with accept and reject, from either the web panel or the Android app. Stock moves, commission is visible on the seller wallet from the outset, and a rejection walks its own path rather than being handled by email.

05

The agent carries the parcel and, often, the cash

An assignment appears in the agent feed with accept and reject. Navigation runs to the seller for pickup, then to the buyer. Location broadcasts while in transit, checkpoints record picked up through to delivered, and a one-time code is verified at the door before the parcel changes hands.

06

Four balances move, and each move is written down

On completion the commission splits, the seller balance credits, the agent earning credits, and on a cash order the collected amount lands on the agent cash balance rather than being mixed with earnings. Every one of those movements pairs with an append-only history row written in the same database transaction, so any balance can be re-derived rather than trusted.

07

Settlement closes the loop

The agent settles collected cash against the operator wallet. Seller and agent payout requests queue for approval, denial or mark-processed. Settlement records are held per gateway and per currency, which is what makes a second market reconcilable rather than merely functional.

Nine order statuses carry an order from pending payment through to delivered, with cancelled, returned and failed ending it. Every move is stamped into a status history with the actor, a note and a timestamp, and any operator edit leaves a field-level record.

Deliberate

Every Feature Earns Its Place

Feature lists are cheap. These are the ones that exist because a specific thing goes wrong in a multi-market marketplace without them.

CapabilityWhy it is not optional
Operator-set exchange ratesRates are set by the operator rather than pulled from a live feed. A feed that moves overnight reprices a whole catalog without anyone deciding to, and both sellers and buyers find out at checkout. A dirham price and a riyal price are both meant to be deliberate.
Polymorphic tax bindingTax classes bind per zone, and a per-product rule can override the class. That is what lets five percent in one state and fifteen in another be a configuration change rather than two deployments - and what puts a defensible tax line on every invoice.
Zip allowlists ahead of checkoutServiceability is decided before a checkout is offered, not after the order is taken. The alternative is an order you accept and then cancel, which costs you the customer and the seller their committed stock.
Per-category shipping overridesA cross-border route and a dense city route do not cost the same to serve, and a single flat rate makes one of them subsidise the other. Shipping methods carry per-category cost overrides so both can be priced honestly.
Entity-level translationA listing carries its own content per locale rather than sharing one description across markets. Interface translation is table stakes; catalog translation is what decides whether the second market converts.
Cash separated from earningsAn agent wallet keeps money earned apart from money collected. Merge them and the first reconciliation gap is unrecoverable, because there is no longer a record of which was which.
Idempotency on order placementA guarded placement means a slow network and an impatient tap do not become two orders, two commission splits and one very awkward refund conversation.
Field-level edit historyWhen an operator changes an expected delivery date or overrides a status, the change is recorded with the actor and a reason. Weeks later, when a dispute lands, that record is the difference between a defensible position and a guess.
Settlement per gateway and per currencySettlement records are held per gateway and per currency rather than pooled. Pooling works until the day a payout in one currency has to be traced against takings in another.

None of these are exotic. They are the nine places where a marketplace that was only ever going to serve one country stops being extendable.

Stack

The Technology Behind the Features

Deliberately ordinary choices, because the developers who maintain this after handover should already know all of it.

BackendLaravel 12 on PHP 8.2, organised into nWidart modules so AI, Blog and Tax are separable rather than tangled through the core.
Data131 normalized MySQL tables with reversible migrations, soft deletes on customer, seller, agent and product rows, composite indexes on the hot paths, and append-only wallet histories.
APIOne REST API in versions v1, v2 and v3 serving the storefront, the seller panel, the operator console and all three Flutter clients. Six surfaces, one contract.
MobileThree Flutter Android projects - buyer, seller and delivery agent - transferred into your repository unobfuscated. The projects compile for iOS; store builds are quoted separately.
Cache and queuesRedis 7 for cache, queue and session, with a queue worker and scheduler configured at deployment rather than left as a first-week discovery.
PaymentsEleven gateways integrated, plus operator-defined offline methods and cash on delivery, with settlement records held per gateway and per currency.

Why the schema size is the number that matters

A hundred and thirty-one tables is not a boast, it is a consequence. Currencies, tax classes, zone bindings, delivery country codes, zip allowlists, translation entries, four wallet histories, nine order statuses with a status history and a field-level edit log all need somewhere to live. A marketplace that models the same business in forty tables has made four of those someone else's problem.

Laravel 12PHP 8.2, nWidart modules
131Normalized MySQL tables
v1 / v2 / v3REST API versions shipped
Redis 7Cache, queue, session

Everything above transfers into your repository. There are no encrypted files and no licence callback of any kind.

Honest Readiness

What Is Not Included in the Base Package

Everything above is in the base build and demonstrable in the live demo. These are not, and the hub labels them configuration-required or integration-required rather than implying them away.

Yours to own, or scoped separately

  • Right-to-left layoutNamed on the hub as a scoped customization, not implied anywhere as included. In a Gulf-market platform this is the caveat worth reading twice - budget it explicitly rather than discovering it in week two.
  • iOS applicationsThree Android builds ship. The Flutter projects compile for iOS, quoted as an add-on with signing and store submission.
  • Additional markets beyond the ones configured at deploymentYour markets are set up with you during the six days. Further states, VAT export and processor-side verification are scoped and quoted separately, typically two to eight weeks.
  • Gateway credentialsEleven gateways are integrated; each needs your own merchant account and its own approval in each market you take payments in.
  • SMS and email providerIntegration-required - your accounts, your sender reputation, your deliverability.
  • Firebase projectPush notifications across all three Android apps run through your own Firebase project.
  • OpenAI keyThe AI module generates descriptions, SEO copy and alt text against your key, with per-feature token quotas and a log recording tokens and cost per call.
  • Catalog data and translated copyThe translation store is ready and empty. Products, imagery, seller recruitment and the translated product copy are the business, and they are yours.
  • VAT rates per stateTax classes bind per zone, but the rates for your jurisdictions are yours to set, and yours to keep current.
  • ISO 27001 and SOC 2Neither certificate is held and neither is claimed. The platform is ready for the evidence gathering; the certification is a separate programme.

Exchange rates being operator-set is listed here as a design decision rather than a gap. A marketplace that silently reprices a catalog against a live feed surprises sellers and buyers at the same moment, and in a multi-currency book that surprise is expensive.

Development Company

See how Miracuves compares to agencies and freelancers

The deployment process, two modelled reference deployments, and what to check on currency, tax and cash integrity before you hire anyone - on the Development Company page.

See the comparison →
FAQ

Frequently Asked Questions

Can one deployment really serve several countries?
That is what the platform is built around. Currencies carry operator-set rates with a default per market, tax classes bind per zone with per-product overrides, delivery country codes and zip allowlists bound where you ship, and entity-level translation holds catalog content per locale. One catalog, one seller base and one ledger, sold four different ways.
How are exchange rates handled?
Rates are operator-set rather than fetched from a live feed, and the default currency for a market drives what each buyer is quoted at checkout. This is deliberate: a feed that moves overnight reprices your entire catalog without anyone deciding to, and both sellers and buyers discover it at the same time.
How does VAT work when it differs by state?
Tax classes and rates bind per zone, with per-product rules through a polymorphic binding, so five percent in one state and fifteen in another is configuration rather than two deployments. Display is inclusive or exclusive per market, every order carries a tax line breakdown, and tax reports run over any date range for the period you are filing.
Is cash on delivery properly accounted for?
Yes. A one-time code is verified at handover, cash collected is written to the agent's own balance and kept separate from their earnings, an operator-set handling fee applies to cash orders, and the balance reconciles into the operator wallet when the agent settles. It is a settlement path with its own ledger, not a payment-method flag.
Is right-to-left layout included?
No, and the hub says so plainly. RTL is named as a scoped customization rather than implied as included. For a Gulf-market deployment that matters, so it should be scoped and quoted at the start rather than assumed. Multi-language content itself is included - the translation store and per-locale listing content ship in the base build.
Are iOS apps included?
No. The three Android builds - buyer, seller and delivery agent - are in the base price. The Flutter projects compile for iOS, and App Store builds, signing and submission are quoted as an add-on because the developer account and the review cycle are separate work.

See a second market opened live, not described

Ask for the demo and we will add a currency, bind a tax zone and open a delivery country in front of you, then place an order through it.

Ready to run several markets from one deployment?

Deploy in six days with the storefront, seller panel, delivery fleet and operator console included, your currencies, tax zones and delivery countries configured with you, and full Laravel 12 source on infrastructure you own.

Talk to Us →
Miracuves · Noon Clone Solution Feature set and readiness caveats cross-verified against the live hub, 2026-08-21