---
title: YachtWorld Clone Features
description: 
url: https://miracuves.com/yachtworld-clone/features
date_modified: 2026-09-04
author: miracuves
language: en_US
---

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

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

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

  .mcv-ywf a.mcv-ywf-btn{ display:inline-flex; align-items:center; gap:8px; border-radius:12px; background:linear-gradient(160deg,#d81b46,#e6223f); 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-ywf a.mcv-ywf-btn:hover{ color:#fff; transform:translateY(-2px); box-shadow:0 14px 36px rgba(232,52,79,.42); text-decoration:none; }
  .mcv-ywf a.mcv-ywf-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-ywf a.mcv-ywf-btn-outline:hover{ background:#fff; color:#191419; text-decoration:none; }

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

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

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

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

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

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

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

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

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

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

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

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

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

.mcv-ywf-trustgrid{ grid-template-columns:repeat(3,1fr); }
@media (max-width:900px){ .mcv-ywf-trustgrid{ grid-template-columns:1fr 1fr; } }
@media (max-width:560px){ .mcv-ywf-trustgrid{ grid-template-columns:1fr; } }

    
    
      
        
          
            [Home](/)/[YachtWorld Clone](/yachtworld-clone/)/Features
          
          YachtWorld Clone · Features
          
# YachtWorld Clone Features: The Listing Is Not the Asset

          
In brokerage the same vessel is usually listed on several portals at once, so supply is not what separates you. What you actually own is the buyer relationship, the qualification data and the response discipline, and all three live in software. Here is what ships, grouped by who touches it, with every third-party account and deployment decision named against the feature rather than implied away.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[See Pricing](/yachtworld-clone/development-cost/)
          
            **203** API handlers
            **40+** vessel spec fields
            **6 days** to deploy
          
        
        
          The leadAn object, not an email
          
            What One Inquiry Actually Touches
            
              01Captured with guest contact context
              02Qualified by the LeadSmart answers
              03Staged on the broker kanban
              04Answered in inquiry-scoped threads
              05Enriched with a curated shortlist
              06Timed against a response metric
            
          
        
      
    
  

  
    
      
        203API Handlers Shipped
        40Relational Tables
        46Web Application Routes
        8Marine Service Modules
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Six working surfaces on one Express API and one PostgreSQL schema.

      
      
        
          01
          
### The Buyer

          
Keyword search across text, make and model, then range filters on price, year, length, beam, draft and engine hours, plus country, state and geospatial radius. Favourites, side-by-side compare, saved searches with named criteria, and daily or weekly alert emails when new matches land. Six display currencies and five UI locales.

        
        
          02
          
### The Private Seller

          
A sell-lead intake capturing the vessel, contact details and price expectation as structured fields rather than a contact-form message. Listing create, update and delete, ordered photo management with captions and a primary flag, a video tour URL that plays inside the gallery, and a printable specification sheet.

        
        
          03
          
### The Broker

          
A listing manager with photo and upgrade control, a kanban inquiry pipeline carrying status, stage and private notes, inquiry-scoped messaging with conversation summaries, and a response-time endpoint that turns first-reply speed from a habit into a number on the dashboard.

        
        
          04
          
### The Dealership

          
A dealer directory and detail page with slug, branding, bio, contacts, geography, specializations and languages. A CRM holding clients with email, phone, budget, status and private notes, curated listing shortlists attached per client, and dealer-association middleware gating every dealer route so leads reach the right desk.

        
        
          05
          
### The Service Desk

          
Eight adjacent marine modules with their own intake forms, reference codes and operator queues: sell leads, charter, insurance, transport, finance, surveyors, valuations and boat shows. Each captures structured intent and carries a status workflow rather than landing in a shared mailbox.

        
        
          06
          
### The Operator

          
User and dealer administration, listing moderation, plan CRUD with an activate toggle and subscriber counts, taxonomy control over boat types, categories, conditions and features, platform settings, articles and FAQs, support tickets and disputes with assignment and resolution, and all eight service queues in one console.

        
      
      
Five role claims sit in the JWT: guest, buyer, seller, dealer or broker, and admin. The service desk above is the operator console's second face rather than a sixth role, and all four authenticated roles have a working login in the live demo.

    
  

  
    
      
        Compare
        
## Clone vs Classifieds Script vs Building From Scratch

        
The parts that decide whether a marine marketplace survives its first dealer network.

      
      
        
| What decides it | Miracuves YachtWorld Clone | Generic classifieds script |
| --- | --- | --- |
| Time to a working platform | Six working days | Unknown, and largely do it yourself |
| Listing schema | 40+ vessel fields including draft, beam, engine hours and hull material | Title, price and a photo array |
| Search | Technical ranges and geospatial radius in one query path | Keyword and a category dropdown |
| After the inquiry arrives | A lead object with stage, notes, reply and a response timer | An email to whoever owns the inbox |
| Broker CRM | Clients with budgets, notes and curated shortlists per client | Not present |
| Price transparency | Append-only price history with price-drop badges | The current number, and nothing before it |
| Adjacent services | Eight intake modules with reference codes and operator queues | A contact page, if that |
| Operator console | Moderation, plans, taxonomy, settings, disputes and eight queues | Very basic, or missing entirely |
| Source code | Full ownership, no runtime licence, no per-seat fee | Often limited, sometimes encrypted |

      
      
YachtWorld itself is the reference for what this category looks like; it is not a product you can buy or self-host. The commercially useful comparison is the second column against the third, and against a custom build, which is covered on the [Development Cost](/yachtworld-clone/development-cost/) page.

    
  

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

        
One buyer, one vessel, from first search to under offer.

      
      
        Step 1
### Search and shortlist

The buyer filters on the criteria that actually matter for a vessel, saves a search with named JSON criteria, and sets an alert to daily or weekly. Distinct facet APIs for make, type and location serve the filter UI, so refining a filter does not force a full result recount.

        Step 2
### Compare and watch the price

Favourites and a side-by-side compare view on web and mobile, and on each listing an append-only price-history trail with price-drop badges. A price-drop-only toggle in search exists because on a seven-figure asset a reduction is the single strongest buying signal there is.

        Step 3
### Inquire, and get qualified

The inquiry is rate-limited, captures guest contact context, and carries a subject, message, source and intent. The buyer then answers the LeadSmart questionnaire, which is scored against a dealer-configurable intent threshold, so what arrives at the desk is a qualified lead rather than a name.

        Step 4
### Stage it and answer it

The lead lands on the broker kanban with status, stage and private notes. Replies happen in inquiry-scoped threads with sender identity, role, name and timestamp on every message, and a per-user server-sent event stream delivers it with a thirty-second heartbeat.

        Step 5
### Curate the alternatives

The broker attaches listings to the client record with their own notes, which is how a good broker actually works: the vessel the buyer asked about is rarely the one they buy. The client record holds budget and status, so the shortlist is built against a number rather than a guess.

        Step 6
### Under offer, then sold

Listing status moves through active, under offer and sold, with a sold price and date recorded. Those become the comparables behind market evaluation and the public market reports, which is what makes the next valuation conversation evidence-based rather than anecdotal.

        Step 7
### The services that follow

A vessel sale drags insurance, transport, finance and survey demand behind it whether or not you capture it. Each has its own intake form, reference code and operator queue, which turns adjacent demand into a recorded lead rather than a referral you never see again.

      
      
Web and mobile run the same flows against the same API, so an inquiry sent on a phone appears in the broker pipeline without a second integration.

    
  

  
    
      
        Justified
        
## Every Feature Earns Its Place

        
Each row is here because a brokerage stops working without it, not because a competitor lists it.

      
      
        
| Module | Why it is in the base build |
| --- | --- |
| Response-time endpoint | When the same vessel sits on four portals, the differentiator is who replies first with context. Measuring it per dealer makes an invisible habit manageable. |
| LeadSmart questionnaire | A brokerage gets few leads and cannot afford to treat them identically. A scored intent threshold tells a broker which conversation to have first. |
| Append-only price history | Buyers on a months-long decision watch the price. An immutable trail is both a buying trigger and the evidence behind a later valuation. |
| Curated shortlists per client | Brokers sell alternatives, not the listing that was clicked. Without this the substitution happens over WhatsApp and leaves no record. |
| Geospatial radius search | A vessel's location decides viewing cost and delivery. Radius has to combine with technical ranges in the same query or the filter is theatre. |
| Dealer-association middleware | A multi-office group needs leads routed to the right desk on day one, enforced on the server rather than hidden in the interface. |
| Eight service queues | Insurance, transport, finance and survey demand arrives with every sale. Captured, it is a second revenue line; uncaptured, it is a gift to a partner. |
| Plan and upgrade limits | Listing and featured limits held in plan feature JSON are what make a subscription tier mean something rather than being a price with no boundary. |

      
      
Everything above is white-label and can be enabled, disabled or re-labelled per deployment through plans, settings and taxonomy.

    
  

  
    
      
        Stack
        
## The Technology Behind the Features

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

      
      
        **API and data**An Express 5 API with 203 handlers across 35 registered route modules, over PostgreSQL with Drizzle ORM: 40 relational tables across 30 exported schema modules, JSONB for plan features, listing features and saved-search criteria, and parameterized queries throughout.
        **Web application**React and Vite with TypeScript across 46 routes grouped into public, auth, marketplace, service and dashboard surfaces, a Tailwind component library, skeletons, empty states and error boundaries, and SEO canonical, social metadata and JSON-LD on public pages.
        **One contract, two clients**The OpenAPI YAML is the single source for both clients. Orval generates the TanStack Query hooks for web and Zod schemas keep validation in step, with the mobile app carrying its own copy of the spec and generated client. The runtime stays authoritative and spec parity belongs in CI.
        **Mobile application**Expo and React Native with NativeWind, Expo Router tabs for Home, Search, Favourites, Messages and Account, plus listing, dealer, charter, boat-show, surveyor and valuation screens, role dashboards, JWT persistence via Expo SecureStore, and EAS development, preview and production profiles.
        **Security controls**Bcrypt hashing, bearer JWT with a seven-day expiry, role and dealer-association middleware, TOTP two-factor with enable, verify, disable and a login challenge, a global 100-per-15-minute IP limiter plus route-specific limits, Pino logging with query redaction, upload size and extension checks, and a GDPR JSON export.
        **Deployment**A multi-stage Docker image on Node 24 with pnpm, Compose publishing the app alongside Nginx, an Nginx reverse proxy with gzip, immutable static caching and baseline headers, and a PM2 fork configuration for operators who prefer a process manager to containers.
      
      
Thirty-five route modules each own their handlers and schema, and every integration point - payments, SMTP, VAPID, exchange rates, object storage - is a documented seam rather than a hard-coded provider.

    
  

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

        
Named here rather than discovered after the invoice.

      
      
        
          01
          
### Live card processing

          
Plan selection, billing-cycle records, checkout and cancellation are implemented, and the invoice history is a generated six-entry mock. Connecting Stripe, Adyen or another provider is a standard configuration step that we quote with your deployment, not a platform gap - but it is not live in the base build.

        
        
          02
          
### Some admin surfaces are presentation only

          
Only platform-settings round-trips are confirmed persistent. A small number of decorative admin controls are presentation only, and the six-month subscription amount trend is a modelled monthly-equivalent series rather than settled cash. The security handbook names each one individually.

        
        
          03
          
### Realtime is process-local

          
Server-sent events deliver typed inquiry and message events with a thirty-second heartbeat and disconnect cleanup. Delivery is process-local rather than a durable queue, so a second instance needs shared pub/sub before every user sees every event. Rate limiting is in-process at launch for the same reason.

        
        
          04
          
### Three integrations need your accounts

          
Search-alert emails need SMTP configured, Web Push fan-out needs VAPID keys, and the six display currencies are backed by a cached exchange-rate API whose provider you supply. Object storage and a CDN for listing media are the documented growth step rather than shipped modules.

        
        
          05
          
### The service modules facilitate only

          
Insurance, transport, finance, survey and valuation intake capture structured demand and route it to a queue. They do not bind insurance, approve credit, guarantee transport or certify surveys, and the platform never claims otherwise. Partner fulfilment workflows are scoped work.

        
        
          06
          
### What is built is real

          
203 handlers across 35 modules, 40 tables, 46 web routes, 40+ vessel specification fields, eight service modules with their own queues, six currencies, five locales, TOTP two-factor, GDPR export, append-only price history, and Docker, Nginx, PM2 and EAS deployment assets - all demonstrable in the live demo.

        
      
      
The developer and security handbook maps every control to the file that implements it and marks each as implemented or as a pre-launch hardening item. The named release gates are listed on the [Development Company](/yachtworld-clone/development-company/#platform-trust) page.

    
  

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

          
The deployment process, a modelled reference deployment for a brokerage group, the named release gates and the nine questions worth asking before you hire anyone - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            Is this a charter booking platform?
            Not primarily. This is a brokerage marketplace for buying and selling vessels, with dealer CRM and a lead pipeline at its centre. Charter is one of eight adjacent service modules and has its own catalogue and a date and party-size inquiry flow. If charter booking is your core business, the Dream Yacht Charter Clone or the GetMyBoat Clone is the closer fit and we will tell you so rather than sell you this.
          
          
            How does search handle technical yacht criteria?
            Range filters cover price, year, length, beam, draft and engine hours, alongside boat type, category, condition, make, fuel and hull material filters, country, state and geospatial radius, and price-drop, under-offer and with-video toggles. Distinct facet APIs for make, type and location serve the filter UI so refinement does not force a full recount.
          
          
            Can brokers manage their own inventory and leads?
            Yes. Dealers get a listing manager with photo and upgrade control, a kanban inquiry pipeline with status, stage and private notes, inquiry-scoped messaging, a CRM holding clients with budgets and notes, curated listing shortlists per client, LeadSmart review with a configurable intent threshold, listing optimizer scoring and a response-time endpoint.
          
        
        
          
            Is it multi-currency and multi-language?
            Six display currencies ship in the base build: USD, EUR, GBP, AUD, CAD and AED, backed by a cached exchange-rate API whose provider you configure. Five UI locale dictionaries ship: English, Spanish, French, German and Italian. Both are operator-configurable defaults rather than a per-deployment build.
          
          
            Does it work on mobile?
            Yes. The Expo React Native build uses Expo Router with tabs for Home, Search, Favourites, Messages and Account, plus listing, dealer, charter, boat-show, surveyor, valuation, compare and role-dashboard screens, all against the same API as the web app. EAS build profiles are included. The query cache is offline-tolerant for reads, not offline mutation sync, and app-store distribution needs your own developer accounts and signing.
          
          
            What are the eight marine service modules?
            Sell leads, charter, insurance, transport, finance, surveyors, valuations and boat shows. Each ships with a public intake form, a reference code where implemented, a status workflow and an operator queue in the admin console. They facilitate leads; they do not bind insurance, approve credit, guarantee transport or certify surveys.
          
        
      
    
  

  
    
    
      
        
## Open the demo rather than take our word

Every role has a working login and no setup is required. Search as a buyer, send an inquiry, then pick the same lead up in the broker workspace and watch it appear in the operator console.

        [Request a Live Demo](https://miracuves.com/schedule-consultation/)[Full Overview](/yachtworld-clone/)
      
    
  

  
    
      
        Explore
        
## Explore the YachtWorld Clone

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

  
    
    
      
        
## A brokerage platform, not a listing grid

        
Specification-rich listings, technical and geographic search, a lead object that survives being handed between people, a broker CRM and eight marine service queues, with the full source on infrastructure you own.

        [Talk to Us →](https://miracuves.com/schedule-consultation/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **September 3, 2026**
        
        
          Miracuves · YachtWorld Clone Solution
          Feature set, stack and stated limitations cross-verified against the hub, 2026-09-03
