⚙️ How an Ad Gets Served

A publisher pastes a small embed snippet (<div> + <script src="…/embed.js?slot=…">) on their page. Each load hits serve.php, which:

  1. Runs fraud checks on the request (rate limit, duplicate fingerprint, bot user-agent).
  2. Picks one ad via a weighted-random draw among eligible candidates, restricted to the slot's format (text/image share a "text_image" slot format; audio and video are their own).
  3. Records the impression and applies credit (unless the request was fraud-flagged).
  4. Renders the creative styled to match the slot's colors, font, and corner radius, wrapped in an iframe.

Eligibility for the Weighted Draw

The advertiser's account must be active with a positive credit balance, and the ad must be active. A member's own regular ads are structurally excluded from their own slots (self-serving guard) — this can't happen even if fraud checks are bypassed.

House ads (admin-created, is_house = 1) are exempt from that self-serving guard and don't require advertiser balance — the platform covers the publisher's credit instead of debiting an advertiser. A slot owner's own house ads compete directly in that slot's normal weighted draw; other members' house ads only kick in as a fallback when zero real ads are eligible for a slot.

Each ad has a weight (default 100) that sets its odds in the draw relative to competing ads — adjustable per-ad by an admin.

See it running live

Create a slot and watch impressions, clicks, and credits update in real time.

🚀 Get Started Free