Skip to content

Demo Session Preview

Demo Youth Football Club

This preview shows the exact production-shaped metadata, clock settings, routes, and database requirements needed before the demo session is written to the production database.

Demo Status

demo_draft

Batch ID

demo_platform_showcase_2026_001

Data Year

2025

Resolved Week

Week 7

Simulation Controls

Demo scoring timeline

Week 7

Clock Mode

manual

Profile

manual_only

Data Year

2025

Range

Week 1–18

These controls preview the future admin clock behavior only. Production scoring will read this campaign clock through the real scoring-period resolver.

Production routes this demo will use

Access Mode

Demo Access

allowed

Public demo access is allowed.

Mode

public

Invite Token

Not provided

Expires

2026-06-28T15:32:31.036Z

Create Boundary

Create Demo Action

preview_only

This is the final boundary before demo creation becomes a write action. It remains preview-only until both the demo repository adapter and production service adapter are database-backed.

Endpoint

/api/demo/sessions/create

Method

POST

Can Create

No

Blocked until:

  • • Demo repository adapter is no-op; database writes are disabled.
  • • Production service adapter is no-op; domain writes are disabled.

Create payload shape

{
  "presetId": "public_platform_tour",
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "organizationId": "org_demo_platform_showcase_2026_001",
  "fundraiserSlug": "demo-youth-football-club-2025-001",
  "dataSource": "hydrated_nfl",
  "dataYear": 2025,
  "accessMode": "public",
  "campaignTimeMode": "simulated",
  "simulationProfile": "one_week_per_10_minutes"
}

Controlled Write Boundary

Preview Create API

API only

This endpoint can create demo infrastructure rows and register their cleanup metadata only. It does not create fundraisers, organizations, cards, participants, packages, share links, payments, fulfillment, or prize records.

Endpoint

/api/demo/sessions/preview-create

Writes

4 demo tables

UI Button

Disabled

Example local POST body
{
  "confirmation": "CREATE_DEMO_INFRASTRUCTURE",
  "presetId": "public_platform_tour",
  "organizationName": "Demo Youth Football Club",
  "campaignName": "Fantasy Football Cards Demo Fundraiser"
}

Audit Boundary

Demo Audit Trail Preview

6 events

Demo previews, create attempts, readiness checks, safety checks, lifecycle actions, and cleanup previews should be auditable before database-backed demo creation is enabled.

Total

6

Low

4

Medium

2

High

0

session_previewed

audit_session_previewed_demo_platform_showcase_2026_001_20260627153231037

demo_session: demo_session_demo_platform_showcase_2026_001

low

readiness_gate_evaluated

audit_readiness_gate_evaluated_demo_platform_showcase_2026_001_20260627153231037

demo_session: demo_session_demo_platform_showcase_2026_001

medium

safety_report_evaluated

audit_safety_report_evaluated_demo_platform_showcase_2026_001_20260627153231037

demo_session: demo_session_demo_platform_showcase_2026_001

low

service_contracts_evaluated

audit_service_contracts_evaluated_demo_platform_showcase_2026_001_20260627153231037

demo_session: demo_session_demo_platform_showcase_2026_001

medium

scoring_period_resolved

audit_scoring_period_resolved_demo_platform_showcase_2026_001_20260627153231037

campaign_clock: fr_demo_platform_showcase_2026_001

low

create_action_previewed

audit_create_action_previewed_demo_platform_showcase_2026_001_20260627153231037

demo_session: demo_session_demo_platform_showcase_2026_001

low

Safety Gate

Demo Readiness Gate

warning

This gate prevents demo creation from moving from preview to database writes until data, cleanup metadata, scoring period, repository, and production service boundaries are safe.

Demo data source is ready

2025 hydrated NFL data can power demo scoring previews.

ready

Creation plan has cleanup metadata

52 demo metadata rows are planned.

ready

Scoring period resolves cleanly

Demo resolves to 2025_week_07.

ready

Repository writes are intentionally disabled

