The votes: what is going on
bentossell.com/devices · had / wanted · 7 pictures, no jargon
Every vote is a paper slip in a box
You tap "had" on a device. A slip goes into a box that here.now keeps for the site. The slip is never counted up. It just sits there.
To show a number, every visitor empties the box and counts
There is no running total. Each phone that opens the page downloads all the slips and adds them up itself. Then it does it again every minute.
The box has a doorman: 120 visits per hour, per house
I set that limit to stop spam. But reading counts uses the same door as voting. One open tab, refreshing every minute, uses up all 120 by itself. My testing from your house finished it off. It resets on the hour. No votes were lost.
The box holds 25,000 slips. Then it is full.
A voter who taps ten devices adds ten slips. So the box fills at around 2,500 voters, not 100,000. When it is full, nobody can vote.
And long before that, reads collapse
At 25,000 slips, every visitor downloads 5 MB and makes 250 requests just to see a number. The doorman turns them away in seconds. The page says "Counts unavailable" for everyone.
here.now cannot count for us
I looked for a built-in way out. There is no "add these up" feature, no filter, no bigger box, no scheduled jobs. Three things it does have are useful, though.
Count or filter slips
Scheduled jobs / server code
Box larger than 25,000
Separate limits for reading and voting
Raise the doorman's number
Publish a file with the totals in it (files have no doorman)
A "proxy route" that lets the site talk to an outside service with the key kept secret
Three small changes. Fixes what you saw.
Good for a few thousand voters. About an hour of work, no new systems.
Keep a tally board instead of a box of slips
A tiny service (Cloudflare, free tier) holds one number per device. A vote nudges a number. Visitors read 87 numbers, not 25,000 slips. Nothing on the site changes except two web addresses. Existing votes move over in one go.
Do part one now. Do part two if the site takes off.
Part one is safe, small, and makes the error you saw go away. Part two is the real answer at scale, and it is roughly the same effort as any workaround built inside here.now, so there is no point doing the workaround.