Roundtable

Decide it in the room.
Not in a group chat.

Real-time voting between the Android phones already around the table. One phone hosts, the others join over Bluetooth and Wi‑Fi, everyone votes against a shared clock, and the whole room lands on the same result at the same moment.

  • No internet
  • No server
  • No accounts
  • No ads

Coming to Google Play Android 7.0 and up · Google Play services · free, with a one‑time Pro upgrade

Why it works anywhere

The app does not have permission to use the internet.

Not as a setting you can switch on, but as a fact about how it is built: the INTERNET permission is not in the shipping app at all. There is nowhere for a vote to go except the host's phone, a few metres away.

So it works in a basement, on a plane, in a building whose guest Wi‑Fi nobody has the password for, and in a meeting where nobody wants to hand their email address to another app. An anonymous ballot cannot be leaked, sold or subpoenaed from us, because it never leaves the room and we never have it.

Finding each other

Bluetooth LE + Bluetooth Classic

The fastest way for one phone to notice another. This is what fills the roster.

Once connected

Wi‑Fi Direct, or Bluetooth

The link upgrades itself mid‑session to Wi‑Fi Direct or a Wi‑Fi hotspot when both phones support it, and stays on Bluetooth when they do not. Range is roughly 10 to 30 metres, depending on the building.

A whole session, seven steps

What the host sees, and what everyone else sees, at the same moment.

Two panes of one room. The left is the host's phone; the right is a voter's. Step through it, or let it run.

Host Dragan's Pixel
New vote×
What kind of vote is this?
Yes / No
Pick oneChosen
Pick anyPro
Votes you kept
Do we ship on Friday?Anon · 90s

Two answers written for you, a list you write, or a list the room marks any number of.

Question×
Ramen bar
Tacos
Salad place
Leftovers again
Clock30 s
Anonymous ballotOff · Pro
Approve who joinsOff · Pro
I'm voting tooOn
Open the room
You are hosting×
Room open · anyone nearby can see it
1
in the room
Quorum is 2 · met
Start the vote

The question stays on this phone until you start.

You are hosting×
Where are we going for lunch?
0/7
voted · 30s
Count so far — you can see this, the room cannot
Ramen bar0
Tacos0
Salad place0
Leftovers again0
Results×
Where are we going for lunch?
won
Tacos
60% · 3 of 5
Tacos3 · 60%
Marta, Ivan, Tomo
Ramen bar1 · 20%
Sam
Salad place1 · 20%
OnePlus 12
Did not vote2
Nokia XR20, Lena D.

5 of 7 in the room voted · 71% turnout · closed in 30s

Voter Marta's Pixel 8
Roundtable
Bluetooth on · Wi‑Fi on
Host a vote
Join a vote
Last
Do we ship on Friday? Yes · 6 of 7 voted

No code to read out. No link to send.

Find a vote×
Rooms near you
Looking

Nothing to type. The phones find each other over the radio.

You are in×
Room: Dragan's Pixel
waiting for
the host

The question is hidden until the host starts the vote, so nobody gets a head start on an answer.

Room: Dragan's Pixel×
Time to vote30
Where are we going for lunch?
Ramen bar
Tacos
Salad place
Leftovers again
Lock in my vote

One vote per phone. You cannot change it once it is locked.

Results×
Where are we going for lunch?
won
Tacos
60% · 3 of 5
Tacos3 · 60%
Ramen bar1 · 20%
Salad place1 · 20%
Did not vote2

Same numbers, nameless cells. A voter's phone is never sent the roster.

Step 1 of 7
Every message the phones can send each other
voter → host   hello     { displayName, voterId }
voter → host   vote      { pollId, optionIndex, optionIndexes[] }

host → voter   state     { phase, poll?, remainingMs, voterCount, votesCast,
                             yourVote, yourVotes[], youHaveVoted }
              poll      { id, question, options[], durationSeconds,
                             anonymous, maxChoices }
