---
title: WhatsApp Clone Features
description: 
url: https://miracuves.com/whatsapp-clone/features
date_modified: 2026-09-11
author: miracuves
language: en_US
---

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    
      
        
          
            [Home](/)/[WhatsApp Clone](/whatsapp-clone/)/Features
          
          WhatsApp Clone · Features
          
# WhatsApp Clone Features: Everything People Expect, Plus What an Operator Needs

          
Users judge a messenger on whether the ticks turn blue and whether the call connects. Operators judge it on the day somebody has to be removed. This build ships both halves: one-to-one and group chat with end-to-end encryption, voice and video that connect device to device, stories, polls and twelve message types, and behind them a console with moderation queues, sixteen languages and branding a non-technical person can change.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[Full Overview](/whatsapp-clone/)
          
            **4** surfaces, one API
            **Calls** that never meter
            **6 days** to deploy
          
        
        
          A million minutesCosts the same as none
          
            What Ships in the Conversation
            
              01Text, with ticks and typing
              02Photos, video, voice notes
              03Documents, GIFs, location
              04Replies, reactions, polls
              05Voice and video calling
              06Stories that actually expire
            
          
        
      
    
  

  
    
      
        16Languages, Translated
        4Apps Included
        12Message Types
        15Dashboard Metrics
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Four surfaces over one Node.js API, so nothing drifts between the phone, the desk and the console.

      
      
        
          01
          
### The Person Chatting

          
Sign in with a phone number and a one-time code, sync the contacts already on the phone, and start talking. Delivered and read ticks, typing indicators, online status and last-seen, search back through a conversation for something from last month, and a story tray across the top of the chat list.

        
        
          02
          
### The Group

          
A name, a photo and a member list, with admins you promote and members you remove. Public groups people can find and join, a size limit you set rather than one imposed on you, replies into a busy thread, emoji reactions, and polls whose votes update live while the group watches.

        
        
          03
          
### The Caller

          
Voice or video, one-to-one or group, with a proper incoming-call screen and a ringtone that works with the app closed. Every call is logged as missed, accepted or declined with its duration, and the history filters by missed, audio or video.

        
        
          04
          
### The Person at a Desk

          
The browser client is not a cut-down version. Same conversations, same calls, same stories, same settings, and one account can hold several live connections at once, so a message reaches the phone and the browser together and reading it on one clears it on the other.

        
        
          05
          
### The Moderator

          
Reported users and reported groups as two queues rather than an inbox, each report showing who filed it, who it names, the reason chosen and the conversation it came from. Block a person or a whole group, and a record of which accounts have already been reviewed so two moderators do not duplicate the work.

        
        
          06
          
### The Operator

          
Fifteen live dashboard figures, who is online right now and in the last thirty minutes, the mobile and web split, and which sign-in method people actually used, which is how you learn whether to keep paying for SMS. Plus branding, languages and your integration keys, all as forms.

        
      
      
Operators sign in with their own credentials on a separate privilege tier from any user account, so console access is never a flag on somebody's messaging profile.

    
  

  
    
      
        Compare
        
## Clone vs Generic Script vs Renting a Consumer App

        
Most routes to a messaging platform hold up until the first serious incident, or the first invoice.

      
      
        
| What decides it | Miracuves WhatsApp Clone | A group on a consumer app |
| --- | --- | --- |
| Who is active this week | Fifteen live figures on a dashboard | Nobody knows, and nobody can find out |
| Removing someone properly | Block the account, or the whole group | They rejoin from a second number |
| Group size | A limit you set yourself | A cap somebody else chose |
| Whose name is on it | Yours, changed from a console form | Theirs, permanently |
| Voice and video cost | Device to device, so volume is free | Free until the terms change |
| Where the data lives | Your database, your jurisdiction | Somebody else's, under their policy |
| Adding a language | Console task, no resubmission | Whatever they have translated |
| Source code | Yours outright, no revenue share | None, and no export worth having |

      
      
WhatsApp itself is the reference for what people expect a messenger to do; it is not a product you can buy or self-host. The comparison that matters commercially is the second column against the third, and against a custom build, which is covered on the [Development Cost](/whatsapp-clone/development-cost/) page.

    
  

  
    
      
        End to End
        
## From a Phone Number to a Moderated Community

        
Seven stages, each one a real part of the build rather than an idealised flow.

      
      
        Step 1
### They sign in with a number

A phone number and a one-time code, or email, or Apple, Google and Facebook. There is no user password anywhere in the system, which means there is no password database to steal, and the choice of method is a console setting rather than a build decision.

        Step 2
### They find the people they know

Contact sync shows which of the numbers already on the phone are on your platform, they can save their own name for someone regardless of what that person calls themselves, and they can search for people who are not in the address book at all.

        Step 3
### The first conversation happens

