---
title: Etsy Clone Features
description: 
url: https://miracuves.com/etsy-clone/features
date_modified: 2026-08-21
author: miracuves
language: en_US
---

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    
      
        
          
            [Home](/)/[Etsy Clone](/etsy-clone/)/Features
          
          Etsy Clone · Features
          
# Etsy Clone Features: Built for the Seller Side

          
A thousand sellers listing five items each behaves nothing like fifty sellers listing a thousand. Onboarding cannot involve a phone call, commission cannot be one number, moderation is a daily shift rather than an occasional check, and support is a conversation rather than a form. Here is what ships, grouped by who touches it.

          [Request a Live Demo →](/etsy-clone/)[See Pricing](/etsy-clone/development-cost/)
          
            **Self-service** seller onboarding
            **Per seller** commission, not per platform
            **6 days** to deploy
          
        
        
          1,000 sellersNo interviews
          
            How a Maker Gets Listing
            
              01Registers with KYC and documents
              02Operator approves from a queue
              03Picks a plan with a listing cap
              04Lists, then waits on moderation
              05Bulk approve clears the queue
              06Their own commission rate applies
            
          
        
      
    
  

  
    
      
        131Normalized MySQL Tables
        4Levels Commission Can Be Set At
        9Order Statuses, Per-Line State
        6Surfaces on One REST API
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Six surfaces on one REST API. On a maker marketplace the seller and the operator are the two roles that decide whether the thing works, so both are listed in full.

      
      
        
          B
          
### Buyer

          
- Keyword search with autocomplete, filters and sorting
- Category tree of unlimited depth and a shop directory
- Product pages with galleries, video and photo reviews
- Chat directly with a seller, with attachments
- One basket spanning several independent shops
- Wishlist and save-for-later that persist between sessions
- Coupon, wallet credit and loyalty points applied together
- Return opened with a reason and evidence, tracked to settlement

        
        
          M
          
### Maker

          
- Registers themselves with KYC and document upload
- Waits on an approval queue, not on a sales call
- Picks a plan carrying a listing cap and a commission rate
- Product CRUD with variants, stock and multi-image galleries
- AI-assisted descriptions, SEO titles and image alt text
- Chat with buyers about custom and made-to-order work
- Order queue, refund responses and review replies
- Wallet with commission visible and a withdrawal request flow

        
        
          D
          
### Delivery Agent

          
- First-class identity with KYC, approval and zone assignment
- Assignment feed with accept and reject
- Navigation to the maker for pickup, then to the buyer
- Live location broadcast while in transit
- Status checkpoints from picked up through to delivered
- One-time code verified at the door before handover
- Earnings held separately from cash collected on COD
- Payout request flow from the app

        
        
          O
          
### Operator

          
- Seller approval queue with documents attached
- Listing moderation with approve, reject and bulk actions
- Full editing rights over anything on the platform
- Commission set globally, per category, per seller or per product
- Subscription plans with listing caps and reduced rates
- Withdrawal queue across many small, frequent payouts
- Every module behind its own permission
- Eight report types over any date range, to Excel, CSV or PDF

        
      
      
The maker column is deliberately short on things a marketplace usually asks a seller to do. At a thousand sellers, every step you add to onboarding is a step most of them will not finish, and the ones who do not finish are the long tail your catalog depends on.

    
  

  
    
      
        Compare
        
## Etsy vs Miracuves Clone vs Building From Scratch

        
The same capability, three different paths. Every row that separates them is a seller-side row, because that is where a maker marketplace actually breaks.

      
      
        
| Capability | Original Etsy | Miracuves Clone | Generic commerce script |
| --- | --- | --- | --- |
| Seller onboarding | Fully self-service at scale | Self-registration with KYC and document upload, then an operator approval step - no interview required | An admin creates each vendor by hand |
| Commission granularity | Category-level, published | Global, per category, per seller or per product - so you can sign one maker without repricing everyone | One platform rate |
| Listing limits and plans | Per-listing fees | Subscription tiers carrying product-count caps, reduced commission and featured placement | Usually absent |
| Moderation at volume | Automated and staffed | A queue with approve, reject and bulk actions, plus full editing rights over any listing | One row at a time, if at all |
| Buyer-to-seller conversation | Central to custom orders | Direct chat with attachments, alongside a threaded ticket queue | A contact form to the platform |
| Many small payouts | Yes, continuously | A withdrawal queue with approve, deny and mark-processed, against per-seller payout details | Manual bank transfers and a spreadsheet |
| Basket across shops | Yes | One basket spanning several independent sellers, shipping estimated per shop, delivery status per line | One seller per order |
| 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 | Weeks, then months on the seller-side gaps |

      
      
