Tooling
Widgets.
Web components that drop ticketing into any page. Two ship today an event card and a checkout launcher with the selector, in-page scanner and buyer wallet on the roadmap.
Load the script#
One tag registers every element. The bundle is plain JavaScript with zero dependencies, served from this site about 5 KB, Shadow-DOM isolated so your styles and ours never collide.
<script src="https://zatabox.com/v1/widgets.js" defer></script>The widgets#
| Field | Description | |
|---|---|---|
zatabox-event-card | live | A pre-styled card for an event title, date, venue, from-price and a Get-tickets link. Emits zatabox:loaded. |
zatabox-checkout | live | A button that opens the hosted purchase flow (passwordless: full name + email, then pay) in a centered popup. Emits zatabox:opened. |
zatabox-ticket-select | roadmap | Standalone ticket selector emitting a select event for fully custom flows. |
zatabox-scanner | roadmap | QR check-in in the browser via the device camera. Today, staff scan at zatabox.com/scan. |
zatabox-my-tickets | roadmap | The buyer's ticket wallet. Today, tickets are delivered by email (PDF + door code). |
Use it#
Point a widget at an organization and event by their public IDs (both are shown in the organizer portal under Customize → Public URLs). The checkout launcher hands the buyer to the same purchase pipeline the hosted event page uses name, email, pay so there is nothing else to integrate.
<script src="https://zatabox.com/v1/widgets.js" defer></script> <!-- A pre-styled event card for listings and landing pages --><zatabox-event-card org-id="9f2b7c1e-…" event-id="5e6f7a8b-…"></zatabox-event-card> <!-- A checkout launcher opens the hosted passwordless purchase flow (name + email + pay) in a centered popup --><zatabox-checkout org-id="9f2b7c1e-…" event-id="5e6f7a8b-…" label="Get tickets"></zatabox-checkout>Listen for events#
Widgets announce what they do with DOM events, so your analytics keep working without a callback API.
const el = document.querySelector('zatabox-checkout') el.addEventListener('zatabox:opened', (e) => { console.log('checkout opened', e.detail.url)}) document.querySelector('zatabox-event-card') .addEventListener('zatabox:loaded', (e) => { console.log('card rendered for', e.detail.eventId) })Theming#
Widgets style themselves with CSS custom properties, so they inherit your brand the same way the rest of your page does. Light and dark are both supported override the variables per scheme and you're done.
<style> zatabox-checkout, zatabox-event-card { --vt-accent: #0E3B2E; --vt-radius: 12px; --vt-font: 'Inter'; } @media (prefers-color-scheme: dark) { zatabox-checkout { --vt-accent: #B8A6FF; } }</style>Notes#
- ~5 KB total, no dependencies, no build step.
- Shadow DOM isolation your CSS stays yours.
- Zero Zatabox branding on your page the pixels are yours.
- Framework wrappers (
@zatabox/react,@zatabox/vue,@zatabox/svelte) follow with the selector widget. - Self-hosting? Pass
api-baseandsite-originattributes to point the widgets at your deployment.