Official European Union Voting Platform - A secure, transparent, and accessible voting system for EU citizens.
- ✅ Poll Creation - Create polls with multiple options
- ✅ Secure Voting - Vote with duplicate prevention
- ✅ Real-time Results - View voting results with visual charts
- ✅ Multi-language Support - Available in English, German, and French
- ✅ Responsive Design - Works on desktop and mobile devices
- 🇪🇺 Multi-language Interface - Native support for EU languages
- 🔒 Security - Rate limiting and input validation
- ♿ Accessibility - WCAG-compliant design
- 🔍 Transparency - Open voting results and statistics
- 🛡️ Privacy - Optional voter identification
- Node.js 14.0.0 or higher
- npm (comes with Node.js)
- Clone the repository:
git clone https://github.com/And1rew132/Voting-App.git
cd Voting-App- Install dependencies:
npm install- Start the application:
npm start- Open your browser and navigate to:
http://localhost:3000
For development with auto-restart:
npm run dev- Navigate to the Admin tab
- Enter your poll question
- Add at least 2 options (you can add more with "Add Option")
- Click "Create Poll"
- Go to the Vote tab
- Select an active poll
- Choose your preferred option
- Optionally enter a Voter ID
- Submit your vote
- Click the Results tab
- View real-time voting statistics
- See percentage breakdowns and vote counts
- Use the language selector in the top-right corner
- Supported languages: English, Deutsch (German), Français (French)
- Interface automatically translates while preserving poll content
- Express.js - Web framework
- Helmet - Security middleware
- Rate Limiting - DoS protection
- CORS - Cross-origin support
- In-memory storage - Simple data persistence
- Responsive CSS - Mobile-first design
- Internationalization - Multi-language support
- Accessibility - WCAG guidelines compliance
- Progressive Enhancement - Works without JavaScript
- Rate limiting (100 requests per 15 minutes)
- Input validation and sanitization
- Duplicate vote prevention
- XSS protection via HTML escaping
Get all polls
[
{
"id": 1,
"question": "Poll question",
"options": ["Option 1", "Option 2"],
"createdAt": "2024-01-01T00:00:00.000Z",
"active": true
}
]Create a new poll
{
"question": "Your poll question",
"options": ["Option 1", "Option 2", "Option 3"],
"languages": {
"en": "English question",
"de": "German question",
"fr": "French question"
}
}Get specific poll details
Submit a vote
{
"option": "Selected option",
"voterId": "optional-voter-id"
}Get poll results
{
"poll": { /* poll object */ },
"results": {
"Option 1": 5,
"Option 2": 3
},
"totalVotes": 8
}- Minimal data collection
- Optional voter identification
- No personal data storage beyond session
- Clear privacy notices
- Keyboard navigation support
- Screen reader compatibility
- High contrast color scheme
- Semantic HTML structure
- Focus indicators
- Interface translation for major EU languages
- Right-to-left language support ready
- Cultural considerations in design
PORT=3000 # Server port (default: 3000)- Build for production:
npm install --production- Start with PM2 (recommended):
npm install -g pm2
pm2 start server.js --name "eu-voting-app"- Or use Docker:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]├── server.js # Express server
├── package.json # Dependencies and scripts
├── public/ # Frontend files
│ ├── index.html # Main HTML
│ ├── styles.css # CSS styles
│ ├── app.js # Main JavaScript
│ └── translations.js # i18n translations
└── README.md # This file
- Add translations to
public/translations.js - Add option to language selector in
index.html - Test all interface elements
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
- Poll creation works
- Voting functionality works
- Results display correctly
- Language switching works
- Mobile responsiveness
- Accessibility features
- Security measures active
- Database integration (PostgreSQL/MongoDB)
- User authentication system
- Advanced poll types (ranked choice, multiple selection)
- Email notifications
- Export results to CSV/PDF
- Admin dashboard with analytics
- Integration with EU authentication systems
MIT License - See LICENSE file for details
For support, questions, or contributions:
- Create an issue on GitHub
- Contact the development team
- Review documentation and API guides
Made with ❤️ for European democracy