Messages arrive over a persistent socket rather than by polling, so delivery, typing indicators, presence and read receipts are events rather than refreshes. The content is end-to-end encrypted, which means it is unreadable in transit and sits in your own database as ciphertext.

        Step 4
### Media goes in the same pipe

Photos and video from camera or gallery, voice notes recorded in the app, documents, GIFs, a location pin and a contact card. Video is compressed and thumbnailed on the phone before upload, so sending stays quick on a poor connection rather than only on a good one.

        Step 5
### A group forms and gets admins

One-to-one chats and groups are the same object with a flag, so delivery, permissions, moderation and retention behave identically for both. Nothing had to be built twice, and nothing behaves unexpectedly in a group because somebody forgot a case.

        Step 6
### Somebody calls, and it does not cost you

Voice and video connect directly between the two devices over WebRTC, with a relay server taking over only for the minority of calls where a restrictive network blocks the direct route. Call setup is signalled over the same real-time connection that carries messages.

        Step 7
### Somebody behaves badly, and you can act

A report arrives in the right queue carrying the reason chosen from a list you wrote, who filed it and the conversation it came from. You block the account or the whole group, and the review state is recorded so the next moderator does not start again from the beginning.

      
      
An hourly scheduled job removes stories past twenty-four hours and pins that have reached their expiry, so ephemeral content genuinely disappears rather than accumulating quietly in the database for years.

    
  

  
    
      
        Justified
        
## Every Feature Earns Its Place

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

      
      
        
| Module | Why it is in the base build |
| --- | --- |
| Calls that connect device to device | A messenger wired to a third-party calling vendor gets more expensive precisely as it gets more successful. WebRTC with a relay only for blocked routes means a million minutes of conversation costs what none of them did. |
| One object for chats and groups | Building a group as a separate thing from a conversation means writing delivery, permissions, moderation and retention twice, and then discovering next year that a group behaves differently in one of the four. |
| Your actions stored against you | Starring, pinning, archiving, clearing and delete-for-me belong to the person who did them rather than to the message. It is why you can clear a conversation without erasing it for the person you were talking to. |
| Presence held in the database | Live connections and typing state written to the database rather than kept in one server's memory is what makes growing onto several servers an adapter and a load balancer rather than a redesign. |
| Relative media paths | Uploads stored as relative paths and turned into full URLs on read mean moving domain, or moving media onto object storage later, does not require rewriting every existing row. |
| Report reasons you write | The categories people can choose when reporting decide whether a queue is useful or noise. Writing them yourself, separately for users and groups, is what makes moderation match what actually goes wrong on your platform. |
| Review state on the record | Moderation is a team activity under pressure. Recording which accounts have already been looked at is a small thing that stops two people working the same report and missing the next one. |
| Scheduled expiry | Ephemeral features are a promise to your users. An hourly job that actually removes expired stories and pins is the difference between content disappearing and content being hidden from view while it accumulates. |

      
      
Sixteen languages ship already translated with right-to-left handled properly, and a translation engine in the console lets you add the seventeenth without an app-store resubmission.

    
  

  
    
      
        Stack
        
## The Technology Behind the Features

        
Deliberately ordinary, so any competent Node and Flutter team can take it forward without us.

      
      
        **API and application core**Node.js and Express on MySQL with Sequelize, serving one JSON API to all four clients across three privilege tiers: public, signed-in user and operator. Every database call goes through an ORM that parameterizes queries, and the whole thing runs under PM2 for restarts, clustering across cores and log handling.
        **The real-time layer**Socket.IO holding persistent connections rather than polling for new messages, with several live connections per account so a phone and a browser both receive. Typing indicators, presence and read receipts are events, and the connection registry lives in the database ready for multi-server scaling.
        **Mobile applications**One Flutter codebase producing both the iPhone and Android builds, so a feature lands on both at once instead of one waiting on the other. Conversations are cached on the device so the app opens instantly and stays readable through a dead spot, with camera, gallery, voice recording and contact access wired in.
        **Calling**WebRTC connecting voice and video directly between devices, with a relay server taking over when a restrictive network blocks the direct route. Call setup is signalled over the same socket that carries messaging, and every call is recorded as missed, accepted or declined with its duration.
        **Data and media**MySQL across nine data domains, from identity and conversations through to moderation and settings. Uploads are sorted into folders by type with filenames sanitized on the way in, media paths are stored relative, and an hourly scheduled job clears expired stories and pins.
        **The operator console**A React application on its own credentials and its own privilege tier, carrying sixteen interface locales itself rather than only in the apps, with analytics calculated from the live database rather than a separate pipeline and integration secrets shown masked so an operator manages keys without reading them.
      
      
