Skip to content
Book a call

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

products on one data layer, designed and built by one person
4
votes reconciled between the raw files and the map
1B+
of 2022’s proportional seats reproduced by the seat estimate
95.4%
tools behind the AI analyst, from vote maps to tasks and press
45

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.

01TSE open dataVotes by polling section, polling places and the electorate, published as raw CSV files.
02Validation gateA state goes live only when the votes in the raw files equal the votes served.
03One data layerA read layer shaped for the map, split by state, beside the campaign’s own teams, tasks and evidence.

How I solved it

One answer per pain, with the evidence behind each.

01

Every vote on one map, down to the polling section

Coordinators need to know where their votes are, and the electoral court’s raw files can’t tell them. I built the pipeline that turns those files into a read layer made for the map: a candidate’s whole state in one view, then city, polling place and a single section. The map has three readings, absolute, nominal and proportional, and caps its color scale so a few outliers don’t wash out the rest.

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.

Votes map: Tocantins, 2022 governor race
Votes map: Tocantins, 2018 senate race
Votes map zoomed into Palmas with a polling place open
A candidate’s record
Seats won by party in Tocantins

A whole state at once

Tocantins’ 2022 race for governor: 481,496 votes across 139 cities, with the ranking of cities beside the map.

01 / 05

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

Rows and votes per state, from the import validation reports
StateRaw rows and rows servedVotes 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
From the validation reports of two import runs on GitHub Actions (30138595939 and 30180179627). ES, GO and TO were imported too, but their logs weren’t kept. Votes add up four elections, every office and both rounds: they are votes, not voters.

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

Group chats lose track of who was asked to do what. In Eletivo, every task has an owner, a deadline and the proof it needs: coordination assigns it on the platform, the agent does it in Campo, and the evidence comes back to the same task.
eletivo.app on an iPad: Decida na Plataforma. Execute no Campo.
How eletivo.app puts it: decide in Plataforma, execute in Campo, and the task comes back with its evidence.

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.

Tasks board by status
Tasks on the map
Field leadership overview

Every task by status

Planned, in progress, blocked and done, each with its kind of action, time window and progress.

01 / 03
  • 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.

Campaign cockpit
Roles and field hierarchy
Coordinations, with the headquarters being placed on the map
Permissions by role
Menu modules
Voters with consent

The cockpit

Coverage by area, pledged votes, field productivity and risk, with the areas ranked by priority.

01 / 06

03

A field app for the street, not the desk

Agents work on foot, in the sun, often with no signal. Campo is an offline-first app: every action is saved on the phone first and sent when the network returns. A native version was built and cut; Campo installs from the browser, with no app store in between.
9:41
Campo’s Today screen

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.

9:41
Gestão on a phone: the leader’s overview
Gestão on an iPad

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.

Operational map of Araguatins
A home visit on the operational map
Field trackings
A tracking’s results

The operational map

Areas, visits, agents and registered voters in one city, block by block.

01 / 04

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

A question about the data usually waits for an analyst, and a general chatbot will make up a vote count. In the Oráculo, the model plans and narrates; every number and every card comes from 45 tools on the server.

Who does what in an answer

  1. 01The modelPlansReads the question and picks which tools to call.
  2. 02The serverRuns the tools45 of them, deterministic, over the electoral data and the campaign’s own.
  3. 03The modelPicks a cardChooses a source and a layout from fixed lists. It can’t type a number.
  4. 04The serverFills the cardEvery row comes from what the tools returned.
  5. 05The modelNarratesWrites the answer from the tools’ output, with no tools left to call.
  6. 06The serverAdds the noticeThe label the electoral court requires on AI content.
What the tools cover
  • 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

Each product has its own user and setting: a desk, a phone in the sun, a back office, a sales page. Built by one person with AI agents, four apps could easily drift apart. I wrote the design system down first, as rules the agents had to follow, and let each product speak its own dialect on top of it.

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 figure

    Candidate

  • Command figure

    Command

  • Strategist figure

    Strategist

  • Coordinator figure

    Coordinator

  • Field agent figure

    Field agent

  • Interviewer figure

    Interviewer

  • Logistics figure

    Logistics

  • Territory figure

    Territory

  • Legal figure

    Legal

  • Communication figure

    Communication

  • Social figure

    Social

  • Press figure

    Press

Wireframe icons for the campaign dashboard, each shown on a light, a brand blue and a dark surface
The campaign dashboard’s icons, engraved in wireframe and checked on the three surfaces they live on: light, brand blue and dark.

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.

eletivo.app pricing page (After)
eletivo.app pricing page (Before the audit)
Before the auditAfter

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.

Social media, read for the campaign

Inteligência Social follows the campaign’s public profiles and its rivals’: every post with its reach, marked above or below that profile’s own average, rivals’ rhythm by weekday and hour, and the themes that carry. It describes what it sees and says so: the sample can’t prove cause or intent.
Social overview
The campaign’s own posts
A post preview
Rivals’ analysis
Content themes
All posts in the sample

What needs attention

Priorities for the day, the ranking against rivals and the latest posts on both sides.

01 / 06

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

Next case

Onzi

From App Review rejection to the App Store