A ballot that's correct by construction.
RBYA Elections is the Romanian Baptist Youth Association's annual committee election, rebuilt from a decade-old ASP.NET app into a Next.js + Supabase app on Cloudflare Workers. Real accounts for delegates and the election committee, a ballot the database itself makes correct instead of a form that trusts the client, and the same nomination-to-results flow the organization already runs at Convention every year -- now with a historical archive so past elections stay browsable instead of disappearing.
RBYA Committee Elections
Nominate a candidate, register your church's delegates, and cast your ballot -- all in one place.
What it actually does
Ballot Integrity by Design
One row per election/delegate/position, enforced by a database constraint, plus a trigger that blocks over-selecting candidates past a position's seat limit. Double-voting is rejected at write time, not caught after the fact.
Nomination → Confirmation
Anyone can nominate an RBYA member. The nominee has to actively confirm before appearing publicly, and the window closes 48 hours before Convention.
Support & Objections, Handled Differently
Public comments of support show up on a candidate's page. Objections go straight to the committee to prep what's read aloud at Convention -- never shown online.
Church-Based Delegate Quota
Churches self-register their delegate list at one delegate per ten youth. The committee verifies the list before anyone on it can log in to vote.
Two Kinds of Login
Delegates sign in passwordlessly by email once verified. The election committee gets a real password login, provisioned by hand -- no public sign-up.
Results That Lead With Who Won
A winners summary up top -- executive positions front and center, the larger general committee tucked into a collapsible section -- before the full per-candidate vote tables.
A Real Archive
Past years' candidates and results stay browsable instead of disappearing the moment a new election opens.
Committee Moderation Tools
Ignore a withdrawn or duplicate nomination, request pastor vetting, upload a candidate's photo, and publish results -- all from one dashboard.
Built for Once-a-Year Traffic
Deployed on Cloudflare Workers instead of a plan sized for year-round usage -- this app is quiet almost all year and busy for one month around Convention.
The same process the organization already knows
Nomination, confirmation, registration, voting, and results -- just enforced by the app instead of trusted to people remembering the rules correctly.
No login required to nominate or comment
Anyone can nominate a candidate, leave a note of support, or file an objection -- no account needed for any of it.
- Nominee confirms by email before appearing publicly
- Positive comments are shown; objections go to the committee only
Register, get verified, then log in
A church submits its delegate list against its youth-count quota. The committee verifies it before those delegates can sign in.
- Passwordless email magic link -- no password to forget
- Absentee delegates can only vote for committee candidates, by deadline
One submission per position, enforced by the database
A resubmission for a position a delegate already voted on is rejected outright -- the database constraint makes it impossible, not just discouraged.
>50% wins the seat, or it stays open
A candidate is elected with more than 50% of ballots cast for their position. If fewer candidates than seats clear a majority, those seats remain open rather than being backfilled.