Safe for preview only. Database adapter must be wired before creating demo records.

warning

Production services still required

Fundraiser, card, share, scoring, and leaderboard services must remain production-owned. Demo orchestration can only coordinate them.

warning

Next action

Preview only. Wire schema, repository adapter, and production service calls before enabling create.

Service Boundary

Production Service Orchestration

noop

Demo creation must call real production services for organizations, URL reservations, fundraisers, campaign clocks, packages, participants, cards, and share links. The current adapter is preview-only until those write boundaries are explicitly wired.

organization

org_demo_platform_showcase_2026_001

organization_service.createOrganization

planned

Organization service is not wired yet.

fundraiser_slug

demo-youth-football-club-2025-001

url_reservation_engine.reserveSlug

planned

URL Reservation Engine write adapter is not wired yet.

fundraiser

fr_demo_platform_showcase_2026_001

fundraiser_service.createFundraiser

planned

Fundraiser service write adapter is not wired yet.

campaign_clock

clock_fr_demo_platform_showcase_2026_001

campaign_clock_service.createClock

planned

Campaign Clock service write adapter is not wired yet.

fundraiser_package

pkg_demo_platform_showcase_2026_001

package_service.createFundraiserPackage

planned

Package service write adapter is not wired yet.

participant

8 participants

participant_service.createParticipants

planned

Participant service write adapter is not wired yet.

card

40 cards

card_engine.createCards

planned

Card Engine write adapter is not wired yet.

share_link

group + participant + card links

share_engine.createShareLinks

planned

Share Engine write adapter is not wired yet.

Required Production Adapters

Production Service Contracts

0/8 wired

These are the production service contracts that must be wired before demo creation can write real demo-scoped records.

Organization / Group Service

createOrganization

Creates the demo group as a production-shaped organization with demo audit fields.

not wired

URL Reservation Engine

reserveFundraiserSlug

Reserves the demo fundraiser slug through the same route/slug rules as real fundraisers.

not wired

Fundraiser Service

createFundraiser

Creates the fundraiser campaign with demo payment/prize handling disabled.

not wired

Campaign Clock Service

attachCampaignClock

Attaches manual/simulated clock metadata that scoring services can resolve.

not wired

Package/Card Allocation Service

createPackage

Allocates demo package/card capacity through production package rules without payment settlement.

not wired

Participant/Seller Service

createParticipants

Creates demo participants/sellers for participant Share Hubs and attribution.

not wired

Card Engine

createCards

Creates demo cards/entries using production card rules with prize eligibility disabled.

not wired

Share Engine

createShareLinks

Creates first-party group, participant, and card share links through the Share Engine.

not wired

Payload mapping

organization

Organization / Group Service · createOrganization

fundraiser_url_reservation

URL Reservation Engine · reserveFundraiserSlug

fundraiser

Fundraiser Service · createFundraiser

campaign_clock

Campaign Clock Service · attachCampaignClock

package_allocation

Package/Card Allocation Service · createPackage

participants

Participant/Seller Service · createParticipants

cards

Card Engine · createCards

share_links

Share Engine · createShareLinks

Safety Validation

Demo Safety Validation

safe preview

Demo payloads must carry audit fields and must keep payment, prize eligibility, and fulfillment disabled before any create action can be enabled.

Payloads

8

Passed

53

Warnings

0

Failed

0

Show validation checks

organization: isDemo

Payload includes isDemo.

pass

organization: demoBatchId

Payload includes demoBatchId.

pass

organization: demoSessionId

Payload includes demoSessionId.

pass

organization: demoPurpose

Payload includes demoPurpose.

pass

organization: demoExpiresAt

Payload includes demoExpiresAt.

pass

organization: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

fundraiser_url_reservation: isDemo

Payload includes isDemo.

pass

fundraiser_url_reservation: demoBatchId

Payload includes demoBatchId.

pass

fundraiser_url_reservation: demoSessionId

Payload includes demoSessionId.

pass

