---
title: Groww Clone Features
description: 
url: https://miracuves.com/groww-clone/features
date_modified: 2026-09-07
author: miracuves
language: en_US
---

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    
      
        
          
            [Home](/)/[Groww Clone](/groww-clone/)/Features
          
          Groww Clone · Features
          
# Groww Clone Features: Breadth Is the Product

          
Most investing platforms ship equities and quote everything else as a later phase, which is exactly when the highest-value users go elsewhere. Here one identity carries one KYC record, one set of wallets and one portfolio across fifteen asset classes. Below is everything that ships, grouped by who touches it, with every licence and third-party account named against the feature rather than implied away.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[See Pricing](/groww-clone/development-cost/)
          
            **15** asset classes
            **82** database entities
            **6 days** to deploy
          
        
        
          One portfolioFifteen asset classes
          
            What One Identity Actually Carries
            
              01One KYC record, seven states
              02Four wallet types, one ledger
              03One order model, twelve instruments
              04One portfolio, one allocation view
              05SIP, STP and SWP on top of it
              06One audit row per operator action
            
          
        
      
    
  

  
    
      
        82Database Entities
        55Backend Modules
        119Mobile Screens
        167API Route Handlers
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Six people use this platform differently. All six read the same 82 entity schema.

      
      
        
          01
          
### The New Investor

          
Registration, a KYC wizard with document upload, and a funded wallet before the first order. Then an academy with course progress tracking and thirteen calculators on both web and mobile, so the education sits inside the product rather than on a separate blog nobody reads.

        
        
          02
          
### The Long-Term Investor

          
Instrument search spanning Indian equities, US symbols and funds, detail pages carrying NAV, expense ratio, exit load and benchmark, then holdings and a portfolio analytics view with CAGR, XIRR, a risk score and asset and sector allocation held as structured data rather than a rendered chart.

        
        
          03
          
### The Active Trader

          
Four order types across five product types and four validity modes on five exchanges, with a seven state lifecycle carrying partial fills and preserved rejection reasons. Charges for brokerage, STT, GST and transaction fees are computed server-side and shown before confirmation, never taken from the client.

        
        
          04
          
### The Systematic Investor

          
SIP, STP and SWP as three separate entities rather than variants of one, with daily through quarterly cadence, a step-up percentage, a top-up amount and auto-invest on dividend. Goals track a target amount and date and link to the plans funding them, and tax P&L splits realized gains short and long term with harvesting suggestions.

        
        
          05
          
### The KYC Desk

          
A seven state lifecycle across individual, corporate and NRI records, six document types each carrying a SHA-256 checksum, a PEP flag, a risk category and a verification level. Operators approve or reject with a stored reason, and every decision writes an audit row with before and after values.

        
        
          06
          
### The Operator

          
Ten console pages covering platform stats, an activity feed, user management, the KYC desk, order inspection with status override, the support ticket queue, analytics, the audit log viewer, runtime feature flags, security policies and system health, plus a mode subsystem that switches the whole deployment between demo and production.

        
      
      
Admin authentication is held apart from the retail JWT, so a compromised customer credential grants no operator access. The F&O terminal and the operator console are deliberately web-first; the mobile app carries 119 screens of everything else.

    
  

  
    
      
        Compare
        
## Clone vs Generic Script vs Building From Scratch

        
Most routes to an investing platform hold up until the second asset class.

      
      
        
| What decides it | Miracuves Groww Clone | Generic investing script |
| --- | --- | --- |
| Time to a working platform | Six working days | Unknown, and largely do it yourself |
| Asset classes in the schema | Fifteen, each with its own typed entity | Equities, and a roadmap for the rest |
| Adding the second asset class | A new entity and a seeder, behind a feature flag | A parallel stack nobody can reconcile |
| Orders across instruments | One model, polymorphic keys, twelve instrument types | One table per product, joined by hand |
| The wealth layer | SIP, STP and SWP as first-class entities at launch | Quoted as phase two, and usually never built |
| KYC and audit | Seven states, checksummed documents, audit on every mutation | Scripts, and no reviewable trail |
| Operator console | Ten pages, separate auth, runtime feature flags | A database client and a developer on call |
| Source code | Full ownership, no runtime licence, no per-seat fee | Often limited, sometimes encrypted |

      
      
