Sistem voting digital berbasis blockchain yang menggunakan teknologi pengenalan wajah untuk memastikan integritas dan keamanan pemilihan.
- Blockchain Voting: Menggunakan smart contract Ethereum untuk transparansi dan immutability
- Face Recognition: Sistem pengenalan wajah untuk mencegah vote ganda
- Admin Panel: Interface untuk mengelola proposal/kandidat
- Real-time Results: Hasil voting yang dapat dilihat secara real-time
- Decentralized: Fully decentralized voting system
- Next.js 15 - React framework dengan App Router
- TypeScript - Type safety
- Tailwind CSS - Styling
- Face-API.js - Face recognition library
- Ethers.js - Ethereum library
- Smart Contract - Deployed on Ethereum network
- Node.js - Server runtime for API routes
web3-pemilu/
βββ src/
β βββ app/
β β βββ api/ # Next.js API routes
β β β βββ proposals/ # Proposal management
β β β βββ vote/ # Voting logic
β β β βββ initialize/ # System initialization
β β βββ voting.tsx # Client side component
β β βββ page.tsx # Server side component
β βββ lib/
β βββ voting-system.ts # Core voting logic
β βββ utils.ts # Utility functions
βββ public/
β βββ models/ # Face-API.js models
βββ next.config.js # Next.js configuration
βββ package.json
## π Quick Start
### Prerequisites
- Node.js 18+
- npm atau bun
- Git
### 1. Clone Repository
```bash
git clone https://github.com/dipaadipati/web3-pemilu.git
cd web3-pemilu
npm installBuat file .env:
# Blockchain Configuration
RPC_URL=http://localhost:8545
PRIVATE_KEY=your_private_key_here
CONTRACT_ADDRESS=your_contract_address_here
# Show admin panel
NEXT_PUBLIC_ADMIN_PANEL=truePastikan Anda sudah memiliki smart contract yang ter-deploy. Jika belum:
- Clone repo backend terpisah yang menggunakan Hardhat
- Deploy smart contract ke network yang diinginkan
- Copy contract address ke environment variables
Download model files dan letakkan di public/models/:
ssd_mobilenetv1_model-weights_manifest.jsonssd_mobilenetv1_model-shard1face_landmark_68_model-weights_manifest.jsonface_landmark_68_model-shard1face_recognition_model-weights_manifest.jsonface_recognition_model-shard1
npm run devBuka http://localhost:3000 di browser.
- Pastikan smart contract sudah ter-deploy di network yang diinginkan
- Set environment variables dengan contract address yang benar
- Download dan setup face-API models (jika belum ada)
- Pastikan menggunakan PRIVATE_KEY yang didapatkan pada
hardhat nodedi daftar pertama. - Aktifkan
NEXT_PUBLIC_ADMIN_PANEL=truepada.env - Tambahkan proposal(Judul Voting) baru
- Buka halaman voting di beranda
- Pilih jawaban yang diinginkan
- Ambil foto wajah untuk verifikasi
- Konfirmasi vote
GET /api/proposals- Ambil semua proposalPOST /api/proposals- Tambah proposal baru (admin only)
POST /api/vote- Submit vote dengan face verification
POST /api/initialize- Initialize voting system
# Development
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run type-check # TypeScript type checking- Face Recognition: Setiap wajah hanya bisa vote sekali (BUG)
- Blockchain: Vote tersimpan immutable di blockchain
- Private Key: Admin key untuk contract management
- Hash Verification: Face descriptor di-hash untuk privacy
-
Module 'encoding' not found
npm install encoding
-
Face models not loading
- Pastikan folder
public/models/berisi semua model files - Check browser console untuk error loading
- Pastikan folder
-
Contract connection failed
- Pastikan smart contract sudah ter-deploy
- Verify contract address di environment variables
- Check private key format
- Pastikan RPC URL dapat diakses
-
Face detection failed
- Pastikan lighting yang cukup
- Wajah harus terlihat jelas
- Gunakan webcam dengan resolusi yang baik
- Push code ke GitHub
- Connect repository di platform hosting
- Set environment variables:
RPC_URLPRIVATE_KEYCONTRACT_ADDRESSNEXT_PUBLIC_ADMIN_PANEL
- Deploy
- Smart Contract: web3-pemilu-backend
- Smart contract ter-deploy di Ethereum network
- Face-API models di folder public/models/
- Node.js 18+
- Environment variables configured
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Developer: M. Adipati Rezkya
- Repository: Frontend (Next.js + TypeScript)
- Related: Smart Contract Backend (Hardhat + Solidity)
Jika ada pertanyaan atau issue:
- Create GitHub Issue
- Email: adptrzky@gmail.com
- GitHub: @dipaadipati