PoliLoom – Loom for weaving politician's data

Devlog #10: The Game Loop

Hey everyone! Time for another update.

Since the last post, we’ve been through two rounds of user testing. The first round led to a bunch of UI polish: guide improvements, better multiselect filters with counts, cleaner route structure, and lots of style tweaks. The second round drove most of this update. The goal throughout: make sure we don’t lose people along the way.

Learning From Real Users

Watching people use PoliLoom for the first time taught us a lot. Where do they hesitate? What makes them click away? What keeps them going?

The answer wasn’t more features. It was clarity. People needed to understand what they were doing and feel confident doing it. Every moment of confusion is a potential drop-off.

The old flow didn’t help. You’d log in and immediately land in the evaluation screen — politicians coming at you, no context, no goal. Filters existed but were buried in a menu most people never found.

Now you start with a choice. Pick a country, pick a language, then begin. You’re not drowning in data — you’re starting a session with a clear endpoint. Finish it, come back later, start another. Same data, completely different feeling.

The Tutorial

The biggest addition is a hands-on tutorial. Not a wall of text — an interactive walkthrough where you actually evaluate data and get immediate feedback.

Basic tutorial (13 steps):

  • Learn about source documents and extracted data
  • Practice accepting and rejecting
  • Work with multiple sources
  • Understand why specific beats generic

Advanced tutorial (6 steps):

  • Unlock the ability to deprecate existing Wikidata statements
  • Learn when to preserve valuable metadata

The tutorial catches mistakes and explains what went wrong. Get it right? Move on. Get it wrong? Try again with a hint. By the end, users understand the task and feel ready.

Advanced Mode

Speaking of deprecation — this is now opt-in. New users see a simpler interface: just accept or reject new extractions. Toggle advanced mode and you can also deprecate existing Wikidata statements that need replacing.

This came directly from user testing. The full interface was overwhelming for newcomers. Now there’s a clear progression.

Better Evidence

We now extract multiple supporting quotes per statement instead of just one. When the AI finds “Jane Doe was born on March 15, 1975” and also “Born: March 15, 1975” — you see both. More evidence, easier verification.

The highlighting algorithm got smarter too. Multiple quotes, multiple highlights.

The Small Stuff

Lots of polish:

  • “Review” became “Evaluate” — clearer verb
  • Consistent accept/reject terminology throughout
  • Button and input style refresh
  • The old static guide is gone (the tutorial replaced it)
  • Properties are now sorted by date.

Backend Housekeeping

  • Preferences moved entirely to client-side localStorage — simpler architecture
  • Soft delete for extracted statements — we remember what users already rejected
  • Wikipedia permanent URLs and Wikipedia project tracking
  • Wider language support
  • Hierarchy logic rewritten with proper tests

Test suite overhaul — We refactored the entire test suite from database setup/teardown to transaction-based testing. The old approach was getting slow as we added more indexes. The switch to transactions also pushed us to clean up parts of the codebase that weren’t following proper transaction patterns — so the tests got (a lot) faster and the code quality improved.

What’s Next

A few directions we’re exploring:

Mobile interface — The current UI is desktop-focused. Making it work on phones would open up casual contribution. The design was made with this support in mind, but the actual styles are still missing.

User and community stats — Pages showing your contribution history, how much you’ve evaluated, and how the community is doing overall. Leaderboards, personal stats, maybe completion tracking per country or parliament.

Government data pipelines — This one’s been cooking for a while.

The Government Data Vision

We can’t filter by position or parliament effectively right now. The position data is incomplete (that’s literally why this tool exists). We can filter by country and language because most politicians have citizenship data, but “show me all Members of the European Parliament” doesn’t work yet.

The path forward: government publications.

Parliaments publish lists of their members. If we maintain a curated list of these source pages — linked to specific positions and countries — we can build scrapers that fetch them regularly. Different formats (simple lists, index pages with detail pages, etc.), same outcome: complete data for specific positions.

This gives us:

  • Reliable filters — Filter by parliament or position group, get everyone
  • Recurrent engagement — New data shows up with a “NEW” tag when scrapers run
  • Completion incentives — Be the first to verify a new parliament’s data
  • Targeted enrichment — When someone filters by a scraped position, we trigger Wikipedia enrichment for exactly that set

The manual work upfront is linking source pages to Wikidata positions and countries. We’ll do this ourselves initially, but it could become something users help with.

More on this as it develops.

Try It Out

The tutorial is live. If you haven’t used PoliLoom before, it’s a good time to start. If you have, consider toggling advanced mode and going through the advanced tutorial.

Thanks for following along!