The manpower and resources that go into organizing state or nation-wide elections are huge. Our app aims to cut down on many of those costs by reducing both the manpower required and the resources invested into voting stations. It's actually quite simple - fewer funds required for resources means more funds available for everything else.
Multipurposability. The app is not just for governmental elections - our simple yet effective system of using a three-factor authentication ensures that not only huge votes but also small-scale attendance and registration events can benefit from this app.
What it does
The app uses a three-part authentication for true security that cannot be faked:
- Read QR codes via a phone's scanner displayed by our Arduino, which randomly change every few seconds.
- Use geolocation to ensure that the phone used for voting is within range (~5-10 meters) of the polling station.
- Use fingerprint sensors and/or Face ID Authentication (depending on the user's phone) to add the third and final layer of security.
How we built it
We used Flutter for iOS and Android to develop the front-end of the mobile application and linked our app to Goggle Firebase which gives a great back-end and authentication system. We also used a Raspberry Pi to create a randomly generated string of characters and communicate via serial port with an Arduino UNO R3. The Arduino uses the string to generate the QR Code and output onto an 2.8" LCD screen. The application can scan the QR code as 1/3 of a 3 factor authentication process for the secure voting process. The other two factors are the phone's in-built FaceID/Fingerprint verification and geolocation within a specific range of the polling location.
Challenges we ran into
Some developers had zero experience using Flutter framework and had some trouble setting up the Visual Studio Code IDE as well as learning the Dart language. Initially there were also issues connecting the Raspberry Pi to one of Drexel's Internet networks. We also had difficulty getting the libraries we used for the iOS application to work on the Android version, so we were only able to get the iOS version working with the time constraints.
Accomplishments that we're proud of
We are proud of everything we have learned and accomplished in creating this project. This includes
• Learning how to establish a connection between the Raspberry Pi and Arduino over the Serial Port for communication of data.
• Working with Firebase to write and fetch our user and poll data.
• Creating a UI for the application that includes sign-up / log-in pages, polls open near the user, nominees in the selected poll, and a page to scan the QR code to verify a vote.
• Working with geolocation to add a third layer of security, ensuring users are within a geofence in order to vote in polls.
What we learned
The best part was learning about technologies that we had not explored before the hackathon. Teammates who are skilled in Java, C/C++, and Python were introduced to Dart, which is a true "functional programming" language. Similarly, the team members who were used to creating the front end were shown the intricacy of the back end and the hardware synchronization.
What's next for Vote.io
If granted more time, there are still features we would like to implement in this project. First of all, we would like to finish the Android version of the application, which we were unable to due to issues with cross compatibility, so we only completed the iOS version. To improve our hardware setup, we would like to synchronize the Arduino's LCD display with the reading of the QR code string from the python program as closely as possible. This will allow for better efficiency and we can use the quick QR cycle to determine that a user has scanned the current QR code in a timely fashion for validation. We could also eliminate the Arduino altogether by using an LCD screen that works with the Raspberry Pi. For the mobile application, we would like to make the platform as secure as possible, with the thought of this eventually being used widely across the country and even in government. To begin, the user accounts would need to be more secure and require passwords with specific qualifications (length, special characters, etc.). Once other features are implemented, Integration Testing and Systems Testing will take up the most time after that.