Architecture

Partner platform model

Hookedin is a B2B lotto engine. Partners own the customer relationship, embed the player-facing iframe, and share one independently verifiable Bitcoin-based round ledger.

Entity model

EntityUserThe authenticated account that owns partner sites and logs in with email-only magic links.
EntityPartner siteThe B2B embed tenant: name, display name, theme, status, commission, and public payout Bitcoin address.
EntityPlayer identifierThe partner-provided public/private player identifiers passed in the iframe URL. They are attribution only.
EntityTicket orderA private pre-funding receipt with a deposit address and immutable partner snapshots.
EntityTicket slipThe funded public ledger entry created after confirmed payment and assigned ticket range.
EntityRoundThe shared prize-pool window. Every partner contributes to one global ticket sequence.
EntityPartner winThe dashboard record created when a partner slip contains the winning ticket.
EntityPayout PSBTThe admin-generated Bitcoin transaction that pays the winning slip payout address.

Lifecycle

  1. A logged-in user creates a partner site and acknowledges that the payout Bitcoin address is public.
  2. The partner copies the generated iframe snippet and replaces the public/private player identifier placeholders.
  3. A player opens the partner page, and the iframe loads without a Hookedin session, cookies, or local storage dependency.
  4. The player creates an order and receives a deposit address derived from the configured wallet account.
  5. The scanner sees confirmed payments, records outpoints, and creates or updates the funded ticket slip.
  6. Ticket ranges are assigned in one continuous round-wide sequence across every partner site.
  7. When the round closes, the Bitcoin closing block hash determines the winning ticket.
  8. If the winning slip belongs to a partner site, the dashboard shows the slip and private user identifier for partner crediting.
  9. An admin generates, signs, and broadcasts the payout PSBT for the winning slip payout address.

Product rules

One shared poolThere is no per-partner prize pool or partner-specific draw. Partner totals are reports over the shared ledger.
Immutable snapshotsOrders and slips snapshot partner display name, payout address, commission, ticket price, and user attribution at creation time.
Public payout addressThe payout address must be shown before purchase because it can appear in receipts, partner pages, round records, and payout records.
Small theme contractThe first release accepts only an accent color. Arbitrary CSS is intentionally excluded to keep the iframe predictable.
No embedded loginPlayers authenticate with the partner, not Hookedin. The iframe treats user identifiers as labels, never as authority.
Verifiable drawThe winner algorithm depends on round number, closing block hash, sold ticket count, and ticket ranges, not partner metadata.

Embed contract

FAQ
<iframe
  title="Demo Partner Lotto"
  src="https://hookedin.example/embed?partner=demo-partner&endUserPublicIdentifier=PUBLIC_PLAYER_ID&endUserPrivateIdentifier=PRIVATE_PLAYER_ID"
  style="width:100%;max-width:560px;height:760px;border:0;"
  loading="lazy"
  referrerpolicy="strict-origin-when-cross-origin"
></iframe>

The public identifier appears in public ledgers. The private identifier is kept for receipts and partner win records. Do not use passwords, session tokens, emails, real names, wallet addresses, or anything sensitive as the public identifier. User identifiers must be 120 characters or fewer and may contain only letters, numbers, spaces, periods, underscores, and hyphens.