PodiumRun the demo
Open-source conference program management

Run the whole program from an account in your name.

The call for proposals, the review, the sponsor sessions, the chase for bios and slides, the schedule your website embeds. MIT-licensed. It deploys to your Cloudflare account, and the only bill is Cloudflare's.

No per-speaker pricing. No seats, no quote, no sales call, and no data you cannot export.

The agenda screen: a panel naming two conflicts that block publication, above a room-by-time grid with sessions placed across Main Stage, Room 2A, Room 2B and the Workshop Lab.
The move

Leave in three steps.

Deploying is two commands. What costs you is the part that does not come across.

Nobody has publicly moved a live conference onto this yet. The import is built and tested; the first migration off a commercial tool is still ahead of us. If it is yours, the issue tracker is where it goes.

$0to licence, for every event you will ever run
$5a month, the one fixed line, on Cloudflare's price list
  1. Deploy it into your own account

    A D1 database, a KV namespace, an R2 bucket and three queues, then two commands. The hostname is yours, and the app only ever learns it at deploy time.

    npm run deploy:migrate
    npm run deploy
  2. Bring last year's people in as a CSV

    Columns headed Speaker Name, E-mail and Employer map themselves, and you see what will be created, updated and rejected before a row is written. People and the roster arrive that way. Last year's sessions, scores and decisions do not arrive at all.

  3. Open the call

    Build the form, publish it, invite the speakers you already know. There is no password for a speaker to set: they arrive on a link the event emailed them.

What a switch costs, and what has no equivalent here →

Sound familiar?

The six questions you cannot answer from a spreadsheet.

Every one is somebody waiting on you. Podium answers all six from one record of the program.

Who still hasn't sent a bio?

One board of what everyone still owes you, per speaker and per sponsor. Reminders go out without you.

Two reviewers work with the submitter.

A declared conflict refuses the score. Nothing is flagged for someone to catch later.

How many sessions does this sponsor actually get?

Used against bought, counted from the contract, on the same screen as the deal.

Two talks, one room, same slot.

The agenda catches it as you drop the card, not an attendee on the day.

The website schedule is two versions behind.

Publish a snapshot your site embeds. Roll it back in one click.

Every speaker emails me to ask where their talk stands.

They sign in and see status, next action, deadline, and what you still need.

Built with agents

A codebase a model can read, and change.

The rules live in a document written before the code, and the code is held to it. Ask an agent for behaviour the document does not cover and it stops instead of inventing it. When the two drift apart, the build fails.

Your own agent drives Podium through the management API rather than a browser. A refusal comes back typed and names the reason, not 400 Bad Request. There is no MCP server and no OpenAPI document; the API was built for a machine to call, and the specification was written for one to read.

MIT-licensed, so the fork is yours. It inherits the document and the check that fails when the code disagrees with it. A change you make is a merge you own, and nobody has run that upgrade in public yet.

The first-pass AI review is built and off. Switch it on and its scores sit beside your reviewers' rather than inside them. The evaluator that ships calls no external model.

The rules, written down before the code →

Agent · onboarding
12 onboarding tasks not started, 27 done
reminded 1 speaker · 0 suppressed
writing a review is that person's own statement and cannot be done with an API key
A run against the demo conference, in full. The last line is what it was not allowed to do.
What it looks like

Three of them, on the running product.

Photographs of Podium against its own seeded conference. The other three are on the features page.

Stop chasing people for bios.

Say once what an accepted speaker owes you: headshot, bio, slides, code of conduct, AV requirements. Podium tracks every one, for sessions and sponsors alike, and sends the reminders itself.

Mark a task blocking and it keeps that session off the public schedule. You find out now, not on the morning of the event.

The onboarding board: counts of open, blocking, overdue and completed tasks, over a row for each session and each required task with an assignee, a status and a due date.

Review that holds up when someone asks.

Reviewers get a queue, a rubric and a progress bar. Not a shared sheet with a hundred rows. A reviewer who submitted, is credited on, or has declared a conflict with a proposal cannot score it — the write is refused, not logged for someone to notice.

Run it open, single-blind or double-blind. Every score, comment and decision is recorded, so "why was this rejected" has an answer a year later.

