Real-time collaborative · WCAG 2.1 AA

Design the room.
Sell every seat.

SeatNG is a venue seat-chart editor and an embeddable buyer-facing picker in one. Place rows on a canvas, publish a version, and drop the picker into any site with a single iframe.

WASM-rendered, 60fps Operation-based sync Parallel keyboard DOM
Two modes, one renderer

Admin editor and buyer picker
share a single canvas.

The same WASM renderer powers collaborative layout design and a read-only picker your customers use to pick seats. Zero drift between what you design and what they see.

MODE · LAYOUT EDITOR

Place rows. Curve them. Publish a version.

Drag out arced rows, snap seats to a grid, mark ADA positions, and collaborate with the rest of your team in real time. Last-write-wins per element — conflicts are rare, visible, and fixable.

  • Arced rows, sections, stages, labels
  • Category assignment & color coding
  • Operation-based sync, debounced persistence
Select · Hand · +Seat · +Row STAGE sam 2 seats selected Row B · B4–B5 Category Premium
MODE · BUYER-FACING PICKER

Drop into any checkout with one iframe.

An embed-ready, read-only picker with live hold TTLs, keyboard navigation, and a parallel DOM for screen readers. Your buyers get 60fps panning and zooming without touching your page's CSS.

  • 30-second server-held seats with PubSub broadcast
  • Parallel keyboard DOM · WCAG 2.1 AA
  • JS embed & Ruby SDKs included
3 seats selected C4, C5, C6 · Premium Continue →
Under the hood

Serious engineering, friendly surface.

Everything that makes the canvas feel fast, the picker feel trustworthy, and the admin tools feel stable — without the boilerplate.

Operation-based sync

Optimistic local edits validated by a Rustler NIF and broadcast via Phoenix Channels. Sub-frame latency, with server-side authority.

30-second holds

Seat holds live in a GenServer with Process.send_after. No DB polling, no stale carts.

Accessible by default

The picker ships with a parallel keyboard DOM, ARIA row/seat labelling, and WCAG 2.1 AA color contrast on every status state.

Embed SDK

JavaScript, Ruby, and a REST API with public embed keys per org. Per-origin allowlist, scoped tokens, webhook deliveries for booking events.

Versioned charts

Every publish creates an immutable chart version. Events pin to a specific version so you can keep editing the next revision in peace.

Multi-tenant orgs

Orgs, members, roles. Built for agencies running many venues or ticketing partners embedding into many sites.

The embed moment

From chart to checkout in six lines.

Publish a version, create an event, paste the snippet. The picker respects your theme, honours your origin allowlist, and fires webhooks when a hold or booking lands.

Read the embed docs View SDK reference →
// embed the seat picker for Spring Gala 2026
<iframe
  src="https://app.seat-ng.com/pick/
    50dfad33/events/spring-gala-2026"
  width="100%"
  height="640"
  allow="clipboard-write">
</iframe>
How it works

Four steps from signup to live sales.

STEP 01
Create an org

Sign up, name your org, add teammates. One account can hold many organisations and many venues.

STEP 02
Design the chart

Draw rows, curve them, tag ADA seats, assign categories. Multiple admins can edit the same canvas.

STEP 03
Publish an event

Create an event, pin it to a chart version, and get an embed key for each origin you trust.

STEP 04
Drop the iframe

Paste the snippet into your ticketing page. Buyers pick seats; your webhook receives bookings.

60fps Canvas 2D render loop
5kseats Per chart, comfortably
30s Hold TTL, configurable
WCAG2.1 AA Parallel keyboard DOM

Ready to design a room?

Start with the demo venue. No credit card, no integration required.

Create a free org Talk to us