fundraiser_url_reservation: demoPurpose

Payload includes demoPurpose.

pass

fundraiser_url_reservation: demoExpiresAt

Payload includes demoExpiresAt.

pass

fundraiser_url_reservation: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

fundraiser: isDemo

Payload includes isDemo.

pass

fundraiser: demoBatchId

Payload includes demoBatchId.

pass

fundraiser: demoSessionId

Payload includes demoSessionId.

pass

fundraiser: demoPurpose

Payload includes demoPurpose.

pass

fundraiser: demoExpiresAt

Payload includes demoExpiresAt.

pass

fundraiser: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

Fundraiser prize eligibility disabled

Demo fundraiser is not prize eligible.

pass

Fundraiser payment mode is demo-only

Demo fundraiser bypasses payment settlement safely.

pass

campaign_clock: isDemo

Payload includes isDemo.

pass

campaign_clock: demoBatchId

Payload includes demoBatchId.

pass

campaign_clock: demoSessionId

Payload includes demoSessionId.

pass

campaign_clock: demoPurpose

Payload includes demoPurpose.

pass

campaign_clock: demoExpiresAt

Payload includes demoExpiresAt.

pass

campaign_clock: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

package_allocation: isDemo

Payload includes isDemo.

pass

package_allocation: demoBatchId

Payload includes demoBatchId.

pass

package_allocation: demoSessionId

Payload includes demoSessionId.

pass

package_allocation: demoPurpose

Payload includes demoPurpose.

pass

package_allocation: demoExpiresAt

Payload includes demoExpiresAt.

pass

package_allocation: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

Package payment disabled

Demo package does not require payment.

pass

Package fulfillment is virtual demo only

Demo fulfillment is virtual-only.

pass

participants: isDemo

Payload includes isDemo.

pass

participants: demoBatchId

Payload includes demoBatchId.

pass

participants: demoSessionId

Payload includes demoSessionId.

pass

participants: demoPurpose

Payload includes demoPurpose.

pass

participants: demoExpiresAt

Payload includes demoExpiresAt.

pass

participants: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

cards: isDemo

Payload includes isDemo.

pass

cards: demoBatchId

Payload includes demoBatchId.

pass

cards: demoSessionId

Payload includes demoSessionId.

pass

cards: demoPurpose

Payload includes demoPurpose.

pass

cards: demoExpiresAt

Payload includes demoExpiresAt.

pass

cards: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

Cards are not prize eligible

40 demo cards are prize disabled.

pass

share_links: isDemo

Payload includes isDemo.

pass

share_links: demoBatchId

Payload includes demoBatchId.

pass

share_links: demoSessionId

Payload includes demoSessionId.

pass

share_links: demoPurpose

Payload includes demoPurpose.

pass

share_links: demoExpiresAt

Payload includes demoExpiresAt.

pass

share_links: demoDeleteAfterAt

Payload includes demoDeleteAfterAt.

pass

Production Payloads

Production Domain Payload Preview

8 payloads

These payloads show what the demo orchestration layer should send to real production services when database writes are enabled.

