LiveMultiplayer demo rooms — no sign-up

Where engineering meets real-time velocity.

Syncra is a collaborative Kanban engineered like infrastructure: typed from database to pixel, one-row writes per drag, and every move mirrored to your team the instant it happens.

How it works

By creating a room you agree to the Terms of Service and Privacy Policy.

private sandbox per room up to 6 people auto-expires after 24h idle

written per drag, at any column size
1 rowwritten per drag, at any column size
types across client, API and database
0 anytypes across client, API and database
to evict a dead connection from presence
≤10sto evict a dead connection from presence
to pull a teammate into your live room
1 URLto pull a teammate into your live room

Architecture

Built like infrastructure, felt like magic.

Every interaction you’ll try in the demo is backed by a deliberate engineering decision.

End-to-end type safety

tRPC infers the API contract straight from the Drizzle schema. Rename a column and the compiler flags every component that reads it — no codegen, no drift.

kanban-grid.tsx
const board = useQuery(trpc.board.byId.queryOptions({ boardId }));
// board.data: { columns: { tasks: { number: number; priority: "urgent" | … }[] }[] }
board.data.columns[0].tasks[0].prioirty
// ✖ Property 'prioirty' does not exist. Did you mean 'priority'?

O(1) fractional indexing

Positions are sortable strings. Dropping a card between two others writes one key — never a renumbering cascade.

a0<a0V<a1

UPDATE tasks SET position = 'a0V' — 1 row

Advanced optimistic UI

The card lands before the network round-trip. In-flight refetches are cancelled, and a failure rolls back only the move that failed.

  1. t = 0card painted in its new slot
  2. t + RTTserver key reconciled
  3. on errorsurgical rollback + resync

Concurrent locking

Two people dropping into the same gap at the same millisecond? The destination column row is locked, writers are serialised, and both cards land in a correct, stable order.

task.moveTask
SELECT id FROM columns
WHERE id = $1 FOR UPDATE;
-- lock order: column → task (deadlock-free)
Aliceacquired
Brunowaits for lock
Brunoacquired → a0l

Live demo rooms

Send one link. Build together in seconds.

Each room is a real, isolated workspace in Postgres — not a mock. Invitees are seated as the next free teammate, automatically.

  1. 01

    Create a room

    A private workspace, board and six-person cast are provisioned in a single transaction. You’re seated as Alice.

  2. 02

    Share the link

    Hit “Share session” in the header. Whoever opens it is given the next seat that isn’t live — Bruno, then Chen…

  3. 03

    Move cards together

    Drags, new cards and presence stream over WebSockets. Rooms are sealed off from each other at every layer.

The cast — seated in join order

  • Alice

    seat 1

  • Bruno

    seat 2

  • Chen

    seat 3

  • Dana

    seat 4

  • Eli

    seat 5

  • Farah

    seat 6

See it sync. Bring a friend.

Open a room, send the link, and drag a card while they watch it move.

By creating a room you agree to the Terms of Service and Privacy Policy.