---
type: CaseStudy
title: 'how2vote.au: A Provably Neutral Voting Tool'
description: How National Digital built how2vote.au - a non-partisan, offline-first, open-source tool that compares your views with parties' recorded votes.
resource: https://nationaldigital.com.au/case-studies/how2vote/
tags:
  - progressive web app development
  - offline-first web application
  - open source civic technology
  - cross-platform app development Australia
  - Civic technology
timestamp: '2026-08-19T00:00:00.000Z'
---

# how2vote.au: A Provably Neutral Voting Tool

How National Digital built how2vote.au - a non-partisan, offline-first, open-source tool that compares your views with parties' recorded votes.

## A voting tool that proves its own neutrality

how2vote.au is a non-partisan comparison tool that shows how closely each party's recorded parliamentary votes match your positions - then you author your own voting plan.

## Architecture Diagram

- **Client & delivery** — Offline-first PWA + native shells
- **Scoring engine** — Pure, deterministic package
- **Web app** — SvelteKit (adapter-static)
- **Compiled dataset** — Checksummed, ODbL-attributed
- **Hosting & CI gates** — Cloudflare Pages, axe-core

## how2vote.au by the numbers

Figures describe the shipped how2vote.au system and its CI integrity gates, drawn from the project's public specification and README.

- **Propositions per session: 50** — Every match is built from 50 parliamentary propositions the user answers, each linking to the divisions behind it on They Vote For You. _(Source: how2vote.au specification, 2025)_
- **Server-side scoring: None** — All matching runs on-device; answers never leave the browser unless the user shares a card, and the share link carries them only in its URL fragment. _(Source: how2vote.au README, 2025)_
- **Colour in the interface: Zero hue** — A strict two-tone ink-on-paper palette, enforced by a CI neutrality lint on the built CSS, so match quality can never be encoded as party colour. _(Source: how2vote.au CI gate, 2025)_
- **Licence: AGPL-3.0** — The full codebase - engine, pipeline and app - is open source, so the method can be audited and rebuilt from source by anyone. _(Source: how2vote.au repository, 2026)_

**Methodology:** Based on how2vote.au's published specification, README and CI configuration; figures describe the shipped system rather than independently audited usage metrics.

## Review

## Engineering trust into a civic product

how2vote.au is built for voters who start out sceptical. Every match comes from the parliamentary record rather than campaign claims, the method is open source and reproducible, and neutrality is enforced in CI rather than promised in copy.

- **Revealed preference beats self-reported position: matches derive from votes MPs actually cast.** Parties are compared on divisions recorded in parliament and sourced from They Vote For You, with every proposition linking back to the divisions behind it. A sceptical user can follow any single match claim to the primary public record.
- **The tool compares and the user decides - nothing is ranked and no preference is recommended.** Candidates appear in official ballot order and the user authors their own voting plan. Declining to rank is what keeps the tool a reference rather than a recommendation engine, which is the difference between informing a vote and directing one.
- **A guarantee enforced in CI is worth more than a guarantee written in a policy.** A neutrality lint over the built CSS fails the build on any hue, a deterministic-rebuild check pins the dataset, and axe-core gates accessibility. Each promise a user has to take on faith is instead a test that must pass before release.
- **On-device scoring removes the need to be trusted with the data at all.** With no account, no server-side scoring and share state confined to the URL fragment, there is no endpoint that could log answers. Privacy comes from the architecture rather than from a commitment about how collected data will be handled.
- **Open source under AGPL-3.0 turns the method into something auditable and rebuildable.** Engine, data pipeline and application are all public. Anyone disputing a result can inspect the scoring rules, rebuild the checksummed dataset from source and confirm the output, which is a materially stronger claim than publishing a methodology summary.

## Questions decision-makers ask about this build

### Does how2vote.au tell you who to vote for?

No. It compares your answers with each party's recorded parliamentary votes and shows how closely they match, against the candidates on your ballot in official ballot order. Nothing is ranked for you and no preference is recommended - you author your own voting plan from what the comparison shows. That distinction is deliberate: the tool's job is to surface the public record, not to make the choice on your behalf.

### How can a voting tool prove it is neutral rather than just claim it?

By making neutrality checkable. Every match derives from divisions members of parliament actually voted in, sourced from They Vote For You, and each proposition links back to those divisions. The scoring engine is pure and dependency-free with the specification's worked examples as immutable golden tests, the dataset is deterministic and checksummed, and the codebase is open source under AGPL-3.0 so anyone can rebuild it and check the answer.

### Why does the interface have no colour at all?

Because colour signals allegiance. A strictly two-tone, ink-on-paper palette means match quality can never be encoded as party colour, and a high match cannot be made to feel like an endorsement through design alone. It is enforced by a continuous-integration lint over the built CSS rather than by a style guide, so a stray hue fails the build - a design guarantee held in place by a test.

### What happens to a user's answers?

All matching runs on-device. There is no account, no tracking by default and no server-side scoring, so answers never leave the browser unless the user chooses to share a card - and a share link carries them only in its URL fragment, which browsers never send to the server. The app is a fully static, offline-capable progressive web app, so there is no scoring endpoint to log anything in the first place.

### Why build an election tool offline-first?

Polling places have poor reception and long queues, which is exactly when someone reaches for their voting plan. A static, offline-capable progressive web app keeps working with no network, and the identical build is packaged as iOS and Android shells with Capacitor rather than reimplemented per platform. One codebase, one scoring engine, three distribution channels, and no server in the path at the moment of use.

### What stops the data going stale between elections?

The dataset refreshes from They Vote For You through an automated, pull-request-gated pipeline, and official ballots are ingested once nominations are declared. Every refresh passes the same integrity gates - deterministic rebuild, neutrality lint, axe-core accessibility - so the same engine and interface carry forward to each federal election without a rebuild, and a bad data release cannot ship quietly.

## More of our work

- Micro-X: Real-Time Medical Device Interface
- Luxico & Staylonger: One Property Management Platform

*What's next*

## Building something that must be trusted?

how2vote.au earns trust by construction: deterministic builds, CI-enforced guarantees and an auditable method. If your product carries the same burden of proof, see how we approach [custom web applications](/digital-product-development/custom-web-applications) and [technology selection](/digital-strategy/technology-selection-advisory), part of our wider [custom software development](/digital-product-development) work.

## Want a platform like this for your business?

Tell us what you're building. We'll reply within one business day with next steps, not a sales deck.

## Related

**Parent:**
- [Real platforms, in production.](/okf/case-studies.md)

**Related:**
- [NRMA Parks & Resorts: WordPress to Contentful Migration](/okf/case-studies/nrma-parks-and-resorts.md)
- [Luxico & Staylonger: One Property Management Platform](/okf/case-studies/luxico.md)
- [MyStrengths: Student Assessment Platform](/okf/case-studies/mystrengths.md)
- [Gratofy: Custom E-commerce Marketplace](/okf/case-studies/gratofy.md)
- [Micro-X: Real-Time Medical Device Interface](/okf/case-studies/micro-x.md)
