Skip to content

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.

Submission System Documentation ​

Entry point for understanding how submissions work in BloxClips.

This documentation describes the current implementation as it exists in the codebase today — not what it should do. Every claim references actual source code so developers can verify and navigate to the implementation.


What Is a Submission? ​

A Submission represents a clipper's video entry into a campaign. It links:

  • A clipper (WebUser)
  • A campaign (Campaign)
  • A video URL (YouTube, TikTok, or Instagram)
  • Metadata: views, status, earnings, tracking state

Source: prisma/schema.prisma lines 316-382 (Submission model)


End-to-End Flow (High Level) ​

mermaid
flowchart TD
    A[Clipper clicks Submit] --> B[POST /api/submissions]
    B --> C[Validate URL & Campaign]
    C --> D[Scrape video metadata]
    D --> E{Account verified?}
    E -- No --> F[Return 412: ACCOUNT_VERIFICATION_REQUIRED]
    E -- Yes --> G[Create Submission: PENDING]
    G --> H[Write initial ViewSnapshot]
    H --> I[Admin reviews in dashboard]
    I --> J{Approve/Deny/Flag}
    J -- ACCEPTED --> K[Set acceptedAt, nextPollAt=now]
    J -- DENIED --> L[Status=DENIED]
    J -- FLAGGED --> M[Status=FLAGGED, trackingStopped]
    K --> N[Tracking tick polls every 12h/24h]
    N --> O[Update views, write ViewSnapshot]
    O --> P{Budget exhausted?}
    P -- Yes --> Q[Freeze campaign, clamp views]
    N --> R{30 days elapsed?}
    R -- Yes --> S[trackingStoppedAt]
    K --> T[Clipper requests payout]
    T --> U[Payout rescrape + budget clamp]
    U --> V[Admin reviews payout items]
    V --> W[Approve items → AWAITING_SEND]
    W --> X[Admin clicks Send → COMPLETED]

Quick Navigation ​

DocumentPurpose
architecture.mdSystem components, data flow, major services
lifecycle.mdSubmission creation → review → tracking → payout
data-model.mdPrisma models, fields, relationships, indexes
frontend.mdClipper & admin UI routes, components, hooks
backend.mdAPI endpoints, validation, side effects
review-flow.mdStaff review actions, status transitions, side effects
metrics-and-tracking.mdView polling, Apify/YouTube API, budget clamping
payouts-and-dependencies.mdHow submissions feed payouts, delta math, statuses
permissions-and-actors.mdWho can do what (clipper, admin, system)
integrations.mdDiscord, Apify, YouTube Data API, Stripe, PayPal, NowPayments
terminology.mdCanonical terms, ambiguities, cross-system mappings
known-issues.mdDiscrepancies, duplicated logic, missing auth, coupling
investigation-notes.mdConfirmed / suspected / unknown / questions for team

Key Statuses ​

StatusMeaningWho Sets It
PENDINGSubmitted, awaiting reviewSystem (on create)
ACCEPTEDApproved, tracking activeAdmin (dashboard)
DENIEDRejectedAdmin (dashboard)
FLAGGEDSuspicious, tracking stoppedAdmin or auto (3 scrape failures)

Source: prisma/schema.prisma:331 (status default PENDING), src/api/routes/admin.ts:1459-1627 (status update endpoint)


Critical Code Locations ​

AreaFileLines
Submission creationsrc/api/routes/submissions.ts237-539
Admin status updatesrc/api/routes/admin.ts1459-1627
Tracking tick (polling)src/utils/tracking/runTrackingTick.ts1-305
Budget clampingsrc/utils/campaignBudget.ts130-225
Payout rescrapesrc/utils/payouts/rescrape.ts1-292
Payout processingsrc/utils/payouts/processRequest.ts1-243
Frontend submit modalfeatures/submissions/components/SubmitVideoModal.tsx1-449
Admin review queuefeatures/admin/submissions/hooks/useAdminSubmissions.ts1-189

Known Coupling Points ​

  1. Campaign → Submission: acceptingSubmissions, viewsFrozen, budget threshold (95%)
  2. Submission → Tracking: acceptedAt, nextPollAt, trackingStoppedAt, consecutiveScrapeFailures
  3. Submission → Payout: paidOut, paidViewsTotal, paidAmountTotal, PayoutItem rows
  4. LinkedSocialAccount: Must verify account ownership before first submission per platform
  5. Discord: Legacy approval queue removed; in-app notifications only (userNotification)

Where to Start ​