CLIFF - Interactive Micro-Drama Flutter App

Bluehost Shared Hosting

CLIFF - Interactive Micro-Drama Flutter App

A short-drama app where the choice is the product

Cliff is a complete interactive micro-drama platform: a Flutter application for iOS and Android, and a Node + PostgreSQL backend with an operator panel. They are developed against each other and ship together — the app is not a mockup and the backend is not a stub.

Ninety-second vertical episodes end on a cliffhanger. The screen cracks along a fault line and the viewer picks a side: EMBER, the risky path that usually costs coins, or TIDE, the safe one that is free. Each side leads somewhere different, so a series ends in two, four or more places — and the path they did not take can be opened later and watched.

Live demo: cliff.webkodingtheme.com
Operator panel: cliff.webkodingtheme.com/app/admin
Demo credentials are printed on the sign-in page. Sign in and edit anything — the catalogue resets every hour.

CLIFF - Interactive Micro-Drama Flutter App

The branching engine

Every competing short-drama item plays episodes in a straight line. In Cliff a series is a directed graph — an episode is a node, a branch option is an edge — and two rules follow from that, both enforced in the database rather than left to convention:

Unlocks are permanent. Paying for a branch buys the episode itself, which is what makes “the path you did not take can be opened later” true rather than marketing.

VIP grants no unlocks. Access is computed from the subscription being live, so cancelling puts the locks back. Otherwise one month of VIP would buy the whole catalogue permanently and nobody would ever renew.

The branch map screen draws the real graph — solid where the viewer has walked, dim where the story is still sealed — and counts how many endings they have reached out of how many exist. Endings are counted from the graph, never typed in, so the poster cannot claim a number the story does not have.

CLIFF - Interactive Micro-Drama Flutter App

What the app does

Watching — Vertical video player with seeking and resume, progress saved per episode, a feed personalised from the tropes chosen during onboarding, search, series detail with an episode rail, library and continue-watching.

Choosing — The cliff moment with the fault-line split, the two-temperature EMBER/TIDE choice, real choice statistics that are withheld until enough people have chosen for a percentage to mean anything, and a branch map drawn from the live graph.

Store compliance — An age gate enforced by the router rather than a dismissible dialogue, data export on request, real account deletion with a recoverable grace period, push priming before the system dialogue, report and block with a moderation queue behind it, and subscription management from settings.

Demo mode — With no build flag the app runs against a built-in repository holding the same branching story the backend seeds. You can walk the entire loop, spend coins and reach an ending before standing up a database.

CLIFF - Interactive Micro-Drama Flutter App

The operator panel

In the app’s own palette rather than a stock admin theme, and translated — English and Turkish ship, and adding a language is one file of plain strings.

The branch editor — Lay out cliffs, point each side at an episode, mark your endings. The validator refuses to publish while an episode is unreachable, a cliff has one side, or a choice leads nowhere. Every one of those presents to a viewer as the app being broken, so they block publication rather than warn.

The overview — Things that are actually wrong go above the numbers: a published series with an episode that has no video is a viewer hitting a black screen. It also shows the week’s EMBER/TIDE split, which is the number that tells you whether your branches are priced right.

Viewers — Balances, full ledgers and choice history. Adjustments are signed, so a minus takes coins away, and every one writes an audited reason.

CLIFF - Interactive Micro-Drama Flutter App

Money, done honestly

The ledger balances. Every coin movement carries an idempotency key and is written in one transaction with the thing it paid for, behind a row lock. A retried request — a phone on a train, somebody tapping twice — moves the balance once.

Purchases are verified server-side. The phone saying a purchase succeeded is a string an app can be made to send. The receipt goes to Apple or Google and only their answer credits anything. RevenueCat is not required — that is a recurring cost several competing items pass on to you for something the stores already answer for free.

Rewarded advertisements pay from the network’s callback, not from the phone, with the signature verified against Google’s published keys. With verification switched off the endpoint refuses everything, because an unverified reward endpoint on the open internet is a coin faucet with a public URL.

No RevenueCat, no AWS SDK, no Google API client. The request signing each of those would provide is written against the standard library — about sixty lines you can read. Three dependencies on the server in total.

CLIFF - Interactive Micro-Drama Flutter App

Running it

One command. The supplied installer for Ubuntu 22.04 and 24.04 brings Node, PostgreSQL, nginx and certbot from Ubuntu’s own repositories, creates the database, writes the configuration with generated secrets, applies the schema, registers a service and a daily job, obtains a certificate and prints the first password once. About ten minutes. It is written to be read before it is run.

Video lives on the operator’s own disk or in any S3-compatible store — AWS S3, DigitalOcean Spaces, Wasabi or Cloudflare R2 are the same API, so one implementation covers what other items list as three separate features. Episodes are served with HTTP range requests, which is not optional for video.

Rebranding is two files: the colour tokens and the theme. Swap the two accents and the three Google fonts and it is your product. The full design system — tokens, specimen cards, component sources and a 32-screen UI kit — ships with it.

CLIFF - Interactive Micro-Drama Flutter App

Requirements

Flutter 3.38.1+ and Dart 3.10+ (the floor is set by the two store plugins, not by the app) · Node 20+ · PostgreSQL 14+ · Xcode for iOS builds, Android Studio for Android builds · Ubuntu 22.04 or 24.04 for the supplied installer.

Third-party services and costs

None of the following is included in the item price. A VPS and a domain are required — shared cPanel hosting will not work, because this is a Node application and it serves video. Object storage and a CDN are optional and usage-priced. Publishing needs an Apple Developer Program membership and/or a Google Play Console account, and the stores take a commission on in-app purchases. AdMob and Firebase have free tiers. RevenueCat is not required.

Demo photography is from Unsplash under the Unsplash License. Replace it with your own key art before release.

Support

Setup guidance and bug fixes are included. The documentation ships as a browsable HTML page and as a PDF, and covers a screen-by-screen tour of the app with annotated screenshots, installation, configuration, a branding and colour guide, the component props, the REST API, writing a branching series, store compliance and a troubleshooting section grouped by symptom.

License

Every feature ships in both licenses. Nothing is held back, disabled or sold as an add-on: the coin economy, in-app purchases, VIP subscriptions, rewarded advertisements, the branch-graph editor, the operator panel, the installer and the complete source are included whichever license you buy. There is no paid module and no upgrade to unlock.

Which license you need is decided by your end product rather than by which features you switch on. For the terms see Envato Standard Licenses.

Changelog

v1.0.0
– Initial release
– Flutter application, iOS and Android, 32 screens
– Node + PostgreSQL backend with operator panel and branch-graph editor
– Idempotent coin ledger, store-verified purchases, AdMob server-side reward verification
– One-command installer for Ubuntu 22.04 and 24.04
– Demo mode: the app runs with no server at all
– Panel in English and Turkish

0 average based on 0 ratings.

WebKoding

WebKoding

Visit Author's Portfolio

View Portfolio
Last Update 2026-08-06
Created 2026-08-06
Sales 0
Discussion Comments
Software Version Flutter 3.x
Files Included Dart YAML JavaScript JSON .java .kotlin .h .storyboard .plist .swift
Video Preview Resolution