ssvc-rimsting-vote/README.md

127 lines
3.6 KiB
Markdown

# SCHAFWASCHENER SEGELVEREIN Voting System
A secure web application for conducting online votes for SCHAFWASCHENER SEGELVEREIN club members.
## Features
- **Secure One-Time Voting Links**: Admin can generate unique, one-time use voting links that are cryptographically signed.
- **Simple Voting Interface**: Members can easily vote Yes, No, or Abstain on proposed statute amendments.
- **Optional Comments**: Members can provide anonymous feedback or suggestions.
- **Results Dashboard**: Admin can view real-time voting statistics.
- **Dark Mode Support**: Automatically adapts to user's system preferences.
- **WYSIWYG Text Editor**: Admin can edit text content using a rich text editor.
- **JWT Authentication**: Admin authentication using JWT tokens stored in cookies.
- **Secure Key Management**: JWT keys are randomly generated and stored securely.
## Technical Implementation
- Built with Next.js 15 and React 19
- Styled with Tailwind CSS
- JWT-like token system for secure, one-time voting links
- File-based storage for vote data
## Getting Started
### Prerequisites
- Node.js 18+ and npm
### Installation
1. Clone the repository
2. Install dependencies:
```
npm install
```
3. Run the development server:
```
npm run dev
```
4. Open [http://localhost:3000](http://localhost:3000) in your browser
### Admin Access
The default admin password is `schafwaschener-segelverein-admin`. This can be changed by setting the `ADMIN_PASSWORD` environment variable.
Once logged in, the admin session is maintained using JWT tokens, so you don't need to enter the password for each action.
## Usage
### Admin
1. Navigate to `/admin` and enter the admin password
2. Generate voting links and share them with club members
3. View voting statistics in real-time
### Voters
1. Click on the unique voting link received
2. Select your vote (Yes, No, or Abstain)
3. Optionally add comments or suggestions
4. Submit your vote
## Environment Variables
- `ADMIN_PASSWORD`: Password for admin access (default: "schafwaschener-segelverein-admin")
- `NEXT_PUBLIC_BASE_URL`: Base URL for generating voting links (default: auto-detected)
- `JWT_SECRET_KEY`: Secret key for JWT signing (default: randomly generated)
## Production Deployment
### Standard Deployment
For production deployment, consider the following:
1. Set a secure admin password using the `ADMIN_PASSWORD` environment variable
2. Set a secure JWT secret key using the `JWT_SECRET_KEY` environment variable
3. Use a database instead of file-based storage
4. Set up HTTPS for secure communication
### Docker Deployment
The application can be easily deployed using Docker:
#### Using Docker Compose (Recommended)
1. Make sure you have Docker and Docker Compose installed
2. Run the application:
```
docker-compose up -d
```
Or with a custom admin password:
```
ADMIN_PASSWORD=your-secure-password docker-compose up -d
```
3. Access the application at [http://localhost:3000](http://localhost:3000)
4. To stop the application:
```
docker-compose down
```
#### Using Docker Directly
1. Build the Docker image:
```
./build-docker.sh
```
or manually:
```
docker build -t ssvc-rimsting-vote:latest .
```
2. Run the container:
```
docker run -p 3000:3000 ssvc-rimsting-vote:latest
```
3. For persistent data storage and custom admin password:
```
docker run -p 3000:3000 -v $(pwd)/data:/app/data -e ADMIN_PASSWORD=your-secure-password ssvc-rimsting-vote:latest
```
## License
This project is proprietary and confidential. Unauthorized copying, distribution, or use is strictly prohibited.
© SCHAFWASCHENER SEGELVEREIN