Eletivo
A campaign operating system for Brazilian elections
- Company
- Eletivo
- Role
- Co-founder & CTO
- Timeline
- Jun – Oct 2026
- Website
- eletivo.app
- Product design
- Brand
- Front end
- Back end
- AI
Results
The project
Eletivo brings electoral data, street operations, social media and press into one place, for everyone from a campaign’s command to its agents on the street. As co-founder and CTO, I designed and built it end to end, essentially on my own with AI agents: the brand, the data pipeline and four products on one data layer.
- Siteeletivo.appWhere a campaign finds Eletivo and picks its license.Chapter 5
- PlataformaThe command centerThe votes map, tasks and the AI analyst.Chapters 1, 2 and 4
- CampoThe street team’s phoneTasks, check-ins and interviews, offline first.Chapters 2 and 3
- AdminThe back officeClients, licenses and leads, every change audited.Chapter 5
The problem
Brazilian campaigns still run on spreadsheets and WhatsApp groups. The electoral court publishes every vote down to the polling section, but as raw files. Coordinators plan in one place, street teams report in another, and nobody can check what actually happened on the street.
- 01Coordinators can’t see where their votes are: the electoral court publishes them as millions of raw rows, not a map.See how it was solved
- 02Work is handed out in group chats, and nobody can tell what was really done on the street, or prove it.See how it was solved
- 03Field agents work on foot, in the sun and often with no signal, on tools made for a desk.See how it was solved
- 04Every question about the data waits for an analyst, and general chatbots make numbers up.See how it was solved
- 05And for the product itself: four apps for very different people, built by one person with AI agents, had to work as one system.See how it was solved
How I solved it
One answer per pain, with the evidence behind each.
01
Every vote on one map, down to the polling section
From the platform demo on eletivo.app: São Paulo’s 2022 race for governor, from the state to a polling place, then the proportional reading.
A whole state at once
Tocantins’ 2022 race for governor: 481,496 votes across 139 cities, with the ranking of cities beside the map.
A state goes live only when every vote matches
Four elections in 10 states, every office and round, streamed from the raw files and checked on the way in. Querying only a state’s own slice of the data took the city list from about 10 seconds to tens of milliseconds.
Raw rows in, rows served, votes matched
Raw rows Rows served
| State | Raw rows and rows served | Votes matched |
|---|---|---|
| SP | 51.6M raw, 14.1M served, 3.66× smaller | 447,007,384 votes, all matched |
| MG | 19.2M raw, 6.2M served, 3.11× smaller | 199,189,102 votes, all matched |
| RS | 10.8M raw, 4.0M served, 2.69× smaller | 119,074,574 votes, all matched |
| PR | 10.2M raw, 3.1M served, 3.33× smaller | 103,234,999 votes, all matched |
| SC | 6.1M raw, 1.7M served, 3.50× smaller | 74,848,835 votes, all matched |
| MT | 2.7M raw, 0.7M served, 3.61× smaller | 30,130,286 votes, all matched |
| MS | 2.6M raw, 0.7M served, 3.97× smaller | 26,649,800 votes, all matched |
- Rows
- 103.3M to 30.5M
- 3.38× fewer for the map to read
- Votes
- 1,000,134,980
- matched between raw and served
- State-years
- 28 of 28
- passed the gate: 7 states × 2018, 2020, 2022, 2024
A seat estimate that knows when to stay quiet
On top of the data, a seat estimate replays 2022’s proportional races. Where its replay disagrees with the official result, it refuses to say how many votes it takes to win.
681 of 71495.4% of 2022’s seats reproduced
Reproduced Missed
20 races, state and federal deputies in 10 states
Choose one to see its seats.
From the log of the estimate’s replay run on GitHub Actions (31631875004).
02
Every task has an owner, a deadline and proof

Proof by kind of action, not a rule builder
Each action on Campo’s home carries its own evidence. Coordinators can override a check, and every override is audited.

Check-in
At an event
Only counts inside the event’s radius, 200 m unless the coordinator sets another.

Visita
A door-to-door visit
How the door went, talked, no answer or refused, and where.

Eleitor
Registering a voter
Name and phone with the GPS of the spot; a phone already on file is flagged.

