← back_to_index

CONDOR, post-mortem: I taught an AI to narrate an election without making things up

CONDOR, post-mortem: I taught an AI to narrate an election without making things up

By default, an AI tells you what sounds good. Not what's true.

During the 2026 elections in Peru and Colombia, I had one narrate election day live, minute by minute, without making up a single line. Alone, at night, no team.

It's called CONDOR. AI-powered election intelligence — a dashboard that covered first rounds, runoffs and the live count, without asking anyone for money. condorlatam.com.

On a single screen you could follow the live count, compare the candidates and their platforms, take a quiz to see which one you matched, check which campaign claims were true and which weren't, and read a daily summary written by an AI. All in one place, all organized, no WhatsApp chain messages, no smoke.

This post is the story of why I built it, what I learned, and the part that actually kept me up at night: making sure it didn't lie.

CONDOR dashboard with the hero 'Peru votes. CONDOR explains.' and the briefing 'What CONDOR AI is picking up'
CONDOR: one screen to make sense of the election.

Why one guy builds this alone

I didn't do it to raise money. No pitch, no round, no payroll to cover. I did it for 2 reasons, and both are a little stubborn.

First: I wanted to understand AI by getting my hands dirty, not by reading Twitter threads. The only way I know to learn something is to build something that can break out in the real world.

Second: election-season disinformation drives me nuts. Your aunt's WhatsApp forward, the undated screenshot, the bogus poll, the "sources say." I wanted to see if you could build the opposite: one screen, organized, verifiable, that didn't sell you smoke or a side.

So instead of complaining for one more Sunday, I opened the editor.


The brain runs on its own, every day

The heart of CONDOR is something I called Brain. An orchestrator that runs 8 tasks in a row, every day, for each country, without me touching a thing.

Here it is in plain English, because people who don't code read this too:

  • Checks that the data isn't broken.
  • Verifies incoming polls.
  • Curates the day's news and tosses the junk.
  • Puts together a briefing on the big picture.
  • Compiles a profile of each candidate, but only with verifiable facts pulled from real articles.
  • Runs a health check on itself.
  • Reorders the front page based on what matters that day.
  • And at the end, it audits itself: gives itself a score from 0 to 100 and compares it with yesterday's.

All with AI. All logged in an audit table, so if something looks off I can go in and see exactly what it decided and why. A system you can't audit isn't a system: it's faith.

The Brain checks its own work Runs on its own, per country. Ingests, decides, and grades itself at the end — then compares with yesterday. 01 · INGESTS Reads all day 36 outlets monitored, up to 444 stories/day ▸ 02 · DECIDES 8 tasks in a row verifies, curates, ranks; profiles every candidate… ▸ 03 · AUDITS ITSELF Grades itself 0–100, and compares it with yesterday's ▲ ↻ REPEATS ON ITS OWN, EVERY DAY, FOR EACH COUNTRY 12,372 decisions were recorded in the log — every one can be opened and reviewed.

To give you a sense of the volume: the Brain monitored 36 different outlets, and some days it chewed through 444 news stories in a single day, just to leave you with a clean feed at the end.

CONDOR's X-ray: candidate profiles compiled by AI from public sources, 38 candidates and 22 under investigation
Profiles compiled by AI, using only verifiable facts pulled from real articles.
Simulated runoff according to Ipsos on CONDOR: Fujimori 43.8% vs. Sánchez 43.0%, a statistical tie
Simulated runoff (Ipsos): a statistical tie, no spin.

Cheapskate founder detail: the Brain runs on a cheap model. For the daily grind, it's more than enough. The money (well, the pennies) gets saved for the one moment where you can't afford to fail.


Election day: the AI calling it live

This is the crown jewel. And this is where I almost threw the whole thing in the trash.

