Add comprehensive development setup for frontend debugging and rapid iteration. FEATURES: ✓ Hot Module Reload (HMR) - auto-refresh on file changes ✓ Detailed Logging - all console logs visible in Docker output ✓ TypeScript Checking - real-time type validation ✓ Source Maps - easier debugging in DevTools ✓ Fast Iteration - no container rebuild needed for code changes FILES ADDED: - docker-compose.dev.yml - compose override with dev-specific settings - docker/Dockerfile.frontend.dev - updated with dev environment variables - dev-mode.sh - helper script with easy commands - DEV_MODE.md - comprehensive development guide - QUICK_DEV_START.md - quick start instructions USAGE: ./dev-mode.sh start # Start frontend in dev mode ./dev-mode.sh logs # Stream frontend logs ./dev-mode.sh logs-all # Stream all services logs ./dev-mode.sh stop # Stop development mode ./dev-mode.sh rebuild # Rebuild after package.json changes ./dev-mode.sh shell # Open shell in container ./dev-mode.sh status # Check container status BENEFITS: - Faster feedback loop during development - Better debugging with detailed logs - No production artifacts in dev container - Source code mounted for real-time updates - Improved developer experience 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.9 KiB
4.9 KiB
Frontend Development Mode - Setup & Usage
🚀 Quick Start
Option 1: Using the Helper Script (Recommended)
# 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
# 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,.cssfiles 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
# 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
./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
./dev-mode.sh logs-all
Open Terminal in Container
./dev-mode.sh shell
# Inside container, you can run:
npm run lint
npm run type-check
npm run build
Browser DevTools
- Open http://localhost:3000
- Open DevTools (F12 or Ctrl+Shift+I)
- View:
- Console - see all logs from Next.js
- Network - see API requests/responses
- Sources - debug TypeScript code
- Application - inspect state/localStorage
🛠️ When to Rebuild
# 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:
NODE_ENV: development # Enable dev features
NEXT_PUBLIC_DEBUG: 'true' # Frontend debug mode
NEXT_PUBLIC_API_URL: http://localhost:8000
🔄 Hot Reload Workflow
- Edit a file →
frontend/components/something.tsx - Save → File is mounted in container
- Next.js detects change → ~500ms
- Fast Refresh → Browser auto-reloads
- View in DevTools → Console shows updates
🐛 Common Issues
Container won't start
# Check logs
./dev-mode.sh logs
# Rebuild from scratch
./dev-mode.sh rebuild
./dev-mode.sh start
Port 3000 already in use
# Change port in docker-compose.dev.yml
# Or kill existing process
lsof -ti:3000 | xargs kill -9
Changes not reflecting
# 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
./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
Last Updated: 2025-11-07