8.5 KiB
8.5 KiB
QuickPoll Next.js Demo - Live Coding Guide for Tim
Overview
This is a complete, step-by-step Next.js 15 project built for live-coding demonstrations. Each step has a git tag, allowing you to jump between different stages of the application during class.
File Structure
demo-output/
├── stap-0.zip # Project setup + types + data
├── stap-1.zip # Layout & Navigation
├── stap-2.zip # Homepage with poll cards
├── stap-3.zip # API routes (GET all, GET single, POST create)
├── stap-4.zip # POST vote route + demo form
├── stap-5.zip # Poll detail page
├── stap-6.zip # VoteForm component
├── stap-7.zip # Loading, error, not-found pages
├── stap-8.zip # Middleware
├── bonus.zip # Create poll page
└── quickpoll-demo-complete.zip # Full project with complete git history
How to Use in Live-Coding Class
1. Setup Before Class
Extract quickpoll-demo-complete.zip:
unzip quickpoll-demo-complete.zip
cd quickpoll-demo
npm install
2. Jump Between Steps During Class
Use git checkout to jump to any step:
# Go to beginning (step 0)
git checkout stap-0
# Progress to step 1
git checkout stap-1
# Jump to step 4 to show the demo form
git checkout stap-4
# Go back to the final version
git checkout bonus
3. Run the Application
npm run dev
Then open http://localhost:3000 in your browser and use the projector to show students.
4. Show the Demo Form (stap-4)
When you checkout stap-4, a demo page is available at http://localhost:3000/demo:
- Show students how to use the form to test the vote API
- Open DevTools (F12) → Network tab to show the POST request
- Open Console to show the console.log messages
- Display the fetch code example to teach how API calls work
What Each Step Covers
stap-0: Project Setup
- Create Next.js project with TypeScript and Tailwind
- Set up types and data structures
- Initial folder structure with in-memory "database"
- Includes
.cursorrulesfor consistent code style
Files to show:
src/types/index.ts- Poll and VoteBody interfacessrc/lib/data.ts- Sample polls data and functions
stap-1: Layout & Navigation
- Add navbar with QuickPoll branding
- Add navigation links (Home, Nieuwe Poll in bonus)
- Update metadata and HTML structure
- Global Tailwind styling
Files to show:
src/app/layout.tsx- Layout component with navbar
stap-2: Homepage
- Display all polls as cards
- Show poll question, number of options, total votes
- Add hover effects and links to poll detail pages
Files to show:
src/app/page.tsx- Homepage with poll cards grid- Tailwind classes for responsive design
stap-3: API Routes
- Create
GET /api/polls- fetch all polls - Create
GET /api/polls/[id]- fetch single poll - Create
POST /api/polls- create new poll - Use Next.js 15 async params pattern
Files to show:
src/app/api/polls/route.tssrc/app/api/polls/[id]/route.ts- Point out
params: Promise<{ id: string }>pattern
stap-4: Vote API Route + Demo Form
- Create
POST /api/polls/[id]/vote- vote on a poll - Input validation and error handling
- Demo form at
/demo- interactive testing page - Console.log statements for teaching
- Display fetch code example
Files to show:
src/app/api/polls/[id]/vote/route.tssrc/app/demo/page.tsx- the demo form (use projector!)- DevTools Console to show logging
- DevTools Network tab to show POST requests
stap-5: Poll Detail Page
- Create
src/app/poll/[id]/page.tsx(Server Component) - Add
generateMetadata()for dynamic SEO - Use
notFound()for missing polls - Placeholder for VoteForm (comes next)
Files to show:
src/app/poll/[id]/page.tsx- Point out that this is a Server Component (no "use client")
stap-6: VoteForm Component
- Create
src/components/VoteForm.tsx("use client") - Implement voting with state management
- Show results after voting with percentage bars
- Purple theme (#7c3aed) with gradient progress bars
- Real-time vote count updates
Files to show:
src/components/VoteForm.tsx- Explain useState and fetch inside a component
- Show console.log for vote submissions
- Update to
src/app/poll/[id]/page.tsxto use VoteForm
stap-7: Error Handling Pages
- Create
src/app/loading.tsx- skeleton loader - Create
src/app/error.tsx- error boundary - Create
src/app/not-found.tsx- global 404 page - Create
src/app/poll/[id]/not-found.tsx- poll-specific 404
Files to show:
- Explain Suspense boundaries and error handling
- Show how Next.js automatically uses these files
stap-8: Middleware
- Create
src/middleware.ts- request logging - Log request timing and paths
- Use matcher for selective routes
Files to show:
src/middleware.ts- Point out the matcher configuration
bonus: Create Poll Page
- Create
src/app/create/page.tsx- full form with validation - Dynamic option inputs (add/remove)
- POST to
/api/pollsand redirect - Remove demo page (was temporary for stap-4)
- Add "Nieuwe Poll" link to navbar
Files to show:
src/app/create/page.tsx- form implementation- Error handling and validation
Teaching Tips
Code Highlighting
- Use VS Code theme with good contrast on projector
- Increase font size (at least 16-18pt)
- Use "Zen Mode" or "Fullscreen" for less distraction
Live Coding Strategy
- Type slowly - Let students follow along
- Explain as you type - Narrate what you're doing
- Run often - Show working results frequently
- Use DevTools - Show Network and Console tabs
- Ask questions - Make it interactive
DevTools Demonstrations
When showing stap-4 demo:
- Open http://localhost:3000/demo
- Open DevTools (F12)
- Go to Console tab - show console.log messages
- Go to Network tab
- Fill the form and click "Stem"
- Show the POST request in Network tab
- Show the JSON response
- Check the Console for detailed logging
Key Concepts to Teach
- Server Components vs Client Components - explain when to use "use client"
- Dynamic Routes - show how
[id]creates dynamic pages - API Routes - show how
/apiroutes handle requests - Middleware - show how to run code before requests
- Tailwind CSS - explain utility-first CSS
- State Management - useState in VoteForm
- Fetch API - how components communicate with API
Projector Tips
- Test the layout on a real projector before class
- Use a light theme for better visibility
- Zoom in on code snippets (Ctrl/Cmd + in browser)
- Keep demos simple - don't try to build everything from scratch
File Sizes
stap-0.ziptostap-8.zip: ~32-43 KB eachbonus.zip: ~44 KBquickpoll-demo-complete.zip: ~160 KB (includes full git history)
Git Commands for Students
After you show them the steps, students can explore:
# See all commits
git log --oneline
# See all tags
git tag -l
# Jump to a specific step
git checkout stap-3
# See what changed in this step
git diff stap-2 stap-3
# Go back to latest
git checkout bonus
Troubleshooting
Port 3000 already in use
npm run dev -- -p 3001
Changes not showing
# Hard refresh in browser
Ctrl+Shift+R (Windows/Linux)
Cmd+Shift+R (Mac)
Git checkout doesn't work
# Make sure you're in the project directory
cd quickpoll-demo
# See current status
git status
# If you have uncommitted changes
git stash
# Then try checkout again
git checkout stap-5
Build errors
# Clear Next.js cache
rm -rf .next
# Reinstall dependencies
npm install
# Try building
npm run build
Project Structure Notes
- src/app/ - Next.js App Router pages and layouts
- src/components/ - Reusable React components
- src/lib/ - Utility functions and mock data
- src/types/ - TypeScript interfaces
- src/middleware.ts - Request middleware
- public/ - Static assets
Additional Resources
- Next.js 15 docs: https://nextjs.org/docs
- Tailwind CSS: https://tailwindcss.com/docs
- React: https://react.dev
Next Steps After the Demo
Students can:
- Modify poll questions and options
- Add new features (e.g., poll deletion, editing)
- Connect to a real database (PostgreSQL, MongoDB, etc.)
- Add authentication
- Deploy to Vercel
Good luck with your live-coding demonstration! 🎉