Kto Głosował - Parliamentary Voting & Transparency Platform

Kto Głosował

01

Project Brief

Project Timeline

2024 – Present

Project Type

Mobile App, Web Platform, Backend Integration, Semantic Search

Client

Internal Project (Poland)

My Contribution

Architecture & Development Lead — Mobile (Flutter), Web (React/Next.js), Backend (Node.js/Python), API Integration, Data Engineering

Transparency
in
democracy
starts here.

Kto Głosował is a civic-tech platform designed to increase transparency in Poland's legislative process. The application enables citizens to quickly check how Members of Parliament (Sejm, Term 10) voted on any issue, explore full voting breakdowns by party and individual MPs, and read related public documents such as parliamentary prints (druki sejmowe).

The platform integrates directly with the official Sejm API, processes vote data in real time, and presents it in a modern, mobile-first interface. It also includes a semantic search engine that allows users to discover legislation by topic—not only by bill number.

Kto Głosował Platform
02

Challenges

Building a comprehensive civic-tech platform with real-time data integration and semantic search

01

Real-Time Data Integration

02

Semantic Search Implementation

03

Cross-Platform Architecture

04

SEO & Discoverability

Democracy thrives when citizens can see how their representatives vote.

Backend & Data Integration

Real-time synchronization with Sejm API

Built with Node.js and Python micro-services handling fetching and synchronizing voting data from the Sejm Term 10 API. The system aggregates and transforms votes, deputies, and document metadata, linking vote events with printed documents through pattern extraction.

Optimized caching and data normalization ensure fast load times, while scheduled background tasks detect and publish new voting events automatically. The architecture maintains data consistency across multiple systems and provides reliable real-time updates to both mobile and web platforms.

  • Backend Stack: Node.js, Express, Python micro-services
  • Data Source: Sejm Term 10 API integration
  • Data Processing: Aggregation, transformation, pattern extraction
  • Optimization: Caching, data normalization, scheduled background tasks
  • Real-time Updates: Automatic detection and publishing of new voting events
Backend Architecture

Frontend Development

Mobile-first design with modern architecture

Mobile App – Flutter

Modern UI with BLoC architecture providing voting explorer, deputy lists, filters, and visual charts. The app includes deep linking into web-hosted voting pages and a built-in share system generating SEO-optimized URLs.

  • • BLoC architecture for state management
  • • Voting explorer with filters and visualizations
  • • Deep linking to web voting pages
  • • SEO-optimized share system

Web – React / Next.js

Dedicated voting pages (e.g., /voting/35-4) automatically generated from the backend. SEO-ready content structure with metadata, open graph tags, and indexing rules. Fast, static + dynamic hybrid rendering for optimal performance.

  • • Auto-generated voting pages from backend
  • • SEO-optimized with metadata and Open Graph
  • • Hybrid static + dynamic rendering
  • • Fast load times and indexing support

Semantic Search

Natural language discovery of legislation

Vector search implemented using Pinecone enables users to query in natural language (e.g., "climate votes", "education budget", "schools", "abortion law"). Embeddings match topics to specific votes, MPs, and prints, enabling exploratory browsing across political themes.

This semantic search capability transforms how citizens discover and understand legislative activity, moving beyond bill numbers to topic-based exploration that reveals patterns, trends, and political positions.

From bill numbers to topics—discover legislation the way you think about it.

Semantic Search Interface
  • Vector Database: Pinecone for semantic search
  • Query Type: Natural language topic queries
  • Matching: Embeddings match topics to votes, MPs, and prints
  • Discovery: Exploratory browsing across political themes

UX & Information Architecture

Clean, informative interface optimized for comprehension and speed

Voting Detail Views

Each voting detail view includes a summary of the vote, party-level breakdown with visualization, individual MP votes, and linked parliamentary prints (druki). The interface is designed for accessibility and readability on both mobile and desktop devices.

  • • Vote summary and context
  • • Party-level breakdown with visualizations
  • • Individual MP vote tracking
  • • Linked parliamentary documents

Mobile-First Design

The platform prioritizes mobile experience while maintaining full functionality on desktop. Fast load times, intuitive navigation, and clear information hierarchy ensure users can quickly find and understand voting information regardless of device.

  • • Mobile-first responsive design
  • • Fast load times and performance
  • • Intuitive navigation patterns
  • • Accessibility-focused interface

Outcomes & Impact

Real-time transparency: Citizens can instantly understand how their representatives voted on any issue, increasing accountability and civic engagement.

Media-ready data: The generated pages act as stable, linkable sources for journalists, enabling fact-checking and investigative reporting.

High discoverability: SEO-driven architecture increases organic traffic from Google, making parliamentary data more accessible to the general public.

Civic empowerment: Topics-based search helps users understand patterns, trends, and political positions, enabling more informed democratic participation.

Scalable foundation: Architecture can be extended to future Sejm terms or adapted to other parliaments, creating a reusable civic-tech framework.

Technology Stack

Modern technologies powering the civic-tech platform

Flutter

Cross-platform mobile development

React & Next.js

Web frontend framework

Node.js

Backend services

Python

Data processing & microservices

Pinecone

Semantic vector search

Sejm API

Parliamentary data integration

Firebase Hosting

Deployment & hosting

GitLab CI/CD

Automated deployment