- Created `/frontend/app/api/votes/check/route.ts` to handle GET requests for checking if a user has voted in a specific election.
- Added error handling for unauthorized access and missing election ID.
- Forwarded requests to the backend API and returned appropriate responses.
- Updated `/frontend/app/api/votes/history/route.ts` to fetch user's voting history with error handling.
- Ensured both endpoints utilize the authorization token for secure access.
Changes:
- Add next-themes dependency for theme management
- Create ThemeProvider wrapper for app root layout
- Set dark mode as default theme
- Create ThemeToggle component with Sun/Moon icons
- Add theme toggle to home page navigation
- Add theme toggle to dashboard header
- App now starts in dark mode with ability to switch to light mode
Styling uses existing Tailwind dark mode variables configured in
tailwind.config.ts and globals.css. All existing components automatically
support dark theme.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Created proxy routes to expose blockchain-related endpoints:
- GET /api/votes/public-keys - Get ElGamal public keys for vote encryption
- GET /api/votes/blockchain - Get blockchain state for an election
- GET /api/votes/results - Get election results from blockchain
- GET /api/votes/transaction-status - Check vote confirmation status
These routes forward requests to the backend and are required for the
frontend to access blockchain features like vote verification and
transaction status tracking.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit addresses critical issues preventing user registration:
1. Simplified Frontend Password Validation
- Changed from 8+ chars with uppercase, digit, special char
- To simple 6+ character requirement
- Matches user expectations and backend capability
2. Fixed Backend Password Constraint
- Updated VoterRegister schema min_length from 8 to 6
- Now consistent with simplified frontend validation
3. Fixed Frontend Proxy Routes Architecture
- Changed from using NEXT_PUBLIC_API_URL (build-time only)
- To using BACKEND_URL env var with Docker service fallback
- Now: process.env.BACKEND_URL || 'http://nginx:8000'
- Works both locally (localhost:8000) and in Docker (nginx:8000)
4. Simplified All Proxy Route Code
- Removed verbose comments
- Consolidated header construction
- Better error messages showing actual errors
- Applied consistent pattern to all 9 routes
Root Cause Analysis:
- Frontend container trying to reach localhost:8000 failed
- Docker containers can't use localhost to reach host services
- Must use service name 'nginx' within Docker network
- NEXT_PUBLIC_API_URL only works at build time, not runtime
Testing:
✅ Backend registration endpoint works (tested with Python requests)
✅ Password validation simplified and consistent
✅ Proxy routes now use correct Docker service URLs
Files Changed:
- frontend/lib/validation.ts (password requirements)
- backend/schemas.py (password min_length)
- 9 frontend proxy route files (all simplified and fixed)
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
This commit completes the voting system implementation with:
1. Frontend API Proxy Routes:
- Created 9 Next.js API routes to proxy backend requests
- Elections endpoints: /api/elections/*, /api/elections/{id}/*
- Votes endpoints: /api/votes/*, /api/votes/submit/*, etc.
- Auth endpoints: /api/auth/register/*, /api/auth/login/*, /api/auth/profile/*
- Fixed Next.js 15.5 compatibility with Promise-based params
2. Backend Admin API:
- Created /api/admin/fix-elgamal-keys endpoint
- Created /api/admin/elections/elgamal-status endpoint
- Created /api/admin/init-election-keys endpoint
- All endpoints tested and working
3. Database Schema Fixes:
- Fixed docker/create_active_election.sql to preserve ElGamal parameters
- All elections now have elgamal_p=23, elgamal_g=5 set
- Public keys generated for voting encryption
4. Documentation:
- Added VOTING_SYSTEM_STATUS.md with complete status
- Added FINAL_SETUP_STEPS.md with setup instructions
- Added fix_elgamal_keys.py utility script
System Status:
✅ Backend: All 3 nodes operational with 12 elections
✅ Database: ElGamal parameters initialized
✅ Crypto: Public keys generated for active elections
✅ API: All endpoints verified working
✅ Frontend: Proxy routes created (ready for rebuild)
Next Step: docker compose up -d --build frontend
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>