organization
{
  "payloadType": "organization",
  "organizationId": "org_demo_platform_showcase_2026_001",
  "organizationName": "Demo Youth Football Club",
  "status": "active",
  "visibility": "public_demo",
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
}
fundraiser_url_reservation
{
  "payloadType": "fundraiser_url_reservation",
  "ownerType": "fundraiser",
  "ownerId": "fr_demo_platform_showcase_2026_001",
  "requestedSlug": "demo-youth-football-club-2025-001",
  "reservedPath": "/fundraisers/demo-youth-football-club-2025-001",
  "reservationPurpose": "demo_fundraiser",
  "status": "reserved",
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
}
fundraiser
{
  "payloadType": "fundraiser",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "organizationId": "org_demo_platform_showcase_2026_001",
  "fundraiserSlug": "demo-youth-football-club-2025-001",
  "campaignName": "Fantasy Football Cards Demo Fundraiser",
  "packageId": "kickoff-250",
  "status": "draft",
  "prizeEligible": false,
  "paymentMode": "demo_no_payment",
  "dataSource": "hydrated_nfl",
  "dataYear": 2025,
  "accessMode": "public",
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
}
campaign_clock
{
  "payloadType": "campaign_clock",
  "campaignClockId": "clock_fr_demo_platform_showcase_2026_001",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "campaignTimeMode": "simulated",
  "demoDataSource": "hydrated_nfl",
  "demoDataYear": 2025,
  "simulationProfile": "one_week_per_10_minutes",
  "simulationStartedAt": "2026-06-27T15:32:31.036Z",
  "simulationPaused": false,
  "manualWeek": 1,
  "startWeek": 1,
  "maxWeek": 18,
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
}
package_allocation
{
  "payloadType": "package_allocation",
  "packageAllocationId": "pkg_demo_platform_showcase_2026_001",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "packageId": "kickoff-250",
  "paymentRequired": false,
  "fulfillmentMode": "demo_virtual_only",
  "cardCount": 40,
  "participantCount": 8,
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
}
participants
{
  "payloadType": "participants",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z",
  "participants": [
    {
      "participantId": "participant_demo_platform_showcase_2026_001_01",
      "displayName": "Demo Participant 1",
      "status": "active",
      "sellerCode": "DEMO01",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_02",
      "displayName": "Demo Participant 2",
      "status": "active",
      "sellerCode": "DEMO02",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_03",
      "displayName": "Demo Participant 3",
      "status": "active",
      "sellerCode": "DEMO03",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_04",
      "displayName": "Demo Participant 4",
      "status": "active",
      "sellerCode": "DEMO04",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_05",
      "displayName": "Demo Participant 5",
      "status": "active",
      "sellerCode": "DEMO05",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_06",
      "displayName": "Demo Participant 6",
      "status": "active",
      "sellerCode": "DEMO06",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_07",
      "displayName": "Demo Participant 7",
      "status": "active",
      "sellerCode": "DEMO07",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "participantId": "participant_demo_platform_showcase_2026_001_08",
      "displayName": "Demo Participant 8",
      "status": "active",
      "sellerCode": "DEMO08",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    }
  ]
}
cards
{
  "payloadType": "cards",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z",
  "cards": [
    {
      "cardId": "card_demo_platform_showcase_2026_001_001",
      "cardCode": "DEMO-0001",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_002",
      "cardCode": "DEMO-0002",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_003",
      "cardCode": "DEMO-0003",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_004",
      "cardCode": "DEMO-0004",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_005",
      "cardCode": "DEMO-0005",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_006",
      "cardCode": "DEMO-0006",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_007",
      "cardCode": "DEMO-0007",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_008",
      "cardCode": "DEMO-0008",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_009",
      "cardCode": "DEMO-0009",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_010",
      "cardCode": "DEMO-0010",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_011",
      "cardCode": "DEMO-0011",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_012",
      "cardCode": "DEMO-0012",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_013",
      "cardCode": "DEMO-0013",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_014",
      "cardCode": "DEMO-0014",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_015",
      "cardCode": "DEMO-0015",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_016",
      "cardCode": "DEMO-0016",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_017",
      "cardCode": "DEMO-0017",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_018",
      "cardCode": "DEMO-0018",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_019",
      "cardCode": "DEMO-0019",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_020",
      "cardCode": "DEMO-0020",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_021",
      "cardCode": "DEMO-0021",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_022",
      "cardCode": "DEMO-0022",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_023",
      "cardCode": "DEMO-0023",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_024",
      "cardCode": "DEMO-0024",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_025",
      "cardCode": "DEMO-0025",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_026",
      "cardCode": "DEMO-0026",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_027",
      "cardCode": "DEMO-0027",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_028",
      "cardCode": "DEMO-0028",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_029",
      "cardCode": "DEMO-0029",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_030",
      "cardCode": "DEMO-0030",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_031",
      "cardCode": "DEMO-0031",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_032",
      "cardCode": "DEMO-0032",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_033",
      "cardCode": "DEMO-0033",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_034",
      "cardCode": "DEMO-0034",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_035",
      "cardCode": "DEMO-0035",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_036",
      "cardCode": "DEMO-0036",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_037",
      "cardCode": "DEMO-0037",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_038",
      "cardCode": "DEMO-0038",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_039",
      "cardCode": "DEMO-0039",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "cardId": "card_demo_platform_showcase_2026_001_040",
      "cardCode": "DEMO-0040",
      "status": "unclaimed",
      "source": "demo_generated",
      "prizeEligible": false,
      "dataYear": 2025,
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    }
  ]
}
share_links
{
  "payloadType": "share_links",
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "isDemo": true,
  "demoBatchId": "demo_platform_showcase_2026_001",
  "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
  "demoPurpose": "platform_showcase",
  "demoExpiresAt": "2026-06-28T15:32:31.036Z",
  "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z",
  "shareLinks": [
    {
      "shareCode": "DEMO-demo_platform_showcase_2026_001",
      "targetType": "fundraiser",
      "targetId": "fr_demo_platform_showcase_2026_001",
      "shareType": "group",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP01-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_01",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP02-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_02",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP03-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_03",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP04-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_04",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP05-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_05",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP06-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_06",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP07-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_07",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    },
    {
      "shareCode": "DP08-26_001",
      "targetType": "participant",
      "targetId": "participant_demo_platform_showcase_2026_001_08",
      "shareType": "participant",
      "channel": "direct",
      "destinationUrl": "/fundraisers/demo-youth-football-club-2025-001",
      "isDemo": true,
      "demoBatchId": "demo_platform_showcase_2026_001",
      "demoSessionId": "demo_session_demo_platform_showcase_2026_001",
      "demoPurpose": "platform_showcase",
      "demoExpiresAt": "2026-06-28T15:32:31.036Z",
      "demoDeleteAfterAt": "2026-07-05T15:32:31.036Z"
    }
  ]
}

Production Service Plan

Demo Creation Plan

planned

This is the sequence the demo orchestration layer should call when database writes are enabled. Steps marked production service must use real platform service boundaries.

Participants

8

Cards

40

Metadata Rows

52

1

Create demo session

demo_session: demo_session_demo_platform_showcase_2026_001

demo_repository.createDemoSession

demo orchestration
2

Create demo organization/group

organization: org_demo_platform_showcase_2026_001

organization_service.createOrganization

production service
3

Reserve fundraiser URL

fundraiser_slug: demo-youth-football-club-2025-001

url_reservation_engine.reserveSlug

production service
4

Create fundraiser campaign

fundraiser: fr_demo_platform_showcase_2026_001

fundraiser_service.createFundraiser

production service
5

Attach campaign clock

campaign_clock: clock_fr_demo_platform_showcase_2026_001

campaign_clock_service.createClock

production service
6

Create package/card allocation

fundraiser_package: pkg_demo_platform_showcase_2026_001

package_service.createFundraiserPackage

production service
7

Create seeded participants

participant: 8 participants

participant_service.createParticipants

production service
8

Create demo cards/entries

card: 40 cards

card_engine.createCards

production service
9

Create first-party share links

share_link: group + participant + card links

share_engine.createShareLinks

production service
10

Register demo metadata for safe cleanup

demo_record_metadata: 52 metadata rows

demo_repository.registerDemoRecord

demo orchestration

Data Readiness

Selected demo data source

ready

2025 hydrated NFL data

Use the already-hydrated 2025 NFL data to replay realistic rosters, weeks, scoring periods, and leaderboards through production logic.

Source

hydrated_nfl

Year

2025

Can Create Demo

Yes

player pool weekly stats scoring replay leaderboard replay roster generation

Production Scoring Boundary

Scoring Period Resolver

2025_week_07

Demo timelines must resolve to a normal campaign scoring period before leaderboard/scoring services run. The demo clock controls the period; the real scoring and leaderboard engines should consume the resolved query.

Season Data

2025

Week

Week 7

Source

manual_admin_control

Scope

campaign

Leaderboard query shape

{
  "fundraiserId": "fr_demo_platform_showcase_2026_001",
  "leaderboardScope": "campaign",
  "dataSource": "hydrated_nfl",
  "dataYear": 2025,
  "nflSeason": 2025,
  "scoringWeek": 7,
  "scoringPeriodId": "2025_week_07",
  "source": "manual_admin_control",
  "demoDataQuery": {
    "fundraiserId": "fr_demo_platform_showcase_2026_001",
    "dataSourceId": "hydrated_nfl_2025",
    "source": "hydrated_nfl",
    "year": 2025,
    "scoringWeek": 7,
    "scope": "campaign",
    "requiredCapabilities": [
      "player_pool",
      "weekly_stats",
      "scoring_replay",
      "leaderboard_replay"
    ]
  }
}

Database Write Boundary

Demo Persistence Boundary

noop

Demo write adapters are intentionally no-op until the schema is migrated and production safeguards are confirmed.

demo_session

demo_session_demo_platform_showcase_2026_001

not persisted

Demo session database writes are not wired yet.

campaign_clock

clock_fr_demo_platform_showcase_2026_001

not persisted

Campaign clock database writes are not wired yet.

Database Tracker

Demo schema requirements

These fields and tables are required before demo creation writes to the production database.

demo_audit_events

Audits demo previews, create attempts, readiness checks, safety checks, scoring-period resolution, lifecycle actions, and cleanup previews.

demo_audit_event_idevent_typedemo_batch_iddemo_session_idactor_user_idriskentity_type

demo_lifecycle_events

Audits demo activation, pause, resume, reset, expire, archive, and delete actions.

demo_lifecycle_event_iddemo_session_iddemo_batch_idaction_typesource_statustarget_statusactor_user_id

demo_invites

Stores invite-only demo access tokens for prospects, investors, staff training, and sales walkthroughs.

demo_invite_iddemo_session_iddemo_batch_idinvite_token_hashemailaccess_modemax_uses

demo_data_sources

Tracks hydrated, synthetic, and replay data sources available to demo campaigns.

demo_data_source_idsourcedata_yearstatusrecommendedcapabilities_jsondescription

demo_record_metadata

Tracks every production-shaped demo record by batch/session for safe cleanup.

demo_record_iddemo_batch_iddemo_session_identity_typeentity_iddemo_purposedemo_access_mode

demo_sessions

Represents a public, invite-only, staff, investor, or sales demo run.

demo_session_iddemo_batch_idpreset_idstatusaccess_modecreated_by_user_idcreated_by_type

campaign_clocks

Allows real, manual, and simulated campaign time without changing scoring logic.

campaign_clock_idfundraiser_idcampaign_time_modedemo_data_sourcedemo_data_yearsimulation_profilesimulation_started_at

Production table demo fields

is_demodemo_batch_iddemo_session_iddemo_purposedemo_expires_atdemo_delete_after_at

Indexes to create

INDEX demo_audit_events_batch_idx (demo_batch_id)INDEX demo_audit_events_session_idx (demo_session_id)INDEX demo_audit_events_event_type_idx (event_type)INDEX demo_lifecycle_events_session_idx (demo_session_id)INDEX demo_lifecycle_events_batch_idx (demo_batch_id)INDEX demo_invites_session_idx (demo_session_id)UNIQUE demo_invites_token_hash_uidx (invite_token_hash)UNIQUE demo_data_sources_source_year_uidx (source, data_year)INDEX demo_record_metadata_demo_batch_id_idx (demo_batch_id)INDEX demo_record_metadata_entity_idx (entity_type, entity_id)INDEX demo_sessions_status_expires_idx (status, expires_at)INDEX campaign_clocks_fundraiser_id_idx (fundraiser_id)