---
title: Zomato Clone Features
description: 
url: https://miracuves.com/zomato-clone/features
date_modified: 2026-09-10
author: miracuves
language: en_US
---

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    
      
        
          
            [Home](/)/[Zomato Clone](/zomato-clone/)/Features
          
          Zomato Clone · Features
          
# Zomato Clone Features: Most Visitors Browse, and the Build Knows It

          
A discovery platform is not an ordering app with a search box on the front. The majority of its traffic will never place an order, and that changes what has to be fast, what has to be indexable and what has to be true. Thirty-three server-rendered routes, a taxonomy held as data rather than constants, ratings tied to orders that actually happened, and a home feed that is yours to arrange and sell.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[Full Overview](/zomato-clone/)
          
            **33** crawlable routes
            **Ratings** tied to real orders
            **6 days** to deploy
          
        
        
          RankingYours, and inspectable
          
            What a Browsing Session Touches
            
              01A server-rendered category page
              02Search by dish, place or cuisine
              03Filters on rating, price, time
              04A restaurant profile and menu
              05Featured positions you sold
              06No order, and still revenue
            
          
        
      
    
  

  
    
      
        33Storefront Pages
        4Ways to Search
        3Ranking Filters
        727Customer App Source Files
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Five surfaces over one Laravel backend, with the public ones built to be read rather than logged into.

      
      
        
          01
          
### The Browser

          
Somebody who is not ordering tonight. They arrive from a search engine on a server-rendered page, read a restaurant profile with photos, hours and the full menu, sort a category by rating or delivery time, and leave. This is the majority of your traffic, and it is the session most delivery platforms treat as a failed conversion.

        
        
          02
          
### The Diner

          
The same person on the night they order. Search by dish, restaurant, cuisine or category, filters for rating, price and delivery time, then delivery to the door, collection in person, or ordering at the table as a dine-in guest. Scheduled and repeat orders, wallet, loyalty points and a membership carrying member pricing sit underneath.

        
        
          03
          
### The Listed Restaurant

          
Its own profile and photos, its own menu with variations and add-ons, its own hours, holidays and delivery radius, all edited by the restaurant rather than by your support desk. It sees its orders, its ratings, its earnings and its payout history, which is what keeps a listing current without anybody chasing it.

        
        
          04
          
### The Editor

          
Whoever decides what people see first. Categories and cuisine taxonomy, the home feed and its offers, featured positions with their schedules, and the campaigns arranged around them. On a discovery platform this role is a commercial one rather than a design one, because placement is inventory.

        
        
          05
          
### The Delivery Partner

          
Assigned orders within their zone, navigation to pickup and drop-off, proof of delivery at the door, and a running view of earnings and the cash they are carrying against their limit. Discovery does not change the delivery loop, and the delivery loop is where the operational cost of a browsing platform actually lands.

        
        
          06
          
### The Finance Desk

          
Sales, commission, placement, payout and tax reports that each show what was charged at the time. Placement revenue is reported alongside commission rather than tracked in a spreadsheet, which is the difference between selling positions and guessing what they were worth.

        
      
      
Console roles are scoped so editorial, support and finance each reach their own surface, and nobody reaches everything by default.

    
  

  
    
      
        Compare
        
## Clone vs Generic Script vs an App Behind a Login

        
Most routes to a discovery platform hold up until you ask where the traffic comes from.

      
      
        
| What decides it | Miracuves Zomato Clone | A client-rendered app shell |
| --- | --- | --- |
| What a crawler sees | Rendered content on 33 routes | A loading state, and nothing to index |
| Where the vocabulary lives | Categories and cuisines as rows you edit | Constants, changed by a developer |
| What a rating means | It belongs to an order that happened | Anyone can leave one, so nobody trusts them |
| Who decides what ranks first | You do, and you can sell the position | A ranking nobody can inspect or price |
| Revenue from a session with no order | Placement and membership | Nothing at all |
| Cost curve of traffic | Organic reach keeps working after the campaign | Paid acquisition, permanently |
| The catalogue you build | Yours, with the ratings and photos in it | Whatever the vendor lets you export |
| Source code | Yours outright, no per-order royalty | Often limited, sometimes encrypted |

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

    
  

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

        
Seven stages, beginning several weeks before anybody places an order.

      
      
        Step 1
### Somebody finds a page

The storefront renders on the server across 33 routes with policies, registration funnels and tracking, so a crawler and a first-time visitor both receive content rather than a loading state. This is what makes organic search a channel that keeps working after a campaign budget stops.

        Step 2
### They browse without ordering

Category and cuisine pages, restaurant profiles, photos, hours and full menus, all readable without an account. The read path is the one that is optimized, because on a discovery platform the common case is a visit that ends in nothing and still has to be cheap to serve.

        Step 3
### They search the way people actually talk

By dish, by restaurant, by cuisine or by category, with filters for rating, price and delivery time. Categories and cuisines are rows rather than constants, so the vocabulary your market uses to describe its own food is an operator decision rather than something we chose for you.

        Step 4
