---
title: ReelShort Clone Features
description: ReelShort Clone Features - Catalog, Coin Unlock &amp; VIP | Miracuves                                      Home/ReelShort Clone/Features                      Re
url: https://miracuves.com/reelshort-clone/features
date_modified: 2026-08-14
author: miracuves
language: en_US
---

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  .mcv-rsf-finalcta{ background:#0a0a0a; color:#fff; text-align:center; padding:96px 24px 64px; position:relative; overflow:hidden; }
  .mcv-rsf-finalcta .ring{ position:absolute; border:1.5px solid rgba(232,52,79,.16); border-radius:50%; }
  .mcv-rsf-finalcta .ring1{ width:480px; height:480px; top:-220px; left:-160px; }
  .mcv-rsf-finalcta .ring2{ width:300px; height:300px; bottom:-180px; right:-90px; }
  .mcv-rsf-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-rsf-finalcta h2{ color:#fff; font-size:clamp(24px,3.2vw,34px); max-width:640px; margin:0 auto 14px; }
  .mcv-rsf-finalcta p.sub{ color:rgba(255,255,255,.7); max-width:520px; margin:0 auto 30px; }
  .mcv-rsf-footerbar{ max-width:1180px; margin:56px auto 0; padding-top:28px; border-top:1px solid var(--line-light); position:relative; z-index:2; }
  .mcv-rsf-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-rsf-byline strong{ color:#fff; font-weight:600; }
  .mcv-rsf-byline .dotsep{ opacity:.4; }
  .mcv-rsf-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-rsf-herogrid{ grid-template-columns:1fr; }
    .mcv-rsf-statbar .inner{ grid-template-columns:repeat(2,1fr); gap:18px 0; }
    .mcv-rsf-statbar .stat:nth-child(2){ border-right:none; }
    .mcv-rsf-rolegrid{ grid-template-columns:1fr; }
    .mcv-rsf-honestgrid{ grid-template-columns:1fr; }
    .mcv-rsf-faqgrid{ grid-template-columns:1fr; }
    .mcv-rsf-hero h1{ font-size:27px; }
    .mcv-rsf-cta .flex{ flex-direction:column; align-items:flex-start; }
    .mcv-rsf-cardstack{ height:260px; }
    .mcv-rsf-fincard{ width:250px; height:150px; }
  }
  @media (prefers-reduced-motion: reduce){ .mcv-rsf *{ animation:none !important; transition:none !important; } }

  
    
    
      
        
          
            [Home](/)/[ReelShort Clone](/reelshort-clone/)/Features
          
          ReelShort Clone · Features
          
# ReelShort Clone Features: Catalog, Coin Unlock & VIP

          
The hard part of short drama is not the player. It is pricing an episode instead of a subscription and keeping one wallet honest across three clients. Here is every capability that ships, grouped by who touches it - including the parts that are preview rather than production.

          [Request a Live Demo →](https://miracuves.com/schedule-consultation/)[See Pricing](/reelshort-clone/development-cost/)
          
            **3** ways to unlock an episode
            **5** locales with RTL
            **6 days** to deploy
          
        
        
          Episode 12LOCKED
          COIN WALLETREWARD 120 · PAID 400
          UNLOCK · COINSSPEND 40 · REWARD FIRSTledger code EARN/SPEND
          VIP Windowactive
        
      
    
  

  
    
      
        33Mongoose Models on MongoDB
        202Registered API Handlers
        24Permission Modules
        5Locales, Two of Them RTL
      
    
  

  
    
      
        By Role
        
## Feature Set by Role

        
Every capability grouped by who actually touches it - the viewer watching an episode, the wallet deciding whether it opens, and the operator running the catalog and the economy.

      
      
        
          V
          
### Viewer & Player

          
- Vertical episode player with sequential play
- Categories, titles and numbered episodes
- Episode 0 as the trailer convention
- Banner carousel, trending, new release and coming soon rails
- Search on title and plot with an optional genre
- My List at series level, continue watching on the client
- Subtitle track from a stored VTT or SRT file
- Likes, comments capped at 400 characters, reports

        
        
          W
          
### Wallet, Coins & Rewards

          
- Free episode window set from one setting
- Coin unlock priced per episode
- Rewarded ad unlock with a per-title daily cap
- Auto-unlock for the rest of a title
- Reward and purchased coins tracked apart
- Spend draws reward coins first, promos carry an expiry
- Seven typed ledger codes for earn and spend
- Seven day check-in ladder, referrals and follow bonuses

        
        
          O
          
### Operator Console

          
- Film category, film list and episode modules
- Drag and drop episode reorder with relocking
- Coin packs with bonus coins and an offer price
- VIP plans by validity and validity type
- Overview, user, monetization and coin analytics
- Series and episode level reporting, order history
- Block, comment hide and report queue
- 24 permission modules across four actions

        
      
    
  

  
    
      
        Compare
        
## ReelShort vs Miracuves Clone vs Building From Scratch

        
The same capability, three different paths to get it.

      
      
        
| Capability | Original ReelShort | Miracuves Clone | Build From Scratch |
| --- | --- | --- | --- |
| Vertical episode player | Yes - proprietary | Yes - sequential play, subtitles, continue watching | The easiest part, and the part everyone starts with |
| Per-episode pricing | Yes | Coin price per episode, free window set globally | Requires an entitlement model before a player |
| Three ways to unlock | Yes | Coins, rewarded ad, VIP window, plus auto-unlock | Four inputs resolved at read time - easy to get subtly wrong |
| Two-balance coin wallet | Yes | Reward vs purchased tracked apart, promos expire, spend draws reward first | Where most builds leak money or double-credit |
| Typed ledger | Yes | Seven typed codes across earn and spend | Usually added after the first reconciliation problem |
| Rewards ladder | Yes | Seven day streak, ad tasks, referrals, follow and email bonuses | Retention machinery, always underestimated |
| Right-to-left layout | Varies by market | Five locales, RTL for Hebrew and Arabic across all three clients | A retrofit that touches every screen |
| Operator console | Internal | Catalog, economy, moderation, staff and settings, 24 permission modules | The single largest hidden line item |
| Source code ownership | N/A | Full ownership, self-hosted | Full ownership (you are building it) |
| Content licensing | Held by ReelShort | Not included - you supply and license your catalog | Not included - you supply and license your catalog |
| Price | N/A | $3,399 one-time | Six figures and a year, typically |

      
      
The demo catalog that ships is original seed material with royalty-free stills, not licensed third-party drama. Your catalog and its rights are yours to arrange - see the [Development Company](/reelshort-clone/development-company/) page for what that means in practice.

    
  

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

        
Short drama looks simple from the outside. Here is the path a viewer and their coins actually take.

      
      
        
          1
          
### Discover and Watch

          
- Land on rails: banner, trending, new release, coming soon
- Coming soon titles are excluded from the other rails
- Open a title, watch Episode 0 as the trailer
- Episodes inside the free window play immediately
- Continue watching is held in browser storage

        
        
          2
          
### Hit the Wall, Choose a Tender

          
- Access is decided at read time from four facts
- Is the episode locked, is it inside the free window
- Does the viewer hold an active VIP window
- Does a per-user unlock row already exist
- Coins, a rewarded ad or auto-unlock all write that same row

        
        
          3
          
### Earn, Buy and Come Back

          
- Spend draws reward coins before purchased coins
- Promotional coins carry an expiry window
- Coin packs and VIP plans run through hosted checkout
- Seven day check-in ladder builds a streak
- Every movement writes a typed ledger entry

        
      
      
Because entitlement is one row rather than a per-client rule, an episode unlocked with coins on the web app is already unlocked in the Flutter store build. The clients never disagree because they never decide.

    
  

  
    
      
        Rationale
        
## Every Feature Earns Its Place

        
Nothing here is on the list because it demos well. Each capability exists because leaving it out breaks something specific.

      
      
        
| Capability | Why it is not optional |
| --- | --- |
| Two balance types in one wallet | Because promotional coins and paid coins are not the same liability. Mixing them means you cannot expire a promo without taking money the viewer actually paid for. |
| Spend draws reward coins first | Because consuming free inventory before paid inventory is what makes a rewards ladder affordable instead of a permanent discount. |
| Seven typed ledger codes | Because "balance changed" is not an answer when a viewer disputes a spend. Typed entries are what let you reconstruct why. |
| Unlock resolved at read time | Because caching an entitlement is how a viewer ends up locked out of an episode they paid for, on a different device. |
| Unique compound keys on unlock rows | Because a double-tap on a slow connection should not charge twice for the same episode. |
| Episode 0 trailer convention | Because a free sample inside the same data model costs nothing, where a separate trailer system costs a subsystem. |
| Hosted checkout | Because no card number reaching your database removes the single largest compliance surface a small operator has. |
| Magic-byte upload inspection | Because an operator uploading a renamed executable is an ordinary accident, not an attack, and it still has to be discarded. |
| RTL across all three clients | Because retrofitting right-to-left after launch touches every screen, and Hebrew and Arabic markets are underserved precisely because most platforms skip it. |

      
    
  

  
    
      
        
## The Technology Behind the Features

        
A Vite and React consumer web app served as a static single page application, a Next.js 14 operator console on its own subdomain with client-side ApexCharts, and a Flutter GetX store build for iOS and Android. All three talk to one Node.js and Express service running roughly 202 registered handlers across a client router and an admin router, behind nginx and PM2. State is 33 Mongoose models on MongoDB: categories, titles and numbered episodes carrying lock state and coin price; reward and purchased balances against a seven-code typed ledger; unique compound keys on the per-user unlock rows; and indexes on active titles, release date and ledger timelines. Uploads run through a storage switch across local, S3 and Spaces with magic-byte inspection, and cron jobs reset the ad counters at midnight.

      
    
  

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

        
Every capability above is built and demonstrable in the live demo. These are not - and the hub says so too, because it is the kind of thing that surprises buyers otherwise.

      
      
        
### Stated against the feature, not implied away

        
          Web ad unlock is a simulated timed preview, not a live ad network
          Store-build ads run through AdMob with your own unit IDs - an integration step
          Processor-side purchase verification for store and card gateways is scheduled work
          Coin cash-out is wallet architecture only - no consumer flow, payout desk or bank rails
          Some later Hindi, Arabic and Spanish web strings fall back to English
          Password hashing currently uses reversible encryption rather than a slow hash
          Request rate limiting is not bundled
          CORS defaults open
          The client settings payload is unscoped
          Staff permissions are enforced in the console rather than on every route
        
      
      
The last five are named in the platform's own VAPT reference as a labelled hardening backlog rather than buried, and they are closed with you at deployment. We would rather you saw the list before you bought than after.

    
  

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

          
The deployment process, the content-licensing reality, and what to check before you hire anyone - on the Development Company page.

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

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            How does episode unlocking actually work?
            Access is decided at read time from four facts: whether the episode is locked in the catalog, whether its number falls inside the free window, whether the viewer holds an active VIP window, and whether a per-user unlock row already exists. Coins, a rewarded ad or auto-unlock all write that same row, so the entitlement is identical however it was earned.
          
          
            What is the difference between reward coins and purchased coins?
            Reward coins come from the ladder, ads, referrals and bonuses and carry an expiry window. Purchased coins come from a coin pack and do not expire. Spending always draws reward coins first so promotional inventory is consumed before money the viewer actually paid, and both roll into a single displayed total.
          
          
            Do the ads actually pay?
            On the store build, yes, through AdMob with your own unit IDs, which is an integration step. On the web surface the ad unlock is a simulated timed preview rather than a live ad network, so it demonstrates the flow without generating revenue. We state this plainly because it is the kind of thing that surprises buyers otherwise.
          
        
        
          
            What languages does the interface support?
            Five locales ship: English, Hebrew, Hindi, Arabic and Spanish, with right-to-left layout for Hebrew and Arabic across the consumer web app, the store build and the operator console. The console also carries an app language editor so you can change client copy without a rebuild. Some later Hindi, Arabic and Spanish web strings fall back to English, so completing that copy is a configuration task.
          
          
            Can viewers cash out their coins?
            Not out of the box. The withdrawal method and request models are in the schema with minimum thresholds in settings, so the wallet architecture supports it, but the consumer flow, the operator payout desk and the bank rails are advanced setup. We sell it as wallet architecture that can support cash-out, never as a live payout product.
          
          
            Does an unlock carry across the web app and the store build?
            Yes. The unlock is a single per-user row in one database rather than a rule each client evaluates for itself, and all three surfaces read the same API. An episode opened with coins on the web is already open in the Flutter build, and a VIP window bought in the app applies on the web immediately. The clients never disagree because they never decide.
          
        
      
    
  

  
    
    
      
        
## See exactly what you are getting - before you commit

Request a working demo of the catalog, the unlock paths and the operator console, or check exact pricing.

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

  
    
      
        Explore
        
## Explore the ReelShort Clone

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

  
    
    
      
        
## Ready to launch your own short-drama platform?

        
Deploy in 6 days with the catalog, the coin wallet, the rewards ladder and the operator console included, full source code ownership.

        [Talk to Us →](https://miracuves.com/schedule-consultation/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **August 14, 2026**
        
        
          Miracuves · ReelShort Clone Solution
          Feature set, stats and readiness caveats cross-verified against the live hub, 2026-08-14
