Appearance
Historical snapshot archived 2026-09-25. This records an earlier review or plan, not current implementation or live ticket state. For current work, follow root AGENTS.md, the relevant BloxClips skill, and owning repository source/tests. Preserve approved decisions as evidence; verify their present authority before acting.
Terminology Reference
Consolidated submission-related terms across the codebase.
Core Terms
| Term | Meaning in Codebase | Database | Frontend | Backend | Related | Ambiguity |
|---|---|---|---|---|---|---|
| Submission | A clipper's video entry in a campaign | Submission model | "Submission", "Video" | "Submission" | Campaign, Payout | Sometimes called "video" in UI |
| Video | The actual content (URL + metadata) | Fields on Submission | "Video", "Clip" | "Video" (in scrape) | Submission | "Video" ≠ "Submission" (1:1 but conceptually different) |
| Clip | Synonym for video | Not a model | "Clip" (marketing) | Rare | Video | Marketing term only |
| Content | Generic term for user submissions | Not a model | "Content Rewards" (nav) | Rare | Submission | "Content Rewards" = feature area name |
| Campaign | Budgeted promotion with payout rules | Campaign model | "Campaign" | "Campaign" | Submission, Payout | |
| Creator | Roblox game developer (campaign owner) | Not directly modeled | "Creator" (marketing) | "Creator" (campaign context) | Campaign | Different from "Clipper" |
| Clipper | User who makes/clips videos | WebUser (role implied) | "Clipper", "Creator" (confusing!) | "User", "Clipper" | WebUser, Submission | Major ambiguity: "Creator" used for both clipper and game dev |
| User | Generic authenticated person | WebUser | "User" | "User", req.user | WebUser | |
| Staff/Admin | Internal team member | No model (flag on user) | "Admin" | requireAdmin |
Status Terms
| Term | Database Value | Frontend Label | Backend Usage | Notes |
|---|---|---|---|---|
| Pending | PENDING | "Pending" | Default on create | Awaiting review |
| Accepted | ACCEPTED | "Accepted" | Admin action | Tracking starts |
| Approved | — | — | Not a DB status | UI sometimes says "Approved" for ACCEPTED |
| Denied | DENIED | "Denied" | Admin action | Rejected |
| Rejected | — | "Rejected" (payouts) | Payout status REJECTED | Different from DENIED |
| Flagged | FLAGGED | "Flagged" | Admin action OR auto (3 fails) | Suspicious, tracking stopped |
| Paid | paidOut=true (legacy) | "Paid" | Legacy flow | Payout.status=COMPLETED (delta) |
Critical: ACCEPTED (submission) ≠ APPROVED (payout item decision) ≠ COMPLETED (payout)
Payout Terms
| Term | Meaning | Model/Field |
|---|---|---|
| Payout | Money transfer to clipper | Payout model |
| Payout Item | Per-submission breakdown in a payout | PayoutItem model |
| Legacy Payout | Admin-initiated, single-shot | Submission.paidOut=true, Payout (legacy statuses) |
| Delta Payout | User-initiated, incremental | Payout (new statuses), PayoutItem |
| Gross Amount | Pre-fee earnings | Payout.grossAmount, PayoutItem.grossAmount |
| Net Amount | After 7% clipper fee | Payout.amount, PayoutItem.netAmount |
| Stripe Surcharge | 2.5% on Stripe rail only | Payout.stripeSurchargeAmount |
| Referral Bonus | Affiliate commission swept in | Payout.referralBonusAmount |
| Paid Views Total | Cumulative views cashed out | Submission.paidViewsTotal |
| Paid Amount Total | Cumulative dollars cashed out | Submission.paidAmountTotal |
| Minimum Payout | Threshold to request | $100 (env MINIMUM_PAYOUT_AMOUNT) |
| Cooldown | 24h between payouts | PAYOUT_COOLDOWN_MS |
Metrics Terms
| Term | Meaning | Field |
|---|---|---|
| Views | Platform-reported view count | Submission.currentViews |
| Initial Views | Views at submission time | Submission.initialViews |
| Manual Views | Admin override | Submission.manualViewCount |
| Frozen Views | Budget clamp ceiling | Submission.frozenViewCount |
| Live Views | Effective views for earnings | manualViewCount ?? frozenViewCount ?? currentViews |
| Likes | Platform like count | Submission.currentLikes |
| Comments | Platform comment count | Submission.currentComments |
| View Snapshot | Historical data point | ViewSnapshot model |
| Tracking | Automated polling | Scheduler tick |
| Poll | Single scrape attempt | runTrackingTick iteration |
| Cadence | Poll frequency | 12h (first 48h) / 24h |
| Expiry | Tracking end | acceptedAt + trackingDurationDays |
Rate/Cap Terms
| Term | Meaning | Field |
|---|---|---|
| RPM | Revenue per 1k views | Campaign.payout (string), Submission.customRate (float) |
| CPM | Cost per 1k views (advertiser view) | Not used — RPM is clipper-side |
| Rate | Synonym for RPM | payout, customRate |
| View Cap | Max views counted per video | Campaign.viewCap, Submission.customViewCap |
| Long View Cap | Cap for long-form | Campaign.longViewCap |
| Min Views | Threshold to qualify | Campaign.minViewsShorts/Long |
| Platform Fee Rate | Budget burn accelerator | Campaign.platformFeeRate (default 0.10) |
| Burn Multiplier | 1/(1-fee) | fees.ts:burnMultiplier |
Budget Terms
| Term | Meaning |
|---|---|
| Budget | Campaign total spend limit (Campaign.budget) |
| Spend | Accelerated clipper earnings consumed |
| Percentage Used | spend / budget * 100 |
| Threshold (95%) | Auto-close acceptingSubmissions |
| Freeze | viewsFrozen=true — hard stop at 100% |
| First-Come-First-Earned | Earlier submissions paid first |
| Clamp | Limit payable views to remaining budget |
Affiliate Terms
| Term | Meaning |
|---|---|
| Referral | Signup attributed to referrer |
| Commission | 5% of referred user's payout |
| Sweep | Move pending commissions into payout |
| Accrual | Create commission record on payout |
| Good Standing | Referrer eligibility |
| Flat Rate | Old fixed-bounty program |
Cross-System Ambiguities
"Creator" — Used For Two Different Roles
| Context | Means |
|---|---|
| Marketing/landing | Roblox game developer (campaign owner) |
| Dashboard/profile | Clipper (person making clips) |
| Code | Campaign has no "creator" field; WebUser is clipper |
Recommendation: Use "Clipper" for video makers, "Developer" or "Campaign Owner" for game creators.
"Video" vs "Submission"
| Term | Scope |
|---|---|
| Submission | Database row + campaign context + status + earnings |
| Video | The URL + platform metadata (title, views, creator) |
| Clip | Marketing synonym for video |
In UI: "Recent submissions" shows videos; "Submit video" creates submission.
"Approved" — Three Different Things
- Submission status:
ACCEPTED(not "approved") - Payout item decision:
APPROVED(admin clicked approve) - Payout status:
COMPLETED(money sent)
"Rejected" — Two Different Things
- Submission status:
DENIED(admin denied) - Payout status:
REJECTED(admin rejected whole payout) - Payout item decision:
REJECTED(admin rejected specific item)
"Pending" — Multiple Meanings
| Context | Value |
|---|---|
| Submission | PENDING (awaiting review) |
| Payout (legacy) | PENDING (admin created, not sent) |
| Payout (delta) | REQUESTED / SCRAPING / READY_FOR_REVIEW / AWAITING_SEND |
| Tax form | pending_submission / submitted / pending_verification |
Canonical Mapping (Use These)
| Concept | Canonical Term | Avoid |
|---|---|---|
| Person making clips | Clipper | Creator, User (ambiguous) |
| Game developer | Developer / Campaign Owner | Creator |
| Video entry | Submission | Video, Clip (context-dependent) |
| Submission approved | Accepted (ACCEPTED) | Approved |
| Submission rejected | Denied (DENIED) | Rejected |
| Money transfer | Payout | Payment, Cashout |
| Per-submission payout row | Payout Item | Line item |
| View count (effective) | Live Views | Current views (ambiguous) |
| Budget limit hit | Frozen | Capped, Closed |
| Tracking ended | Expired / Stopped | Finished |