---
title: Noon Clone Features
description: Home/Noon Clone/Features                      Noon Clone &middot; Features           Noon Clone Features: One Catalog, Several Markets           Selling into a 
url: https://miracuves.com/noon-clone/features
date_modified: 2026-08-21
author: miracuves
language: en_US
---

.mcv-nnf{
    --crimson:#e8344f; --crimson-deep:#a70d2a; --crimson-hot:#d81b46; --crimson-light:#ff8090;
    --amber:#fbbf24; --black:#0a0a0a; --white:#ffffff; --paper:#faf8f8; --ink:#191419; --ink-dim:#6d666d;
    --line:rgba(11,11,16,0.1); --line-light:rgba(255,255,255,0.12);
    --card-bg:rgba(8,3,8,0.82);
    font-family:'Plus Jakarta Sans',Arial,sans-serif; color:var(--ink); background:var(--white); margin:0; padding:0;
  }
  .mcv-nnf *{ box-sizing:border-box; }
  .mcv-nnf h1,.mcv-nnf h2,.mcv-nnf h3{ font-family:'Plus Jakarta Sans',Arial,sans-serif; font-weight:800; margin:0; letter-spacing:-0.02em; line-height:1.12; }
  .mcv-nnf p{ margin:0 0 14px; line-height:1.7; color:var(--ink); }
  .mcv-nnf a{ color:var(--crimson-deep); text-decoration:none; }
  .mcv-nnf .mono{ font-family:'JetBrains Mono',monospace; }
  .mcv-nnf-wrap{ max-width:1180px; margin:0 auto; padding:0 24px; position:relative; z-index:2; }
  .mcv-nnf-bleed{ position:relative; left:50%; right:50%; margin-left:-50vw; margin-right:-50vw; width:100vw; }

  .mcv-seo-ref{ background:#FFF7E0; border:2px dashed #C79A00; padding:18px 22px; font-family:Arial,sans-serif; font-size:13px; color:#4A3B00; max-width:1180px; margin:18px auto; border-radius:8px; }

  .mcv-nnf-crumb{ display:flex; gap:8px; align-items:center; font-family:'JetBrains Mono',monospace; font-size:11.5px; color:rgba(255,255,255,.62); margin-bottom:20px; }
  .mcv-nnf-crumb a{ color:rgba(255,255,255,.62); }
  .mcv-nnf-crumb a:hover{ color:var(--crimson-light); }
  .mcv-nnf-crumb span.sep{ opacity:.5; }
  .mcv-nnf-crumb span.cur{ color:rgba(255,255,255,.75); }

  .mcv-nnf-eyebrow{ display:inline-flex; align-items:center; gap:8px; padding:7px 16px; border-radius:100px; background:rgba(255,255,255,.06); border:1px solid var(--line-light); font-family:'JetBrains Mono',monospace; font-size:11.5px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; color:var(--crimson-light); margin-bottom:22px; }
  .mcv-nnf-eyebrow .dot{ width:6px; height:6px; border-radius:50%; background:var(--crimson); }

  .mcv-nnf-hero{ background:radial-gradient(ellipse 900px 500px at 85% -10%, rgba(232,52,79,.16), transparent), #0a0a0a; color:#fff; padding:56px 0 150px; position:relative; overflow:hidden; }
  .mcv-nnf-hero .ring{ position:absolute; border:2px solid rgba(232,52,79,.18); border-radius:50%; pointer-events:none; }
  .mcv-nnf-hero .ring1{ width:560px; height:560px; top:-260px; right:-200px; }
  .mcv-nnf-hero .ring2{ width:340px; height:340px; bottom:-200px; right:120px; border-color:rgba(232,52,79,.1); }
  .mcv-nnf-herogrid{ display:grid; grid-template-columns:1.1fr 0.9fr; gap:48px; align-items:center; }
  .mcv-nnf-hero h1{ font-size:clamp(27px,3.9vw,44px); color:#fff; }
  .mcv-nnf-hero h1 em{ font-style:normal; color:#ff8090; }
  .mcv-nnf-hero p.sub{ font-size:16px; color:rgba(255,255,255,.68); max-width:600px; margin:20px 0 30px; }

  .mcv-nnf a.mcv-nnf-btn{ display:inline-flex; align-items:center; gap:8px; border-radius:12px; background:linear-gradient(160deg,#d81b46,#e8344f); color:#fff; font-weight:700; font-size:15px; padding:15px 28px; box-shadow:0 10px 30px rgba(232,52,79,.3); transition:transform .25s cubic-bezier(.2,.8,.2,1), box-shadow .25s; }
  .mcv-nnf a.mcv-nnf-btn:hover{ color:#fff; transform:translateY(-2px); box-shadow:0 14px 36px rgba(232,52,79,.42); text-decoration:none; }
  .mcv-nnf a.mcv-nnf-btn-outline{ display:inline-flex; align-items:center; border:2px solid rgba(255,255,255,.7); color:#fff; border-radius:12px; font-weight:700; font-size:15px; padding:13px 26px; margin-left:12px; transition:all .2s; }
  .mcv-nnf a.mcv-nnf-btn-outline:hover{ background:#fff; color:#191419; text-decoration:none; }

  .mcv-nnf-trust{ display:flex; flex-wrap:wrap; gap:22px; margin-top:34px; padding-top:24px; border-top:1px solid var(--line-light); }
  .mcv-nnf-trust-item{ display:flex; align-items:center; gap:8px; font-size:12.5px; color:rgba(255,255,255,.6); }
  .mcv-nnf-trust-item strong{ font-family:'JetBrains Mono',monospace; color:#fff; font-size:14px; }

  .mcv-nnf-cardstack{ position:relative; height:340px; }
  .mcv-nnf-fincard{ position:absolute; width:300px; height:180px; border-radius:18px; padding:22px; background:linear-gradient(150deg,#1c1418,#0d0709); border:1px solid var(--line-light); box-shadow:0 30px 70px rgba(0,0,0,.5); }
  .mcv-nnf-fincard.c1{ top:0; left:10px; z-index:1; opacity:.5; transform:rotate(-6deg) scale(.92); }
  .mcv-nnf-fincard.c2{ top:30px; left:40px; z-index:2; background:linear-gradient(150deg,#3a0a15,#160408 60%,#0a0a0a); border-color:rgba(232,52,79,.3); box-shadow:0 40px 90px rgba(0,0,0,.55), 0 0 60px -12px rgba(232,52,79,.35); }
  .mcv-nnf-fincard .brand{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.55); }
  .mcv-nnf-fincard .chip{ width:34px; height:24px; border-radius:5px; background:linear-gradient(135deg,#ff8090,#e8344f); margin:22px 0 18px; }
  .mcv-nnf-fincard .num{ font-family:'JetBrains Mono',monospace; font-size:15px; color:#fff; letter-spacing:.1em; }
  .mcv-nnf-fincard .curr{ position:absolute; bottom:22px; right:22px; font-family:'JetBrains Mono',monospace; font-size:11px; color:#ff8090; }
  .mcv-nnf-float{ position:absolute; background:rgba(8,3,8,0.82); border:1px solid var(--line-light); border-radius:14px; padding:12px 16px; box-shadow:0 16px 40px rgba(0,0,0,.35); z-index:3; }
  .mcv-nnf-float .k2{ font-family:'JetBrains Mono',monospace; font-size:10px; color:#ff8090; text-transform:uppercase; letter-spacing:.08em; margin-bottom:3px; }
  .mcv-nnf-float .v{ font-family:'JetBrains Mono',monospace; font-size:15px; color:#fff; font-weight:700; }
  .mcv-nnf-float-1{ top:-10px; right:0; }
  .mcv-nnf-float-2{ bottom:10px; left:0; }

  .mcv-nnf-statbar{ margin-top:-72px; position:relative; z-index:3; }
  .mcv-nnf-statbar .inner{ background:rgba(8,3,8,0.82); border:1px solid var(--line-light); border-radius:18px; box-shadow:0 24px 60px rgba(0,0,0,.35); padding:32px 20px; display:grid; grid-template-columns:repeat(4,1fr); }
  .mcv-nnf-statbar .stat{ text-align:center; padding:0 12px; border-right:1px solid var(--line-light); }
  .mcv-nnf-statbar .stat:last-child{ border-right:none; }
  .mcv-nnf-statbar .num{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:22px; color:#ff8090; }
  .mcv-nnf-statbar .lbl{ font-size:11.5px; color:rgba(255,255,255,.62); margin-top:6px; line-height:1.4; }

  .mcv-nnf-section{ padding:100px 0 76px; }
  .mcv-nnf-section.paper{ background:#faf8f8; }
  .mcv-nnf-section.tight{ padding-top:76px; }
  .mcv-nnf-head{ text-align:center; max-width:720px; margin:0 auto 48px; }
  .mcv-nnf-head .kicker{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; color:#a70d2a; margin-bottom:12px; }
  .mcv-nnf-head h2{ font-size:clamp(22px,3vw,34px); color:#191419; }
  .mcv-nnf-head p{ color:#6d666d; margin-top:14px; }

  .mcv-nnf-rolegrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-nnf-rolecard{ background:#fff; border:1px solid var(--line); border-radius:18px; padding:28px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-nnf-rolecard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-nnf-roleicon{ width:40px; height:40px; border-radius:10px; background:rgba(232,52,79,.12); border:1px solid rgba(232,52,79,.3); display:flex; align-items:center; justify-content:center; margin-bottom:16px; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:14px; color:#a70d2a; }
  .mcv-nnf-rolecard h3{ font-size:17px; margin-bottom:12px; color:#191419; }
  .mcv-nnf-rolecard ul{ margin:0; padding-left:18px; font-size:13.5px; color:#191419; }
  .mcv-nnf-rolecard li{ margin-bottom:8px; line-height:1.5; }

  .mcv-nnf-tablewrap{ overflow-x:auto; border-radius:16px; box-shadow:0 12px 34px rgba(0,0,0,.07); border:1px solid var(--line); }
  table.mcv-nnf-table{ border-collapse:collapse; width:100%; min-width:680px; background:#fff; font-size:13.5px; }
  table.mcv-nnf-table th{ background:#0a0a0a; color:#ffffff; text-align:left; padding:14px 16px; font-family:'JetBrains Mono',monospace; font-weight:600; font-size:12px; letter-spacing:.04em; text-transform:uppercase; }
  table.mcv-nnf-table td{ padding:14px 16px; border-bottom:1px solid rgba(11,11,16,0.1); vertical-align:top; color:#191419; }
  table.mcv-nnf-table td.hl{ background:rgba(232,52,79,.06); border-top:3px solid #e8344f; font-weight:600; color:#191419; }
  table.mcv-nnf-table th.hl{ background:#e8344f; color:#ffffff; }
  table.mcv-nnf-table tbody tr:hover td{ background:#f4f1f1; color:#191419; }
  table.mcv-nnf-table tbody tr:hover td.hl{ background:rgba(232,52,79,.13); color:#191419; }
  table.mcv-nnf-table tr:last-child td{ border-bottom:none; }
  .mcv-nnf-note{ font-size:12.5px; color:#6d666d; margin-top:12px; }

  .mcv-nnf-callout{ background:linear-gradient(135deg,#2B0710,#4A0F1E); color:#fff; border-radius:20px; padding:40px 44px; }
  .mcv-nnf-callout h2{ color:#fff; font-size:22px; margin-bottom:12px; }
  .mcv-nnf-callout p{ color:rgba(255,255,255,.78); font-size:14.5px; margin:0; }

  .mcv-nnf-honest{ background:#fff; border:1px solid var(--line); border-left:4px solid #fbbf24; border-radius:14px; padding:28px 30px; }
  .mcv-nnf-honest h3{ font-size:17px; margin-bottom:14px; color:#191419; }
  .mcv-nnf-honestgrid{ display:grid; grid-template-columns:1fr 1fr; gap:10px 28px; }
  .mcv-nnf-honestgrid div{ font-size:13.5px; color:#191419; line-height:1.55; padding-left:18px; position:relative; }
  .mcv-nnf-honestgrid div::before{ content:'!'; position:absolute; left:0; top:0; font-family:'JetBrains Mono',monospace; font-weight:700; color:#8a6100; }

  .mcv-nnf-cs{ background:#fff; border:1px solid var(--line); border-radius:20px; padding:32px 34px; display:flex; justify-content:space-between; align-items:center; gap:24px; flex-wrap:wrap; box-shadow:0 8px 24px rgba(0,0,0,.05); }
  .mcv-nnf-cs-badge{ display:inline-flex; align-items:center; gap:7px; padding:6px 14px; border-radius:100px; background:rgba(232,52,79,.08); border:1px solid rgba(232,52,79,.25); font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:#a70d2a; margin-bottom:12px; }
  .mcv-nnf-cs-badge .dot{ width:6px; height:6px; border-radius:50%; background:#e8344f; }
  .mcv-nnf-cs-body{ flex:1; min-width:260px; }
  .mcv-nnf-cs-body h3{ font-size:16.5px; margin-bottom:6px; color:#191419; }
  .mcv-nnf-cs-body p{ color:#6d666d; font-size:13.5px; margin:0; max-width:460px; }
  .mcv-nnf a.mcv-nnf-cs-link{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; color:#a70d2a; white-space:nowrap; }

  .mcv-nnf-faqgrid{ display:grid; grid-template-columns:1fr 1fr; gap:0 40px; max-width:1000px; margin:0 auto; }
  .mcv-nnf-faq details{ border-bottom:1px solid var(--line); padding:18px 0; }
  .mcv-nnf-faq summary{ font-family:'Plus Jakarta Sans',Arial,sans-serif; font-weight:700; font-size:15px; color:#191419; cursor:pointer; list-style:none; display:flex; justify-content:space-between; align-items:center; gap:16px; }
  .mcv-nnf-faq summary::-webkit-details-marker{ display:none; }
  .mcv-nnf-faq summary::after{ content:'+'; font-family:'JetBrains Mono',monospace; color:#a70d2a; font-size:20px; font-weight:700; flex:none; }
  .mcv-nnf-faq details[open] summary::after{ content:'\2212'; }
  .mcv-nnf-faq .a{ color:#6d666d; font-size:13.5px; margin-top:10px; line-height:1.65; }

  .mcv-nnf-cta{ background:linear-gradient(120deg,#e8344f,#6e0e1f); color:#fff; padding:64px 0; position:relative; overflow:hidden; }
  .mcv-nnf-cta .ring{ position:absolute; border:2px solid rgba(255,255,255,.14); border-radius:50%; width:360px; height:360px; top:-140px; right:-100px; }
  .mcv-nnf-cta .flex{ display:flex; justify-content:space-between; align-items:center; gap:28px; flex-wrap:wrap; position:relative; z-index:2; }
  .mcv-nnf-cta h2{ color:#fff; font-size:clamp(20px,2.6vw,28px); margin-bottom:8px; }
  .mcv-nnf-cta p{ color:rgba(255,255,255,.82); margin:0; max-width:460px; }
  .mcv-nnf-cta a.mcv-nnf-btn-outline{ border-color:#fff; }
  .mcv-nnf-cta a.mcv-nnf-btn{ background:#fff; box-shadow:0 10px 30px rgba(0,0,0,.2); }
  .mcv-nnf-cta a.mcv-nnf-btn,.mcv-nnf-cta a.mcv-nnf-btn:hover{ color:#a70d2a; }

  .mcv-nnf-explore{ display:flex; flex-wrap:wrap; gap:10px; justify-content:center; }
  .mcv-nnf a.mcv-nnf-pill{ font-family:'JetBrains Mono',monospace; font-size:12.5px; font-weight:600; padding:10px 18px; border-radius:100px; border:1px solid var(--line); color:#191419; background:#fff; transition:all .2s; }
  .mcv-nnf a.mcv-nnf-pill:hover{ border-color:#e8344f; color:#a70d2a; text-decoration:none; }
  .mcv-nnf a.mcv-nnf-pill.cur{ background:#191419; color:#fff; border-color:#191419; }

  .mcv-nnf-finalcta{ background:#0a0a0a; color:#fff; text-align:center; padding:96px 24px 64px; position:relative; overflow:hidden; }
  .mcv-nnf-finalcta .ring{ position:absolute; border:1.5px solid rgba(232,52,79,.16); border-radius:50%; }
  .mcv-nnf-finalcta .ring1{ width:480px; height:480px; top:-220px; left:-160px; }
  .mcv-nnf-finalcta .ring2{ width:300px; height:300px; bottom:-180px; right:-90px; }
  .mcv-nnf-finalcta .card{ background:rgba(8,3,8,0.82); border:1px solid var(--line-light); border-radius:24px; padding:56px 40px; max-width:720px; margin:0 auto; position:relative; z-index:2; }
  .mcv-nnf-finalcta h2{ color:#fff; font-size:clamp(24px,3.2vw,34px); max-width:640px; margin:0 auto 14px; }
  .mcv-nnf-finalcta p.sub{ color:rgba(255,255,255,.7); max-width:520px; margin:0 auto 30px; }
  .mcv-nnf-footerbar{ max-width:1180px; margin:56px auto 0; padding-top:28px; border-top:1px solid var(--line-light); position:relative; z-index:2; }
  .mcv-nnf-byline{ display:flex; flex-wrap:wrap; gap:6px 14px; align-items:center; font-family:'JetBrains Mono',monospace; font-size:11.5px; color:rgba(255,255,255,.55); border-bottom:1px solid rgba(255,255,255,.12); padding-bottom:16px; margin-bottom:12px; }
  .mcv-nnf-byline strong{ color:#fff; font-weight:600; }
  .mcv-nnf-byline .dotsep{ opacity:.4; }
  .mcv-nnf-footermeta{ display:flex; flex-wrap:wrap; justify-content:space-between; gap:12px; font-family:'JetBrains Mono',monospace; font-size:11px; color:rgba(255,255,255,.55); }

  @media (max-width:900px){
    .mcv-nnf-herogrid{ grid-template-columns:1fr; }
    .mcv-nnf-statbar .inner{ grid-template-columns:repeat(2,1fr); gap:18px 0; }
    .mcv-nnf-statbar .stat:nth-child(2){ border-right:none; }
    .mcv-nnf-rolegrid{ grid-template-columns:1fr; }
    .mcv-nnf-honestgrid{ grid-template-columns:1fr; }
    .mcv-nnf-faqgrid{ grid-template-columns:1fr; }
    .mcv-nnf-hero h1{ font-size:27px; }
    .mcv-nnf-cta .flex{ flex-direction:column; align-items:flex-start; }
    .mcv-nnf-cardstack{ height:260px; }
    .mcv-nnf-fincard{ width:250px; height:150px; }
  }
  @media (prefers-reduced-motion: reduce){ .mcv-nnf *{ animation:none !important; transition:none !important; } }
  /* --- components used by cost / company / business-model --- */
  .mcv-nnf-pricecard{ background:linear-gradient(150deg,#3a0a15,#160408 60%,#0a0a0a); border:1px solid rgba(232,52,79,.3); border-radius:22px; padding:34px 32px; box-shadow:0 40px 90px rgba(0,0,0,.55), 0 0 60px -12px rgba(232,52,79,.35); }
  .mcv-nnf-pricecard .plan{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:#ff8090; margin-bottom:14px; }
  .mcv-nnf-pricecard .amt{ font-family:'JetBrains Mono',monospace; font-size:44px; font-weight:700; color:#fff; line-height:1; }
  .mcv-nnf-pricecard .per{ font-size:13px; color:rgba(255,255,255,.6); margin-top:8px; }
  .mcv-nnf-pricecard ul{ margin:22px 0 0; padding-left:18px; color:rgba(255,255,255,.78); font-size:13.5px; }
  .mcv-nnf-pricecard li{ margin-bottom:8px; line-height:1.5; }
  .mcv-nnf-drivers{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-nnf-driver{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:18px; padding:26px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-nnf-driver:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-nnf-driver h3{ font-size:16px; margin-bottom:10px; color:#191419; }
  .mcv-nnf-driver p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-nnf-steps{ display:grid; grid-template-columns:repeat(3,1fr); gap:18px; }
  .mcv-nnf-step{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:16px; padding:24px 22px; }
  .mcv-nnf-step .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:#a70d2a; margin-bottom:8px; }
  .mcv-nnf-step h3{ font-size:15.5px; margin-bottom:8px; color:#191419; }
  .mcv-nnf-step p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-nnf-checkgrid{ display:grid; grid-template-columns:1fr 1fr; gap:16px 28px; }
  .mcv-nnf-check{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:14px; padding:20px 22px; }
  .mcv-nnf-check h3{ font-size:15px; margin-bottom:8px; color:#191419; }
  .mcv-nnf-check p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-nnf-flags{ display:grid; grid-template-columns:1fr 1fr; gap:14px 28px; }
  .mcv-nnf-flag{ font-size:13.5px; color:#191419; line-height:1.55; padding-left:22px; position:relative; }
  .mcv-nnf-flag::before{ content:'\2715'; position:absolute; left:0; top:0; font-family:'JetBrains Mono',monospace; font-weight:700; color:#a70d2a; }
  .mcv-nnf-pt{ background:radial-gradient(ellipse 800px 400px at 20% 0%, rgba(232,52,79,.14), transparent), #0a0a0a; color:#fff; padding:92px 0 84px; }
  .mcv-nnf-pt .mcv-nnf-head h2{ color:#fff; }
  .mcv-nnf-pt .mcv-nnf-head p{ color:rgba(255,255,255,.68); }
  .mcv-nnf-ptgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
  .mcv-nnf-ptcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:18px; padding:26px 24px; }
  .mcv-nnf-ptcard h3{ font-size:15.5px; color:#fff; margin-bottom:10px; }
  .mcv-nnf-ptcard p{ font-size:13.5px; color:rgba(255,255,255,.72); margin:0; }
  .mcv-nnf-ptcard .tag{ display:inline-block; font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; border:1px solid rgba(232,52,79,.35); border-radius:100px; padding:3px 10px; margin-bottom:12px; }
  .mcv-nnf-csbox{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:22px; padding:40px 42px; box-shadow:0 12px 34px rgba(0,0,0,.06); }
  .mcv-nnf-csmeta{ display:flex; flex-wrap:wrap; gap:26px; margin:22px 0 26px; padding:20px 0; border-top:1px solid rgba(11,11,16,0.1); border-bottom:1px solid rgba(11,11,16,0.1); }
  .mcv-nnf-csmeta div{ font-size:13px; color:#6d666d; }
  .mcv-nnf-csmeta strong{ display:block; font-family:'JetBrains Mono',monospace; font-size:18px; color:#191419; margin-bottom:2px; }
  .mcv-nnf-cscols{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px; }
  .mcv-nnf-cscols h4{ font-size:13px; font-family:'JetBrains Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:#a70d2a; margin:0 0 10px; }
  .mcv-nnf-cscols ul{ margin:0; padding-left:18px; font-size:13.5px; color:#191419; }
  .mcv-nnf-cscols li{ margin-bottom:8px; line-height:1.5; }
  .mcv-nnf-quote{ margin-top:28px; padding:24px 26px; background:#faf8f8; border-left:3px solid #e8344f; border-radius:0 12px 12px 0; }
  .mcv-nnf-quote p{ font-size:15px; font-style:italic; color:#191419; margin:0 0 10px; }
  .mcv-nnf-quote .who{ font-family:'JetBrains Mono',monospace; font-size:12px; color:#6d666d; font-style:normal; }
  .mcv-nnf-revgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-nnf-revcard{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:18px; padding:28px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-nnf-revcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-nnf-revcard .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:#a70d2a; margin-bottom:10px; }
  .mcv-nnf-revcard h3{ font-size:16.5px; margin-bottom:10px; color:#191419; }
  .mcv-nnf-revcard p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-nnf-revcard .core{ display:inline-block; margin-top:14px; font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:#a70d2a; background:rgba(232,52,79,.08); border:1px solid rgba(232,52,79,.25); border-radius:100px; padding:3px 10px; }
  .mcv-nnf-disclose{ background:#faf8f8; border:1px dashed rgba(11,11,16,0.1); border-radius:14px; padding:26px 28px; max-width:860px; margin:0 auto; }
  .mcv-nnf-disclose h3{ font-size:16px; margin-bottom:10px; color:#191419; }
  .mcv-nnf-disclose p{ font-size:13.5px; color:#6d666d; margin:0 0 10px; }
  .mcv-nnf-disclose p:last-child{ margin-bottom:0; }
  .mcv-nnf-callout .figs{ display:flex; flex-wrap:wrap; gap:32px; margin-top:22px; padding-top:20px; border-top:1px solid rgba(255,255,255,0.12); }
  .mcv-nnf-callout .figs div{ font-size:12.5px; color:rgba(255,255,255,.65); }
  .mcv-nnf-callout .figs strong{ display:block; font-family:'JetBrains Mono',monospace; font-size:20px; color:#fff; margin-bottom:3px; }
  @media (max-width:900px){
    .mcv-nnf-drivers,.mcv-nnf-steps,.mcv-nnf-checkgrid,.mcv-nnf-flags,.mcv-nnf-ptgrid,.mcv-nnf-cscols,.mcv-nnf-revgrid{ grid-template-columns:1fr; }
    .mcv-nnf-csbox{ padding:28px 24px; }
  }
  /* ===== components ported from the shipped reference bundle (instagram-clone) ===== */
  .mcv-nnf-aside{ border-left:3px solid #e8344f; background:#faf8f8; border-radius:0 16px 16px 0; padding:32px 36px; }
  .mcv-nnf-aside h3{ font-size:17px; margin-bottom:14px; color:#191419; }
  .mcv-nnf-aside ul{ margin:0; padding:0; list-style:none; display:grid; grid-template-columns:1fr 1fr; gap:16px 32px; }
  .mcv-nnf-aside li{ padding-left:18px; position:relative; font-size:14px; color:#191419; line-height:1.6; }
  .mcv-nnf-aside li::before{ content:''; position:absolute; left:0; top:7px; width:7px; height:7px; background:#e8344f; transform:rotate(45deg); }
  .mcv-nnf-aside li span{ color:#6d666d; display:block; font-size:12.5px; margin-top:2px; }
  .mcv-nnf-flowrow{ display:grid; grid-template-columns:64px 1fr; gap:22px; padding:28px 0; border-bottom:1px solid rgba(11,11,16,0.1); align-items:start; }
  .mcv-nnf-flowrow:last-child{ border-bottom:none; }
  .mcv-nnf-flowrow h3{ font-size:18px; margin-bottom:8px; color:#191419; }
  .mcv-nnf-flowrow p{ color:#6d666d; font-size:14.5px; margin:0; max-width:760px; }
  .mcv-nnf-flownum{ width:56px; height:56px; border-radius:50%; border:1.5px solid rgba(11,11,16,0.1); display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono',monospace; font-weight:700; color:#a70d2a; font-size:16px; }
  .mcv-nnf-icongrid{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; }
  .mcv-nnf-iconitem{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:14px; padding:22px 24px; display:flex; gap:14px; align-items:flex-start; box-shadow:0 6px 18px rgba(0,0,0,.05); }
  .mcv-nnf-iconitem h3{ font-size:15px; margin-bottom:6px; color:#191419; }
  .mcv-nnf-iconitem p{ font-size:13px; color:#6d666d; margin:0; }
  .mcv-nnf-icondot{ width:34px; height:34px; border-radius:10px; background:rgba(232,52,79,.12); border:1px solid rgba(232,52,79,.3); flex:none; display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:14px; color:#a70d2a; }
  .mcv-nnf-steprow{ display:flex; gap:24px; padding:22px 0; border-bottom:1px solid rgba(11,11,16,0.1); }
  .mcv-nnf-steprow:last-child{ border-bottom:none; }
  .mcv-nnf-step-num{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:15px; color:#a70d2a; flex:none; width:90px; padding-top:2px; }
  .mcv-nnf-step-body h3{ font-size:17px; color:#191419; margin-bottom:6px; }
  .mcv-nnf-step-body p{ font-size:14.5px; color:#6d666d; margin:0; }
  .mcv-nnf-trustband{ background:#0a0a0a; color:#fff; padding:96px 0; position:relative; overflow:hidden; }
  .mcv-nnf-trustband .ring{ position:absolute; border:1.5px solid rgba(232,52,79,.16); border-radius:50%; width:420px; height:420px; top:-160px; left:-140px; }
  .mcv-nnf-trustband .head{ text-align:center; max-width:720px; margin:0 auto 44px; position:relative; z-index:2; }
  .mcv-nnf-trustband .head .kicker{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; color:#ff8090; margin-bottom:12px; }
  .mcv-nnf-trustband .head h2{ color:#fff; font-size:clamp(22px,3vw,34px); }
  .mcv-nnf-trustband .head p{ color:rgba(255,255,255,.68); margin-top:14px; }
  /* the band markup uses the prefixed head class, so scope the light colours to it explicitly -
     without this the h2 falls through to .mcv-nnf-head h2 (#191419) and vanishes on the black band */
  .mcv-nnf-trustband .mcv-nnf-head h2{ color:#ffffff; font-size:clamp(22px,3vw,34px); }
  .mcv-nnf-trustband .mcv-nnf-head p{ color:rgba(255,255,255,0.68); }
  .mcv-nnf-trustband .mcv-nnf-head .kicker{ color:#ff8090; }
  .mcv-nnf-trustgrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; position:relative; z-index:2; }
  .mcv-nnf-trustcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:16px; padding:26px 22px; }
  .mcv-nnf-trustcard h3{ color:#fff; font-size:15px; margin-bottom:8px; }
  .mcv-nnf-trustcard p{ color:rgba(255,255,255,.68); font-size:13px; margin:0; line-height:1.55; }
  .mcv-nnf-trusticon{ width:38px; height:38px; border-radius:10px; background:rgba(232,52,79,.16); border:1px solid rgba(232,52,79,.4); display:flex; align-items:center; justify-content:center; margin-bottom:14px; }
  .mcv-nnf-scorecard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:20px; padding:28px 26px; }
  .mcv-nnf-scorecard .k{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; margin-bottom:16px; }
  .mcv-nnf-scorerow{ display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid rgba(255,255,255,0.12); }
  .mcv-nnf-scorerow:last-child{ border-bottom:none; }
  .mcv-nnf-scorerow .lbl2{ font-size:12.5px; color:rgba(255,255,255,.75); }
  .mcv-nnf-scorerow .val{ font-family:'JetBrains Mono',monospace; font-size:13px; font-weight:700; color:#fff; }
  .mcv-nnf-scorerow .val.good{ color:#ff8090; }
  .mcv-nnf-cs-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:24px; flex-wrap:wrap; margin-bottom:28px; }
  .mcv-nnf-cs-top p{ color:#6d666d; font-size:14.5px; max-width:480px; margin:0; }
  .mcv-nnf-cs-meta{ text-align:right; font-size:13.5px; }
  .mcv-nnf-cs-meta strong{ display:block; color:#191419; font-size:14.5px; }
  .mcv-nnf-cs-meta .lbl{ font-family:'JetBrains Mono',monospace; font-size:10.5px; text-transform:uppercase; letter-spacing:.08em; color:#6d666d; margin:2px 0 12px; }
  .mcv-nnf-cs-stats{ display:grid; grid-template-columns:repeat(3,1fr); border:1px solid rgba(11,11,16,0.1); border-radius:16px; margin-bottom:24px; overflow:hidden; }
  .mcv-nnf-cs-stat{ text-align:center; padding:22px 12px; border-right:1px solid rgba(11,11,16,0.1); }
  .mcv-nnf-cs-stat:last-child{ border-right:none; }
  .mcv-nnf-cs-stat .v{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:26px; color:#a70d2a; }
  .mcv-nnf-cs-stat .l{ font-size:12.5px; color:#6d666d; margin-top:4px; }
  .mcv-nnf-cs-grid{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px; }
  .mcv-nnf-cs-box{ background:#faf8f8; border-radius:14px; padding:22px 24px; }
  .mcv-nnf-cs-box .h{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:#6d666d; margin-bottom:12px; }
  .mcv-nnf-cs-box ul{ margin:0; padding:0; list-style:none; display:grid; gap:8px; }
  .mcv-nnf-cs-box li{ padding-left:16px; position:relative; font-size:13.5px; color:#191419; line-height:1.55; }
  .mcv-nnf-cs-box li::before{ content:''; position:absolute; left:0; top:7px; width:6px; height:6px; background:#e8344f; transform:rotate(45deg); }
  .mcv-nnf-cs-quote{ border-left:3px solid #e8344f; background:#faf8f8; border-radius:0 14px 14px 0; padding:22px 26px; margin-top:16px; display:flex; gap:16px; align-items:flex-start; }
  .mcv-nnf-cs-quote p{ font-style:italic; font-size:15px; color:#191419; margin:0 0 10px; }
  .mcv-nnf-cs-avatar{ width:38px; height:38px; border-radius:50%; background:#a70d2a; color:#fff; display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:13px; flex:none; }
  .mcv-nnf-cs-who strong{ display:block; font-size:13.5px; color:#191419; }
  .mcv-nnf-cs-who span{ font-size:12.5px; color:#6d666d; }
  .mcv-nnf-cs-foot{ margin-top:20px; padding-top:16px; border-top:1px solid rgba(11,11,16,0.1); font-size:12.5px; color:#6d666d; }
  .mcv-nnf-mockwrap{ position:relative; }
  .mcv-nnf-chartcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:20px; padding:28px 26px; position:relative; }
  .mcv-nnf-chartcard .k{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; margin-bottom:18px; }
  .mcv-nnf-chartcard .mcv-nnf-barrow{ display:flex; align-items:center; gap:14px; height:auto; margin:0 0 14px; }
  .mcv-nnf-chartcard .mcv-nnf-barrow .l{ flex:0 0 140px; font-size:12.5px; line-height:1.35; color:rgba(255,255,255,.78); }
  .mcv-nnf-chartcard .mcv-nnf-barrow>.bar{ flex:1; height:8px; border-radius:999px; background:rgba(255,255,255,.10); overflow:hidden; }
  .mcv-nnf-chartcard .mcv-nnf-barrow>.bar>.mcv-nnf-barcol{ height:8px; border-radius:999px; background:linear-gradient(90deg,#ff8090,#d81b46); }
  .mcv-nnf-chartcard .note{ margin-top:18px; padding-top:14px; border-top:1px solid rgba(255,255,255,0.12); font-size:11.5px; line-height:1.5; color:rgba(255,255,255,.62); }
  .mcv-nnf-seggrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; }
  .mcv-nnf-segcard{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:16px; padding:26px 22px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-nnf-segcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-nnf-segcard h3{ color:#191419; font-size:15.5px; margin-bottom:8px; }
  .mcv-nnf-segcard p{ color:#6d666d; font-size:13px; margin:0; line-height:1.55; }
  .mcv-nnf-segicon{ width:38px; height:38px; border-radius:10px; background:rgba(232,52,79,.12); border:1px solid rgba(232,52,79,.3); display:flex; align-items:center; justify-content:center; margin-bottom:14px; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:14px; color:#a70d2a; transition:background .3s; }
  .mcv-nnf-modelgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-nnf-modelcard{ position:relative; background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:18px; padding:26px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; overflow:hidden; }
  .mcv-nnf-modelcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-nnf-modelcard .ghost{ position:absolute; top:-4px; right:6px; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:64px; color:#000; opacity:.045; line-height:1; }
  .mcv-nnf-modelcard:hover .ghost{ color:#e8344f; opacity:.09; }
  .mcv-nnf-modelcard .stage{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#a70d2a; margin-bottom:10px; position:relative; }
  .mcv-nnf-modelcard h3{ font-size:16.5px; margin-bottom:8px; position:relative; color:#191419; }
  .mcv-nnf-modelcard p{ font-size:13.5px; color:#6d666d; margin:0; line-height:1.55; position:relative; }
  .mcv-nnf-streamlist{ display:flex; flex-direction:column; gap:9px; }
  .mcv-nnf-streamrow{ display:flex; align-items:center; gap:12px; padding:9px 12px; border:1px solid rgba(255,255,255,0.12); border-radius:10px; background:rgba(255,255,255,.03); }
  .mcv-nnf-streamrow .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; color:#ff8090; }
  .mcv-nnf-streamrow .s{ font-size:13px; color:#fff; font-weight:600; }
  @media (max-width:900px){
    .mcv-nnf-aside ul{ grid-template-columns:1fr; }
    .mcv-nnf-flowrow{ grid-template-columns:48px 1fr; gap:16px; }
    .mcv-nnf-flownum{ width:44px; height:44px; font-size:14px; }
    .mcv-nnf-icongrid,.mcv-nnf-cs-grid,.mcv-nnf-modelgrid{ grid-template-columns:1fr; }
    .mcv-nnf-trustgrid,.mcv-nnf-seggrid{ grid-template-columns:1fr 1fr; }
    .mcv-nnf-cs-stats{ grid-template-columns:1fr; }
    .mcv-nnf-cs-stat{ border-right:none; border-bottom:1px solid rgba(11,11,16,0.1); }
    .mcv-nnf-cs-stat:last-child{ border-bottom:none; }
    .mcv-nnf-cs-top,.mcv-nnf-steprow{ flex-direction:column; }
    .mcv-nnf-cs-meta{ text-align:left; }
    .mcv-nnf-chartcard .mcv-nnf-barrow{ gap:10px; }
    .mcv-nnf-chartcard .mcv-nnf-barrow .l{ flex:0 0 104px; font-size:11.5px; }
  }
.mcv-nnf-scorerow{ flex-wrap:wrap; }
.mcv-nnf-scorecard > .mcv-nnf-scorerow > strong{ flex:1 0 100%; color:#ffffff; font-size:14.5px; margin-bottom:4px; }
.mcv-nnf-scorecard > .mcv-nnf-scorerow > span{ flex:1 0 100%; color:rgba(255,255,255,0.78); font-size:13px; line-height:1.62; }
.mcv-nnf-callout h3{ color:#fff; font-size:22px; margin-bottom:12px; }
.mcv-nnf-pt .mcv-nnf-head .kicker{ color:#ff8090; }
* + .mcv-nnf-callout{ margin-top:22px; }
.mcv-nnf-cta .mcv-nnf-byline,.mcv-nnf-cta .mcv-nnf-footerbar{ color:#ffffff; }
.mcv-nnf-cta .mcv-nnf-byline .dotsep{ opacity:.65; }
.mcv-nnf-cta .mcv-nnf-footermeta{ color:#ffffff; }
.mcv-nnf-trustband .kicker,.mcv-nnf-pt .kicker{ color:var(--crimson-light); }
.mcv-nnf-cta .kicker{ color:#ffffff; }
@media (max-width:560px){ .mcv-nnf-trustgrid,.mcv-nnf-seggrid{ grid-template-columns:1fr; } }

    
    
      
        
          
            [Home](/)/[Noon Clone](/noon-clone/)/Features
          
          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 →](https://miracuves.com/schedule-consultation/)[See Pricing](/noon-clone/development-cost/)
          
            **A second market** is configuration
            **6** surfaces, one REST API
            **6 days** to deploy
          
        
        
          New marketNo 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
            
          
        
      
    
  

  
    
      
        131Normalized MySQL Tables
        4Wallets Reconciled Per Order
        6Surfaces on One REST API
        9Order 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.

      
      
        
| Capability | Original Noon | Miracuves Clone | Single-market commerce script |
| --- | --- | --- | --- |
| Currency per market | Yes, several GCC states | A currency catalog with operator-set rates; the default drives what each buyer is quoted at checkout | One base currency, display conversion at best |
| VAT that differs by state | Yes, handled centrally | Tax classes bound per zone with per-product rules through a polymorphic binding, inclusive or exclusive per market | One tax rate, or a plugin bolted on later |
| Where you can actually ship | Yes, mature logistics | Delivery country codes and zip allowlists deciding whether checkout is offered at all, plus per-category shipping overrides | Flat shipping zones, no serviceability gate |
| Catalog in more than one language | Yes, Arabic and English | Entity-level translation, so a listing carries its own content per locale rather than one shared description | Interface strings translated, catalog not |
| Cash on delivery | Yes, in several markets | A settlement path: code verified at handover, cash balance per agent, operator-set handling fee, reconciliation to the operator wallet | A payment method flag with no accounting behind it |
| Money held per actor | Internal | Four wallets - buyer, seller, agent, operator - each with an append-only history written inside the same transaction as the balance move | One balance field, updated in place |
| Delivery fleet | Own and partner fleets | Agent identity with KYC, approval, zone assignment, assignment feed, live location and verified handover | Usually absent, or a courier webhook |
| Source code | Not available | Complete Laravel 12 backend and all three Flutter projects, unobfuscated, no licence callback | Often encrypted files or a licence check |
| Time to live | Not applicable | Six working days, markets configured with you at deployment | Weeks, 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.

      
      
        
| Capability | Why it is not optional |
| --- | --- |
| Operator-set exchange rates | Rates 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 binding | Tax 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 checkout | Serviceability 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 overrides | A 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 translation | A 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 earnings | An 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 placement | A 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 history | When 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 currency | Settlement 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.

      
      
        **Backend**Laravel 12 on PHP 8.2, organised into nWidart modules so AI, Blog and Tax are separable rather than tangled through the core.
        **Data**131 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.
        **API**One 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.
        **Mobile**Three 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 queues**Redis 7 for cache, queue and session, with a queue worker and scheduler configured at deployment rather than left as a first-week discovery.
        **Payments**Eleven 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 12**PHP 8.2, nWidart modules
          **131**Normalized MySQL tables
          **v1 / v2 / v3**REST API versions shipped
          **Redis 7**Cache, 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 layout**Named 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 applications**Three 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 deployment**Your 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 credentials**Eleven gateways are integrated; each needs your own merchant account and its own approval in each market you take payments in.
- **SMS and email provider**Integration-required - your accounts, your sender reputation, your deliverability.
- **Firebase project**Push notifications across all three Android apps run through your own Firebase project.
- **OpenAI key**The 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 copy**The 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 state**Tax classes bind per zone, but the rates for your jurisdictions are yours to set, and yours to keep current.
- **ISO 27001 and SOC 2**Neither 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 →](/noon-clone/development-company/)
      
    
  

  
    
      
        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.

        [See Pricing](/noon-clone/development-cost/)[Full Overview](/noon-clone/)
      
    
  

  
    
      
        Explore
        
## Explore the Noon Clone

      
      
        [Overview](/noon-clone/)
        [Features](/noon-clone/features/)
        [Development Cost](/noon-clone/development-cost/)
        [Development Company](/noon-clone/development-company/)
        [Business Model](/noon-clone/business-model/)
      
    
  

  
    
    
      
        
## 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 →](https://miracuves.com/schedule-consultation/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **August 21, 2026**
        
        
          Miracuves · Noon Clone Solution
          Feature set and readiness caveats cross-verified against the live hub, 2026-08-21
