A Next.js application for managing decentralized workshops and voting processes using Web3Auth and Cardano blockchain integration.
- 🔐 Secure authentication with NextAuth.js and Web3Auth
- 🗳️ Decentralized voting system with Cardano blockchain integration
- 📊 Workshop management and registration system
- 📧 Email notifications with customizable templates
- 🔒 End-to-end encryption for sensitive data
- 🌐 Built with modern web technologies
- Next.js - React framework
- Prisma - Database ORM
- NextAuth.js - Authentication
- Web3Auth - Blockchain authentication
- Lucid - Cardano blockchain integration
- TailwindCSS - Styling
- TypeScript - Type safety
- Node.js 16.x or later
- PostgreSQL database
- SMTP server for email notifications
- Web3Auth account
- Blockfrost API key (for Cardano integration)
Create a .env
file in the root directory with the following variables:
# Database
POSTGRES_PRISMA_URL=
POSTGRES_URL_NON_POOLING=
# Authentication
JWT_PRIVATE_KEY=
JWT_PUBLIC_KEY=
SECRET=
# Email
SMTP_HOST=
SMTP_PORT=
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=
# Blockchain
WEB3AUTH_CLIENT_ID=
BLOCKFROST_KEY=
BLOCKFROST_URL=
# Security
ENCRYPTION_KEY=
- Clone the repository:
git clone https://github.com/ADAO-Summon/ranked-choice-vote.git
cd ranked-choice-vote
- Install dependencies:
npm install
- Set up the database:
npx prisma generate
npx prisma db push
- Run the development server:
npm run dev
- All sensitive data is encrypted at rest using AES-256-CBC
- JWT tokens are signed using RS256 algorithm
- Email verification required for all accounts
- Rate limiting on API endpoints
- Input validation and sanitization
- Session management with secure cookies
- Environment variables for all sensitive configurations
We welcome contributions! Please see our Contributing Guide for details.
This project is licensed under the MIT License - see the LICENSE file for details.
- Web3Auth for blockchain authentication
- Cardano blockchain community
- All contributors who have helped shape this project
For support, please open an issue in the GitHub repository or contact the maintainers.