Not a calendar with extra steps — the mechanics are built for a schedule that changes all day.
Live drag-and-drop board
Snap sessions onto a time × room grid. Every move, resize, and swap syncs to everyone watching — instantly, no refresh.
Parking lane
Pitch a session before it has a home. Drag it onto the grid when it's ready, or back off the grid if plans change.
Take turns, without the waiting
A visible queue paces who schedules next — it never locks the board, so nobody is stuck behind whoever stepped out for coffee. Or let anyone grab a free slot. Either way, a server-side atomic check means two people can never win the same slot.
Negotiation, not collisions
Drop onto a taken slot and nothing breaks silently: organisers can override, anyone else sends a nudge asking the incumbent to move.
Tombstones, not silent deletes
A cancelled session stays visible — struck through, slot freed — so favouriters know what happened instead of finding a gap.
Roles that fit real events
Organiser, Co-organiser, Speaker, Attendee — each with exactly the right amount of power, per conference, not globally.
Invite-gated by default
Named invites for specific people, shareable links for the crowd. Public links only ever grant Attendee — never more.
Self-hosted, no lock-in
SvelteKit + FastAPI + SQLite behind one Docker Compose file. Your schedule, your server, your data.
Presentation mode
Spotlight one pitch at a time on a shared screen, full name and all — it slides into place on the schedule the moment it lands. Give any room its own code-locked screen, no login required.