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/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>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-codesAction 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.