ODObserverDraw
Architecture

Cloudflare-first giveaway platform

Public pages and widgets are static. APIs run as Pages Functions. D1 stores relational application data. R2 stores media and exports. The manage site owns migrations.

observerdraw-web/
  public/
  functions/api/v1/
observerdraw-manage/
  public/
  functions/_db/migrations/
observerdraw-items/
  requirements/
Embed

Widget loader

The initial embed loads a hosted iframe. Later it can evolve into a richer widget runtime.

<div id="observerdraw-widget"></div>
<script src="https://observerdraw.com/widget/v1.js"
        data-slug="my-giveaway"></script>
External API

API keys for creators

Create scoped API keys in the manage site. Use Bearer auth for Streamerbot, OBS overlays, secret codes, user/entrant exports, and custom automation.

Authorization: Bearer od_live_...
GET /api/v1/external/draws
POST /api/v1/external/draws
GET /api/v1/external/users
POST /api/v1/external/secret-codes
Actions

Action adapter framework

Secret Code, Visit Page, Bonus, Daily Bonus, Custom, Twitch, Kick, YouTube, Discord, Steam, X, Instagram, Bluesky, and more can share the same action model.