A reviewer's queue: a progress bar reading 7 of 7 done, over a card per assigned proposal with its reference, title, track, format, status and due date.

Sponsor sessions are not an afterthought.

A sponsor session is paid for, not selected. It still needs content review, onboarding and a slot on the schedule. Most CFP tools model the call for proposals and leave this half in email.

A package is a countable set of entitlements: two session slots and a logo placement, one spent, two still open. The sponsor sees the same count you do.

A sponsorships table showing three sponsors, their tier, and a progress bar of entitlements used against entitlements bought.

The full tour: all six screens, and the parts nobody demos →

It talks to the rest of your stack

Keep your email provider, your spreadsheet and your site.

Podium sends through Resend or SendGrid, posts intoSlack, and mirrors the program two ways into Airtable. The core imports no provider's SDK, so swapping one for another is an install and a default.

email.resend

Mail you can audit

Templates, quiet hours, batching and suppression stay on Podium's side; the provider only puts the message on the wire. "Did they get the acceptance email?" is a query, not a guess.

sync.airtable

Two-way sync that loses no edit

An edit in the linked table applies only against the version Podium last pushed. A losing edit is not discarded; it goes into a conflict queue showing both values.

Adapters you can install today

  • Resend
  • SendGrid
  • Slack
  • Airtable
  • Cloudflare Workers

Every integration, and the contract behind it →

Yours, actually

Six things that are true before you look at a single screen.

None of these is a feature. They are consequences of how it is built.

Agents built it, and your agent can change it

The rules were written down before the code, and they are still the specification the code answers to. An agent that tries to build outside them stops. A check in the build fails when the code and the document disagree. Fork it and your own agent inherits the same guardrails.

164written rules, checked against the code in CI

What survives your changes →

It deploys into an account in your name

Your Cloudflare account, your database, your bucket, your speakers' data. Nobody here can read it, because nobody here has it. Everything comes back out as CSV or over API keys you issue, and a key for your marketing site cannot read a review or a speaker's email.

22API scopes, personal data its own

Where your speakers' data lives →

Read every line, and pay for none of it

MIT-licensed and on GitHub. No seats, no per-speaker charge, no activation code per conference, no edition that costs more. There is no company here to reprice it once you depend on it, and the licence on the version you hold cannot be revoked.

MITno tiers, no quote, no sales call

The bill, itemised →

One record runs the whole year

The call for proposals, review, decisions, speaker onboarding, sponsor entitlements, the agenda and the schedule your website embeds. Not six tools that each own a fifth of the year and disagree about who is speaking. Attendee ticketing and badging are the part it deliberately leaves alone.

6screens covering the year end to end

The full tour, screen by screen →

Sponsor slots are counted, not chased

A package is a countable set of rights — two session slots, a logo placement — and a sponsor session spends one. Used against bought, on the same screen as the deal. A submission that would overspend a package is refused, and cutting a package below what the sponsor has already spent is refused too.

Spend a slot and watch the count →

Every change leaves on a signed webhook

A proposal accepted, a task completed, a schedule published: each one goes out signed, to whatever you point it at. Retries back off from a minute to a day, and twenty failures in a row pause the hook. When your endpoint is back, replay that event type across the window it missed.

136named events you can subscribe to

What comes out on the wire →

763tests, unit and integration
193endpoints on one versioned API
510URLs in the app; a new one without a permission check fails the build

The rules, written down before the code →

Before you decide

It is not the right tool for every conference.

Podium does no attendee registration, no badging and no ticketing, and there is no hosted tier, so somebody deploys it. If that rules it out, the switching page names what to buy instead.

Podium against Sessionize and Sessionboard →

TermPodium
LicenceMIT, $0, every event you run
HostingYour Cloudflare account, from $5 a month
Your dataYour D1 database, exportable as CSV
Attendee ticketingNot offered
Hosted tierNot offered — you deploy it

See it with a conference already in it.

A three-day event mid-flight: proposals in every state, real review scores, sponsors part-way through their entitlements, an agenda with conflicts. Sign-ins for the chair, a reviewer and a speaker are on the page.