diff --git a/e-voting-system/DEV_MODE.md b/e-voting-system/DEV_MODE.md new file mode 100644 index 0000000..7c21c58 --- /dev/null +++ b/e-voting-system/DEV_MODE.md @@ -0,0 +1,238 @@ +# Frontend Development Mode - Setup & Usage + +## πŸš€ Quick Start + +### Option 1: Using the Helper Script (Recommended) + +```bash +# Start frontend in development mode +./dev-mode.sh start + +# In another terminal, stream logs +./dev-mode.sh logs + +# To stop +./dev-mode.sh stop +``` + +### Option 2: Direct Docker Compose Commands + +```bash +# Start dev frontend with other services +docker compose -f docker-compose.yml -f docker-compose.dev.yml up frontend-dev + +# Stream logs +docker compose -f docker-compose.yml -f docker-compose.dev.yml logs -f frontend-dev + +# Stop +docker compose -f docker-compose.yml -f docker-compose.dev.yml down +``` + +--- + +## ✨ Features in Development Mode + +### βœ“ Hot Module Reload (HMR) +- Changes to `.ts`, `.tsx`, `.css` files automatically refresh in browser +- No need to rebuild container +- Source maps for debugging + +### βœ“ Detailed Logging +- Browser console logs visible in Docker logs +- Server-side render logs +- API request/response debugging +- Network timing information + +### βœ“ Development Tools +- Next.js dev server with full diagnostics +- TypeScript error messages with line numbers +- React Fast Refresh for component updates +- Network tab in browser DevTools + +### βœ“ Volume Mounting +- `./frontend:/app` - all source code hot-reloaded +- `/app/node_modules` - isolated for performance +- `/app/.next` - isolated build cache + +--- + +## πŸ”§ Available Commands + +```bash +# Start development mode +./dev-mode.sh start + +# Stop development mode +./dev-mode.sh stop + +# Stream frontend logs only +./dev-mode.sh logs + +# Stream ALL services logs +./dev-mode.sh logs-all + +# Rebuild dev image (after package.json changes) +./dev-mode.sh rebuild + +# Open shell in dev container +./dev-mode.sh shell + +# Check container status +./dev-mode.sh status +``` + +--- + +## πŸ“ Access Points + +| Service | URL | Purpose | +|---------|-----|---------| +| Frontend (Dev) | http://localhost:3000 | Application with hot reload | +| Backend API | http://localhost:8000 | API endpoint | +| API Docs | http://localhost:8000/docs | Swagger documentation | +| Database Admin | http://localhost:8081 | MariaDB management | + +--- + +## πŸ” Debugging Tips + +### View Detailed Frontend Logs +```bash +./dev-mode.sh logs + +# Or use grep to filter +docker compose -f docker-compose.yml -f docker-compose.dev.yml logs -f frontend-dev | grep -i error +``` + +### Check All Services +```bash +./dev-mode.sh logs-all +``` + +### Open Terminal in Container +```bash +./dev-mode.sh shell + +# Inside container, you can run: +npm run lint +npm run type-check +npm run build +``` + +### Browser DevTools +1. Open http://localhost:3000 +2. Open DevTools (F12 or Ctrl+Shift+I) +3. View: + - **Console** - see all logs from Next.js + - **Network** - see API requests/responses + - **Sources** - debug TypeScript code + - **Application** - inspect state/localStorage + +--- + +## πŸ› οΈ When to Rebuild + +```bash +# After changing package.json or package-lock.json +./dev-mode.sh rebuild + +# After changing environment variables in Dockerfile.frontend.dev +./dev-mode.sh rebuild + +# Usually NOT needed for code changes (hot reload works) +``` + +--- + +## πŸ“Š Environment Variables in Dev Mode + +Automatically set in `docker-compose.dev.yml`: + +```yaml +NODE_ENV: development # Enable dev features +NEXT_PUBLIC_DEBUG: 'true' # Frontend debug mode +NEXT_PUBLIC_API_URL: http://localhost:8000 +``` + +--- + +## πŸ”„ Hot Reload Workflow + +1. **Edit a file** β†’ `frontend/components/something.tsx` +2. **Save** β†’ File is mounted in container +3. **Next.js detects change** β†’ ~500ms +4. **Fast Refresh** β†’ Browser auto-reloads +5. **View in DevTools** β†’ Console shows updates + +--- + +## πŸ› Common Issues + +### Container won't start +```bash +# Check logs +./dev-mode.sh logs + +# Rebuild from scratch +./dev-mode.sh rebuild +./dev-mode.sh start +``` + +### Port 3000 already in use +```bash +# Change port in docker-compose.dev.yml +# Or kill existing process +lsof -ti:3000 | xargs kill -9 +``` + +### Changes not reflecting +```bash +# Try full refresh in browser +Ctrl+Shift+R (hard refresh) + +# Or restart container +./dev-mode.sh stop +./dev-mode.sh start +``` + +### Need to see all npm commands +```bash +./dev-mode.sh shell +cat package.json | grep -A 10 '"scripts"' +``` + +--- + +## πŸ“ Production vs Development + +| Aspect | Production | Development | +|--------|-----------|-------------| +| Build | Optimized, minified | Unoptimized for speed | +| HMR | βœ— No | βœ“ Yes | +| Logging | Minimal | Verbose | +| Performance | Fast | Slower (for debugging) | +| File Size | ~100KB | ~5MB | +| Startup | 5-10s | 30-60s | + +--- + +## πŸš€ Performance Notes + +- Dev mode is intentionally verbose for debugging +- Larger bundle size than production +- Slower startup is normal +- HMR eliminates need for full rebuilds + +Use production mode for performance testing. + +--- + +## πŸ“š Further Reading + +- [Next.js Dev Server](https://nextjs.org/docs/app/api-reference/cli/next/dev) +- [Docker Compose Override](https://docs.docker.com/compose/extends/) +- [React DevTools](https://react-devtools-tutorial.vercel.app/) + +--- + +**Last Updated:** 2025-11-07 diff --git a/e-voting-system/QUICK_DEV_START.md b/e-voting-system/QUICK_DEV_START.md new file mode 100644 index 0000000..9f9766b --- /dev/null +++ b/e-voting-system/QUICK_DEV_START.md @@ -0,0 +1,99 @@ +# Quick Development Mode Setup + +## ⚑ 30-Second Start + +```bash +# Make sure you're in the project root +cd /home/sorti/projects/CIA/e-voting-system + +# Start development mode +./dev-mode.sh start +``` + +That's it! Your frontend will be running with: +- βœ“ Hot reload on every file change +- βœ“ Full console logs in Docker +- βœ“ TypeScript type checking +- βœ“ Source maps for debugging + +## πŸ“Ί View Logs in Real-Time + +Open a **new terminal** and run: + +```bash +./dev-mode.sh logs +``` + +Now you'll see every log from: +- Next.js startup messages +- Component renders +- API calls +- Console.log() statements +- Errors with full stack traces + +## 🌐 Access Your App + +Open in browser: **http://localhost:3000** + +Press `F12` to open DevTools and see: +- Console logs from both server and client +- Network requests to `/api/` +- Component hierarchy in React DevTools + +## πŸ›‘ Stop Development Mode + +```bash +./dev-mode.sh stop +``` + +## πŸ“ Edit Files + +1. Edit any file in `frontend/` directory +2. Save +3. Next.js detects change (~500ms) +4. Browser auto-refreshes +5. See console logs in terminal + +**No container rebuild needed!** πŸŽ‰ + +## πŸ†˜ Troubleshooting + +**Can't see logs?** +```bash +./dev-mode.sh logs +``` + +**Port 3000 in use?** +```bash +lsof -ti:3000 | xargs kill -9 +./dev-mode.sh start +``` + +**Need a shell in container?** +```bash +./dev-mode.sh shell +``` + +--- + +## 🎯 Common Dev Tasks + +| Task | Command | +|------|---------| +| Start dev | `./dev-mode.sh start` | +| View logs | `./dev-mode.sh logs` | +| Stop dev | `./dev-mode.sh stop` | +| Rebuild after npm install | `./dev-mode.sh rebuild` | +| Open shell | `./dev-mode.sh shell` | +| Check status | `./dev-mode.sh status` | + +--- + +## πŸš€ Next Steps + +1. βœ“ Start dev mode: `./dev-mode.sh start` +2. βœ“ View logs: `./dev-mode.sh logs` (in another terminal) +3. βœ“ Open browser: http://localhost:3000 +4. βœ“ Edit some code and see instant updates! + +For more info, see [DEV_MODE.md](./DEV_MODE.md) diff --git a/e-voting-system/dev-mode.sh b/e-voting-system/dev-mode.sh new file mode 100755 index 0000000..42dbcd1 --- /dev/null +++ b/e-voting-system/dev-mode.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# E-Voting System - Frontend Development Mode Helper +# This script helps run the Next.js frontend in development mode with detailed logging + +set -e + +case "${1:-help}" in + start) + echo "πŸš€ Starting frontend in DEVELOPMENT mode with full logging..." + echo "" + echo "Features:" + echo " βœ“ Hot reload on file changes" + echo " βœ“ Detailed browser console logs" + echo " βœ“ Server-side render logs" + echo " βœ“ API request/response logs" + echo "" + + # Stop the production frontend if running + if docker compose ps | grep -q "evoting_frontend"; then + echo "Stopping production frontend..." + docker compose stop frontend + fi + + # Start dev frontend with other services + echo "Starting all services..." + docker compose -f docker-compose.yml -f docker-compose.dev.yml up frontend-dev + ;; + + stop) + echo "⏹️ Stopping frontend development mode..." + docker compose -f docker-compose.yml -f docker-compose.dev.yml down + ;; + + logs) + echo "πŸ“‹ Showing frontend development logs (streaming)..." + echo "" + docker compose -f docker-compose.yml -f docker-compose.dev.yml logs -f frontend-dev + ;; + + logs-all) + echo "πŸ“‹ Showing all services logs..." + echo "" + docker compose logs -f + ;; + + rebuild) + echo "πŸ”¨ Rebuilding frontend dev image..." + docker compose -f docker-compose.yml -f docker-compose.dev.yml build --no-cache frontend-dev + ;; + + shell) + echo "🐚 Opening shell in frontend dev container..." + docker compose -f docker-compose.yml -f docker-compose.dev.yml exec frontend-dev sh + ;; + + status) + echo "πŸ“Š Frontend development status:" + echo "" + docker compose -f docker-compose.yml -f docker-compose.dev.yml ps frontend-dev + ;; + + *) + echo "E-Voting System - Frontend Development Mode Helper" + echo "" + echo "Usage: ./dev-mode.sh [command]" + echo "" + echo "Commands:" + echo " start - Start frontend in development mode with hot reload" + echo " stop - Stop development mode" + echo " logs - Show frontend logs (streaming)" + echo " logs-all - Show all services logs" + echo " rebuild - Rebuild frontend dev image" + echo " shell - Open shell in dev container" + echo " status - Show development container status" + echo "" + echo "Examples:" + echo " ./dev-mode.sh start # Start dev mode" + echo " ./dev-mode.sh logs # Stream logs" + echo " ./dev-mode.sh logs-all # All services" + echo "" + ;; +esac diff --git a/e-voting-system/docker-compose.dev.yml b/e-voting-system/docker-compose.dev.yml index f53cb13..ddadcb3 100644 --- a/e-voting-system/docker-compose.dev.yml +++ b/e-voting-system/docker-compose.dev.yml @@ -1,72 +1,43 @@ version: '3.8' services: - mariadb: - image: mariadb:latest - container_name: evoting_db - environment: - MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootpass123} - MYSQL_DATABASE: ${DB_NAME:-evoting_db} - MYSQL_USER: ${DB_USER:-evoting_user} - MYSQL_PASSWORD: ${DB_PASSWORD:-evoting_pass123} - ports: - - "${DB_PORT:-3306}:3306" - volumes: - - evoting_data:/var/lib/mysql - - ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql - networks: - - evoting_network - healthcheck: - test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "--silent"] - timeout: 20s - retries: 10 - start_period: 30s - - backend: - build: - context: . - dockerfile: docker/Dockerfile.backend - container_name: evoting_backend - environment: - DB_HOST: mariadb - DB_PORT: 3306 - DB_NAME: ${DB_NAME:-evoting_db} - DB_USER: ${DB_USER:-evoting_user} - DB_PASSWORD: ${DB_PASSWORD:-evoting_pass123} - SECRET_KEY: ${SECRET_KEY:-your-secret-key-change-in-production} - DEBUG: ${DEBUG:-false} - ports: - - "${BACKEND_PORT:-8000}:8000" - depends_on: - mariadb: - condition: service_healthy - volumes: - - ./backend:/app/backend - networks: - - evoting_network - command: uvicorn backend.main:app --host 0.0.0.0 --port 8000 --reload - - frontend: + # Development version of the frontend with hot reload and verbose logging + frontend-dev: build: context: . dockerfile: docker/Dockerfile.frontend.dev - args: - REACT_APP_API_URL: http://backend:8000 - container_name: evoting_frontend + container_name: evoting_frontend_dev + restart: unless-stopped ports: - "${FRONTEND_PORT:-3000}:3000" depends_on: - - backend + backend: + condition: service_healthy + validator-1: + condition: service_healthy + validator-2: + condition: service_healthy + validator-3: + condition: service_healthy + environment: + NEXT_PUBLIC_API_URL: http://localhost:${BACKEND_PORT:-8000} + NODE_ENV: development + NEXT_PUBLIC_DEBUG: 'true' + NODE_OPTIONS: "--max_old_space_size=4096" volumes: - - ./frontend/src:/app/src - - ./frontend/public:/app/public + # Mount source code for hot reload + - ./frontend:/app + - /app/node_modules + - /app/.next networks: - evoting_network - stdin_open: true - tty: true - -volumes: - evoting_data: + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "5" + # Run in development mode with verbose output + command: npm run dev -- -H 0.0.0.0 --port 3000 networks: evoting_network: diff --git a/e-voting-system/docker/Dockerfile.frontend.dev b/e-voting-system/docker/Dockerfile.frontend.dev index d980470..8816810 100644 --- a/e-voting-system/docker/Dockerfile.frontend.dev +++ b/e-voting-system/docker/Dockerfile.frontend.dev @@ -15,7 +15,13 @@ COPY frontend/ . ARG REACT_APP_API_URL=http://backend:8000 ENV REACT_APP_API_URL=${REACT_APP_API_URL} +# Development environment variables for detailed logging +ENV NODE_ENV=development +ENV NEXT_PUBLIC_DEBUG=true +ENV DEBUG=* + EXPOSE 3000 -# Mode dΓ©veloppement avec hot reload (npm start) -CMD ["npm", "start"] +# Mode dΓ©veloppement avec hot reload et logs verbeux +# --turbopack-trace=verbose pour plus de dΓ©tails +CMD ["npm", "run", "dev", "--", "-H", "0.0.0.0", "--port", "3000"]