This project is part of the Stellar Smart Contract Challenge on Dev.to.
We built a blockchain-based voting platform using Stellar Smart Contracts. VoteVault is a secure and transparent voting platform that allows users to create and participate in voting processes. Find out more about our journey building VoteVault in the Dev.to post or visit the VoteVault website.
Note: Our Smart Contracts are still deployed on the Stellar Testnet and can't be used for a large audience yet. Also we can't ensure full auth security and integrity. The application currently serves as a proof-of-concept and fully functioning prototype. 🌱
With VoteVault, you can create and participate in secure and transparent voting processes. Here are some of the features of VoteVault:
- Stellar Smart Contracts: Ensure secure and verifiable voting through Stellar smart contracts.
- Angular Frontend: Enjoy a sleek, responsive user interface designed using Angular, optimized for both desktop and mobile devices, developed with Tailwind CSS.
- Secure and Transparent: VoteVault tries to implement secure and transparent voting processes, ensuring the integrity of the voting system.
- Verifiable Results: All votes are stored on the Stellar blockchain, allowing for verification of the voting results.
We wrote down some user stories to guide the development of VoteVault. Here are some of the most important ones:
- As a user, I want to be able to register a new Stellar account, so I can participate in the voting process.
- As a user, I want to be able to login to my account, so I can access the voting platform.
- As a user, I want to be able to create a new vote, so I can start a voting process.
- As a user, I want to be able to cast my opinion on a vote, so I can participate in the voting process.
- As a user, I want to be able to see the results of a vote, so I can verify the voting process.
- As a user, I want to be able to copy the vote link, so I can share it with others.
- As a user, I want to get feedback on my actions, so I know what is happening.
- As a user relying on accessibility features, I want to be able to use the platform, so I can participate in the voting process.
VoteVault integrating Stellar Smart Contracts could be used in various scenarios, such as:
- Company Elections: Companies could use VoteVault to conduct internal elections, such as electing a new board member.
- Community Decisions: Communities could use VoteVault to make decisions on community projects or initiatives.
- Controversial Opinions: People could use VoteVault to express their opinions on controversial topics.
Based on this evaluation, the product sets a base source code for enhancing the platform with more features. Such as using VoteVault "core" as a base for a more complex voting system, like government elections with each citizen being registered once (which would kill the anonymity of the votes - sigh) or other useful extensions of our application. This provides a real-world use case for the Stellar Smart Contracts and the VoteVault platform.
As this project was developed in a short amount of time, there are some known issues that we would like to call out and address in the future:
- Accessibility: The platform is not fully accessible yet. We tried to implement some accessibility features, but there is still some work to do.
- Error Handling: The error handling is not perfect yet, but already pretty good.
- Protect from Sybil Attacks and improved Authentication: We need to implement a way to protect the platform better from Sybil and other attacks.
- Improve UI/UX: We implemented a lot of logic and tried to keep the UI clean and straightforward, still we will continue working on it and improving as much as possible.
We also got some additional features we thought about and couldn't implement yet.
- Voting Timeframes: Users creating a new vote can decide whether there's a start and end date for the votes.
- Multiple Options: Users can also create votes where multiple options can be selected.
- Full Test Coverage: We want to have full test coverage for the platform.
- Automated Testing: We already have implemented some automated testing and linting, also in the
release.yml
action, where the app is automatically deployed. If we add full test coverage, we can also add automated testing to the deployment process (spec and e2e tests). - Dynamic OG Tags: We want to implement dynamic OG tags for the vote pages, so users can share the vote on social media platforms even better.
- Fees and Tokenization: In a production environment, fees will need to be covered either by the vote creator or the participants. This could involve tokenization mechanisms where a small fee is charged for vote creation or participation, ensuring the platform remains sustainable.
Contributions are appreciated! If you want to contribute, please read and comply with the Contributing Guidelines, Code of Conduct, and Developer Certificate of Origin first.
We have several documents for developers to help them get started with the project. You can find them in the docs
or .github
directory. Here are some of the most important ones:
We very much suggest you read these documents before contributing to the project, especially the Contributing Guidelines and Workflow.
This project is licensed under the MIT License. By contributing to VoteVault, you agree that your contributions will be released under the same license. Also, you agree to the Contributor Covenant Code of Conduct and Developer Certificate of Origin.
Thanks to the following projects and their contributors for making VoteVault possible:
This project was done as part of the Stellar Smart Contract Challenge on Dev.to.
Thanks to the following people for their contributions:
Released under MIT License by @danieljancar and @cyrilkurmann