Devlog #12: Your Turn
Hey everyone! 135 commits, 195 files changed. Let’s get into it.
This release marks sort of a structural shift. The focus was on user agency. A lot changed under the hood to make the surface feel simple.
Politician Permalinks
The old monolithic /evaluate page is gone. Every politician now has their own page at /politician/:QID – shareable, bookmarkable, and linkable from everypolitician.org. The session flow that was buried inside /evaluate now has its own routes, but the big change is that every politician you visit has a permanent URL.
User-Submitted Sources
Until now, PoliLoom generated all the data. Wikipedia in, extracted claims out. That changes now.
You can now paste any URL into a politician’s page, and PoliLoom will fetch it, archive it, run the extraction pipeline, and present the results for evaluation. The same flow as Wikipedia, but with whatever source you want. Government gazette, parliament website, news article. Drop the link, we do the rest.
Multi-Source Properties
This is the big architectural change under the hood. Previously, each source was a one-shot extraction – if a property already existed, the prompts told the LLM to skip it. Now we extract everything from every source, and the system figures out what’s new and what’s a confirmation.
When the same fact shows up in multiple sources, they get linked together – one property, multiple sources, each with their own supporting quotes. A birth date confirmed by both Wikipedia and a government page carries more weight than one found in a single source, and when you push it out to Wikidata, it will get both sources added as references.
Manual Creation
Accept and reject was the whole game. Not anymore.
In advanced mode, users can now create properties from scratch. Positions held, birthplace, citizenship, birth and death dates – The property goes straight to Wikidata together with your evaluations.
For positions, birthplaces and citizenships, the search is powered by Meilisearch, so you get the same hybrid keyword+semantic matching we use in enrichment.
And talking about search, there’s now a search bar in the header, which allows you to jump to any politicians page. It also allows you to create a new one, which actually creates a new Wikidata entity – sets it as human, marks it as a politician – and drops you straight into their page.
On-Demand Enrichment
Navigate to a politician who hasn’t been enriched yet – via the OmniBox or a direct link – and the system triggers enrichment automatically. Their Wikipedia sources get fetched and processed in the background, and thanks to SSE events, the page updates live as results come in. No more empty pages.
Ah yes, SSE events, we added server-sent events for live updates. When a source finishes processing, when enrichment completes, when evaluation counts change – the UI updates immediately. No polling, no refresh.
Cheaper, Better Prompts
We switched to a more modern model for extraction, and the prompts got simpler. We want to keep the job for the LLM as simple as possible, to improve the quality of the responses. This means tackling in code what we can, and bothering the language model with the rest.
For example we are detecting consecutive terms that overlap with a extracted term, which helps when Wikidata already has high resolution data compared to our extraction. Turns out determining if the LLM extracted tenures are “similar enough” to what we already have, is not easy. We’re getting there though.
That’s it for now! Thanks for reading ![]()

