---
title: Farfetch Clone Features
description: 
url: https://miracuves.com/farfetch-clone/features
date_modified: 2026-08-24
author: miracuves
language: en_US
---

.mcv-fff{
    --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-fff *{ box-sizing:border-box; }
  .mcv-fff h1,.mcv-fff h2,.mcv-fff h3{ font-family:'Plus Jakarta Sans',Arial,sans-serif; font-weight:800; margin:0; letter-spacing:-0.02em; line-height:1.12; }
  .mcv-fff p{ margin:0 0 14px; line-height:1.7; color:var(--ink); }
  .mcv-fff a{ color:var(--crimson-deep); text-decoration:none; }
  .mcv-fff .mono{ font-family:'JetBrains Mono',monospace; }
  .mcv-fff-wrap{ max-width:1180px; margin:0 auto; padding:0 24px; position:relative; z-index:2; }
  .mcv-fff-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-fff-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-fff-crumb a{ color:rgba(255,255,255,.62); }
  .mcv-fff-crumb a:hover{ color:var(--crimson-light); }
  .mcv-fff-crumb span.sep{ opacity:.5; }
  .mcv-fff-crumb span.cur{ color:rgba(255,255,255,.75); }

  .mcv-fff-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-fff-eyebrow .dot{ width:6px; height:6px; border-radius:50%; background:var(--crimson); }

  .mcv-fff-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-fff-hero .ring{ position:absolute; border:2px solid rgba(232,52,79,.18); border-radius:50%; pointer-events:none; }
  .mcv-fff-hero .ring1{ width:560px; height:560px; top:-260px; right:-200px; }
  .mcv-fff-hero .ring2{ width:340px; height:340px; bottom:-200px; right:120px; border-color:rgba(232,52,79,.1); }
  .mcv-fff-herogrid{ display:grid; grid-template-columns:1.1fr 0.9fr; gap:48px; align-items:center; }
  .mcv-fff-hero h1{ font-size:clamp(27px,3.9vw,44px); color:#fff; }
  .mcv-fff-hero h1 em{ font-style:normal; color:#ff8090; }
  .mcv-fff-hero p.sub{ font-size:16px; color:rgba(255,255,255,.68); max-width:600px; margin:20px 0 30px; }

  .mcv-fff a.mcv-fff-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-fff a.mcv-fff-btn:hover{ color:#fff; transform:translateY(-2px); box-shadow:0 14px 36px rgba(232,52,79,.42); text-decoration:none; }
  .mcv-fff a.mcv-fff-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-fff a.mcv-fff-btn-outline:hover{ background:#fff; color:#191419; text-decoration:none; }

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

  .mcv-fff-cardstack{ position:relative; height:340px; }
  .mcv-fff-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-fff-fincard.c1{ top:0; left:10px; z-index:1; opacity:.5; transform:rotate(-6deg) scale(.92); }
  .mcv-fff-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-fff-fincard .brand{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.55); }
  .mcv-fff-fincard .chip{ width:34px; height:24px; border-radius:5px; background:linear-gradient(135deg,#ff8090,#e8344f); margin:22px 0 18px; }
  .mcv-fff-fincard .num{ font-family:'JetBrains Mono',monospace; font-size:15px; color:#fff; letter-spacing:.1em; }
  .mcv-fff-fincard .curr{ position:absolute; bottom:22px; right:22px; font-family:'JetBrains Mono',monospace; font-size:11px; color:#ff8090; }
  .mcv-fff-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-fff-float .k2{ font-family:'JetBrains Mono',monospace; font-size:10px; color:#ff8090; text-transform:uppercase; letter-spacing:.08em; margin-bottom:3px; }
  .mcv-fff-float .v{ font-family:'JetBrains Mono',monospace; font-size:15px; color:#fff; font-weight:700; }
  .mcv-fff-float-1{ top:-10px; right:0; }
  .mcv-fff-float-2{ bottom:10px; left:0; }

  .mcv-fff-statbar{ margin-top:-72px; position:relative; z-index:3; }
  .mcv-fff-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-fff-statbar .stat{ text-align:center; padding:0 12px; border-right:1px solid var(--line-light); }
  .mcv-fff-statbar .stat:last-child{ border-right:none; }
  .mcv-fff-statbar .num{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:22px; color:#ff8090; }
  .mcv-fff-statbar .lbl{ font-size:11.5px; color:rgba(255,255,255,.62); margin-top:6px; line-height:1.4; }

  .mcv-fff-section{ padding:100px 0 76px; }
  .mcv-fff-section.paper{ background:#faf8f8; }
  .mcv-fff-section.tight{ padding-top:76px; }
  .mcv-fff-head{ text-align:center; max-width:720px; margin:0 auto 48px; }
  .mcv-fff-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-fff-head h2{ font-size:clamp(22px,3vw,34px); color:#191419; }
  .mcv-fff-head p{ color:#6d666d; margin-top:14px; }

  .mcv-fff-rolegrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-fff-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-fff-rolecard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-fff-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-fff-rolecard h3{ font-size:17px; margin-bottom:12px; color:#191419; }
  .mcv-fff-rolecard ul{ margin:0; padding-left:18px; font-size:13.5px; color:#191419; }
  .mcv-fff-rolecard li{ margin-bottom:8px; line-height:1.5; }

  .mcv-fff-tablewrap{ overflow-x:auto; border-radius:16px; box-shadow:0 12px 34px rgba(0,0,0,.07); border:1px solid var(--line); }
  table.mcv-fff-table{ border-collapse:collapse; width:100%; min-width:680px; background:#fff; font-size:13.5px; }
  table.mcv-fff-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-fff-table td{ padding:14px 16px; border-bottom:1px solid rgba(11,11,16,0.1); vertical-align:top; color:#191419; }
  table.mcv-fff-table td.hl{ background:rgba(232,52,79,.06); border-top:3px solid #e8344f; font-weight:600; color:#191419; }
  table.mcv-fff-table th.hl{ background:#e8344f; color:#ffffff; }
  table.mcv-fff-table tbody tr:hover td{ background:#f4f1f1; color:#191419; }
  table.mcv-fff-table tbody tr:hover td.hl{ background:rgba(232,52,79,.13); color:#191419; }
  table.mcv-fff-table tr:last-child td{ border-bottom:none; }
  .mcv-fff-note{ font-size:12.5px; color:#6d666d; margin-top:12px; }

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

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

  .mcv-fff-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-fff-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-fff-cs-badge .dot{ width:6px; height:6px; border-radius:50%; background:#e8344f; }
  .mcv-fff-cs-body{ flex:1; min-width:260px; }
  .mcv-fff-cs-body h3{ font-size:16.5px; margin-bottom:6px; color:#191419; }
  .mcv-fff-cs-body p{ color:#6d666d; font-size:13.5px; margin:0; max-width:460px; }
  .mcv-fff a.mcv-fff-cs-link{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; color:#a70d2a; white-space:nowrap; }

  .mcv-fff-faqgrid{ display:grid; grid-template-columns:1fr 1fr; gap:0 40px; max-width:1000px; margin:0 auto; }
  .mcv-fff-faq details{ border-bottom:1px solid var(--line); padding:18px 0; }
  .mcv-fff-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-fff-faq summary::-webkit-details-marker{ display:none; }
  .mcv-fff-faq summary::after{ content:'+'; font-family:'JetBrains Mono',monospace; color:#a70d2a; font-size:20px; font-weight:700; flex:none; }
  .mcv-fff-faq details[open] summary::after{ content:'\2212'; }
  .mcv-fff-faq .a{ color:#6d666d; font-size:13.5px; margin-top:10px; line-height:1.65; }

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

  .mcv-fff-explore{ display:flex; flex-wrap:wrap; gap:10px; justify-content:center; }
  .mcv-fff a.mcv-fff-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-fff a.mcv-fff-pill:hover{ border-color:#e8344f; color:#a70d2a; text-decoration:none; }
  .mcv-fff a.mcv-fff-pill.cur{ background:#191419; color:#fff; border-color:#191419; }

  .mcv-fff-finalcta{ background:#0a0a0a; color:#fff; text-align:center; padding:96px 24px 64px; position:relative; overflow:hidden; }
  .mcv-fff-finalcta .ring{ position:absolute; border:1.5px solid rgba(232,52,79,.16); border-radius:50%; }
  .mcv-fff-finalcta .ring1{ width:480px; height:480px; top:-220px; left:-160px; }
  .mcv-fff-finalcta .ring2{ width:300px; height:300px; bottom:-180px; right:-90px; }
  .mcv-fff-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-fff-finalcta h2{ color:#fff; font-size:clamp(24px,3.2vw,34px); max-width:640px; margin:0 auto 14px; }
  .mcv-fff-finalcta p.sub{ color:rgba(255,255,255,.7); max-width:520px; margin:0 auto 30px; }
  .mcv-fff-footerbar{ max-width:1180px; margin:56px auto 0; padding-top:28px; border-top:1px solid var(--line-light); position:relative; z-index:2; }
  .mcv-fff-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-fff-byline strong{ color:#fff; font-weight:600; }
  .mcv-fff-byline .dotsep{ opacity:.4; }
  .mcv-fff-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-fff-herogrid{ grid-template-columns:1fr; }
    .mcv-fff-statbar .inner{ grid-template-columns:repeat(2,1fr); gap:18px 0; }
    .mcv-fff-statbar .stat:nth-child(2){ border-right:none; }
    .mcv-fff-rolegrid{ grid-template-columns:1fr; }
    .mcv-fff-honestgrid{ grid-template-columns:1fr; }
    .mcv-fff-faqgrid{ grid-template-columns:1fr; }
    .mcv-fff-hero h1{ font-size:27px; }
    .mcv-fff-cta .flex{ flex-direction:column; align-items:flex-start; }
    .mcv-fff-cardstack{ height:260px; }
    .mcv-fff-fincard{ width:250px; height:150px; }
  }
  @media (prefers-reduced-motion: reduce){ .mcv-fff *{ animation:none !important; transition:none !important; } }
  /* --- components used by cost / company / business-model --- */
  .mcv-fff-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-fff-pricecard .plan{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:#ff8090; margin-bottom:14px; }
  .mcv-fff-pricecard .amt{ font-family:'JetBrains Mono',monospace; font-size:44px; font-weight:700; color:#fff; line-height:1; }
  .mcv-fff-pricecard .per{ font-size:13px; color:rgba(255,255,255,.6); margin-top:8px; }
  .mcv-fff-pricecard ul{ margin:22px 0 0; padding-left:18px; color:rgba(255,255,255,.78); font-size:13.5px; }
  .mcv-fff-pricecard li{ margin-bottom:8px; line-height:1.5; }
  .mcv-fff-drivers{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-fff-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-fff-driver:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-fff-driver h3{ font-size:16px; margin-bottom:10px; color:#191419; }
  .mcv-fff-driver p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-fff-steps{ display:grid; grid-template-columns:repeat(3,1fr); gap:18px; }
  .mcv-fff-step{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:16px; padding:24px 22px; }
  .mcv-fff-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-fff-step h3{ font-size:15.5px; margin-bottom:8px; color:#191419; }
  .mcv-fff-step p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-fff-checkgrid{ display:grid; grid-template-columns:1fr 1fr; gap:16px 28px; }
  .mcv-fff-check{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:14px; padding:20px 22px; }
  .mcv-fff-check h3{ font-size:15px; margin-bottom:8px; color:#191419; }
  .mcv-fff-check p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-fff-flags{ display:grid; grid-template-columns:1fr 1fr; gap:14px 28px; }
  .mcv-fff-flag{ font-size:13.5px; color:#191419; line-height:1.55; padding-left:22px; position:relative; }
  .mcv-fff-flag::before{ content:'\2715'; position:absolute; left:0; top:0; font-family:'JetBrains Mono',monospace; font-weight:700; color:#a70d2a; }
  .mcv-fff-pt{ background:radial-gradient(ellipse 800px 400px at 20% 0%, rgba(232,52,79,.14), transparent), #0a0a0a; color:#fff; padding:92px 0 84px; }
  .mcv-fff-pt .mcv-fff-head h2{ color:#fff; }
  .mcv-fff-pt .mcv-fff-head p{ color:rgba(255,255,255,.68); }
  .mcv-fff-pt .mcv-fff-head .kicker{ color:#ff8090; }
  .mcv-fff-ptgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
  .mcv-fff-ptcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:18px; padding:26px 24px; }
  .mcv-fff-ptcard h3{ font-size:15.5px; color:#fff; margin-bottom:10px; }
  .mcv-fff-ptcard p{ font-size:13.5px; color:rgba(255,255,255,.72); margin:0; }
  .mcv-fff-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-fff-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-fff-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-fff-csmeta div{ font-size:13px; color:#6d666d; }
  .mcv-fff-csmeta strong{ display:block; font-family:'JetBrains Mono',monospace; font-size:18px; color:#191419; margin-bottom:2px; }
  .mcv-fff-cscols{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px; }
  .mcv-fff-cscols h4{ font-size:13px; font-family:'JetBrains Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:#a70d2a; margin:0 0 10px; }
  .mcv-fff-cscols ul{ margin:0; padding-left:18px; font-size:13.5px; color:#191419; }
  .mcv-fff-cscols li{ margin-bottom:8px; line-height:1.5; }
  .mcv-fff-quote{ margin-top:28px; padding:24px 26px; background:#faf8f8; border-left:3px solid #e8344f; border-radius:0 12px 12px 0; }
  .mcv-fff-quote p{ font-size:15px; font-style:italic; color:#191419; margin:0 0 10px; }
  .mcv-fff-quote .who{ font-family:'JetBrains Mono',monospace; font-size:12px; color:#6d666d; font-style:normal; }
  .mcv-fff-revgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-fff-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-fff-revcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-fff-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-fff-revcard h3{ font-size:16.5px; margin-bottom:10px; color:#191419; }
  .mcv-fff-revcard p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-fff-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-fff-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-fff-disclose h3{ font-size:16px; margin-bottom:10px; color:#191419; }
  .mcv-fff-disclose p{ font-size:13.5px; color:#6d666d; margin:0 0 10px; }
  .mcv-fff-disclose p:last-child{ margin-bottom:0; }
  .mcv-fff-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-fff-callout .figs div{ font-size:12.5px; color:rgba(255,255,255,.65); }
  .mcv-fff-callout .figs strong{ display:block; font-family:'JetBrains Mono',monospace; font-size:20px; color:#fff; margin-bottom:3px; }
  @media (max-width:900px){
    .mcv-fff-drivers,.mcv-fff-steps,.mcv-fff-checkgrid,.mcv-fff-flags,.mcv-fff-ptgrid,.mcv-fff-cscols,.mcv-fff-revgrid{ grid-template-columns:1fr; }
    .mcv-fff-csbox{ padding:28px 24px; }
  }
  /* ===== components ported from the shipped reference bundle (instagram-clone) ===== */
  .mcv-fff-aside{ border-left:3px solid #e8344f; background:#faf8f8; border-radius:0 16px 16px 0; padding:32px 36px; }
  .mcv-fff-aside h3{ font-size:17px; margin-bottom:14px; color:#191419; }
  .mcv-fff-aside ul{ margin:0; padding:0; list-style:none; display:grid; grid-template-columns:1fr 1fr; gap:16px 32px; }
  .mcv-fff-aside li{ padding-left:18px; position:relative; font-size:14px; color:#191419; line-height:1.6; }
  .mcv-fff-aside li::before{ content:''; position:absolute; left:0; top:7px; width:7px; height:7px; background:#e8344f; transform:rotate(45deg); }
  .mcv-fff-aside li span{ color:#6d666d; display:block; font-size:12.5px; margin-top:2px; }
  .mcv-fff-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-fff-flowrow:last-child{ border-bottom:none; }
  .mcv-fff-flowrow h3{ font-size:18px; margin-bottom:8px; color:#191419; }
  .mcv-fff-flowrow p{ color:#6d666d; font-size:14.5px; margin:0; max-width:760px; }
  .mcv-fff-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-fff-icongrid{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; }
  .mcv-fff-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-fff-iconitem h3{ font-size:15px; margin-bottom:6px; color:#191419; }
  .mcv-fff-iconitem p{ font-size:13px; color:#6d666d; margin:0; }
  .mcv-fff-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-fff-steprow{ display:flex; gap:24px; padding:22px 0; border-bottom:1px solid rgba(11,11,16,0.1); }
  .mcv-fff-steprow:last-child{ border-bottom:none; }
  .mcv-fff-step-num{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:15px; color:#a70d2a; flex:none; width:90px; padding-top:2px; }
  .mcv-fff-step-body h3{ font-size:17px; color:#191419; margin-bottom:6px; }
  .mcv-fff-step-body p{ font-size:14.5px; color:#6d666d; margin:0; }
  .mcv-fff-trustband{ background:#0a0a0a; color:#fff; padding:96px 0; position:relative; overflow:hidden; }
  .mcv-fff-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-fff-trustband .head{ text-align:center; max-width:720px; margin:0 auto 44px; position:relative; z-index:2; }
  .mcv-fff-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-fff-trustband .head h2{ color:#fff; font-size:clamp(22px,3vw,34px); }
  .mcv-fff-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-fff-head h2 (#191419) and vanishes on the black band */
  .mcv-fff-trustband .mcv-fff-head h2{ color:#ffffff; font-size:clamp(22px,3vw,34px); }
  .mcv-fff-trustband .mcv-fff-head p{ color:rgba(255,255,255,0.68); }
  .mcv-fff-trustband .mcv-fff-head .kicker{ color:#ff8090; }
.mcv-fff-trustband .mcv-fff-note{ color:rgba(255,255,255,0.68); }
.mcv-fff-pt .mcv-fff-note{ color:rgba(255,255,255,0.68); }
  .mcv-fff-trustgrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; position:relative; z-index:2; }
  .mcv-fff-trustcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:16px; padding:26px 22px; }
  .mcv-fff-trustcard h3{ color:#fff; font-size:15px; margin-bottom:8px; }
  .mcv-fff-trustcard p{ color:rgba(255,255,255,.68); font-size:13px; margin:0; line-height:1.55; }
  .mcv-fff-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-fff-scorecard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:20px; padding:28px 26px; }
  .mcv-fff-scorecard .k{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; margin-bottom:16px; }
  .mcv-fff-scorerow{ display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid rgba(255,255,255,0.12); }
  .mcv-fff-scorerow:last-child{ border-bottom:none; }
  .mcv-fff-scorerow .lbl2{ font-size:12.5px; color:rgba(255,255,255,.75); }
  .mcv-fff-scorerow .val{ font-family:'JetBrains Mono',monospace; font-size:13px; font-weight:700; color:#fff; }
  .mcv-fff-scorerow .val.good{ color:#ff8090; }
  /* scorecard is a DARK card sitting in a light section. Rows authored as
     **label**text inherit var(--ink) and vanish (1.13:1).
     Give them light ink and stack them; .lbl2/.val two-column rows are untouched. */
  .mcv-fff-scorerow{ flex-wrap:wrap; }
  .mcv-fff-scorecard > .mcv-fff-scorerow > strong{ flex:1 0 100%; color:#ffffff; font-size:14.5px; margin-bottom:4px; }
  .mcv-fff-scorecard > .mcv-fff-scorerow > span{ flex:1 0 100%; color:rgba(255,255,255,0.78); font-size:13px; line-height:1.62; }
  .mcv-fff-cs-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:24px; flex-wrap:wrap; margin-bottom:28px; }
  .mcv-fff-cs-top p{ color:#6d666d; font-size:14.5px; max-width:480px; margin:0; }
  .mcv-fff-cs-meta{ text-align:right; font-size:13.5px; }
  .mcv-fff-cs-meta strong{ display:block; color:#191419; font-size:14.5px; }
  .mcv-fff-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-fff-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-fff-cs-stat{ text-align:center; padding:22px 12px; border-right:1px solid rgba(11,11,16,0.1); }
  .mcv-fff-cs-stat:last-child{ border-right:none; }
  .mcv-fff-cs-stat .v{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:26px; color:#a70d2a; }
  .mcv-fff-cs-stat .l{ font-size:12.5px; color:#6d666d; margin-top:4px; }
  .mcv-fff-cs-grid{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px; }
  .mcv-fff-cs-box{ background:#faf8f8; border-radius:14px; padding:22px 24px; }
  .mcv-fff-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-fff-cs-box ul{ margin:0; padding:0; list-style:none; display:grid; gap:8px; }
  .mcv-fff-cs-box li{ padding-left:16px; position:relative; font-size:13.5px; color:#191419; line-height:1.55; }
  .mcv-fff-cs-box li::before{ content:''; position:absolute; left:0; top:7px; width:6px; height:6px; background:#e8344f; transform:rotate(45deg); }
  .mcv-fff-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-fff-cs-quote p{ font-style:italic; font-size:15px; color:#191419; margin:0 0 10px; }
  .mcv-fff-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-fff-cs-who strong{ display:block; font-size:13.5px; color:#191419; }
  .mcv-fff-cs-who span{ font-size:12.5px; color:#6d666d; }
  .mcv-fff-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-fff-mockwrap{ position:relative; }
  .mcv-fff-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-fff-chartcard .k{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; margin-bottom:18px; }
  .mcv-fff-chartcard .mcv-fff-barrow{ display:flex; align-items:center; gap:14px; height:auto; margin:0 0 14px; }
  .mcv-fff-chartcard .mcv-fff-barrow .l{ flex:0 0 140px; font-size:12.5px; line-height:1.35; color:rgba(255,255,255,.78); }
  .mcv-fff-chartcard .mcv-fff-barrow>.bar{ flex:1; height:8px; border-radius:999px; background:rgba(255,255,255,.10); overflow:hidden; }
  .mcv-fff-chartcard .mcv-fff-barrow>.bar>.mcv-fff-barcol{ height:8px; border-radius:999px; background:linear-gradient(90deg,#ff8090,#d81b46); }
  .mcv-fff-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-fff-seggrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; }
  .mcv-fff-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-fff-segcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-fff-segcard h3{ color:#191419; font-size:15.5px; margin-bottom:8px; }
  .mcv-fff-segcard p{ color:#6d666d; font-size:13px; margin:0; line-height:1.55; }
  .mcv-fff-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-fff-modelgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-fff-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-fff-modelcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-fff-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-fff-modelcard:hover .ghost{ color:#e8344f; opacity:.09; }
  .mcv-fff-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-fff-modelcard h3{ font-size:16.5px; margin-bottom:8px; position:relative; color:#191419; }
  .mcv-fff-modelcard p{ font-size:13.5px; color:#6d666d; margin:0; line-height:1.55; position:relative; }
  .mcv-fff-streamlist{ display:flex; flex-direction:column; gap:9px; }
  .mcv-fff-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-fff-streamrow .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; color:#ff8090; }
  .mcv-fff-streamrow .s{ font-size:13px; color:#fff; font-weight:600; }
  @media (max-width:900px){
    .mcv-fff-aside ul{ grid-template-columns:1fr; }
    .mcv-fff-flowrow{ grid-template-columns:48px 1fr; gap:16px; }
    .mcv-fff-flownum{ width:44px; height:44px; font-size:14px; }
    .mcv-fff-icongrid,.mcv-fff-cs-grid,.mcv-fff-modelgrid{ grid-template-columns:1fr; }
    .mcv-fff-trustgrid,.mcv-fff-seggrid{ grid-template-columns:1fr 1fr; }
    .mcv-fff-cs-stats{ grid-template-columns:1fr; }
    .mcv-fff-cs-stat{ border-right:none; border-bottom:1px solid rgba(11,11,16,0.1); }
    .mcv-fff-cs-stat:last-child{ border-bottom:none; }
    .mcv-fff-cs-top,.mcv-fff-steprow{ flex-direction:column; }
    .mcv-fff-cs-meta{ text-align:left; }
    .mcv-fff-chartcard .mcv-fff-barrow{ gap:10px; }
    .mcv-fff-chartcard .mcv-fff-barrow .l{ flex:0 0 104px; font-size:11.5px; }
  }
* + .mcv-fff-callout{ margin-top:22px; }
.mcv-fff-cta .mcv-fff-byline,.mcv-fff-cta .mcv-fff-footerbar{ color:#ffffff; }
.mcv-fff-cta .mcv-fff-byline .dotsep{ opacity:.65; }
.mcv-fff-trustband .kicker,.mcv-fff-pt .kicker{ color:var(--crimson-light); }
.mcv-fff-cta .kicker{ color:#ffffff; }
.mcv-fff-cta .mcv-fff-footermeta{ color:#ffffff; }
@media (max-width:560px){ .mcv-fff-trustgrid,.mcv-fff-seggrid{ grid-template-columns:1fr; } }

    
    
      
        
          
            [Home](/)/[Farfetch Clone](/farfetch-clone/)/Features
          
          Farfetch Clone · Features
          
# Farfetch Clone Features: One Basket, Many Boutiques

          
The hard part of a luxury multi-brand marketplace was never the storefront. It is one basket becoming four supplier orders with four fulfilment states, onboarding hundreds of boutiques without a KYB backlog, and paying every seller the right amount on schedule with an approval trail behind each release. Those are the parts already built here. This is what ships, grouped by who touches it.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[See Pricing](/farfetch-clone/development-cost/)
          
            **One basket** many boutiques
            **4** surfaces, one gateway
            **6 days** to deploy
          
        
        
          PayoutTwo approvers
          
            What One Multi-Seller Order Touches
            
              01Basket spans several boutiques
              02Duties and tax resolved by region
              03Parent order splits into child orders
              04Each child runs its own fulfilment state
              05Commission applied by category and tier
              06Payout released by a second approver
            
          
        
      
    
  

  
    
      
        70PostgreSQL Tables
        29Independently Deployable Services
        350+API Paths
        58Node Luxury Taxonomy
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Four surfaces run from one platform and one API gateway. Each one is built for the person in front of it rather than being the same console with fields hidden.

      
      
        
          01
          
### The Shopper

          
Browses a 58-node luxury taxonomy through a mega-menu, lands on a product page carrying competing offers from different boutiques with their own price, condition and stock, and fills one basket across several sellers. Wishlists persist across sessions and devices, and a guest can look up an order and track a shipment without ever creating an account.

        
        
          02
          
### The Boutique

          
Onboards through KYB with document capture rather than an email thread, then runs its own hub: team access with role-based permissions, bulk feed import over CSV and API with job monitoring, category and attribute mapping for its own catalog, growth campaigns, statements and payout requests. It is a seller portal rather than a spreadsheet and an inbox.

        
        
          03
          
### The Catalog Reviewer

          
Works a review queue that stands between a seller upload and a live listing. Authenticity status, condition and provenance are first-class fields rather than free-text notes, which is the difference between a luxury marketplace and a general one. Offers are ingested with per-seller pricing and stock before anything reaches a shopper.

        
        
          04
          
### The Finance Operator

          
Sets commission rules by category and by seller tier, watches the settlement ledger accumulate against child orders, and releases payouts through maker-checker so no single person can both create and approve a release. Statements are what a boutique sees; the ledger behind them is what an audit tests.

        
        
          05
          
### The Risk and Support Operator

          
Fraud scoring runs before payment authorization, AML and sanctions screening sit in the seller lifecycle, and disputes have their own workflow rather than living in a shared mailbox. Thirty-seven admin routes cover catalog QA, commissions, seller lifecycle, risk, disputes, finance, regions and feature flags.

        
        
          06
          
### The Mobile Shopper

          
A 42-route Expo application covering browse, product, bag, orders and profile, plus seller tabs for boutique operations on mobile. It shares the same API gateway as the web storefront, so a price rule or a commission change applies to both without a second implementation.

        
      
      
Every capability here is built and demonstrable in the live demo. Where something needs a third-party account or a deployment decision before it works in production, that is stated against the feature rather than implied away.

    
  

  
    
      
        Compare
        
## Farfetch vs Miracuves Clone vs Building From Scratch

        
What each route gives you on the parts that decide whether a multi-brand marketplace can actually settle with its sellers.

      
      
        
| What decides it | Miracuves Farfetch Clone | Building from scratch |
| --- | --- | --- |
| Time to a working marketplace | Six working days | A multi-year programme with a senior team |
| Product model | Master products with competing seller offers | Usually one product per seller, rebuilt later at cost |
| Multi-seller orders | Parent order splits into child orders with independent state machines | The engineering most marketplace templates never attempt |
| Commission | Rules by category and by seller tier | A flat percentage, until the first category argument |
| Payout control | Maker-checker approval before any release | A finance person with database access |
| Boutique onboarding | KYB with documents, team RBAC and bulk feed import | Email, spreadsheets and a growing backlog |
| Authenticity | Status, condition and provenance as first-class fields | Free-text notes nobody can filter or audit |
| Source code | Full monorepo, 29 services, yours to redeploy | Yours, at the cost of building all of it |

      
      
Farfetch itself is the reference for what this category looks like at scale; it is not a product you can buy or self-host. The comparison that matters commercially is the second column against the third.

    
  

  
    
      
        End to End
        
## How It Works, End to End

        
One basket, traced across four boutiques and two currencies, with every state change and every ledger entry written down.

      
      
        01
### The catalog is one product with many offers

A handbag is one canonical product record. Four boutiques attach competing offers to it, each with its own price, condition and stock. That structure is what luxury resale and multi-brand retail actually need, and it is the thing a single-seller storefront theme cannot be retrofitted into later.

        02
### Nothing goes live without passing QA

A review queue stands between a seller upload and a visible listing. Authenticity status, condition and provenance are structured fields, so a reviewer approves against a checklist rather than a paragraph. Bulk feeds arrive over CSV and API with job monitoring, and category and attribute mapping translates a boutique's own taxonomy into yours.

        03
### The basket spans sellers, and persists

One cart holds line items from several boutiques at once, for guests and signed-in shoppers alike, and carries through to a single checkout. Wishlists persist across sessions and devices. A guest who never registers can still look up the order and track the shipment afterwards.

        04
### Checkout resolves duties before it takes money

A checkout intent combines promotions, address validation, duty and tax by region, shipping options and a fraud scoring hook, and all of it resolves before payment is authorized. On cross-border luxury the duty line is the difference between a completed order and a refused parcel at the border.

        05
### One parent order becomes several child orders

The order service splits the basket into a child order per seller, each with an independent fulfilment state machine. Four boutiques can be at four different stages of the same purchase, and the shopper sees one order while each boutique sees only its own. This is the engineering most marketplace templates never attempt.

        06
### Commission is computed, not assumed

Rules apply by category and by seller tier rather than as one flat percentage across the platform. A premium tier boutique in one category and a new seller in another settle differently on the same order, and the ledger records how each figure was reached rather than only what it came to.

        07
### Payout releases only with a second approver

Settlement accumulates against child orders, statements are generated for each boutique, and a payout request moves through maker-checker so the person who prepares a release is never the person who approves it. Financial control here is structural rather than procedural, which is what an audit actually tests.

      
    
  

  
    
      
        Deliberate
        
## Every Feature Earns Its Place

        
Each module below exists because a luxury multi-brand marketplace stops working without it, not because a competitor lists it.

      
      
        
| Module | Why it is in the base build |
| --- | --- |
| Master products with offers | Four boutiques selling the same bag must be one product page with four offers, or your catalog becomes four near-duplicate listings and your search becomes useless. |
| Catalog QA queue | In luxury, one counterfeit listing that reached a shopper costs more than the queue costs to staff. |
| Authenticity and provenance fields | Structured fields can be filtered, audited and disputed against. A free-text note cannot. |
| Duty and tax at checkout | Cross-border luxury without a duty line produces refused parcels and chargebacks, which is a worse outcome than a lost sale. |
| Parent and child orders | Without the split, a delayed item from one boutique holds the whole order hostage and every seller sees every other seller's business. |
| Commission by category and tier | A flat rate cannot survive the first negotiation with a high-volume boutique, and repricing it by hand does not scale. |
| Maker-checker payouts | Separation of duty on money movement is the control an auditor looks for first, and the hardest to retrofit. |
| Bulk feeds with job monitoring | Boutiques will not hand-enter a thousand SKUs, and a silent feed failure is discovered when stock sells that does not exist. |
| Fraud scoring and AML screening | High-value goods attract card fraud, and sanctions screening in the seller lifecycle is not optional in most jurisdictions. |

      
      
Retail media on both sides, loyalty tiers, concierge and a catalog-grounded AI search service ship alongside these.

    
  

  
    
      
        Stack
        
## The Technology Behind the Features

        
What the platform is actually built on, and what that means for the team who inherits it.

      
      
        **Services**Twenty-nine independently deployable Node.js services in one monorepo, with a Next.js and TypeScript storefront and admin, auditable end to end for technical due diligence.
        **Data**Around seventy PostgreSQL tables with the Prisma schema, a migration set and a seed workflow, including the parent and child order state machines and the settlement and commission ledger structures.
        **API**Over 350 API paths behind a gateway that handles routing, authentication and rate limiting, so the web storefront and the mobile application resolve the same rules rather than two implementations of them.
        **Mobile**A 42-route Expo build covering browse, product, bag, orders and profile, plus seller tabs so a boutique can work from a phone rather than only from a desk.
        **Search**PostgreSQL full-text search ships in the base build and works from day one. Algolia is an upgrade path with a sync adapter already written, using your own account when you decide the catalog has outgrown full-text.
        **Integrations**Adapters for Stripe, PayPal and Adyen on payments, SendGrid, Twilio and Firebase for messaging, and OpenRouter behind the AI service for concierge and catalog-grounded search.
      
      
        
### Why the settlement layer is the number that matters

        
A luxury storefront can be built in weeks. What takes years is everything that has to agree behind it: a product model where several boutiques compete on one record, an order that splits into independent fulfilment states, commission that varies by category and tier, and a payout that no single person can both prepare and release. Around seventy tables is not a boast, it is a consequence of modelling those things properly instead of flattening them.

        
          **70**PostgreSQL tables
          **29**Deployable services
          **350+**API paths
          **$3,399**One-time, fixed
        
      
      
The stack is Node.js, Next.js and TypeScript on standard PostgreSQL, which matters when you hire against it and when a technical buyer runs due diligence on what you own.

    
  

  
    
      
        Honest Readiness
        
## What Is Not Included in the Base Package

        
Named here rather than discovered after the invoice.

      
      
        
### Documented gaps and pre-launch work

        
**Authentication hardening.** JWT authentication at the gateway with rate limiting and role-based access across customer, boutique, seller and operator is built. There is no MFA, no refresh tokens, no token revocation, no silent renew and no admin step-up. These are documented gaps and pre-launch work, and they are named here because discovering them during a security review is worse.

        
**File handling.** No signed download URLs and no upload virus scanning. On a platform where boutiques upload documents and imagery, both belong on the pre-launch list.

        
**Every external provider is your account.** Stripe, PayPal or Adyen, SendGrid, Twilio, Firebase, Algolia and OpenRouter all run on credentials you hold. That is deliberate: they are accounts you should own rather than accounts we hold on your behalf.

        
**Search beyond full-text.** PostgreSQL full-text ships and works. Algolia is an upgrade with the sync adapter already written, and it becomes worth doing when the catalog and query volume justify it rather than on day one.

        
**Enterprise single sign-on is available, not default.** Auth0 integration provides enterprise SSO with JWKS validation using your own tenant and credentials, which is a deployment decision rather than something switched on by default.

      
      
The controls that are built are real: fraud scoring before payment authorization, AML and sanctions screening in the seller lifecycle, and maker-checker on every payout release.

    
  

  
    
      
        
          Development Company
          
### See how Miracuves compares to agencies and freelancers

          
The deployment process, a deployed client case study, and what to check on settlement, catalog QA and authentication before you hire anyone - on the Development Company page.

        
        [See the comparison →](/farfetch-clone/development-company/)
      
    
  

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            Can several boutiques sell the same product?
            Yes, and that is the core of the model. One canonical product record carries competing offers from different boutiques, each with its own price, condition and stock. The shopper sees one product page with the offers on it rather than four near-duplicate listings, which is what keeps the catalog and the search usable as seller count grows.
          
          
            What happens when a basket spans four sellers?
            The order service splits the parent order into a child order per seller, each with an independent fulfilment state machine. The shopper tracks one order; each boutique sees only its own child order and its own state. One slow boutique therefore cannot hold the other three items hostage, and no seller can see another seller's business.
          
          
            How is commission calculated?
            By rules that apply per category and per seller tier rather than as a single flat percentage. A premium-tier boutique in one category and a newly onboarded seller in another settle at different rates on the same order, and the ledger records how each figure was reached rather than just the total.
          
        
        
          
            Is authenticity handled or just claimed?
            Authenticity status, condition and provenance are first-class structured fields, and a catalog QA queue stands between a seller upload and a live listing. What the platform does not do is verify an item for you - the queue is the workflow and your reviewers are the judgement. For luxury that distinction matters, so it is stated plainly rather than implied.
          
          
            Is search production-ready out of the box?
            PostgreSQL full-text search ships and works from day one. Algolia is an upgrade path with the sync adapter already written, running on your own account when the catalog size and query volume justify it. Nothing about the base build depends on a paid search provider before you have a catalog worth indexing.
          
          
            Are there any security gaps I should know about?
            Yes, and they are documented rather than hidden. There is no MFA, no refresh tokens, no token revocation, no silent renew, no admin step-up, no signed download URLs and no upload virus scanning. All of it is pre-launch work. What is built is JWT auth at the gateway with rate limiting, role-based access across four roles, fraud scoring before payment authorization, AML and sanctions screening, and maker-checker payout release.
          
        
      
    
  

  
    
    
      
        
## See one basket split across four boutiques, live

Ask for the demo and we will place a multi-seller order, watch it split into child orders, then release the payout through maker-checker in front of you.

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

  
    
      
        Explore
        
## Explore the Farfetch Clone

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

  
    
    
      
        
## Ready to run a luxury marketplace that settles properly?

        
Deploy in six working days with the storefront, seller hub, admin command centre and mobile app included, your commission rules and regions configured with you, and the full monorepo on infrastructure you own.

        [Talk to Us →](https://miracuves.com/schedule-consultation/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **August 24, 2026**
        
        
          Miracuves · Farfetch Clone Solution
          Feature set, stack and named gaps cross-verified against the live hub, 2026-08-24
