Hackathon Provenance & Commit Boundary (What Was Built During the Hackathon)
CreditRoll Live was built during the PayPal AI Hackathon submission period (November 2–5, 2026) on top of PayPal's official hackathon starter template (paypaldev/ag-paypal-demo):
- Pre-Hackathon Official Starter Template (
c2d80f0..5de114e, Sep 27 – Oct 12, 2026): Unmodified baseline commits from the official PayPal / AG Grid starter repository (https://github.com/paypaldev/ag-paypal-demo, authored by Eddie Jaoude and James Swinton-Bland), which provided the initial Next.js + AG Studio boilerplate. - Built During the PayPal AI Hackathon (
ddad6e0..7ac8dbe, Nov 2 – Nov 5, 2026): 100% of CreditRoll Live was designed and implemented during the hackathon period, including:- Deterministic End-Credits & Completion-Bond Reconciler (
lib/credit-roll-reconciler.ts,lib/credit-roll-data.ts): Cut v1 → Cut v2UNPAID_GHOSTdetection (Moth,Nyx Frame), stage-name-to-legal-contract identity resolution, integer-cent guardrail verification (discardedAiAmountOverrides), andNEEDS_REVIEWhold on ambiguous aliases (Alex Rivera). - Three-Leg Live PayPal Sandbox Write & Read-Back Settlement Loop (
lib/paypal.ts,lib/credit-roll-settlement.ts,app/api/credit-roll/*):Orders v2 CAPTURE+ post-approval capture endpoint,Invoicing v2 + QR Code, andBatch Payouts v1withPayPal-Request-Ididempotency and per-itemtransaction_statusread-back. - 35mm Screening Room Dossier & Two Custom AG Studio 3.0 Widgets (
app/page.tsx,app/dossier.ts,app/dashboard/studio/credit-roll-widgets.tsx): Full "Midnight Cutting Table & Completion-Bond Ledger" UI redesign,CreditRollStageWidget(24fps sprocket-lit end-credits stage withwidgetApi.toggleCrossFilterinto AG Grid), andGhostPatchbayWidget(ivory tear-off voucher desk with live PayPal Sandbox read-back receipts). - 21 Automated Acceptance & Live Sandbox Tests (
tests/ticket-01..03*.test.ts) and 45-Second Launch Film (https://youtu.be/cE3SuZF7sic).
- Deterministic End-Credits & Completion-Bond Reconciler (
CreditRoll Live — Interactive Cinema End-Credits & PayPal Sandbox Settlement Studio
PayPal AI Hackathon 2026 Submission · Built with PayPal Sandbox REST API (
Orders v2,Invoicing v2 + QR Code,Batch Payouts v1), AG Studio 3.0 Custom Widgets & Studio Agent Framework, Render Cloud, and Next.js 16.
- Live Render HTTPS Deployment (with PayPal Sandbox Read-Back): https://paypal-credit-roll-live.onrender.com (Direct AG Studio Workspace)
- Always-Warm Cloud VM Mirror: http://144.202.121.72:3001 (Direct AG Studio Workspace)
- GitHub Repository: https://github.com/GGGODLIN/paypal-credit-roll-live
CreditRoll Live transforms the rolling end-credits of an independent film, animation, or indie game inside AG Studio into an interactive, auditable financial map powered by AI reconciliation, deterministic financial guardrails, and live PayPal Sandbox money movement.
Visual Gallery (Midnight Cutting Table & Completion-Bond Ledger)
1. The Screening Room — /
The home page reads the Director's Cut end roll as a ledger. Every credit carries its locked contract fee, the two names cut from v2 burn through the 35mm gate as UNPAID_GHOST double exposures, and the figures — $7,050.00 executable, $3,600.00 ghost-cut retained, one alias on hold — are computed by the same reconciler that drives AG Studio.

2. The Cutting Room — /dashboard, Director's Cut v2 Cross-Filtered to Moth
The Credit Roll Stage widget sits on a flatbed: a sprocket-lit strip, an SMPTE cue ruler, and cyan workprint (Cut v1) and amber splice-tape (Cut v2) keys. Clicking Moth's ghost credit cross-filters the AG Grid ledger, the KPI tiles and the Filters panel to crew-moth, while the Ghost Patchbay beside it holds the integer-cent settlement voucher behind the producer's approval switch.

3. The Read-Back Desk — Live PayPal Sandbox After All Three Patchbay Actions
Captured from a live PayPal Sandbox run. With the producer's approval switch armed, the Patchbay fired all three writes and read each one back with GET:
- Orders v2: Order
31S06570LA976733Lcreated for the $25.00 supporter pack (CREATEDwith PayPal approve link +/api/credit-roll/supporter-order/capturepost-approval capture). - Invoicing v2: Moth's ghost-cut invoice
INV2-9GU9-DXP8-8H62-NW6WreturnedSENTfor $1,400.00 with a scannable PayPal QR code. - Payouts v1: Batch
6GGPBS2JUKU5Nfor $7,050.00 read back with all four crew items (SFL2647CKM558,SLEL6648WMTKJ,L6X59RMS2X9VG,237U4GLGNSF3E).

Why CreditRoll Live?
Independent film, animation, podcast, and indie game productions treat their end-credits roll as a static thank-you screen while managing contributor contracts, stage-name mapping, cut-edit changes, fan support, and PayPal payouts in disconnected spreadsheets:
- The "Ghost Credit" Cut Trap: When a director trims a scene between the Rough Cut (v1) and the Director's Cut (v2), a sound designer (
Moth) or VFX artist (Nyx Frame) whose cue was cut often vanishes from the v2 credit roll—even though their approved fixed-fee contract remains legally owed and unpaid (UNPAID_GHOST). - Stage-Name & Alias Mismatches: Crew members credited under stage names (
DJ Owl,Moth) or homonymous names (Alex Rivera) fail to match legal contract rosters, causing missed payouts or misdirected transfers. - Batch Submission != Completed Settlement: Submitting a payout batch does not mean every contributor was paid; individual items can return
SUCCESS,PENDING,UNCLAIMED, orFAILEDon read-back.
Key Features
1. Two Native AG Studio Custom Widgets (app/dashboard/studio/credit-roll-widgets.tsx)
Registered via AG Studio's createWidgets API with full formatShape and ai metadata:
credit-roll-stage(Interactive Rolling Credit Roll Stage):- Cinema end-credits roll with 24fps sprocket motion, SMPTE cue ruler, and a Cut v1 (Rough Cut) ↔ Cut v2 (Director's Cut) toggle.
- Highlights contributors cut in v2 as glowing translucent
UNPAID_GHOSTnodes ("Removed from Cut v2 · Contract Fee Still Owed"). - Clicking any contributor chip or ghost credit invokes
widgetApi.toggleCrossFilter(...)onpersonId, cross-filtering the companion AG Grid (crewSettlements,creditCues,crewMembers) to that contributor's cues, contract, and PayPal receipts.
ghost-patchbay(Ghost Diff & Identity Patchbay):- Ivory completion-bond settlement voucher with v1→v2 cut diff, stage-name-to-legal-contract evidence links, deterministic guardrail status (
NEEDS_REVIEWhold on ambiguous aliasAlex Rivera), and human-in-the-loop approval controls for triggering PayPal Sandbox writes.
- Ivory completion-bond settlement voucher with v1→v2 cut diff, stage-name-to-legal-contract evidence links, deterministic guardrail status (
2. Deterministic Financial Guardrail Engine (lib/credit-roll-reconciler.ts)
- Calculates all monetary amounts strictly in integer cents from the locked contract roster; any AI-suggested fee override is discarded and logged in
discardedAiAmountOverrides. - Generates deterministic, version-bound
proposalVersionHash,senderBatchId, andPayPal-Request-Ididentifiers so repeated clicks are idempotently deduplicated. - Blocks unverified or ambiguous recipients (
NEEDS_REVIEW) before any PayPal network request is sent.
3. Two-Way PayPal Sandbox Write & Read-Back Loop (lib/paypal.ts & lib/credit-roll-settlement.ts)
All PayPal calls run server-side with PayPal-Request-Id idempotency headers and automatic GET resource read-back:
- Behind-the-Scenes Supporter Pack (
Orders v2 CAPTURE):POST /v2/checkout/orders(intent: CAPTURE) →POST /v2/checkout/orders/{id}/capture→GET /v2/checkout/orders/{id}(/api/credit-roll/supporter-order&/api/credit-roll/supporter-order/capture). - Ghost-Cut Obligation Invoice & Live QR Code (
Invoicing v2):POST /v2/invoicing/invoices→POST /v2/invoicing/invoices/{id}/send→POST /v2/invoicing/invoices/{id}/generate-qr-code→GET /v2/invoicing/invoices/{id}(/api/credit-roll/obligation-invoice). - Idempotent Crew Batch Payouts (
Batch Payouts v1):POST /v1/payments/payouts→GET /v1/payments/payouts/{batch_id}(/api/credit-roll/settle), stamping a contributor node asPAIDonly when their individual itemtransaction_statusisSUCCESS(while preservingPENDING,UNCLAIMED, andFAILEDstates).
Verification & Quality Gate
- 21 Automated Acceptance & Live-Sandbox Regression Tests:
node --experimental-strip-types --test tests/*.test.ts(21/21 pass) - React Doctor Health Score:
100 / 100 Great (0 issues found!)