12 Commits

Author SHA1 Message Date
Alexis Bruneteau
71cbfee4f4 fix: Simplify registration system and fix frontend-backend proxy routing
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>
2025-11-07 03:38:13 +01:00
Alexis Bruneteau
c6a0bb1654 feat: Complete frontend-backend API integration for voting system
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>
2025-11-07 03:32:08 +01:00
Alexis Bruneteau
c367dbaf43 refactor: Remove all mock data and use real API data for elections and voting 2025-11-07 02:49:50 +01:00
Alexis Bruneteau
a73c713b9c demo: Simplify active votes to 1 election for demo purposes 2025-11-07 02:48:26 +01:00
Alexis Bruneteau
2b8adc1e30 feat: Add vote detail page for individual elections (/dashboard/votes/active/[id]) 2025-11-07 02:47:06 +01:00
Alexis Bruneteau
5ac2a49a2a fix: Add citizen_id field to registration form (fixes 422 error) 2025-11-07 02:39:17 +01:00
Alexis Bruneteau
7bf7063203 feat: Create cool interactive blockchain visualization interface
New BlockchainVisualizer component with:

 Visual Design:
  • Dark mode gradient theme (slate/blue/purple)
  • Smooth animations on block load
  • Hover effects and transitions
  • Gradient backgrounds for cards
  • Professional color scheme

📊 Stats Dashboard:
  • Total blocks count card
  • Total votes registered card
  • Chain validation status card
  • Security score card
  • Each with unique icon and styling

🔗 Block Display:
  • Expandable block cards with chevron indicators
  • Genesis block with  icon (yellow)
  • Vote blocks with 🔒 icon (green)
  • Block index and transaction ID display
  • Hash preview on block header
  • Animated entrance (staggered timing)

🎨 Expanded Details:
  • Index, timestamp, and all hashes
  • Previous hash display
  • Block hash (highlighted in gradient)
  • Encrypted vote data
  • Transaction ID with copy button
  • Digital signature with copy button
  • Verification status indicators
  • Chain link visual indicators

📋 Interactive Features:
  • Copy-to-clipboard for all hashes
  • Visual feedback (green checkmark on copy)
  • Smooth expand/collapse animations
  • Hover effects on buttons
  • Responsive grid layout

🔐 Security Panel:
  • Information about immutability
  • Explanation of transparency
  • Description of encryption

🚀 Verification:
  • Beautiful gradient verification button
  • Loading state with spinner
  • Real-time status display

Performance:
  ✓ No TypeScript errors
  ✓ Build successful
  ✓ All 13 routes prerendered
  ✓ Production optimized
  ✓ File size: 5.82 kB

Design Features:
  ✓ Glassmorphism effects
  ✓ Smooth animations
  ✓ Professional color gradients
  ✓ Icons from lucide-react
  ✓ Responsive design
  ✓ Dark mode support
  ✓ Copy functionality
  ✓ Staggered animations

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 02:26:31 +01:00
Alexis Bruneteau
dde0164b27 feat: Implement Phase 4 - Blockchain Visualization
Add comprehensive blockchain viewer with:
- BlockchainViewer component: Display blocks in expandable cards
- Hash visualization: Show SHA-256 hashes for each block
- Chain verification: Visual integrity status and verification button
- Block details: Expand to see full block information
  - Index, timestamp, previous hash, block hash
  - Encrypted vote data, transaction ID
  - Digital signatures
- Election selector: View blockchain for different elections
- Mock data: Demo blockchain included for testing
- Responsive design: Works on mobile and desktop

UI Features:
  ✓ Block expansion/collapse with icon indicators
  ✓ Genesis block highlighted with  icon
  ✓ Vote blocks marked with 🔒 icon
  ✓ Chain link visual indicators
  ✓ Hash truncation with full display on expand
  ✓ Status indicators: Chain valid/invalid
  ✓ Security information panel
  ✓ Statistics: Total blocks, votes, integrity status

Integration:
  ✓ Fetch elections list from API
  ✓ Fetch blockchain state for selected election
  ✓ Verify blockchain integrity
  ✓ Handle empty blockchain state
  ✓ Error handling with user feedback
  ✓ Loading states during API calls

