2 Commits

Author SHA1 Message Date
Alexis Bruneteau
1c5851d053 fix: Prevent frontend TypeError from undefined array access
Fix undefined variable crashes when accessing property 'length' on undefined:
- "can't access property 'length', e is undefined"

CHANGES:
1. Election detail page ([id]/page.tsx):
   - Ensure candidates array exists when fetching election data
   - Default to empty array if API returns undefined candidates

2. Active elections list page (active/page.tsx):
   - Validate API response is an array before processing
   - Ensure each election has candidates array with fallback

3. Blockchain visualizer (blockchain-visualizer.tsx):
   - Add optional chaining check before accessing data.blocks
   - Prevent crashes when data prop is undefined

All changes follow defensive programming practices:
- No more direct property access without null checks
- Array fallbacks ensure predictable behavior
- Optional chaining used consistently

This fixes the error that occurred when navigating to election pages.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 19:06:34 +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