---
title: MoboReels Clone Features
description: 
url: https://miracuves.com/moboreels-clone/features
date_modified: 2026-09-01
author: miracuves
language: en_US
---

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

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

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

  .mcv-mrf a.mcv-mrf-btn{ display:inline-flex; align-items:center; gap:8px; border-radius:12px; background:linear-gradient(160deg,#d81b46,#e8344f); color:#fff; font-weight:700; font-size:15px; padding:15px 28px; box-shadow:0 10px 30px rgba(232,52,79,.3); transition:transform .25s cubic-bezier(.2,.8,.2,1), box-shadow .25s; }
  .mcv-mrf a.mcv-mrf-btn:hover{ color:#fff; transform:translateY(-2px); box-shadow:0 14px 36px rgba(232,52,79,.42); text-decoration:none; }
  .mcv-mrf a.mcv-mrf-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-mrf a.mcv-mrf-btn-outline:hover{ background:#fff; color:#191419; text-decoration:none; }

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    
      
        
          
            [Home](/)/[MoboReels Clone](/moboreels-clone/)/Features
          
          MoboReels Clone · Features
          
# MoboReels Clone Features: The Catalog Is the Product Surface

          
Short-drama platforms are usually sold on the player. The operator's actual problem is the library: publishing a title, numbering its episodes, pricing each one, reordering after publication without stranding what viewers already paid to open, and attaching posters, trailers and subtitles to the title rather than to a release. All of that is a console task here rather than a migration script. Here is what ships, grouped by who touches it.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[See Pricing](/moboreels-clone/development-cost/)
          
            **Reorder** renumbers and relocks
            **5** locales, RTL included
            **6 days** to deploy
          
        
        
          Coin priceA field on the episode
          
            What Publishing a Title Touches
            
              01Category and title created in console
              02Poster, banner and trailer attached
              03Episodes numbered, priced and locked
              04Subtitles uploaded per episode
              05Reordered, renumbered, relocked
              06Rails composed, title goes live
            
          
        
      
    
  

  
    
      
        33Mongoose Models on MongoDB
        202Registered API Handlers
        24Permission Modules
        5Locales With RTL Layout
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Three clients on one Express and MongoDB API. The same catalog feeds the consumer web app, the Flutter store build and the console, so a title reordered on Tuesday is numbered the same way everywhere on Tuesday.

      
      
        
          01
          
### The Viewer

          
A surface driven entirely by the catalog: banner rails, trending, new releases, coming soon and For You trailers, with title and plot search behind a genre filter. The player is vertical and episode-wise with subtitles, and what a viewer can open depends on the lock state carried by each episode record rather than on a separate entitlement system.

        
        
          02
          
### The Catalog Editor

          
Film category, film list and episode list as three working modules. A title is typed as a movie or a web series, carries poster and banner artwork, and has trending, coming soon and active toggles. Publishing is a console task rather than a migration script somebody runs against the database.

        
        
          03
          
### The Episode Operator

          
Episodes carry a number, a coin price and a lock state each. Drag and drop reorder renumbers the sequence and reapplies locks in the same action, which is the one operation a published short-drama library needs most and the one most platforms leave to a manual clean-up.

        
        
          04
          
### The Localisation Lead

          
A subtitle upload dialogue per episode, five locales with right-to-left layout for Hebrew and Arabic, and app language JSON editable from the console. A library sold into more than one market is a translation problem before it is a distribution problem, and both live in the console here.

        
        
          05
          
### The Revenue Analyst

          
Overview counts and charts, series and episode level performance, revenue by series, users and wallets, plans and orders, and reports. Series revenue breakdown and top revenue episodes are what a rights holder asks to see, and they are assembled from operational data rather than by exporting collections.

        
        
          06
          
### The Operator

          
A 24-module permission system with staff accounts bound to named roles, storage switchable across local, S3 and DigitalOcean Spaces, and magic-byte inspection on every upload. The console governs the library rather than merely reporting on it.

        
      
      
Every capability here is built and demonstrable in the live demo. Where something ships as a preview rather than a live integration, that is stated against the feature rather than implied away.

    
  

  
    
      
        Compare
        
## MoboReels vs Miracuves Clone vs Building From Scratch

        
What each route gives you on the parts that decide whether a library can actually be operated.

      
      
        
| What decides it | Miracuves MoboReels Clone | Building from scratch |
| --- | --- | --- |
| Time to a working library | Six working days | A multi-year programme with a senior team |
| Publishing a title | A console task with artwork and toggles | A migration script somebody runs carefully |
| Reordering after publication | Renumbers and relocks in one action | The bug that strands paid unlocks, discovered late |
| Pricing granularity | Coin price is a field on the episode | One price per title, changed by deployment |
| Subtitles | Upload dialogue per episode, in the console | A file somebody uploads to storage and hopes matches |
| Localisation | Five locales with RTL, language JSON in the console | Hard-coded strings, rebuilt per market |
| Rights holder reporting | Revenue by series and top revenue episodes, built in | A spreadsheet assembled from exports each month |
| Source code | Full source across web, console and Flutter, yours | Yours, at the cost of building all of it |

      
      
MoboReels itself is the reference for what this category looks like; it is not a product you can buy or self-host. The comparison that matters commercially is the second column against the third.

    
  

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

        
One title, traced from an empty category through to a rights holder statement, with numbering and locks holding throughout.

      
      
        01
### The category and the title are created

A film category is created, then a title inside it typed as a movie or a web series. Poster and banner artwork attach to the title itself, along with trending, coming soon and active toggles. From this point the title is an operator record rather than a row somebody has to remember to update.

        02
### Episodes are numbered, priced and locked

Each episode carries its own number, its own coin price and its own lock state. Pricing at episode level is the main commercial advantage of owning the catalog: a first episode can be free, a mid-season episode cheap and a finale expensive, across a whole library, without a release.

        03
### Subtitles attach where they belong

A subtitle upload dialogue sits against the episode, so the file and the episode cannot drift apart. Five locales with right-to-left layout for Hebrew and Arabic ship, and the app language JSON is editable from the console rather than requiring a rebuild per market.

        04
### The title is reordered without breaking

Episodes reorder by drag and drop, and the platform renumbers the sequence and reapplies the locks in the same action. This is the operation that separates a working library from a published mistake, because a reorder that leaves numbering stale strands exactly the viewers who already paid.

        05
### Rails are composed, not generated

Banner rails, trending, new releases, coming soon and For You trailers are operator-composed rather than produced by a recommendation engine. That is a deliberate limitation and a deliberate control: what a viewer sees first is an editorial decision, which is what a catalog-led operator actually wants.

        06
### The viewer opens an episode

The vertical player runs episode-wise with subtitles. Unlocking draws on the coin balance, a VIP entitlement window, or a rewarded ad on the store build. Which tender is available is an operator setting rather than a property of the viewer's account.

        07
### The library reports on itself

Overview counts and charts, series and episode level performance, revenue by series, top revenue episodes, users and wallets, plans and orders. A rights holder asking which titles earned gets an answer from operational data rather than a spreadsheet assembled from exports.

      
    
  

  
    
      
        Deliberate
        
## Every Feature Earns Its Place

        
Each module below exists because a catalog-led library stops working without it, not because a competitor lists it.

      
      
        
| Module | Why it is in the base build |
| --- | --- |
| Reorder that renumbers | A library is edited after publication. A reorder that leaves numbering stale is the bug that strands viewers who already paid for episode seven. |
| Reorder that relocks | Renumbering without reapplying locks is worse than not reordering, because it silently gives away paid episodes or hides free ones. |
| Coin price per episode | One price per title cannot express a free opener and a premium finale, which is the standard pricing shape in short drama. |
| Poster and banner per title | Artwork attached to a release rather than a title has to be re-uploaded every time the release changes, and eventually it does not match. |
| Subtitle upload per episode | Subtitles managed outside the record drift out of sync with reorders, and nobody notices until a viewer complains. |
| Five locales with RTL | Short drama sells into markets that read right to left. Retrofitting RTL after launch is a rebuild of the layout, not a translation task. |
| Magic-byte inspection | A library takes uploads constantly. Trusting a file extension on operator uploads is how a media platform ends up serving something it did not intend to. |
| Revenue by series | A rights holder will ask which titles earned. Producing that from exports each month is a job; producing it from the console is a click. |
| 24-module permissions | A library is operated by several people with different jobs. One shared admin login makes every editorial mistake anonymous. |

      
      
Storage switches across local, S3 and DigitalOcean Spaces, and staff accounts bind to named roles rather than sharing credentials.

    
  

  
    
      
        Stack
        
## The Technology Behind the Features

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

      
      
        **API and data**An Express API over MongoDB with thirty-three Mongoose models and roughly 202 registered API handlers, of which 142 are the admin surface, plus a seed catalog script so a fresh deployment has a library to work against.
        **Operator console**A Next.js 14 application carrying the catalog modules, analytics, users and wallets, plans and orders, reports and a 24-module permission system with staff accounts bound to named roles.
        **Consumer web**The viewer surface driven entirely by the catalog: rails, search with a genre filter, the vertical episode player with subtitles, and the unlock paths available to that viewer.
        **Mobile**A Flutter store build sharing the same API, so a catalog change appears on the app and the web without a second implementation to keep in step.
        **Storage**A storage switch across local, S3 and DigitalOcean Spaces with magic-byte inspection on every upload, so where media lives is a deployment decision rather than a code change.
        **Localisation**Five locales with right-to-left layout for Hebrew and Arabic, and app language JSON editable from the console rather than compiled into the client.
      
      
        
### Why the catalog model is the number that matters

        
A vertical player is a weekend. What takes months is a library that can be edited after publication without breaking: numbering that follows a reorder, locks that follow the numbering, artwork bound to the title rather than the release, subtitles that cannot drift from their episode, and pricing granular enough to be a commercial lever rather than a single field. Thirty-three models is not a boast, it is what modelling a library properly costs.

        
          **33**Mongoose models
          **202**API handlers
          **142**Admin surface handlers
          **$3,399**One-time, fixed
        
      
      
The admin surface being two-thirds of the API is the clearest signal of what this build is for: operating a library rather than playing one.

    
  

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

        
Named here rather than discovered after the invoice.

      
      
        
### Stated limitations and deployment choices

        
**Passwords use reversible encryption.** This is stated plainly because it matters: it is not one-way hashing, and for a platform holding customer accounts it is work we would recommend scheduling before launch rather than after. Ask us about it directly on the first call.

        
**There is no season container.** A multi-season library is modelled as separate titles. If your catalog is season-heavy that shapes how you structure it, and it is better known now than after the library is loaded.

        
**There is no recommendation engine.** Rails are operator-composed. For a catalog-led operator that is often the point, because what a viewer sees first stays an editorial decision, but it is a limitation rather than a feature and we name it as one.

        
**Web ad unlock is a simulated timed preview,** not a live ad network. AdMob on the Flutter store build is the live path. Any revenue model that leans on rewarded ads should assume the store build carries it.

        
**Transcoding, a bitrate ladder, a CDN with signed URLs and DRM are deployment choices** rather than shipped modules. For a library at scale these are real infrastructure decisions with real cost, and they are yours to make.

        
**Every external provider is your own account.** Payment gateways, AdMob, Firebase push, Resend mail and S3 or DigitalOcean storage all run on credentials you hold.

      
      
The controls that are built are real: a 24-module permission system, staff accounts bound to named roles, magic-byte inspection on every upload and a storage switch that keeps media placement a deployment decision.

    
  

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

          
The deployment process, a modelled reference deployment for a publisher moving a written back catalog into vertical drama, and what to check on the catalog model before you hire anyone - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            What happens if I reorder a published title?
            The platform renumbers the sequence and reapplies the locks in the same action. That is the single most important operation in a published short-drama library, because a reorder that renumbers without relocking either gives away paid episodes or hides free ones, and a reorder that does neither strands the viewers who already paid for episode seven.
          
          
            Can I price episodes differently within one title?
            Yes. Coin price is a field on the episode rather than on the title, so a free opener, cheap early episodes and a premium finale are configuration across the whole library without a release. That granularity is the main commercial advantage of owning the catalog rather than licensing a player.
          
          
            How are multi-season shows handled?
            As separate titles, because there is no season container in the build. We state that plainly rather than letting it be discovered after a library is loaded. If your catalog is season-heavy it changes how you structure titles and how the rails are composed, and it is worth working through before you buy rather than after.
          
        
        
          
            Is there a recommendation engine?
            No. Banner rails, trending, new releases, coming soon and For You trailers are operator-composed. For a catalog-led operator that is frequently preferable, because it keeps what a viewer sees first an editorial decision rather than an algorithmic one, but it is a limitation and we name it as one rather than describing manual curation as a feature.
          
          
            Do rewarded ads work on the web?
            Web ad unlock is a simulated timed preview rather than a live ad network. AdMob on the Flutter store build is the live path. If rewarded advertising is a meaningful part of your revenue model, plan for the store build to carry it, and treat the web preview as exactly what it is.
          
          
            What about video delivery at scale?
            Transcoding, a bitrate ladder, a CDN with signed URLs and DRM are deployment choices rather than shipped modules. The platform manages the catalog, the pricing, the locks and the reporting; how the media itself is encoded and delivered is infrastructure you choose, and for a large library it is a real cost line worth planning before launch.
          
        
      
    
  

  
    
    
      
        
## See a title reordered without breaking, live

Ask for the demo and we will publish a title, reorder its episodes, watch the numbering and the locks follow, then upload a subtitle file and see it appear in the player.

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

  
    
      
        Explore
        
## Explore the MoboReels Clone

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

  
    
    
      
        
## Ready to run a short-drama library you actually own?

        
Deploy in six working days with the catalog modules, the episode pricing and lock model, subtitles, five locales and the operator console included, and 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 1, 2026**
        
        
          Miracuves · MoboReels Clone Solution
          Feature set, stack and stated limitations cross-verified against the hub, 2026-09-01
        
      
    
  

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

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

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