On E-day I built something I called Pulse. Every 5 minutes, an AI reads the live headlines from the big outlets (El Tiempo, Semana, Infobae, La Silla Vacía, Google News), adds what I scrape into my own database plus the official preliminary count from the Registraduría (Colombia's electoral authority), and writes a paragraph narrating the day. In real time. Without me.

The pace was scary. On the day of Peru's runoff, it wrote 402 dispatches in a single day: 1 every 3 and a half minutes, nonstop, while I watched.

I built the first version on the cheap model, the same one the Brain uses. Huge mistake.

The cheap model alucinaba. It made up "an atmosphere of enthusiasm in the streets," "lines since early morning," statements nobody had ever made. It sounded beautiful. And it was a lie. The exact thing I was trying to fight, my own product was manufacturing.

That's when I understood something I won't forget: in an election, an AI that writes pretty but makes things up isn't a tool. It's a hazard.


The anti-hallucination validator

The fix had 2 layers.

The first one, the obvious one: I moved Pulse up to a pricier, more serious model. Better, but not enough. A better model hallucinates less, not never. And "less" didn't cut it.

The second layer is the one I'm proud of, and it's more stubborn than smart. After the AI writes each paragraph, another process audits it before it goes out. The rules are a bouncer's, not a poet's:

  • Did you mention Cepeda, Petro, anyone at all? That name has to appear, word for word, in a real headline. If it's not there, it doesn't run.
  • No invented quotes. Zero statements I can't trace.
  • No "literary color": no atmosphere, no enthusiasm, no lines, no emotion. Facts, not fiction.

And the best part: if the paragraph fails, I don't drop in some generic filler. I hand the error back to the same AI, tell it which rule it broke, and send it back to rewrite with that correction in hand. It corrects itself until it gets past the bouncer.

✕ Rejected · what the bouncer killed

“The mood in the streets is one of total enthusiasm. Since early morning, long lines of excited voters have been waiting their turn. ‘Today Colombia decides its future with hope,’ said one citizen outside a polling station. The day is going off without a hitch across the country.”

mood/enthusiasm = invented color quote nobody said “without a hitch” = unverifiable
✓ Published · what made it through

Gustavo Petro has already cast his vote at the Capitolio Nacional, where he showed his ballot and reignited the debate over political participation. Meanwhile, the 122,020 voting tables across the country are open, allowing Colombians to vote until 4 p.m.

every name and figure, traceable to a real headline

The one on the right is a real paragraph CONDOR published on May 31, 2026. The one on the left is the kind of text the validator killed before it ever went out.

Same story on the Peruvian side
✕ Rejected · what the bouncer killed

“Euphoria has filled the air in Lima since dawn. Long lines of hopeful voters wait their turn; ‘today Peru chooses the future it deserves,’ said one woman in San Juan de Lurigancho. With these numbers, Fujimori is sweeping and already shaping up as the clear winner of the day.”

euphoria/hope = invented color quote nobody said “sweeping / clear winner” = false, it was a tie
✓ Published · what made it through

With 100% of tally sheets processed, ONPE's preliminary count gives Fujimori 50.13% and Sánchez 49.87%: a difference of 49,641 votes separates the 2 finalists. The margin is so narrow that the result still hinges on the official count.

every figure, traceable to ONPE's preliminary count

All of this running every 5 minutes, for about 2 dollars a day. Cheap for what it does: across all those days, the AI wrote some 177,000 words live (the equivalent of 2 novels) without making up a single one.

Watching that work on election day (the AI telling you what was actually happening, minute by minute, without a single lie) was one of the most satisfying things I've built in years. Not because it talked. Because it shut up when it didn't know.

Live count of Peru's runoff on CONDOR: Fujimori 50.13% vs. Sánchez 49.87%, practically a tie
The live count: 0.3% —just 49,641 votes— separated the 2 finalists.
The vote is a moment, the count is a marathon AI dispatches by election phase Count (post-vote)2,229 Eve952 Election day628

The shortcut I learned the most from

A technical one, for those who like a look inside the kitchen.

For the runoff, I wanted to show how the gap between the 2 candidates was moving, minute by minute, a live heartbeat. The plan was to sample the number every couple of minutes with a scheduled job. Problem: on my plan, that scheduled job didn't fire reliably. Sometimes it did, sometimes it didn't. Useless for anything live.

The fix was to flip the problem on its head: instead of relying on a clock that didn't work, I sample the gap every time a visitor lands on the page. Every person who shows up leaves a reading without knowing it. With a lock so 2 readings in the same minute don't step on each other. More people watching, denser chart. The visits became the engine.

And this is what those visits drew, tally sheet by tally sheet:

Photo finish Peru runoff 2026 · the gap between the 2 finalists, tally sheet by tally sheet 10K20K30K40K50K 1,303 votes at 98% — dead even 49,641 votes · 50.13% – 49.87% 98%99%100% counted Every point is a real reading from ONPE's preliminary count. The gap opened up in the last 2% of tally sheets.

The lesson isn't technical. It's the usual one: when the ideal tool isn't there, don't sit around waiting for it. You make do with what you've got, out in the field.


What nobody tells you: half the work is human rules

I went in thinking the challenge was technical. Models, database, live charts, the runoff gap moving on screen.

I was wrong. Half the job was coding real-world rules that no tutorial teaches you:

  • The electoral blackout. In Colombia, publishing polls is banned during the 7 days before the vote. I had to hide an entire polling panel from the site during that window. Data that's useful in any other context is illegal there.
  • Bogotá is not Colombia. Sounds obvious until the AI starts writing "the country" when it's talking about a snapshot of a single city. You call the country by its name.
  • "Mesas" are not "puestos." A puesto is the polling site; the mesas are the voting tables inside it. Mix them up and you've lost credibility in the first line.
  • "Preconteo" is not "escrutinio." One is the fast, informational preliminary count; the other is the legal, formal count, backed by tally sheets. Mixing them up is spreading disinformation without meaning to.

None of those rules is pretty code. Every one of them is the difference between a serious tool and a toy that screws up at the worst possible moment.

CONDOR's AI fact-checker, with 200 checks on campaign claims
The AI fact-checker: every campaign claim, traced back to its source.

A number I like more than any ranking: the fact-checker reviewed 1,793 claims over the course of the coverage. How many turned out to be false or misleading? 31. The rest, the vast majority, were true.

And that's fact-checking too. The easy move is to grab a megaphone and yell "fake news" at everything that makes you uncomfortable. The serious move is to review nearly 1,800 claims, catch the 31 that were lies, and have the stomach to say that almost everything else going around was true. Fact-checking isn't a witch hunt. It's telling the truth, however it shakes out.


What CONDOR leaves me with

It covered what I wanted it to cover: 2 countries, first rounds, runoffs, live count, an affinity quiz, a candidate and platform comparison tool, a fact-checker, share-ready images of the count. All from one screen, running almost entirely on its own.

What I take away isn't the audience. It's that the machine wrote 3,809 live dispatches, 177,000 words —the equivalent of 2 novels— and didn't make up a single one. I can trace every one of them to a real headline. And underneath, quietly, the system filtered nearly 12,000 news stories to leave you with a clean feed.

Yes, around 51,000 people showed up. That's nice. But anyone can pull 50K with a good LinkedIn thread. What not just anyone can pull off is an AI that narrates an entire election, live, without lying.

One number stuck with me. On the day of Colombia's runoff, more than 5,000 people came in, and the exact peak was at 4 in the afternoon: the very hour the polls closed. Nobody came out of curiosity. They came when the number started to matter.

0
Made-up lines
3,809
Live AI dispatches
177,000
Words written
~$2
Per day in AI
12,000
News stories filtered
31
Lies caught
12,372
Decisions audited
5 months
Running on its own

And yes, the audience showed up too

51,000
People
96,000
Page views
986
Quizzes completed
5,135
People on peak day

5 months of silence, then a week-long eruption. Here's how it looked, day by day:

CONDOR's pulse Visits per day · 5 months building in silence, and the weeks when it all blew up 2K4K6K 7,108 people · Jun 21 · peak day months of quiet baseline… MarAprMayJunJul Feb 18 – Jul 24, 2026 · 155 days · ~96,000 views · 51,000 people

But what I take away isn't the feature list or the numbers.

I take away that one guy with an editor and some drive can build, on his nights, something that a couple of years ago needed a team and a budget. AI has driven the cost of trying down to almost nothing. That's huge, and we still haven't wrapped our heads around it.

And I take away the uncomfortable part: by default, AI is going to tell you what sounds good, not what's true. Keeping it from lying isn't an extra you bolt on at the end. It's the discipline from the very first line. Bouncer first, poet second.


CONDOR did its job, and I shut it down. It was built for these elections, and the elections are over. Not everything you build has to stay on forever.

Behind all of it, there's an ordinary Sunday, staring at a count that wouldn't come in.

And ahead, an AI that narrated an entire election without making up a single line.

Anyone can blow smoke. The hard part is building something that shuts up when it doesn't know.

// SIGNAL_FEED
Martín Beas Núñez

Martín Beas Núñez

@martinbeasnunez

follow →
// LINKEDIN_FEEDseguir →
  • // TRANSMISSION · LINKEDIN17 jul 2026
    Martín Beas Núñez

    Martín Beas Núñez

    in/martinbeasnunez

    "Nadie va a usar tu servicio. Las lavanderías no te necesitan." Un jurado de startups 2017. Lo curioso: ya tenía 30 plantas asociadas. Nunca leyeron el formulario. En 1954 un tal Roger Bannister corrió una milla en menos de 4'. Todos decían que era imposible. Un mes después, otros 2 lo lograron. Los límites a veces no son reales. Solo lo parecen. Hoy: Lima 🇵🇪 Bogotá 🇨🇴 Ciudad de México 🇲🇽 Seguimos 💪 #LatAm #Entrepreneurship #Startups #Growth #Laundryheap

  • // TRANSMISSION · LINKEDIN3 feb 2026
    Martín Beas Núñez

    Martín Beas Núñez

    in/martinbeasnunez

    🗡️ Maté mi propia app La que yo mismo programé. Mi orgullo. Y las ventas crecieron radicalmente. A veces el ego de producto es el peor enemigo del founder. En el podcast con Ximena Delgado Velásquez cuento esta y otras decisiones que casi matan #GetLavado 🤠 y las que nos hicieron rentables hasta que #Laundryheap se interese en adquirirnos. 1 hora sin filtro. Link en comentarios 👇 #Startups #LatAm #Emprendimiento #GetLavado #MentoresEmprendedores #Growth

// TRANSMISSIONS0 MESSAGES

// LEAVE_A_TRANSMISSION

// no login · posts instantly · no spam