I Pulled Every Case From My Own Voting Site. The Maximum Was Three Votes.
I built a small site where people post a purchase and strangers vote on whether they should buy it. Then I went a month without looking at the data. Tonight I looked. Thirty-nine cases. Forty-six votes. Fifty-one replie
I built a small site where people post a purchase and strangers vote on whether they should buy it. Then I went a month without looking at the data.
Tonight I looked. Thirty-nine cases. Forty-six votes. Fifty-one replies.
The replies number is the one that stopped me. More people wrote something than voted. That is either the beginning of a community or three people talking to themselves, and the API can't tell me which.
The pull
The front end is a single page app, so scraping HTML would have given me a 98 KB shell and nothing else. The case list comes from /api/list. One request with limit=200&offset=0 at 16:01 UTC on 9 November 2026 returned 39 objects and "next": null. No pagination left.
curl through a local proxy, Python 3.13 for the counting. Fields I used: price, createdAt, g (guilty), a (not guilty), replies, ai.lean, defense.
The table
| Measure | Value |
|---|---|
| Cases | 39 |
| Guilty votes | 33 |
| Not-guilty votes | 13 |
| Max votes on one case | 3 |
| Cases with zero votes | 22 |
| Replies | 51 |
| Median defence length | 52 words |
| Created window | 15–23 Oct 2026 (8d 4h) |
| Newest case age at pull | 17 days |
| Median gap between cases | 58 ms |
What surprised me
A machine verdict is attached at post time, before any human sees it.
36 of 39 cases arrive with a one-line AI opinion, 33 of them leaning guilty. Of the 17 cases that got a human vote, 16 matched the machine. The 17th was 1–1.
So when a visitor lands, the page has an opinion already. They can agree with it or click past it. Either way the verdict on screen was never really theirs. I wrote that feature to make empty cases feel alive. It also means I have no clean read on whether the crowd is agreeing or just reading.
The vote count doesn't have a tail, it has a ceiling.
22 cases at zero. 12 at three. 5 at two. 1 at one. Max three.
A real vote site produces a skewed distribution — a few cases run away, most sit low. This is a wall. Three is where the flow stops, so three is where the data stops.
The creation timestamps are not human.
39 cases spread over 8 days, but in 13 bursts. Median gap between consecutive cases: 58 milliseconds. Then nothing for 17 days.
That's a seed script, and I'd rather write that down than let the number 39 pass as traction.
What I can't measure from here
g and a are integers on a case object. There's no voter id and no vote timestamp anywhere in the payload. 46 votes is consistent with 46 people and with one person clicking 46 times across a week. I can't tell those apart from outside.
Same for replies — no author field. I don't know if the 51 replies are a conversation or a monologue.
And I didn't run the paid reading flow, so nothing here says anything about whether people convert.
The bug I found while counting
/cases/<id> returns 404. There are 39 ids. None of them opens a page.
/cases returns 200 but serves byte-identical HTML to /, canonical pointing at the homepage. So the site has 39 cases in its database and zero case pages in its sitemap (four entries: home, cases, privacy, terms).
Fixing that is worth more than another hundred seeded cases.
Disclosure: this is my own site — walletjury.com. The data came from its API, which is the least neutral source available and the only one that has the votes.
Forty cases or bust. If the table is still 39 next month, October was the whole experiment.
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.