### The list is ranked over a scoped set

Search and filters run against restaurants already scoped to the ordering zone, so sorting cost tracks what the customer can actually order from rather than the whole catalogue. Ratings ship as part of the catalogue and feed the sort customers use most.

        Step 5
### You decide what is at the top

The home feed, its offers, its campaigns and its featured positions are arranged, scheduled and priced from the console. Placement becomes inventory you can sell and report on rather than a ranking you cannot inspect, and that is the revenue line discovery unlocks.

        Step 6
### Eventually somebody orders

Delivery, collection or a table, with sizes, extras and allergen notes on the dish, thirteen gateways plus wallet, cash and offline methods, live tracking, proof of delivery and in-order chat between customer, store and rider on one record.

        Step 7
### The rating goes back into the catalogue

A rating belongs to an order that actually happened, which is the structural defence against a listing being talked up or down by people who never ate there. It feeds the filter that decides what the next browser sees, which is how a discovery catalogue compounds.

      
      
An AI ordering assistant and a short-video food feed ship as platform modules alongside the catalogue, both aimed at the browsing session rather than the checkout.

    
  

  
    
      
        Justified
        
## Every Feature Earns Its Place

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

      
      
        
| Module | Why it is in the base build |
| --- | --- |
| Server-rendered storefront | A discovery platform that a crawler sees as an empty shell has no organic channel, which means every visit is paid for forever. Rendering on the server is the difference between a catalogue that compounds and one that only costs money. |
| Taxonomy held as data | Search quality on a discovery platform is mostly taxonomy quality. Categories and cuisines as editable rows mean the words your market actually uses can be corrected in an afternoon rather than in a release. |
| Ratings tied to orders | A rating anyone can leave is worth nothing to the customer sorting by it, and worth nothing to the restaurant being sorted. Binding it to a transaction that happened is what makes the filter trustworthy enough to rank by. |
| An operator-controlled feed | If what appears first is decided by a model you cannot inspect, you cannot sell the position or explain it to the restaurant that did not get it. Owning the ranking is what turns attention into inventory. |
| Ranking over a scoped set | Sorting the whole catalogue to show somebody eight restaurants is work you pay for on every browse. Scoping to the ordering zone first keeps the common case cheap as the catalogue grows. |
| Storage selectable at runtime | A discovery catalogue is mostly photographs, and they accumulate without shrinking. Local disk or S3-compatible storage with a primary and a fallback is what stops media growth becoming a migration. |
| Commission frozen at settlement | Reports on a platform with two revenue engines have to be reconcilable. Freezing the percentage onto the transaction row is what lets placement revenue and commission be read side by side months later. |
| Public catalogue, guarded writes | The storefront is meant to be read by anyone, crawlers included. Everything that changes a listing, a price or a rating runs behind authentication, which is the boundary a public catalogue lives or dies on. |

      
      
Tax computed per order with exports ships as its own Laravel module, which matters here because placement income and order commission are taxed differently in most jurisdictions.

    
  

  
    
      
        Stack
        
## The Technology Behind the Features

        
Chosen so the read path is cheap and the write path is guarded, which is the shape a browsing platform needs.

      
      
        **The discovery surface**Thirty-three server-rendered routes on Next.js 15 and React 18 with MUI and Redux Toolkit, carrying policies, registration funnels and tracking, plus internationalization and right-to-left support. Search by dish, restaurant, cuisine or category with filters on rating, price and delivery time, ranked over a set already scoped to the ordering zone.
        **Application core**Laravel 12 on PHP 8.2 and above with MySQL and Passport, holding roughly 300 tables under 378 migrations in strict date order and 136 Eloquent models across eleven domains, with the category and cuisine taxonomy stored as rows so your market's vocabulary is operator data.
        **Routing and surfaces**326 route definitions on API v1 with v2 held for update endpoints, 764 admin console routes behind role and module gates, and 258 store panel routes under plan entitlements, each surface behind its own middleware so a token issued to one client cannot reach another.
        **Client applications**Three Flutter builds on GetX with separate release paths: 727 Dart files across 36 feature modules in the app people browse, 503 files across 29 in the restaurant app, and 234 files across 17 in the delivery app, all reading the same versioned API as the web.
        **Money and reporting**Thirteen gateways plus wallet, cash and offline rails with live and test credential sets switched by mode, commission and discount split frozen at settlement, scheduled disbursement with overlap locks, and sales, commission, placement, payout and tax reports that export.
        **Media and configuration**Local disk or S3-compatible object storage selectable at runtime with a primary and a fallback, because the catalogue is mostly images, plus roughly 120 named settings keys read at request time so behaviour changes are operator data rather than deployments.
      
      
One Laravel monolith owns every business rule and the five surfaces sit over one versioned API, so a category renamed in the console reads the same in the browser, both apps and the console within the same request.

    
  

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

        
A fixed price only means something if the boundary around it is stated, so this is that boundary.

      
      
        
          01
          
