Widget builder

Build custom overlays with your project's LIVE metrics, then drop the result onto your website or into an OBS scene. The builder lives in the dashboard, generates a saved widget per project, and serves a single lightweight runtime that updates itself in place every few seconds.

Streaming on OBS? Try Stream Studio first - a full-screen overlay editor with curated presets, no dashboard login. Widget builder is better for site iframes and project-owned widgets saved in your account.
Two ways to embed: paste an iframe (zero JS) or install @latrinebot/widgets for programmatic mounting, theming, and React-friendly usage. Source on GitHub. See the Developers guide for snippets.

What it is and what it is for

The widget builder is a drag-and-drop editor that turns a JSON widget config into a compact, themable HTML overlay. Every widget is tied to one project, so the numbers and ticker shown by the widget are always the LIVE counters of that project (Creator fees claimed, To holders (SOL est.), Holders paid, Eligible now, Tokens burned, Airdrops sent, Last event, Event log, etc.). The widget is published behind a stable URL and a short embed snippet. No secrets or API keys are exposed to the browser - the public widget endpoints proxy and cache live data on the edge for you.

Typical uses:

Open the builder

  1. Open the dashboard and connect the wallet that owns the project.
  2. Use the side rail and click Widget.
  3. The builder loads the first widget for the current project. If none exist yet, you start from a sensible default (stats grid with a status row, ticker and event log).

Switching projects in the top selector automatically re-loads that project's widgets. The builder never reads or writes the bot's airdrop logic - editing widgets is safe and isolated from cycles, claims and tiers.

Builder layout

Block types

BlockWhat it shows
Bot statusColoured dot + LIVE-active / LIVE-idle text.
Token ticker$SYMBOL pulled from the project's resolved DexScreener symbol.
Custom textArbitrary label, edited in the inspector. Useful for headings and disclaimers.
Divider lineVisual separator only - no data.
Stat: Airdrops sentNumber of LIVE airdrop disbursements.
Stat: To holders (SOL est.)Estimated SOL value distributed to holders (accounting estimate, not a sum of transfers).
Stat: Holders paidDistinct wallets that received airdrops.
Stat: Eligible nowHow many holders are eligible in the most recent snapshot.
Stat: Tokens burnedTotal tokens burned (human readable, includes ticker when available).
Stat: Creator fees claimedTotal SOL claimed across LIVE cycles.
Last eventLatest LIVE log line (timestamp, tag, body).
Event logScrollable list of recent LIVE events. Configurable line count (1-30).

All stat values are mainnet LIVE counters. Legacy non-LIVE cycle data is never included in the public feed, so widgets stay honest in front of holders.

Canvas and zoom

Customize blocks

Click any block to select it. The inspector on the right shows every editable property:

Themes and global overrides

Pick a base theme from the canvas toolbar (Medieval, Stream dark, Stream light, Minimal, OBS transparent, Cyberpunk, Pastel, Brutalist) and then refine it in the Theme overrides card:

Layout presets in the top toolbar (Stats row, Stats grid, Log focus, Stream HUD) reset the blocks to a curated starting point while keeping your current canvas background and transparency setting.

Save and Enabled toggle

Click Save to push the widget to the API. The first save creates a new widget id; subsequent saves update the existing one. The Enabled checkbox controls public visibility - if you disable a widget, the public endpoints return 404 so the embed stops rendering, but the saved config is preserved.

Use the widget list in the right card to switch between saved widgets, delete the one currently open, or come back to one later.

Export and embed

After saving, the Export & embed panel below the canvas activates:

Use on a website

<iframe
  src="https://latrinebot.com/embed/?id=YOUR_WIDGET_ID"
  width="480" height="560"
  style="border:0;background:transparent"
  loading="lazy"
  title="Live token metrics"></iframe>

The iframe is fully self-contained - no scripts on your page, no CORS to configure, the widget refreshes itself.

Use in OBS Browser Source

  1. In the dashboard, click Copy widget URL.
  2. In OBS: Sources -> + -> Browser.
  3. Paste the URL. Set Width and Height to match your canvas size (visible in the W / H inputs).
  4. Tick Refresh browser when scene becomes active if you want a hard reload on scene change. Otherwise the widget polls automatically.
  5. If you built the widget with a transparent canvas, the Browser Source will render with a transparent background out of the box.

Self-hosted download

Download .html file produces a single file that loads the runtime and config from our API. Place it anywhere you can host a static HTML file - the widget will render and refresh exactly like the iframe version.

Privacy and limits

Tips and FAQ

Ready to build? Open the dashboard and select Widget.