A single Node.js application owns every rule and the four clients are presentation layers over one API. One deploy, one schema, one set of rules, which is what stops four surfaces drifting apart over a year of changes.

    
  

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

        
None of these are gaps. Each is a decision about what belongs in a platform and what belongs to the operator running it.

      
      
        
          01
          
### Encryption ships, key recovery does not

          
End-to-end encrypted messaging is delivered with the platform. What sits outside it is the operational layer around the keys: encrypted chat backup and restore across a device change, and a recovery path for somebody who loses their phone. Both are scoped work, and both matter more the more your users rely on you.

        
        
          02
          
### No payments or subscription billing

          
A messenger does not need one, and the right provider depends entirely on your market. If you intend to charge for access, run paid tiers or move money between users, that is an integration quoted against your market rather than a switch somewhere in the console.

        
        
          03
          
### The pre-launch hardening pass

          
TLS termination, global rate limiting, upload size and type restrictions, secret vaulting, security headers, restricting who can reach the operator console, and a backup restore that has actually been tested. Scoped work we complete with you before the platform faces the public.

        
        
          04
          
### Enterprise sign-on

          
Phone, email and social sign-in all ship. Corporate single sign-on, directory synchronization and automated account provisioning and deprovisioning are what an internal enterprise rollout usually needs on top, and they are scoped rather than assumed.

        
        
          05
          
### Four things you grow into

          
Wiring a real-time adapter so several application servers fan messages between themselves, moving media onto object storage with signed URLs and a CDN, append-only audit logging forwarded into a SIEM, and outbound webhooks for bots and integrations. The groundwork for the first two is already in the build.

        
        
          06
          
### What is built is real

          
Four surfaces over one API, end-to-end encrypted messaging, WebRTC calling with relay fallback, twelve message types, stories with genuine expiry, moderation queues for users and groups, sixteen translated languages with right-to-left, fifteen dashboard metrics, and a documented security posture with a VAPT compliance reference.

        
      
      
The documentation set that comes with it is written for your engineers rather than for us: product requirements, the data model, an API reference, a developer and security handbook, and the compliance reference above.

    
  

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

          
The deployment process, the nine questions worth asking anyone bidding on a messaging build, the red flags, and a modelled reference deployment - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            Do voice and video calls cost me anything?
            Almost nothing, and this is the single most consequential property of the build. Calls connect directly between the two devices over WebRTC, so the audio and video never travel through your servers and a busy calling day consumes bandwidth you never paid for. A relay server carries only the minority of calls where a restrictive network blocks the direct route. Products built on a third-party calling vendor charge per minute forever, which quietly makes your success expensive.
          
          
            Is the messaging actually end-to-end encrypted?
            Yes, and it is part of what we deliver rather than a premium module quoted once you are committed. Message content is unreadable in transit and sits in your own database as ciphertext, so a database dump does not hand somebody the conversations. Call media is encrypted by the WebRTC stack as standard. What is not included is the operational layer around the keys, meaning encrypted chat backup across a device change and a recovery path for a lost phone, and both are named as scoped work rather than implied.
          
          
            What can I actually change without a developer?
            Your app and website name, primary and secondary colours, light and dark logos, favicon, banner, copyright line and store links. Your privacy policy and terms links. Which languages are available and which one new users get by default, plus translating the interface key by key from the console. The chat wallpapers, default avatars, ringtones and alert sounds your users can choose from. Your report reasons. Your group size limit. Your SMS, push, maps and email credentials, entered once and shown masked.
          
        
        
          
            Can somebody be signed in on their phone and a computer at once?
            Yes, and the behaviour is the part worth checking on any messaging build. One account can hold several live connections, so a message reaches the phone and the browser together rather than arriving on one and sitting unread on the other all day. Reading it on either updates both. The browser client is a full client too, with the same conversations, calls, stories and settings rather than a cut-down view for people who happen to be at a desk.
          
          
            What happens when the connection drops?
            The mobile app keeps conversations cached on the device, so it opens instantly rather than showing a spinner, and stays readable through a dead spot. When the connection returns it catches up. That matters more than it sounds: the difference between a messenger people trust and one they abandon is usually how it behaves on a train rather than how it behaves on a demo.
          
          
            How many languages does it ship with?
            Sixteen, already translated rather than sixteen empty language files waiting for you: Arabic, Danish, German, Greek, English, Spanish, French, Hungarian, Italian, Japanese, Polish, Portuguese, Russian, Swedish, Turkish and Chinese, with right-to-left layouts handled properly. Adding the seventeenth is a console task using the translation tool built into it, and changing wording never requires an app-store resubmission because the strings are data rather than code.
          
        
      
    
  

  
    
    
      
        
## Open two accounts and message between them

Messaging only proves itself with two people in the conversation. Open one account in your browser and the second in a private window, then watch the ticks and the typing indicator.

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

  
    
      
        Explore
        
