DashForge
← All work

Tournament organisers

Pairings and standings for chess clubs, card shops and fighting-game events

Gambit is for whoever ends up running the tournament, usually a volunteer with a laptop and forty players waiting on round two.

CloudCustom

/organise/[id]
Gambit on a desktop: Running the event
Gambit on a phone: Running the event
About Gambit

Gambit is for whoever ends up running the tournament, usually a volunteer with a laptop and forty players waiting on round two. Pairing by hand is slow, and when someone asks why they drew the top seed there's rarely a good answer. Gambit makes the draw for Swiss, round-robin and double-elimination events from the entry list and a published seed, so anyone can rerun it and get the same result. Standings show the tiebreaks that decided them, and players follow along on a public page from their own phones.

Pairings
Reproducible

same entries and seed, same draw

Tiebreaks
Shown

as columns, set per event

Event page
Public

a link, no account

What it does

What does Gambit do?

  • Swiss, round robin, double elimination

    Three formats from one entry list. Byes, drops and the player who turns up ten minutes late are all handled.

    /e/[slug]
    Gambit: Before round one
  • Tiebreaks on screen

    Chess and card games break ties differently, so each event picks its own tiebreaks and they show as columns in the standings.

    /e/[slug]
    Gambit: The public cross-table
  • Public event page

    Players, and the parents waiting in the car park, open pairings and standings from a link with no account.

    /me
    Gambit: A player's record
The problem

What problem does it solve?

Round two should have started five minutes ago. The organiser is pairing by hand, or in old software on the one laptop that runs it, and the standings will end up as a photo in the group chat. Then a player walks over and asks why they drew the top seed, and there's no way to show them how it was decided.

How the demo handles it

The pairing code is the heart of the app. It never touches the database or the clock and has no hidden randomness, so a draw can be recreated from the published seed. Each event sets its own tiebreaks and they are always on screen. Every event has a public page that needs no login, so players stop crowding the organiser's table.

  • Projector view

    Pairings, standings and a round clock, sized to read from the back of a church hall.

  • Cross-table as a PDF

    The results sheet an organiser posts after the event, generated straight from the results.

  • Player records

    Each player gets a rating that carries across events and a head-to-head record against everyone they've played.

Try it yourself
/e/[slug]
Gambit: Before round one, on a desktop
Gambit: Before round one, on a phone
/me
Gambit: A player's record, on a desktop
Gambit: A player's record, on a phone
Design choices

Why is it built this way?

  • Every draw can be reproduced

    Pairings come from the event's entries and a published seed number. The same inputs always give the same draw, so anyone who doubts a pairing can check it for themselves.

  • Swiss pairing uses minimum-cost matching

    Simpler methods can't avoid rematches, keep score groups together and balance colours all at once. The pairing code has no database access and is covered by tests.

  • A bye doesn't count as a win against anyone

    Counting a bye as a beaten opponent quietly inflates other players' tiebreaks. A player who withdraws keeps their results for the same reason.

  • Unpublished rounds stay hidden

    The public page leaves out any round the organiser hasn't published and recalculates the standings without it, so nobody sees results before the organiser is ready.

Screens

What does it look like on a computer and a phone?

The organiser's screen between rounds: enter results, make the next draw and publish it.

/organise/[id]
Gambit: Running the event, on a desktop
Gambit: Running the event, on a phone

What is it built with?

Common, well-documented tools, so any developer you hire later can pick it up and keep working on it. Hover over or tap any of them to see what it does.

Who uses it

Who would use Gambit, and when?

  • Enters twenty names, pairs five rounds of Swiss, and has the cross-table posted before they've locked up.

    A club organiser on the first Tuesday of the monthScenario

  • Publishes each round from behind the counter while players check their table number on their own phones.

    A card shop owner on a Saturday afternoonScenario

  • Opens the standings, reads the tiebreak columns that put them on board six, and goes back to their game.

    A player sure the pairing was unfairScenario

FAQ

What do people ask about Gambit?

  1. 01Can I try Gambit before talking to anyone?

    Yes. The demo is a working app with sample data. Ask for access and we'll email you a sign-in link. Nothing you change there affects anyone.

  2. 02Is it cloud or local?

    Cloud. Your team signs in from anywhere, on a phone, a laptop or the shop computer.

  3. 03Is it premade, adapted or custom?

    Custom. We'd build yours from scratch, using this demo as the starting point for the conversation.

  4. 04What does it run on?

    Next.js 16, TypeScript, Supabase, PostgreSQL, Row-level security, React PDF, Generated share cards, Magic-link sign-in.

  5. 05What problem is it solving?

    Round two should have started five minutes ago. The organiser is pairing by hand, or in old software on the one laptop that runs it, and the standings will end up as a photo in the group chat. Then a player walks over and asks why they drew the top seed, and there's no way to show them how it was decided.

Want to try Gambit?

It's a working app with sample data. Ask for access and we'll email you a sign-in link, usually within a business day.

Request the demo