The first two rows are the ones to test. Ask any provider to onboard a seller without an administrator touching the database, then give that one seller a different commission rate from everybody else.

    
  

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

        
A maker joining, listing, selling and getting paid - traced through every queue it passes and every balance it moves.

      
      
        
          01
          
            
### The maker onboards without you

            
Registration with KYC and document upload, then a wait in an operator approval queue. At a thousand sellers you cannot interview anyone, so the pipeline has to hold quality without holding people up. The documents are attached to the approval decision rather than emailed to somebody.

          
        
        
          02
          
            
### They choose a plan, and the plan sets the ceiling

            
Subscription tiers carry product-count limits, a reduced commission rate, featured placement and priority support, billed on a cycle with a trial and a grace period on failure. A small maker starts cheap with a low cap and upgrades to list more, which is the natural revenue curve on this model rather than a paywall bolted onto it.

          
        
        
          03
          
            
### Listings arrive faster than anyone can read them

            
Seller-submitted products land in a moderation queue with approve, reject and bulk actions, and the operator keeps full editing rights over anything on the platform. With many small sellers this is a daily shift, so bulk is not a convenience - it is the difference between a queue that clears and a queue that grows.

          
        
        
          04
          
            
### The buyer asks a question before they buy

            
Buyer-to-seller chat with attachments, alongside a threaded support ticket queue. On a maker marketplace this carries real commercial weight: custom requests, sizing questions and made-to-order arrangements all happen here, because there is no options-and-quote builder in the base platform.

          
        
        
          05
          
            
### One basket, several independent shops

            
A basket can hold items from several makers at once, each with shipping estimated per shop. Coupon, wallet credit and loyalty points stack on the same order, tax comes from the zone rules, and placement is guarded by an idempotency check.

          
        
        
          06
          
            
### Each maker is charged their own rate

            
Commission is taken from the seller wallet on completion at whatever rate applies to that seller - global, category, per-seller or per-product - and reversed automatically on refund. That granularity is what lets you sign a maker worth signing without repricing everybody else on the marketplace.

          
        
        
          07
          
            
### Many small payouts, on many different cycles

            
Withdrawal requests queue for approve, deny or mark-processed against each seller's saved payout details. On this model the payout queue is high-frequency and low-value rather than the reverse, and every movement pairs with an append-only history row so any balance can be re-derived rather than trusted.

          
        
      
      
Nine statuses carry the order from pending payment to delivered, with a delivery status per line so one maker shipping early does not misrepresent the rest of a multi-shop basket.

    
  

  
    
      
        Deliberate
        
## Every Feature Earns Its Place

        
Feature lists are cheap. These are the ones that exist because a specific thing goes wrong on a marketplace of many small sellers without them.

      
      
        
| Capability | Why it is not optional |
| --- | --- |
| Self-service registration with KYC | Because at a thousand sellers you cannot interview anyone, and a marketplace where an administrator creates each vendor by hand has a headcount ceiling on its own catalog growth. |
| Documents attached to the approval | Because approving a seller from an inbox means the evidence lives in someone's email. Attached to the decision, it is auditable a year later when it matters. |
| Commission set per seller | Because the maker you most want to sign is the one who will negotiate, and a single platform rate means every negotiation reprices your entire marketplace. |
| Listing caps on plans | Because on a maker model the natural upgrade trigger is wanting to list more, not wanting a better dashboard. Caps turn growth into revenue without adding a fee to anything that sells. |
| Bulk approve and reject | Because listings arrive faster than anyone reads them. A moderation queue you can only work one row at a time is not slow, it is a queue that never empties. |
| Full operator editing rights | Because a small seller's listing will be wrong in ways they cannot see, and asking them to fix it is slower and less reliable than fixing it. |
| Buyer-to-seller chat with attachments | Because custom and made-to-order work is negotiated, not configured, and without a channel for it those orders simply do not happen on your platform. |
| A basket across several shops | Because a buyer browsing makers will want two things from two sellers, and a one-seller-per-order model turns that into two checkouts and usually one sale. |
| A withdrawal queue built for frequency | Because small sellers withdraw often and in small amounts. A payout process designed for fifty monthly transfers breaks at a thousand weekly ones. |
| Append-only ledgers per actor | Because with many sellers on different rates and different cycles, a balance you can only read is a balance you cannot defend when one of them disputes it. |

      
      
None of these are exotic. They are the ten places where a marketplace built for fifty large sellers stops working when it has a thousand small ones instead.

    
  

  
    
      
        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.
        **Messaging**Buyer-to-seller chat with attachments and a threaded ticket queue, both in the core rather than bolted on, because on this model the conversation is part of the transaction.
        **Payments**Eleven gateways integrated, plus operator-defined offline methods and cash on delivery, with settlement records held per gateway and per currency.
      
      
        