Groww 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](/groww-clone/development-cost/) page.

    
  

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

        
Every step below is enforced in the service layer rather than in the client, which is what makes the sequence auditable afterwards.

      
      
        Step 1
### Register and verify

Signup creates one user record that everything else hangs from. Passwords are hashed with bcrypt on a column that is not selectable, and access and refresh tokens are issued on separate secrets with rotation, so a leaked access token does not extend into a session.

        Step 2
### KYC submitted, then reviewed

The applicant uploads six document types, each stored with a SHA-256 checksum, and the record enters a seven state lifecycle typed for individual, corporate or NRI. An operator approves or rejects it with a reason in the console, and that decision writes an audit row a compliance officer can read back later.

        Step 3
### Wallet funded

Four wallet types carry blocked and available balances alongside margin used and margin available. Payment is verified server-side before any wallet is credited, and refunds store the gateway response rather than a status flag, so a disputed transaction has evidence behind it.

        Step 4
### The first order

One order model reaches twelve instrument types through polymorphic keys plus a type discriminator. Brokerage, STT, GST and transaction charges are computed on the server and shown in the ticket before confirmation, and the order moves through seven states carrying partial fills and any rejection reason.

        Step 5
### The portfolio forms

The filled order becomes a holding, and the holding appears in the same allocation view as every other asset class the user owns. Multiple portfolios per user are supported, each carrying CAGR, XIRR, a risk score, day change, holdings count and asset and sector allocation as structured JSON.

        Step 6
### Systematic plans compound

A SIP is created with a cadence, a step-up percentage and a top-up amount, and a goal is linked to the plan funding it. Installments settle through the Bull queue path rather than in the request cycle, which is why enabling the queue workers is part of deployment rather than an optional extra.

        Step 7
### Tax at the other end

Realized profit and loss splits short and long term, a harvesting suggestion engine runs against it, and dividends and corporate actions are tracked so holdings reconciliation stays correct across the year. This is the surface most platforms leave until an accountant asks for it.

      
      
The same sequence runs on web and on the React Native app against one API, and the platform mode subsystem lets an operator run the whole flow in demo mode without touching production data.

    
  

  
    
      
        Justified
        
## Every Feature Earns Its Place

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

      
      
        
| Module | Why it is in the base build |
| --- | --- |
| Polymorphic instrument keys | Orders, holdings and watchlists carry nullable per-asset foreign keys plus a type discriminator, so a new asset class is an entity and a seeder rather than a second stack to reconcile. |
| Server-side charge computation | Brokerage, STT and GST calculated on the client can be tampered with and cannot be defended in an audit. Computing them server-side is the difference between a demo and a product. |
| SIP, STP and SWP as separate entities | They have genuinely different lifecycles. Modelling them as one entity with a mode flag is the shortcut that makes the wealth layer impossible to extend later. |
| Seven state KYC with checksums | Identity proofing and record retention are asked about first now, not last, and they are expensive to retrofit into a schema that was not designed for them. |
| Audit row on every mutation | Before and after values on operator actions are what a compliance review actually examines. A log line saying an approval happened is not the same artifact. |
| Runtime feature flags | Launching with two asset classes and widening as licensing allows only works if switching one on is a toggle rather than a release. |
| Per-plan features JSON | Five plans across four billing cycles gated by JSON means moving a feature between tiers is configuration, so packaging can be tested without engineering time. |
| Queue-backed settlement | Systematic plan installments and news ingestion are write bursts. Running them through Bull producers keeps them from contending with interactive traffic at market open. |

      
      
Underneath sit 15 database seeders for catalogs and demo data, 11 queue producer services and 5 scheduled jobs including the market data provider refresh.

    
  

  
    
      
        Stack
        
