Vereniging Nederlandse Gemeenten (VNG)

E-democracy tool to run smoother elections.


KPN, Gemeente Den Haag, Gemeente Rotterdam


2018 - present

I'm interested!

Elements teamed up with long-time partner KPN to develop StembureauApp (PollingStationApp), a scalable and multi-platform solution to assist and support polling station staff before and during the elections in the Netherlands. It is now used by ten Dutch municipalities for approximately 1,300 polling stations.

StembureauApp consists of a front-end application, a lightweight mobile app for iPad and Android tablets and a fully scalable back-end built in Python/Django running in a Kubernetes cluster.

What we did
Python/Django back-end, Kubernetes, Angular front-end, native mobile app development for iOS and Android

Running smoother elections with StembureauApp

On election days, the chairman and other staff of a polling station traditionally did all the work manually. To keep track of the number of accepted voters (and thus handed out ballots), maintaining contact with the city hall and the counting process was all done with paper and pen and by phone. The polling station chairman needed to manually check each voter’s voting pass number against a physical blacklist of all invalidated numbers. As to be expected, this whole process is time consuming and prone to errors. Especially after a long and tiring election day.

Enter StembureauApp, a software tool internally developed by the city of Rotterdam in 2014, used for all their elections to date and shared with a few other Dutch municipalities.

With StembureauApp, the chairman can now quickly validate voting passes by simply scanning the printed QR code, engage in a direct chat with the elections’ support desk, complete checklists and perform a quick vote count at the end of the election day. This results in more efficient processing of voters, a higher quality of counting and quicker published turnout figures.

As the user base and feature requests grew, a tender was published to select an external technology partner. The tender aimed to make the application scalable, for further expansion, and multiplatform, as the app originally only supported iOS. The tender was awarded to KPN and Elements in January 2018.

A new, safer and fully scalable back-end

We rewrote the legacy back-end application, built in Java and Oracle, from scratch in Python/Django with a PostgreSQL database. A lot of effort was put into making the application scalable by making it containerized and having it run in a Kubernetes cluster. New lightweight native apps for iOS and Android were built and the Angular front-end was updated. 

As we were rebuilding the back-end application from the ground up, we could adhere to the principles of security by design by implementing security measures in the application and infrastructure from day one. 

Hosting moved from Rotterdam’s premises to AppFactory, KPN’s premium continuous delivery cloud platform.

StembureauApp in action

In 2018, five more Dutch municipalities joined to make use of the StembureauApp for upcoming elections. The Groningen municipal election of November 2018 and the Provincial Council and Water Authority elections of March 2019  gave us a few key learnings. Several changes were made to the network infrastructure and software to optimize the user experience.

The use of the StembureauApp for the European Parliament elections in May 2019 was a huge success. Across the participating municipalities, the app was used in more than 1,300 polling stations, where almost one million voters had their voting passes scanned.

End Result

The key accomplishment of this project is the transformation from a non-scalable, single-tenancy back-end and separate, tailor made mobile apps for each municipality to a horizontally scalable, multitenancy back-end and generic, multi-platform mobile app. StembureauApp is now ready for deployment of any number of new participating municipalities at a click of a button. 

Participating municipalities are very happy with the more efficient voting process. They experience less mistakes and can share the number of voters much quicker.

I'm interested!