A secure full-stack web application for conducting online referendums with role-based access, secure authentication, and real-time voting results.
This project demonstrates end-to-end full-stack development, including frontend UI design, backend REST API development, authentication, and database integration.
MSLR (My Shangri-La Referendum) is a web-based voting system inspired by real-world e-government platforms.
The system allows:
- Citizens to register and vote securely
- Administrators to create, manage, and monitor referendums
- Live result updates with transparent vote counting
- Strict enforcement of one-person-one-vote
- JWT-based stateless authentication
- BCrypt password hashing
- Role-based access control (Voter / Admin)
- Single-use Secure Citizen Codes (SCC)
- Immutable vote storage
- Browse active referendums
- Cast a permanent vote (votes cannot be changed or withdrawn)
- Automatic vote counting
- Automatic referendum closure when an option reaches 50% of registered voters
- Create and manage referendums
- Open and close voting phases
- View participation statistics
- Manage Secure Citizen Codes and registered voters
- Clean and responsive frontend
- Dedicated dashboards for voters and administrators
- Live result visualisation using charts
- Mobile-friendly design
- Frontend: React + Vite
- Backend: Spring Boot (REST APIs, JWT authentication)
- Database: MongoDB
Two API layers are implemented:
/api/*– Modern REST API used by the frontend/mslr/*– Specification-compatible endpoints for automated testing
Frontend
- React
- Vite
- JavaScript
- HTML5 / CSS3
Backend
- Spring Boot
- REST APIs
- JWT Authentication
Database
- MongoDB
- Node.js
- Java 17+
- MongoDB
cd backend
./mvnw spring-boot:run