## The Technology Behind the Features

        
One language end to end, on frameworks any team can hire for, with nothing proprietary to unwind.

      
      
        **Web application**Next.js 16 with React 19, Tailwind and Radix across 41 dashboard route domains and more than 100 pages, 53 component domains including a motion library, TanStack Query for server state and Zustand for client state, delivered as a PWA with an offline page, i18n locales and both dark and light themes.
        **API layer**A NestJS 11 core of 55 modules, 52 of them domain modules, behind 167 backend-for-frontend handlers with Zod validation. Passport JWT with guards for tokens, roles and API keys, Swagger and OpenAPI decorators throughout, and an admin cookie session held apart from the retail JWT.
        **Database**PostgreSQL under TypeORM 0.3 with 82 entities carrying jsonb metadata extension columns, polymorphic instrument keys on orders, holdings and watchlists, indexed hot paths on user and status, symbol and status and creation date, plus a migration runner and 15 seeders.
        **Mobile application**React Native 0.73 with Expo Router: 119 screens plus 15 router routes, biometric unlock, MMKV secure storage, Firebase analytics and messaging, NetInfo offline detection, EAS build profiles for both platforms and home-screen widgets. It is a real application, not a web wrapper.
        **Realtime and async**A Socket.io gateway fanning out market ticks, order updates and notifications, with Bull and Redis behind 11 queue producer services gated by an environment flag, and 5 scheduled jobs. Systematic plan installments settle through the queue path rather than in the request cycle.
        **Deployment and observability**Docker Compose for development and production, an nginx reverse proxy, a PM2 process configuration, four GitHub Actions workflows and a validation script, a Prometheus scrape configuration with four Grafana dashboards, health endpoints and a synthetic monitor, plus deploy, rollback and backup scripts.
      
      
Every integration sits behind a service interface rather than inside a domain module. Razorpay and Stripe gateways, two market data providers and an FCM push provider all ship against those interfaces, which is what makes adding a broker venue an adapter rather than a rewrite.

    
  

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

        
Named here rather than discovered after the invoice.

      
      
        
          01
          
### No connection to a live venue

          
The order engine is complete and the lifecycle carries a broker reference and an exchange order id, expecting fills from a connector. What is not included is the connector itself, so wiring an actual broker is an integration per venue. Paper trading works out of the box through the demo flag, which is also what makes the sales demo safe to hand a prospect.

        
        
          02
          
### Market data licensing is yours

          
Provider adapters ship against a service interface, but exchange and vendor data licensing is a commercial arrangement between you and the vendor. The same applies to US equities: the catalog, quotes, charts and a dedicated portfolio type are built, and live US execution is an integration rather than a shipped connection.

        
        
          03
          
### Price alerts evaluate two conditions

          
Above and below, and only those. The richer condition set in the schema covering volume spikes, RSI, moving-average crossovers and news keywords is a schema capability rather than a shipped evaluator, and building it is scoped work. We call this out because the words "price alerts" usually carry more than they should.

        
        
          04
          
### Two-factor is not enabled

          
The TOTP libraries ship but the enable endpoint is not implemented, so two-factor authentication is not available to users as delivered. Enforced multi-factor for admin roles, SIEM integration and hard row-level multi-tenancy are likewise scoped rather than shipped. All four are named in the security handbook.

        
        
          05
          
### Licensing is not software

          
Miracuves supplies platform software, not broker registration. Exchange membership, broker licensing and your KYC and AML obligations remain yours as the operator. What the platform provides is the control fabric those licences are examined against, so a review has artifacts to look at rather than a promise.

        
        
          06
          