host → voter   ack       { accepted, optionIndex, optionIndexes[], reason? }
host → voter   results   { poll, counts[], voters, votesCast }
host → voter   pending   { reason }   waiting at the door
host → voter   nack      { reason }   turned away, with a reason
host → voter   bye       { reason }

That is the whole protocol. Compact JSON, straight over the local radio.
The host owns the clock, the roster and the tally; a voter's phone renders
what it is told and originates exactly one message of its own — a vote.
Three kinds of vote

Most meeting votes are a yes or a no. That should not need two empty boxes and a keyboard.

Free

Yes / No

Two answers, written in advance and still yours to reword — Approve / Reject, Agree / Disagree.

Free

Pick one

A list you write, of which the room chooses exactly one. Two to four answers free, up to eight with Pro.

Pro

Pick any

Each phone marks every answer it supports — approval voting. One ballot per phone, locked once. The tally counts approvals rather than people, so the shares legitimately add up to more than 100%.

What a room can do

Everything a chair actually needs, and nothing that needs a login.

Pro

Anonymous ballot

One switch, and the poll carries the promise on the wire, so every voter reads it on the ballot they are actually answering rather than taking the host's word for it. The choice is never written next to a name, the running tally stays sealed until voting closes, and the room is reseated the moment voting starts — otherwise position alone would give every blank seat its name back.

Pro

Approve who joins

Off by default, because a door policy is friction nobody wants for a lunch vote. Switched on, a phone the host has not seen waits for a nod. The decision is about the person, not the round, so an approved phone that drops out walks straight back in — and a phone in the wrong meeting can be removed from the lobby.

Phones lock, calls arrive, people step out

Every one of those looks exactly like a disconnect, so the round survives all of them. A phone is known by a durable id rather than by its connection, so someone who walks back in returns to their own seat with their own vote still theirs — never as an extra person with a second vote. Seats are held, not deleted, and one absent phone holds the vote open for 20 seconds before the room stops waiting.

Quorum, and the clock

A room can demand a minimum before Start the vote goes live — checked at the call, the way a parliament does it. Once it is running, the host can buy the room another 30 seconds as often as the discussion needs, or close early the moment the answer is obvious. A round also closes itself as soon as everyone has answered.

The host is a person in the room

So by default they get a seat and a ballot like everybody else, reached by tapping instead of by radio. Turn I'm voting too off to chair a vote without taking part. Either way, starting a vote needs at least one other phone — your own seat is not a room.

Past votes, saved questions, and the minutes

Every result is kept on the host's phone — outcome, turnout, date, and months later, who voted how. Keep up to twenty questions to reopen; each saved row shows the clock and every switch it will restore before you tap it. Handing the room a CSV for the minutes is the Pro half.

Fourteen languages

English, German, Dutch, French, Italian, Spanish, Portuguese, Polish, Turkish, Russian, Ukrainian, Croatian and Serbian in both scripts. Each phone picks its own, and the notices that matter — the host ended the session, you were removed, you were not let in — arrive in the reader's language, not the host's.

Readable across a table

Sized for a phone lying flat, read at arm's length, by someone who is talking to other people: nothing that carries meaning below 19sp, four type sizes per screen, and light and dark themes with every contrast ratio measured rather than claimed. Colour is never the only channel — seats are seated by what they chose, the legend names it, and every seat speaks its own choice to a screen reader.

Free and Pro

The free tier is not a smaller room.

Host as many votes as you like, with as many people as the radios can carry, forever, with no counter and no ads. Pro is one payment, once — nothing to renew and nothing to cancel — and your phone remembers it offline, which is where this app is used.

 FreePro
Votes you can hostUnlimitedUnlimited
People in a roomAs many as the radios carryThe same
Yes / No and Pick oneYesYes
Answers per question2 to 4Up to 8
ClockUp to 60 secondsUp to 5 minutes
Pick any (approval voting)Yes
Anonymous ballotYes
Approve who joinsYes
Past votes keptYesYes
Saved questions2020
CSV export for the minutesYes
AdsNoneNone
What you need