## Explore the WhatsApp Clone

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

  
    
    
      
        
## Four surfaces. One API. Your name on all of it.

        
iPhone, Android, browser and an operator console over one Node.js application, with the branding, the languages, the limits and the rules all held as configuration you control.

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

				
				
				
				
						
					
			
						
				
					
  /* MIRACUVES - TRADEMARK / NON-AFFILIATION NOTICE (v3).
     Scoped under .mcv-tmn so it cannot collide with the hub connector (mcv-hubx-, mcv-hubxa-)
     or any block above it. Always the last block on the page, immediately before the footer.
     Structure is deliberate: one plain-language lead people actually read, then the three
     supporting positions split out so each is scannable rather than buried in a paragraph.
     Fonts are declared but not loaded: pages carrying the connector already have them, and the
     fallbacks are deliberate so this block never adds a render-blocking request. */
  .mcv-tmn{ font-family:'Plus Jakarta Sans',Arial,sans-serif; color:#191419; margin:0; padding:0; }
  .mcv-tmn *{ box-sizing:border-box; }
  .mcv-tmn-band{ background:#ffffff; padding:8px 0 76px; }
  .mcv-tmn-wrap{ max-width:1180px; margin:0 auto; padding:0 24px; }
  .mcv-tmn-box{ background:#faf8f8; border:1px solid rgba(11,11,16,0.13); border-left:4px solid #a70d2a; border-radius:12px; padding:34px 38px; box-shadow:0 1px 2px rgba(25,20,25,0.04), 0 10px 30px rgba(25,20,25,0.05); }
  .mcv-tmn-head{ display:flex; align-items:center; gap:11px; margin:0 0 18px; }
  .mcv-tmn-dot{ width:8px; height:8px; background:#a70d2a; transform:rotate(45deg); flex:0 0 auto; }
  .mcv-tmn .mcv-tmn-head span.mcv-tmn-kicker{ font-family:'JetBrains Mono',ui-monospace,monospace; font-size:13px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; color:#a70d2a; }
  .mcv-tmn .mcv-tmn-box p.mcv-tmn-lead{ margin:0 0 24px; font-size:20px; line-height:1.5; font-weight:600; color:#191419; max-width:56ch; letter-spacing:-.01em; }
  .mcv-tmn .mcv-tmn-box b.mcv-tmn-brand{ color:#a70d2a; font-weight:700; }
  .mcv-tmn-cols{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px 36px; padding-top:24px; border-top:1px solid rgba(11,11,16,0.11); }
  .mcv-tmn .mcv-tmn-col span.mcv-tmn-lbl{ display:block; font-family:'JetBrains Mono',ui-monospace,monospace; font-size:10.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:#8a8085; margin:0 0 8px; }
  .mcv-tmn .mcv-tmn-col p{ margin:0; font-size:14px; line-height:1.7; color:#453d42; }
  .mcv-tmn-foot{ margin-top:26px; padding-top:18px; border-top:1px solid rgba(11,11,16,0.11); }
  .mcv-tmn .mcv-tmn-foot a{ font-family:'JetBrains Mono',ui-monospace,monospace; font-size:12px; font-weight:600; letter-spacing:.04em; color:#a70d2a; text-decoration:none; border-bottom:1px solid rgba(167,13,42,0.32); }
  .mcv-tmn .mcv-tmn-foot a:hover{ border-bottom-color:#a70d2a; }
  @media (max-width:900px){
    .mcv-tmn-cols{ grid-template-columns:1fr; gap:22px; }
    .mcv-tmn .mcv-tmn-box p.mcv-tmn-lead{ font-size:18px; }
  }
  @media (max-width:600px){
    .mcv-tmn-band{ padding:4px 0 48px; }
    .mcv-tmn-box{ padding:26px 22px; border-radius:10px; border-left-width:3px; }
    .mcv-tmn .mcv-tmn-box p.mcv-tmn-lead{ font-size:17px; line-height:1.45; margin-bottom:20px; }
    .mcv-tmn .mcv-tmn-head span.mcv-tmn-kicker{ font-size:12px; letter-spacing:.16em; }
  }

  
    
      
        Disclaimer
        
Miracuves is an independent software development company. We are not affiliated with, connected to, sponsored by, or endorsed by **WhatsApp**.

        
          
            Why this name
            
“**WhatsApp** Clone” is used descriptively. It is how the software industry refers to building a platform with functionality similar to WhatsApp, and how clients search for it.

          
          
            Who built this
            
The entire design and codebase is built by our own team. The product contains no code, design, graphics, or content originating from the WhatsApp website or applications.

          
          
            Trademarks
            
**WhatsApp** and all other third-party names and marks are the property of their respective owners, referenced here solely to describe the category of software offered.

          
        
        [Read our full Legal Notice & Disclaimer →](/disclaimer/)