Entrevista
A survey interview
The answers, with the audio recorded unless the agent turns it off.
Every task by status
Planned, in progress, blocked and done, each with its kind of action, time window and progress.
- Each person sees their own part of the campaign, and the screen says which: the whole campaign, their coordinations, or their direct team.
- A completion whose photo was lost can still be accepted: a retry will never produce the photo.
The campaign as it is organized
Command, coordinations, field leaders and agents, each with a role that decides what they can see and do.
The cockpit
Coverage by area, pledged votes, field productivity and risk, with the areas ranked by priority.
03
A field app for the street, not the desk

Three quick actions an agent repeats all day, the open tasks, and anything still waiting to be sent.
The leader’s area
Field leaders run a crew from the same app: their coordination’s agents, tasks, what was recorded today and what needs attention. On a tablet it opens up to the width of the screen.


Agents, tasks, today’s records and what’s late, for one coordination.
Campo running locally against the project’s showcase seed (fictional agents in Tocantins), signed in as a field agent and a field leader.
What the street sends back
The same work, as the platform shows it to coordination.
The operational map
Areas, visits, agents and registered voters in one city, block by block.
Field data from the campaign’s showcase seed.
Light only
So it stays readable in direct sun.
Big titles to browse, small ones to act
Large titles on lists, compact ones on forms, checked side by side with Apple Health.
Honest failures
Anything that can be resent waits in the outbox; lost evidence is marked instead of retried forever.
A position, not a trail
The leader’s map shows each agent’s last known position, with an accessible list beside it. Agents are never ranked.
04
An AI analyst whose numbers come from the data
Who does what in an answer
- 01The modelPlansReads the question and picks which tools to call.
- 02The serverRuns the tools45 of them, deterministic, over the electoral data and the campaign’s own.
- 03The modelPicks a cardChooses a source and a layout from fixed lists. It can’t type a number.
- 04The serverFills the cardEvery row comes from what the tools returned.
- 05The modelNarratesWrites the answer from the tools’ output, with no tools left to call.
- 06The serverAdds the noticeThe label the electoral court requires on AI content.
- Election results
- 2026 candidates
- Electorate by area
- Tasks
- Agenda
- Social
- Press
The AI proposes, people decide
It can draft a task, but nothing is created until someone confirms it.
The notice isn’t optional
The legal label on AI content is added by the system, so the model can’t leave it out.
05
Four products that work as one
One brand
One accent
#001EFF
With the dither atmosphere every product’s sign-in shares.
Space Grotesk, for headings
Decida na Plataforma. Execute no Campo.
JetBrains Mono, for figures and labels
R$ 9.900,00

Candidate

Command

Strategist

Coordinator

Field agent

Interviewer

Logistics

Territory

Legal

Communication

Social

Press

Rules the agents can’t skip
Written as tests
At least 4.5:1 contrast in dark mode, and surfaces that get lighter as they rise, in the token tests.
Enforced by lint
The surface hierarchy is a lint rule, not a review comment.
Deliberate dialects
The map is always dark, Campo is always light, and the back office speaks the platform’s language.
One set of tokens
Shared tokens and components across the four products, with the dark theme derived from the map.
The site: one price per office
An audit of the pricing page found no h1, three cards that looked alike and buttons hidden from screen readers. Campaigns don’t choose between plans; the office they run for sets the price. So the page became one license per office, picked by tab.


The back office: friction follows consequence
Anything reversible asks for a reason, and the reason becomes the audit record. Deleting a client is for owners only and means typing its exact name.
Outcomes & learnings
- Paused until Brazil’s 2028 municipal elections, with the site still live at eletivo.app.
- Electoral data a campaign can act on, where nothing reaches the map until it matches the raw files.
- An AI analyst that answers with the campaign’s own data and can’t put a made-up number in a card.
- The AI phone-survey channel was built and tested, and stays pre-pilot.
What I learned
With AI agents, consistency comes from written rules, not from review. I wrote the design system down first, and turned each repeated mistake into a rule or a lint check.
Cutting is design work too. Each of these pulled away from what Eletivo is for: official data and proof of field work.
Built, then cut
- Campaign finance and contracts−7,272 lines
- WhatsApp messaging−15,646 lines
- WhatsApp surveys−9,689 lines
- A native app, three timesabout −32,000 lines
- Political news−2,086 lines
- Parliamentary amendments7 days in the product





































Social media, read for the campaign
What needs attention
Priorities for the day, the ranking against rivals and the latest posts on both sides.
01 / 06