7.7 KiB
7.7 KiB
E-Voting Frontend - Next Steps
Current Status
The frontend has been completely rebuilt on the UI branch with:
- ✅ Next.js 15 with TypeScript
- ✅ shadcn/ui component library
- ✅ Custom dark theme (#e8704b accent)
- ✅ Complete dashboard system (7 pages)
- ✅ Authentication pages (login/register)
- ✅ Responsive design
- ✅ Build passes all linting and type checks
Immediate Next Steps
1. Backend API Integration (Priority: HIGH)
Location: frontend/ pages and components
What to do:
- Replace mock data with actual API calls
- Implement authentication flow (login/logout)
- Fetch active, upcoming, and historical votes
- Connect vote submission endpoints
- Handle API errors with user-friendly messages
Files to modify:
app/auth/login/page.tsx- Connect to/api/auth/loginapp/auth/register/page.tsx- Connect to/api/auth/registerapp/dashboard/page.tsx- Fetch stats and active votesapp/dashboard/votes/*/page.tsx- Fetch vote data by categoryapp/dashboard/profile/page.tsx- Fetch and update user profile
Suggested approach:
// Create API client helper
// lib/api.ts
export async function loginUser(email: string, password: string) {
const response = await fetch("/api/auth/login", {
method: "POST",
body: JSON.stringify({ email, password }),
})
return response.json()
}
2. Authentication Context (Priority: HIGH)
What to do:
- Create AuthContext for global user state
- Manage authentication tokens
- Protect dashboard routes (redirect to login if not authenticated)
- Persist user session across page reloads
Suggested approach:
- Create
app/providers.tsxwith AuthContext provider - Create hook:
useAuth()for easy access - Add route protection with middleware or ProtectedRoute component
- Store tokens in secure HTTP-only cookies (backend should set these)
3. Form Validation (Priority: MEDIUM)
What to do:
- Add Zod schema validation
- Implement React Hook Form for all forms
- Show field-level error messages
- Add password strength indicator for registration
Install:
npm install react-hook-form zod @hookform/resolvers
Example:
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import { z } from "zod"
const schema = z.object({
email: z.string().email("Invalid email"),
password: z.string().min(8, "Password too short"),
})
export default function LoginPage() {
const { register, handleSubmit, formState: { errors } } = useForm({
resolver: zodResolver(schema),
})
// ...
}
4. Error Handling & Loading States (Priority: MEDIUM)
What to do:
- Add try-catch blocks to API calls
- Show loading spinners while fetching
- Display error messages to users
- Add error boundary component
Files to enhance:
- All pages that fetch data
- API integration functions
- Form submission handlers
5. Additional Pages to Create (Priority: MEDIUM)
Voting Page (/dashboard/votes/active/[id])
- Display election details
- Show all candidates with descriptions
- Implement voting interface
- Confirmation before final submission
- Success message with receipt/verification
Election Results Page (/dashboard/votes/active/[id]/results)
- Display results with charts
- Show participation rate
- Display candidate results (percentages and vote counts)
- Timeline of vote counting
Profile Edit Modal/Page
- Allow editing each field individually
- Password change with current password verification
- Two-factor authentication setup
404 & Error Pages
- Custom error page (
app/error.tsx) - Custom 404 page (
app/not-found.tsx) - Global error boundary
6. Testing (Priority: LOW)
What to do:
- Add unit tests with Jest
- Add component tests with React Testing Library
- Add E2E tests with Cypress or Playwright
Install:
npm install --save-dev jest @testing-library/react @testing-library/jest-dom
npm install --save-dev cypress
Nice-to-Have Enhancements
Performance
- Image optimization with
next/image - Add service worker for offline support (PWA)
- Implement caching strategies
- Code splitting optimization
UX Improvements
- Toast notifications for user feedback
- Skeleton loaders while fetching data
- Animations and transitions
- Dark/light mode toggle
- Internationalization (i18n) for French/English
Features
- Email notifications for upcoming votes
- Vote reminders
- Export vote history as PDF
- Search functionality for elections
- Favorites/bookmarks for elections
- Real-time participation updates
Branch Information
- Current Branch:
UI(contains new Next.js frontend) - Main Branch:
paul/evoting(original development branch) - Backup Branch:
backup(contains old React CRA frontend) - Backup Location:
.backups/frontend-old/(in working directory)
File References
Key Files to Review
Configuration:
frontend/package.json- Dependencies and scriptsfrontend/tailwind.config.ts- Theme configurationfrontend/tsconfig.json- TypeScript settingsfrontend/.eslintrc.json- Linting rules
Core Pages:
frontend/app/page.tsx- Home/landing pagefrontend/app/auth/login/page.tsx- Loginfrontend/app/auth/register/page.tsx- Registrationfrontend/app/dashboard/layout.tsx- Dashboard layout with sidebarfrontend/app/dashboard/page.tsx- Dashboard home
Components:
frontend/components/ui/button.tsx- Button componentfrontend/components/ui/card.tsx- Card componentfrontend/components/ui/input.tsx- Input componentfrontend/components/ui/label.tsx- Label component
Documentation Files
frontend/FRONTEND_NEXTJS_GUIDE.md- Complete frontend guide (just created)frontend/README.md- Project overview (in .backups/frontend-old/).claude/NEXT_STEPS.md- This file
Git Commands Reference
# Switch to UI branch
git checkout UI
# View changes on this branch
git log --oneline main..UI
# View specific commit
git show 14eff8d
# Merge UI branch to main
git checkout main
git merge UI
# Create new feature branch from UI
git checkout -b feature/api-integration
Development Checklist
- Backend API endpoints are documented
- Frontend team has API documentation
- Authentication flow is clear (token handling, refresh, logout)
- Error codes from backend are documented
- CORS is configured correctly
- Rate limiting is in place
- Logging is implemented for debugging
- Security headers are set
Questions to Answer Before Starting Integration
-
Authentication:
- How are tokens managed? (JWT, session-based, other?)
- Where are tokens stored? (localStorage, cookie, memory?)
- What's the refresh token flow?
- How long do tokens last?
-
API:
- What's the base URL for API calls?
- Are there any authentication headers required?
- What error format does the backend use?
- What's the pagination strategy?
-
Voting:
- How is the vote submitted? (single request or multi-step?)
- Is there a signature verification?
- Can votes be changed/revoked?
- How is vote secrecy maintained?
-
Data:
- What format are election results in?
- How is participation data calculated?
- What user information should be displayed?
- How should archived data be filtered?
Support & Resources
- Backend API Docs: Check with backend team
- Frontend Docs: See
frontend/FRONTEND_NEXTJS_GUIDE.md - Previous Work: Check git history on
UIbranch - Component Library: https://ui.shadcn.com/
Branch: UI Last Updated: 2025-11-06 Frontend Status: ✅ Complete & Ready for Integration Next Phase: Backend API Integration