### What is built is real

          
82 entities, 55 backend modules, 167 route handlers, 119 mobile screens, fifteen asset classes with their own typed entities, four order types across five product types, a seven state KYC lifecycle, four wallet types, thirteen calculators, five subscription plans across four billing cycles, and a ten page operator console with an audit row on every mutation.

        
      
      
Production payment keys, SMTP, a Firebase project for push and the queue workers all need your own accounts or configuration before launch day. The full list sits on the [Development Company](/groww-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 multi-asset launch, the security items to close before go-live, and the nine questions worth asking before you hire anyone - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            How is this different from your Zerodha Clone?
            They are genuinely different platforms rather than two presentations of one codebase. The Zerodha Clone is about execution depth: multi-broker order routing, an algo engine and consolidated profit and loss across broker connections, built for trading-first businesses and prop desks. This one is about breadth: fifteen asset classes in one portfolio plus the wealth layer of systematic plans, goals and tax tooling. Pick that one if your differentiator is how a trade gets executed, and this one if it is how much of a customer you can hold.
          
          
            Which asset classes are actually included?
            Indian equities on NSE and BSE, US equities on NYSE and NASDAQ, mutual funds, ETFs, index funds, IPOs with grey market premium and allotment, futures and options, intraday and the margin trading facility, commodities on MCX, currency pairs, bonds, fixed deposits, digital gold and SGBs, REITs and P2P. Each has its own entity with typed fields, and orders, holdings and watchlists reach all of them through polymorphic keys.
          
          
            Can it trade live, or is it a demo?
            The order engine is complete: four order types across five product types and four validity modes on five exchanges, a seven state lifecycle with partial fills and preserved rejection reasons, and server-side charge computation. What is not included is the connection to a live venue. The lifecycle carries a broker reference and an exchange order id and expects fills from a connector, so wiring a broker is an integration per venue rather than a rearchitecture.
          
        
        
          
            Does it handle SIPs, goals and tax properly?
            Yes, and it is the part we would point at first. SIP, STP and SWP are three separate entities carrying daily through quarterly frequencies, step-up percentages, top-up amounts and auto-invest on dividend, with a full scheduled through completed lifecycle. Goals track a target amount and date against progress and link to the plans funding them. Tax gives realized profit and loss with short and long term splits plus harvesting suggestions, and dividends and corporate actions are tracked so reconciliation stays correct.
          
          
            What does the mobile app actually cover?
            A React Native application of 119 screens plus 15 Expo Router routes, not a web wrapper. It carries auth with biometric unlock, the dashboard, market and instrument screens, orders, holdings with analytics, watchlist, wallet, KYC status, alerts, news, IPO, SIP creation, all thirteen calculators, the alternatives stack, research screens and market intelligence. Home-screen widgets, Firebase messaging, MMKV storage and offline detection ship with it. The F&O terminal and the admin console are deliberately web-first.
          
          
            What can the operator do without a developer?
            Ten console pages cover the daily loop: platform stats and an activity feed, user management with status changes, the KYC review desk with approve and reject reasons, order inspection and status override, the support ticket queue, analytics, the audit log viewer, feature flags, security policies and system health. On top sits the platform mode subsystem, which switches the deployment between demo and production with mode history, readiness checks and a demo data reset.
          
        
      
    
  

  
    
    
      
        
## Run the breadth demo, not the feature reel

Search an instrument, add it to a watchlist, place an order with the charges visible, then open the portfolio and watch the same position land in the allocation view alongside every other asset class.

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

  
    
      
        Explore
        
## Explore the Groww Clone

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

  
    
    
      
        
## One identity. Fifteen asset classes. One portfolio.

        
A Next.js web application, a 119 screen React Native app and a ten page operator console on one 82 entity PostgreSQL core, 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 7, 2026**
        
        
          Miracuves · Groww Clone Solution
          Feature set, stack and stated limitations cross-verified against the hub, 2026-09-07
        
      
    
  

				
				
				
				
						
					
			
						
				
					
  /* 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 **Groww**.

        
          
            Why this name
            
“**Groww** Clone” is used descriptively. It is how the software industry refers to building a platform with functionality similar to Groww, 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 Groww website or applications.

          
          
            Trademarks
            
**Groww** 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/)