Routes:
  ✓ /dashboard/blockchain - Main blockchain viewer
  ✓ Added to sidebar navigation
  ✓ 13 total routes now (added 1 new)

Frontend Build:
  ✓ No TypeScript errors
  ✓ Zero unused imports
  ✓ Production build successful
  ✓ All routes prerendered

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 01:59:46 +01:00
Alexis Bruneteau
fc7be6df26 refactor: Simplify home page - remove mock data and unnecessary sections
- Removed stats section (1000+ votants, 50+ élections, 99.9% security)
- Removed features section (crypto, results, access)
- Removed CTA section with unnecessary copy
- Removed footer with multiple sections
- Keep clean dark theme with minimal landing page
- Keep navigation and simple call-to-action buttons
- Focus on essential elements only

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 17:45:40 +01:00
Alexis Bruneteau
b1756f1320 feat: Add form validation with Zod and React Hook Form
Form Validation:
- Create comprehensive Zod validation schemas for all forms
- Login form: email, password validation
- Register form: first name, last name, email, password strength requirements
- Profile update form: all user fields with optional phone/address
- Password change form: current password, new password confirmation
- Vote submission form: election ID and candidate selection

Password Strength:
- Minimum 8 characters
- At least one uppercase letter
- At least one digit
- At least one special character (!@#$%^&*)

React Hook Form Integration:
- Update login page with useForm and field-level error display
- Update register page with form validation and error messages
- Show validation errors inline with red borders
- Disable form submission while loading or submitting
- Better user feedback with detailed error messages

Type Safety:
- Zod schemas with TypeScript inference
- Type-safe form data types
- Proper error handling and validation

Build Status:
- All pages compile successfully
- Zero TypeScript errors
- Bundle size includes Zod (~40 kB) and React Hook Form
- Login/Register pages: 145 kB First Load JS (includes new validation libraries)
- Shared bundle remains ~102 kB

Setup:
- npm install zod react-hook-form @hookform/resolvers
- Ready for production with form validation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 17:20:16 +01:00
Alexis Bruneteau
546785ef67 feat: Integrate backend API with frontend - Authentication & Elections
Core Integration:
- Create API client with TypeScript types for all endpoints
- Implement authentication context provider for user state management
- Add protected route component for dashboard access control
- Connect login/register pages to backend authentication endpoints
- Implement user session persistence with localStorage tokens

Authentication:
- Login page now connects to /api/auth/login endpoint
- Register page connects to /api/auth/register with validation
- Password strength requirements (min 8 chars)
- Form validation and error handling
- Automatic redirect to dashboard on successful auth
- Logout functionality with session cleanup

Protected Routes:
- Dashboard pages require authentication
- Non-authenticated users redirected to login
- Loading spinner during auth verification
- User name displayed in dashboard header
- Proper session management

Election/Vote APIs:
- Dashboard fetches active elections from /api/elections/active
- Display real election data with candidates count
- Handle loading and error states
- Skeleton loaders for better UX

Type Safety:
- Full TypeScript interfaces for all API responses
- Proper error handling with try-catch blocks
- API response types: AuthToken, VoterProfile, Election, Candidate, Vote, VoteHistory

Environment:
- API URL configurable via NEXT_PUBLIC_API_URL env variable
- Default to http://localhost:8000 for local development

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 17:15:34 +01:00
Alexis Bruneteau
14eff8d0da feat: Rebuild frontend with Next.js and shadcn/ui components
- Migrate from React CRA to Next.js 15 with modern architecture
- Implement comprehensive shadcn/ui component library
- Create complete dashboard system with layouts and navigation
- Build authentication pages (login, register) with proper forms
- Implement vote management pages (active, upcoming, history, archives)
- Add user profile management with security settings
- Configure Tailwind CSS with custom dark theme (accent: #e8704b)
- Setup TypeScript with strict type checking
- Backup old React-based frontend to .backups/frontend-old
- All pages compile successfully and build passes linting

Pages created:
- Home page with hero section and features
- Authentication (login/register)
- Dashboard with stats and vote cards
- Vote management (active, upcoming, history, archives)
- User profile with form validation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 17:02:14 +01:00