Own product

Colinha Eleitoral — Your votes in ballot-machine order, offline

You decide your votes calmly before election day and save them in the app. In the booth, urn mode shows one vote at a time, in the order the voting machine asks for them, with the number in large type. It works without signal, has no account or login, and never tells you whom to vote for.

YEAR
2026 — present
TYPE
Own product · App ready, not yet published in the stores
ROLE
Creator & Developer
COLINHA ELEITORAL: o site no computador e no celular
6
votes in voting-machine order in 2026, because the Senate has two seats
27
states in the bundled dataset, to work offline
0
accounts, logins or servers of our own

Problem.

People who decide their vote days ahead have to remember several numbers at the machine, in a sequence they don't choose, with a line behind them and no phone signal. Today that is solved with a WhatsApp screenshot or paper in hand. And the most common mistake is forgetting that, in 2026, the machine asks for two Senate votes.

Solution.

An iOS and Android app that also runs on the web, with the list of the 6 votes of 2026 in voting-machine order, search by name, party or number, a candidate sheet with official TSE data, and a full-screen urn mode. All data stays on the device: there is no backend, which serves data protection law (LGPD) and offline use at the same time.

Result.

A working app, with the official candidate dataset bundled and refreshed by an automated routine. It has not been published in the stores yet, so there are no usage numbers.

The hard part.

Every project has a point where the obvious solution doesn't cut it. Here, it was these.

The machine's order is not the order of importance

The machine starts with the office that has the most digits and ends with president. An app that lists 'President' first forces the voter to reorder mentally at the worst moment. On top of that, the Senate sometimes asks for one vote and sometimes two, and the order depends on whether the election is general or municipal. So the calendar derives seats and order from the year, and the data unit is the vote, not the office.

No server, as a product decision

Voting intention is political opinion, sensitive data under the LGPD. Syncing it would require a legal basis, a data protection officer and an incident response plan. Having no backend solves compliance and offline in one move. The cost is accepted explicitly: notifications are local, with no push token, and the widget reads a mirror of the saved choices through an App Group. No public tally of choices, so it never looks like an election poll.

Official data that changes until the eve, and a source that changed

Candidacies are approved and rejected up to close to election day, and the booth has no signal, so the dataset has to ship inside the app. The first version of the sync used the DivulgaCandContas API, which started returning 404 on every path. The script was rewritten against TSE open data (a CSV per election), a canonical file that doesn't vanish without notice, and now runs daily through a workflow.

Reading a number fast, in a hurry, with a line behind you

The number is the main information. It uses a monospaced font so digits have fixed width, grouping that follows the rhythm of typing, and the system font scale is ignored only on the numbers so the layout doesn't break. The accessibility label reads digit by digit. And the app blocks choosing the same senator for both seats, which used to empty the first vote without warning.

Neutrality on screen and in code

The app does not recommend a vote and does not run voting-intention polls. The palette is neutral: strong color belongs to the product, never to a party. The statement of non-affiliation with the TSE, parties and candidates shows on the candidate sheet and in settings. In uncertain situations, such as a candidacy not yet judged, the state is 'unknown' and the app asserts nothing.

What I did.

  • Product definition: the app's unit is the vote, not the office, and the order is the machine's
  • The app in Expo and React Native, with a web version and an iOS widget extension
  • A script that builds the bundled dataset from TSE open data
  • A GitHub Actions pipeline: verification, cloud builds, store screenshots and a daily candidate refresh
  • Privacy and non-affiliation texts, written as part of the product

Stack.

ExpoReact NativeTypeScriptZustandexpo-routerEASGitHub Actions

Have a similar project?

Tell me the problem — I answer personally.

See it live.

Not in the stores yet: the app is ready and waiting to be published. When it ships, the link goes here.