(Demo GIF and UI screenshots can be found in the docs/assets directory)
Private DAO voting via MagicBlock. Encrypted votes. Dramatic reveal ceremony.
Whivote solves this by providing: Private DAO voting via MagicBlock. Encrypted votes. Dramatic reveal ceremony.
Key Features:
- β‘ High Performance: Seamless integration and optimized workflows.
- π Secure by Design: Verifiable on-chain actions and robust data protection.
- π¨ Intuitive UX: Beautiful, user-centric interface built for scale.
| Component | Technology | Description |
|---|---|---|
| Frontend | Next.js 16, React 19 | App Router, SSR, Server Components |
| Styling | Tailwind CSS v4 | High-performance responsive UI |
| Language | TypeScript | Strict type safety across the stack |
| Integration | MagicBlock API | Ephemeral rollups and state management |
| Testing | Vitest | Comprehensive unit and component testing |
For a detailed breakdown of our system architecture and data flow, please refer to the Architecture Document.
Whivote fundamentally relies on MagicBlock to function:
- MagicBlock API: We use MagicBlock for private DAO voting, processing encrypted votes, and enabling a dramatic reveal ceremony on-chain.
- Sponsor Integration: MagicBlock
- Clone the repo:
git clone https://github.com/edycutjong/whivote.git - Install dependencies:
npm install - Set up environment variables:
Note: Set your
cp .env.example .env.local
NEXT_PUBLIC_RPC_URLandMAGICBLOCK_API_KEYin the.env.localfile. The MagicBlock key is an authorization token for Private Ephemeral Rollups, obtained by requesting a challenge from/v1/spl/challenge, signing it with your wallet, and calling/v1/spl/login. - Run the app:
npm run dev
This project is licensed under the MIT License.