### Search runs against the database

          
Index-hinted scopes with eager-loading discipline, which is the right trade for most catalogues. Typo tolerance, synonyms, relevance tuning and faceted search at very large scale need a dedicated search engine, and that is documented as the extension point rather than pretended away.

        
        
          02
          
### No table reservation engine

          
Dine-in ordering ships: a guest at a table can order through the platform. Booking a table in advance, with covers, sittings, floor plans and no-show handling, is a different model entirely and it is not built. If reservations are central to your proposition, raise it on the first call.

        
        
          03
          
### The catalogue starts empty

          
Importing listings from an external source, or wiring a paid maps and places provider for richer location data, are integrations scoped separately. Nothing in the platform seeds your catalogue, and any vendor implying they can hand you one is describing somebody else's data.

        
        
          04
          
### The platform ships in test mode

          
One-time passcodes are exposed for testing, cross-origin rules are permissive and transport and frame headers are not emitted. All three are named in the documentation rather than found later, and closing them is a pre-launch hardening pass quoted separately. No second factor sits in front of console staff.

        
        
          05
          
### Four things are scoped separately

          
Signing and releasing the iOS builds, bringing console access under your identity provider, putting a second factor in front of staff sign-in, and pushing catalogue, order and placement rows into an analytics stack your team already runs. Each is quoted before it starts.

        
        
          06
          
### What is built is real

          
Thirty-three server-rendered routes, taxonomy as editable rows, ratings bound to real orders, an operator-controlled home feed with scheduled and reported placement, ranking over a zone-scoped set, storage selectable at runtime, commission frozen at settlement, and a security posture published against OWASP categories rather than asserted.

        
      
      
When an acquirer or a partner sends a security questionnaire, or a tester goes at the platform, we answer from that same documented control map rather than improvising an answer for the occasion.

    
  

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

          
The deployment process, the nine questions worth asking anyone bidding on a discovery build, the red flags, and the Flyereats engagement we delivered in 2025 - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            Is the storefront genuinely indexable?
            Yes, and it is worth testing rather than taking on trust from any vendor. The web surface is thirty-three server-rendered routes on Next.js 15, including policies, registration funnels and tracking, so a crawler receives content rather than a loading state. That is the difference between a catalogue that keeps returning visitors after a campaign budget stops and one where every single visit has to be bought. Ask to view source on a category page during the demo.
          
          
            How do customers actually find a restaurant?
            Four ways, and the filters matter as much as the search. They can search by dish, by restaurant name, by cuisine or by browsing a category, then narrow by rating, price or delivery time. All of it runs against restaurants already scoped to the ordering zone, so a customer never sorts through places that cannot deliver to them. The category and cuisine vocabulary is held as editable rows, so it can be made to match how your market actually describes its own food.
          
          
            Can I control what appears first?
            Yes, and on a discovery platform this is a commercial feature rather than a design one. The home feed, its offers, its campaigns and its featured positions are arranged, scheduled and priced from the console. Because the ranking is yours rather than a model nobody can inspect, a featured position becomes inventory you can sell to a restaurant, report on afterwards, and explain to the restaurant that did not get it.
          
        
        
          
            Where do the ratings come from?
            From orders that actually happened. A rating belongs to a transaction rather than to an open form, which is the structural defence against a listing being talked up by its own staff or talked down by a competitor. It matters more here than on a pure delivery platform, because the rating feeds the filter customers sort by, so an untrustworthy rating is not a cosmetic problem, it is a broken ranking.
          
          
            Does a browsing visitor cost me money?
            A little, and much less than on a platform built for checkout. Most traffic on a discovery site never orders, so the read path is what gets optimized: pages render on the server, search and filters run over a set already scoped to the ordering zone, and the catalogue's photographs sit on storage you select at runtime with a primary and a fallback. The commercial answer is on the Business Model page, where placement and membership earn from exactly those sessions.
          
          
            Can it list more than restaurants?
            Yes. The catalogue was shaped around food, but variations, add-on groups, attributes, allergens, tags and stock counters carry groceries, bakeries, drinks and other local retail equally well, and the discovery surface does not care what a category contains. What changes per vertical is the taxonomy you write and the photography you commission, both of which are content decisions rather than engineering ones.
          
        
      
    
  

  
    
    
      
        
## View source on a category page

The fastest way to judge a discovery platform is to look at what a crawler gets. Do that on our demo, then rename a cuisine in the console and watch it change everywhere.

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

  
    
      
        Explore
        
## Explore the Zomato Clone

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

  
    
    
      
        
## The catalogue is the asset. You should own it.

        
Listings, menus, photographs and ratings accumulate into something an aggregator relationship never transfers, sitting on a platform whose source and ranking are both yours outright.

        [Talk to Us →](https://miracuves.com/schedule-consultation/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **September 10, 2026**
        
        
          Miracuves · Zomato 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 **Zomato**.

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

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