Skip to main content
Democratia
Create account
Appearance

Releases

July 29, 2026

Taking part now requires an account. A public poll directory, one unified dashboard, a points ledger and a public leaderboard.

The change at the centre of this release is that taking part in a poll requires an account. Reading one does not, and now needs an account less than before: there is a public directory to browse, and published results and rankings are open to everybody.

Changed

Participation requires an account

Voting, suggesting an option, creating a poll and accepting a private invitation all need an account. Reading a public poll, its published results, the documentation and the rankings do not.

Public polls previously admitted anyone holding the link, recognised by a token in a browser cookie. That identified a browser rather than a person: clearing the cookie produced a second vote. Every fairness rule — one ballot per participant, one option per contributor, points that cannot be farmed — needs a stable identity, and none of them meant anything against a browser.

This does not make ballot stuffing impossible. It raises the cost from "open a private window" to "confirm another email address". Where a result would be damaged by that, make the poll private.

Participants from before this rule are kept and still count. Their ballots are included in every total and in turnout, their suggested options remain listed and attributed, and results that name participants label them plainly as predating accounts. They earn no points, because there is no account to credit.

Signing in from a poll returns you to that poll rather than to your dashboard.

One dashboard instead of five sections

The dashboard was five capped groups — drafts, awaiting options, awaiting vote, active, completed. A reader with more than five polls in a group could not reach the sixth, one poll could appear in two groups at once, and no question could be asked across groups.

It is now a single collection with filters for stage, visibility, voting method, your role and your participation, search, eight sort orders, cards or a list, and deterministic pagination. Everything is in the address bar, so a filtered view can be bookmarked and shared.

/dashboard/polls redirects here, carrying its query string. The platform-wide poll list for administrators moved from a query parameter to /admin/polls.

Options are attributed to accounts

Suggesting an option no longer asks for your name — it is read from your profile, so renaming yourself updates every option you have contributed. A name sent in a request is ignored.

Descriptions are now optional. Blank descriptions of every shape normalise to nothing.

Language and appearance moved into the account menu

Both now live in the account menu at the top right, as a segmented light/dark/system control and a language list with the current choice marked. The same controls remain on the account page, which is the path to them without JavaScript.

Added

A public poll directory

/polls lists polls anyone may read, with the same search, filters, sorting and layouts as the dashboard. No account needed.

Publishing a poll and advertising it are now separate choices. A public poll is readable by anyone holding its link; it appears in the directory only if its organiser asks for that. Polls that existed before this release are unlisted, so nothing became more visible than it was.

Points

Participation earns points, recorded in an append-only ledger. Eight rules, every value and daily cap published in the documentation, and awarded so that they cannot be farmed: ballot, completion and winning-option points are credited when a poll ends, not when the action happens. Editing a ballot cannot double-credit, and a cancelled poll pays nothing.

Points that stop being valid are reversed with a matching negative entry rather than deleted, so a balance always adds up.

Two commands: points:rebuild-balances restates every cached balance from the ledger, and points:backfill credits historical activity. Both support --dry-run.

A public leaderboard

/rankings orders accounts by points, publicly, showing a display name and a total and never an email address. Equal totals share a rank, correctly across pages. Four time periods.

Any account can leave the board from Settings → Privacy: it stops being visible to others, keeps every point, and still sees its own position.

A home page that stays put

The home page no longer redirects signed-in visitors to their dashboard. It explains the product to everybody and links the directory, the rankings and the documentation.

Fixed

  • Documentation now falls back to English one page at a time rather than one collection at a time. A partial translation no longer hides untranslated pages from the sidebar and from their own URLs. Every user-facing page is now available in Portuguese; the developer and operator pages remain English only and say so.
  • The sign-in and registration pages were rendering a component name as literal text, because the language and theme controls they referenced had moved into the account menu.
  • An option's submitter is eager-loaded wherever options are rendered, so crediting a contributor no longer risks a lazy-loading violation.

Removed

  • Guest participation: the identity cookie, its token store, the join-a-poll form and its rate limiter. An architecture test fails if any of them reappear.
  • The name field on the option form, and the requirement to write a description.