Overview
LIVE
→
Showing: All time
Active Creators
—
Live Templates
—
Downloads
—
Total Created Accounts
—
Paying Users
—
GROWTH
—
CHURN
—
Live Templates over time
Quick Actions
System Status
Checking services…
Template Queue
No pending creator templates.
No pending videos. Run the scraper to find new dances.
Nothing generating right now.
No videos ready to publish yet.
No templates published yet.
Manage Gallery
0
Dances users submitted to the public gallery. Subscribers opt in; free-tier
dances are enrolled automatically and marked Free tier. Nothing is
public until it is added here.
No videos in the gallery yet.
Creators
Joined between
→
| Creator | Category | Templates ↕ | # Posts ↕ | Revenue ↕ | # Referred Users ↕ | Credits ↕ | Status | |
|---|---|---|---|---|---|---|---|---|
| Loading creators… | ||||||||
Users
Joined between
→
| User ↕ | Login / Platform ↕ | Email ↕ | Phone / TikTok ↕ | Location ↕ | Joined ↕ | Last active ↕ | Generations ↕ | Plan ↕ | Credits ↕ | Status ↕ | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading users… | |||||||||||
Generations
Unaccounted Assets
The reconciliation state has not been read yet
This card fills in as soon as the server answers. If it never does,
the button below still works.
What this screen is. We ask Cloudinary to list every file it is storing for us, then ask our
own records to explain each one: a generation, a template, an upload log, a creator's avatar.
Whatever is left over — the files nothing we store mentions — is listed here.
Being listed does not mean a file is broken, unused, or bad. It means only that we cannot say what it is for. Most of these are ordinary photos and videos whose paperwork went missing: the mobile app uploads selfies straight from the phone to Cloudinary, so the server never saw that request and no record of it could ever have existed. Some are from before we kept records at all. Some belong to a different product that shares this Cloudinary account, and those are marked and cannot be deleted from here.
Each row carries our best explanation, labelled Known cause, Likely cause or Guess — a guess is only a guess, and is never worth chasing as if it were a finding. If you are looking for one specific file, use Look it up below: a file that is healthy is absent from this list, and absent looks exactly like missing.
Being listed does not mean a file is broken, unused, or bad. It means only that we cannot say what it is for. Most of these are ordinary photos and videos whose paperwork went missing: the mobile app uploads selfies straight from the phone to Cloudinary, so the server never saw that request and no record of it could ever have existed. Some are from before we kept records at all. Some belong to a different product that shares this Cloudinary account, and those are marked and cannot be deleted from here.
Each row carries our best explanation, labelled Known cause, Likely cause or Guess — a guess is only a guess, and is never worth chasing as if it were a finding. If you are looking for one specific file, use Look it up below: a file that is healthy is absent from this list, and absent looks exactly like missing.
Uploaded between
→
Reconciling against Cloudinary…
Creator Categories
ℹ️ Changing a creator's category updates their revenue share immediately (not retroactive to previous months).
| Category | Monthly Posts | Min New Paid Users | Min Referrals | Referral % | Referral Period | Payout per Generation | Creators | |
|---|---|---|---|---|---|---|---|---|
| Loading categories… | ||||||||
Payout Rules & Queue
Global Payout Rules
Pending Payouts
Total due: $0.00
Loading payouts…
Traffic Source
LIVE
By Platform — — total visitors
TikTok
utm_source=tiktok
—
— revenue · — paid
Instagram
utm_source=instagram
—
— revenue · — paid
WhatsApp
utm_source=whatsapp
—
— revenue · — paid
App Direct
utm_source=app
—
— revenue · — paid
Twitter / X
utm_source=twitter
—
— revenue · — paid
Facebook
utm_source=facebook
—
— revenue · — paid
Blog
utm_source=blog
—
— revenue · — paid
ViralHooks
utm_source=viralhooks
—
— revenue · — paid
DanceIncome
utm_source=danceincome
—
— revenue · — paid
PartyHooks
utm_source=partyhooks
—
— revenue · — paid
By Page
Try
Visits
Tried
Paid
— visits
— tried
— paid
Creator Dashboard
Visits
Tried
Paid
— visits
— tried
— paid
My Videos
Visits
Tried
Paid
— visits
— tried
— paid
My Promo Videos
Visits
Tried
Paid
— visits
— tried
— paid
Share Landing
Visits
Tried
Paid
User Access Management
Loading admin users…
System Settings
Feature Flags
Google OAuth Login
Apple OAuth Login
TikTok OAuth Login
Creator Signups
New User Registrations
Solo-only Creator Imports
Mobile Cloudinary Preview
Financial Overview
Loading…
Gross Revenue
—
total collected
Total Costs
—
all categories
Net Revenue
—
gross − costs
Margin
—
net ÷ gross
Loading…
Affiliate Program
Loading…
Promo Codes
A code can be redeemed once per account. Editing a code's credit value only affects
redemptions made after the change — past redemptions keep the amount they were granted.
Codes are paused rather than deleted so their usage history is never lost.
Loading…
Data & Safety
Store health, volume space, off-volume backups, whole-deployment export/import and
creator recovery. Anything that can change or delete data runs as a
DRY RUN first and then needs a typed confirmation that
spells out what changes — no single click on this screen destroys anything.
Store health
Loading…
A store marked lost is a one-way trap: writes are refused to protect what is
still on disk, so no
.bak is ever written and every backup taken after
the damage records the file as unreadable. It cannot recover on its own — repair it
here.
Loading…
Railway volume usage
Loading…
Loading…
Reclaim space
Deletes pipeline scratch, staged media whose durable copy is in Cloudinary, scraped
downloads no store references any more, and expired import artifacts. Lowering the
import artifact age shortens the window in which an import can still be
rolled back.
Off-volume backups
Loading…
Loading…
Export everything
A gzipped tar of every store, restorable here or on another deployment.
This restores state, not assets
Durable media lives in Cloudinary and is referenced by URL from inside the
stores. Selfies, scraped video and audio on the volume are scratch and are not in
the archive — it does not survive losing the Cloudinary account.
Loading preview…
Import an archive
Import replaces whole files — it never merges
Each store in scope is replaced in its entirety. A real apply also
signs everyone out (sessions are not in a default export). The file it
replaces is kept as a
.preimport- snapshot for 7 days, which is
the whole rollback window.
Step 1
Validate — writes nothing
Step 2
Dry run the apply
Step 3
Apply for real
Import history
Loading…
Loading…
Creator integrity
Loading…
Cross-references every store that names a creator id against creators.json. An id
other stores still reference but the creator store no longer has is proof of loss,
not a fresh install.
Loading…
Rebuild lost creators
Reads RevenueCat, Stripe and Firebase — this one is not automatic.
Rebuilds missing creators under their original ids so the stores referencing
them line up again. It never overwrites a creator that exists. A row rebuilt with no
email cannot reconnect anyone — sign-in matches on email — so Undo exists to
drop reconstructed rows that carry nothing.
Click “Build plan” — it calls external APIs and can take a minute.
Billing & Activity
From
To
Kling $/gen
Music $/gen
Showing: All time
Loading billing data…
Group by:
ℹ️ Creator payout = per-run $ × template runs in app. Live run counts require app backend integration.
Start Scrape
Run the scraper with today's hashtags + keywords
Videos · Min likes (default 10K)
Add Manual URL
Paste a TikTok dance URL to add it directly
Manage Hashtags
Add hashtags for future scraping runs
Creator Payout Settings
Set how much creators earn per template run