Files
novi-lessons/v2-klasB/Les02-OpenCode/Les02-Huiswerk.md

154 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Les 2 — Huiswerk
## Bouw je eigen scroll-animatie landing page
**Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht
**Deadline:** Voor de volgende les (Les 3)
**Inleveren:** GitHub repo URL + Vercel deploy URL + `WORKFLOW.md`
---
## Doel
Bouw een **kleine scroll-animatie landing page** met OpenCode, gebruikmakend van AGENTS.md, opencode.json en worktrees. Deploy hem op Vercel.
Dit is geen design-opdracht — focus is op de **workflow** en de **technologie**. Een simpele maar werkende site is genoeg.
---
## Voorbeeld-thema (kies zelf!)
Suggesties:
- **Mini portfolio** (over jou — projects, contact)
- **Restaurant landing** (menu, story, reserveer)
- **Product launch** (features, prijs, signup)
- **Conferentie / event** (speakers, schedule, register)
- **Fitness app marketing** (hero, features, testimonials)
Eigen idee mag ook — even checken met Tim als 't iets totaal anders is.
---
## Eisen (verplicht)
### Code
- [ ] Next.js 16 (App Router, TypeScript, Turbopack)
- [ ] Eigen **`AGENTS.md`** (mag onze als basis)
- [ ] Eigen **`opencode.json`** met permissions + (optioneel) plugin config
- [ ] **Minimaal 3 secties** met scroll-animaties
- [ ] **Minimaal 3 verschillende animatie-technieken** (bv. fade-in, parallax, SplitText, horizontaal, stagger)
- [ ] **Lenis** smooth scroll werkt (geen "harde" scroll)
- [ ] TailwindCSS voor styling
- [ ] Werkt zonder console-errors of hydration warnings
### Workflow
- [ ] **Minstens 2 worktrees** gebruikt (mag via plugin of handmatig)
- [ ] Branches gemerged naar `main`
- [ ] Worktrees opgeruimd
- [ ] Code op GitHub gepushed
### Deployment
- [ ] **Vercel deploy** werkend, URL in README
- [ ] Geen broken pages / 500's
### Documentatie
- [ ] **`WORKFLOW.md`** in repo-root met:
- Welke prompts werkten goed?
- Welke regels heb je later toegevoegd aan AGENTS.md (en waarom)?
- Hoe heb je worktrees georganiseerd?
- Wat zou je anders doen volgende keer?
- Screenshot van `git worktree list` tijdens het werk
- Max 400 woorden — concreet, geen fluff
---
## Bonus (optioneel, geen extra punten — wel meer leren)
- **Eigen sub-agent** definieren in `~/.config/opencode/` (bv. een "animation-reviewer")
- **MCP server** toevoegen (bv. context7 voor up-to-date docs in agent context)
- **GSAP advanced**: horizontale scroll met pin + scrub, of SplitText met stagger
- **Custom Lenis options** experimenteren (`lerp`, `duration`, etc.)
- **Lighthouse score** > 90 op alle 4 metrics
- **Reduced motion respecteren** (`prefers-reduced-motion` media query)
- **Eigen `ocx` plugin** schrijven (zie kdcokenny/ocx docs)
---
## Tijd-indicatie
- Setup (Next.js + deps + AGENTS.md + opencode.json): 30 min
- 3 scroll-secties bouwen via opencode (3× ~30 min): ~90 min
- Polish + responsiveness: 30 min
- Deploy op Vercel: 15 min
- `WORKFLOW.md`: 15 min
**Totaal: ~3 uur.** Loop je vast? Vraag in Brightspace of plan een korte 1-op-1 met Tim.
---
## Tips
### Workflow tips
- **Begin met een werkende `SmoothScroll` wrapper** — zonder dat doet niks goed.
- **Eén sectie per worktree** — niet alles in main mengen.
- **Plan-mode eerst** voor elke nieuwe sectie. Krijg een plan, geef feedback, dan pas Build.
- **AGENTS.md update tijdens werk** — loop je tegen iets aan dat de agent steeds verkeerd doet? Voeg een regel toe.
### Technische tips
- **`useGSAP` heeft een `scope` prop** — gebruik 'm met `useRef` zodat je `gsap.from(".class")` selectors scoped zijn aan je component.
- **`ScrollTrigger.refresh()`** als je dynamisch content laadt — anders triggert het niet.
- **`prefers-reduced-motion`** kun je checken met een media query in CSS én in JS (`window.matchMedia('(prefers-reduced-motion: reduce)')`).
- **Lenis `lerp`** is "hoe smooth" — lager = soepeler maar trager. Default `0.1` is goed.
- **Pin-secties** mogen niet inside flex/grid die hun height anders berekenen — pas op met layout.
### Deploy tips
- Vercel pakt je Next.js automatisch op
- `npm run build` lokaal eerst om te checken of er geen TS errors zijn
- Environment vars (als je ze hebt) in Vercel dashboard zetten
---
## Inleveren
1. **GitHub repo** — push alle code naar `main`
2. **Vercel deploy URL** in README van je repo
3. **`WORKFLOW.md`** in root
4. **Brightspace inlevering**:
- GitHub URL
- Vercel URL
- Korte note (1-2 zinnen): wat is je trots-punt?
---
## Beoordeling
| Criterium | Punten |
|-----------|--------|
| 3+ scroll-animaties, verschillend qua techniek | 3 |
| `AGENTS.md` aanwezig + concreet | 1 |
| `opencode.json` met permissions/plugin | 1 |
| Minstens 2 worktrees gebruikt (zichtbaar in git log) | 1 |
| Vercel deploy werkt | 1 |
| `WORKFLOW.md` concreet + screenshot | 2 |
| Geen console errors / hydration warnings | 1 |
| **Totaal** | **10** |
Voldoende = 6+. Bonus telt mee bij twijfelgevallen.
---
## Veelvoorkomende valkuilen (uit eerdere groepen)
- **AGENTS.md te vaag** — "gebruik clean code" werkt niet. Concrete regels werken.
- **Te veel willen** — beter 3 secties goed dan 7 half. Schaal omlaag bij twijfel.
- **Worktrees na merge laten staan** — opruimen, anders chaos.
- **`Lenis` van oude package importeren** — `@studio-freight/lenis` werkt niet meer. Gebruik `lenis`.
- **`useEffect` voor GSAP code** — gebruik `useGSAP` van `@gsap/react`. Anders Strict Mode bugs.
- **Next.js 16 async params vergeten** — `cookies()`, `headers()`, `params`, `searchParams` zijn nu async. Altijd `await`.
- **Geen Vercel deploy testen vóór deadline** — minstens 1 dag van tevoren deployen.
Succes!