### Why per-seller commission is a schema property, not a setting

        
Commission resolving at four levels - global, category, seller, product - means the rate applied to any given line is looked up rather than assumed, and that lookup has to exist in the data model from the beginning. Platforms that store one platform rate can add a per-seller override later, but every historical order, every reversed commission and every payout already computed used the old assumption. On a marketplace whose entire commercial strategy is signing individual makers on individual terms, that is not a feature you retrofit.

        
          **Laravel 12**PHP 8.2, nWidart modules
          **131**Normalized MySQL tables
          **4 levels**Commission resolution
          **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 names them rather than implying them away.

      
      
        
### Scoped separately, or yours to own

        
- **An options and quote builder**Named on the hub as scoped work, and it is the fashion-of-this-category caveat: on a maker marketplace, personalisation, made-to-order and custom pricing are common. The base build handles them through buyer-to-seller chat rather than through a configurator, which works and is not the same thing. If structured options are core to your model, scope this at the start.
- **iOS applications**Three Android builds ship. The Flutter projects compile for iOS, quoted as an add-on with signing and store submission.
- **Gateway credentials**Eleven gateways are integrated; each needs your own merchant account and its own approval.
- **SMS and email provider**Integration-required - your accounts, your sender reputation, your deliverability. With many sellers this carries more notification volume than a conventional marketplace.
- **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 per-call cost log. On a maker marketplace this is often the difference between a listing that ranks and one that does not.
- **Catalog data and seller recruitment**Products, imagery and the makers themselves are the business, and they are yours. The onboarding pipeline ships; the people walking through it do not.
- **Tax rates**Tax classes bind per zone, but the rates for your jurisdictions are yours to set and yours to keep current.
- **Seller tax handling**The platform computes tax on the order. Whether individual makers are separately registered, and what that obliges you to collect or report, is a question for your accountant rather than a switch in the console.
- **ISO 27001 and SOC 2**Neither certificate is held and neither is claimed. The platform is ready for the evidence gathering; certification is a separate programme.

      
      
The options builder is the one to weigh honestly. Chat covers custom work well enough for most maker marketplaces, and badly for any model where the buyer is expected to configure and price a product themselves.

    
  

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

          
The deployment process, two modelled reference deployments, and how to test self-service onboarding and per-seller commission before you hire anyone - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            How is this different from the Amazon Clone?
            Same platform, same price, different operating model on the page. The Amazon Clone is written for the general multi-vendor marketplace. This one is written for a marketplace of many small independent sellers, so it leads on self-service onboarding, commission set per seller, subscription tiers with listing limits, continuous moderation and buyer-to-seller chat. Choose by whether you expect fifty sellers or five thousand.
          
          
            Can sellers onboard without us doing anything?
            Almost. They register themselves with KYC and document upload, and then wait on an operator approval step with those documents attached to the decision. That is deliberate - at a thousand sellers you cannot interview anyone, so the pipeline has to hold quality without holding people up, but it should not let anyone list unreviewed either.
          
          
            Can I give one seller a different commission rate?
            Yes, and it is one of the main reasons to pick this over a general commerce script. Commission resolves at four levels - global, per category, per seller and per product - so you can sign a maker worth signing on their own terms without repricing everybody else on the marketplace.
          
        
        
          
            Is there a product options or quote builder?
            No, and the hub says so plainly. Custom requests, sizing questions and made-to-order arrangements are handled through buyer-to-seller chat with attachments rather than through a configurator. That works well for most maker marketplaces. If you need buyers to configure and price a product themselves, an options and quote builder is scoped and quoted separately, typically inside the two-to-eight week band.
          
          
            How do subscription plans work?
            Tiered packages carrying product-count limits, a reduced commission rate, featured placement and priority support, billed on a cycle with a trial and a grace period on failure. On this model the natural upgrade trigger is wanting to list more items, which turns catalog growth into revenue without adding a fee to anything that actually sells.
          
          
            Can a buyer order from two sellers at once?
            Yes. One basket spans several independent shops, with shipping estimated per shop and a delivery status per line, so one maker shipping early does not misrepresent the rest of the order. A one-seller-per-order model turns a two-shop basket into two checkouts, and in practice that means one sale.
          
        
      
    
  

  
    
    
      
        
## Onboard a seller in front of us, then reprice them alone

That is the demo worth asking for. Everything else on a maker marketplace follows from those two things working.

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

  
    
      
        Explore
        
## Explore the Etsy Clone

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

  
    
    
      
        
## Ready to launch a marketplace for independent makers?

        
Deploy in six days with self-service onboarding, commission set per seller, subscription tiers with listing caps, a moderation queue built for volume, and full Laravel 12 source on infrastructure you own.

        [Talk to Us →](/etsy-clone/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **August 21, 2026**
        
        
          Miracuves · Etsy Clone Solution
          Feature set and scoped add-ons cross-verified against the live hub, 2026-08-21