Two Android phones in the same room, and nothing else at all.

  • Android 7.0 or newer, with Google Play services. Two phones minimum; everyone in the vote needs the app, and the app is free.
  • Bluetooth and Wi‑Fi both switched on, on every phone. Wi‑Fi does not have to be connected to anything — no network, no password, no hotspot to set up.
  • Roughly 10 to 30 metres, depending on how much building is in the way. One room, reliably.
  • The nearby permissions, once. On Android 12 and older the system requires location permission before one phone may see another; the app never reads your position, and the permission is capped so newer phones are never even asked for it.
  • No account, no email, no sign-in. There is nothing to create and nothing to forget.
Privacy, plainly

Three things leave your phone, and they go three metres.

Your display name (which defaults to your phone's model and is yours to change), a random per‑install identifier, and which answer you chose. They go to the host's phone in the room, over the local radio, and no further.

Nothing reaches us, Google, or any server, because there is no server to reach. No account, no email, no analytics in the app, no ads anywhere.

Limits, before you rely on it

What the radios and the design will not do.

Some of these are physics, some are deliberate, and one is honest about what the anonymous ballot is worth. All of them are better read here than discovered in a meeting.

The hardware
  • Android only. The transport is Google's Nearby Connections. There is no iPhone app and there cannot be one that joins the same room.
  • Meeting-room scale, not auditorium scale. The one-host-many-voters radio topology carries a handful of simultaneous connections comfortably. It is not built for a hall of two hundred phones.
  • Both radios must be on. A phone with Bluetooth off does not see the room, and there is no fallback over the internet — by design.
  • Walls cost range. Ten to thirty metres is the honest span. Two rooms apart is not one room.
  • Emulators cannot run it. A virtual device has no Bluetooth or Wi‑Fi Direct radio, so there is nothing to share. Two real phones is the only way to see a real session.
The design
  • The host's phone holds the room. The session lives while that app is open, and the screen is kept awake while a vote runs. If the host's app is killed mid‑round, the room ends with it — there is no host handover.
  • The roster freezes when the vote starts, so the turnout denominator cannot move while the clock runs. Latecomers wait for the next question. Phones already seated may come and go freely.
  • One phone is one vote, which means two phones are two votes. Any phone that can see the room can ask to join, and a voter is identified by a display name. Approving who joins keeps the wrong people out of your meeting; it is admission control, not authentication.
  • Anonymous is not cryptographic. The app never records or displays who chose what — but the host's phone does receive each vote over a connection it could identify, and it is a modified build away from logging it. There are no blind signatures and no mixnet. For a show of hands where the point is that nobody feels watched, this is the right tool. For a ballot where someone has a real incentive to cheat, it is not.
  • Any result leaks at small numbers. One voter means their vote is the result, and a unanimous outcome reveals everyone, whatever the app stores.
  • Pick any is approval voting, whole. Mark any number of answers; there is no "pick exactly two" yet.
The real screens

Photographed from the app, not drawn for the page.

Roundtable home screen: host a vote, join a vote, and the last decision the room made.
Home — pick a side, and the last thing the room decided
A voter's ballot: the question, four answers with Tacos selected, and a lock-in button.
Ballot — pick, then lock in. One vote per phone
Host results: the room drawn as a table, each seat coloured by what that person chose, with a legend naming who picked what.
Results — the room, coloured by what each seat chose
An anonymous ballot, carrying the promise that nobody will see which answer this phone chose.
Anonymous ballot — the promise on the ballot itself
Pick-any results: one cell per mark, with names under every answer they backed.
Pick any — one cell per mark, not per person
Past votes: a list of previous decisions with outcome, turnout and date.
Past votes — outcome, turnout, date
One past vote reopened months later, showing who voted how.
One past vote — who voted how, months later
The same results screen in the light theme.
Light theme — the same rules, the other ground