2025-03-02 21:49:10 +00:00
2025-03-02 18:19:11 +00:00
2025-03-02 21:43:19 +00:00
fix
2025-03-02 21:49:10 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 08:46:28 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 17:12:22 +00:00
2025-03-02 17:12:22 +00:00

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 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:

  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
  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

Description
No description provided
Readme 228 KiB
Languages
TypeScript 94.6%
HTML 1.7%
Shell 1.4%
CSS 1%
Dockerfile 0.8%
Other 0.5%