Files
novi-lessons/v2-klasB/Les02-OpenCode/Les02-Slide-Overzicht.md
2026-05-19 18:50:11 +02:00

487 lines
15 KiB
Markdown
Raw Permalink 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 — OpenCode Pro: Rules, Worktrees & Scroll Animations
## Slide Overzicht (Klas B — 2 uur, online)
**Bronnen-overzicht onderaan dit document.**
**Lesflow:** Theorie eerst in blokken, dan dedicated **Live Demo** momenten. Geen heen-en-weer geswitch.
---
## Slide 1: Title
### Les 2 — OpenCode Pro
**Visual:**
- Background: CREAM
- "Les 2" in BLUE
- "OpenCode Pro" in BLACK
- Subtitle: "Rules · Worktrees · Een scroll-animatie site bouwen"
**Bronnen:** [1]
---
## Slide 2: Terugblik
### Waar staan we?
**Content:**
- Les 1: kennismaking + leerlijn-opzet
- Iedereen kent ChatGPT en/of Claude (als chat)
- Eindopdracht: AI-app met Next.js + Supabase + Vercel AI SDK
**Vandaag:**
"Van AI als chat naar AI als coding-IDE. Met regels, config en parallel worktrees."
**Visual:** Chat-bubble → IDE icoon
---
## Slide 3: Planning
### Vandaag — 120 minuten
| Onderwerp | Duur |
|-----------|------|
| Welkom + Terugblik | 10 min |
| **Theorie 1** — Waarom OpenCode + kern features | 20 min |
| **Live Demo 1** — Desktop tour | 10 min |
| **Theorie 2** — AGENTS.md + config + plugin + stack + Vercel | 17 min |
| **Live Demo 2** — Setup + worktree + bouw + Vercel preview | 20 min |
| **Pauze** | 15 min |
| Lesopdracht: bouw scroll-sectie + preview | 28 min |
| Huiswerk + Afsluiting | (eind) |
**Visual:** Timeline met YELLOW pauze-rij + PINK demo-rijen
---
## Slide 4: Waarom OpenCode (en niet Cursor)?
### Alternatieven kennen is professioneel
**Iedereen kent Cursor. Wij beginnen bewust met OpenCode. Waarom?**
| | Cursor | OpenCode |
|---|--------|----------|
| Licentie | Commercieel ($20/mnd) | Open source (gratis) |
| Models | Eigen routing | Direct: OpenAI, Anthropic, Google, Groq, Ollama |
| Lock-in | Hoog | Geen |
| Scriptable | Beperkt | Volledig (CLI + plugins) |
| Lokale AI | ❌ | ✅ (via Ollama) |
**Belangrijke punten:**
- **Provider-keuze** — jij beslist welk model, niet de tool
- **Geen vendor lock-in** — past in een pro-toolchain
- **Concept is hetzelfde** — leer OpenCode goed, dan begrijp je Cursor + Claude Code ook
- **Onderdeel van leerlijn** — later kijken we naar Cursor; nu de open variant
**Belangrijk:** dit is **geen Cursor-bashing**. Cursor is uitstekend. We kiezen voor breedte: meerdere tools kennen > vasthangen aan één.
**Bronnen:** [1] [4]
---
## Slide 5: Wat is OpenCode?
### Een AI coding-IDE in twee smaken
**Content:**
- Open source · 60.000+ GitHub stars · door SST
- Werkt met elke provider: OpenAI, Anthropic, Google, Groq, Ollama
- Lokaal — code blijft op jouw machine
**Twee smaken:**
| Desktop (vandaag) | TUI (terminal) |
|-------------------|----------------|
| Visuele diff-viewer | Snel met keyboard |
| File tree + Sessions sidebar | Werkt over SSH |
| Multi-session parallel | Goed voor scripts / CI/CD |
| Sneller leren als je begint | Worktree plugin spawnt auto terminal |
**Vandaag:** Desktop. We tonen TUI **1 minuut** in Live Demo zodat je weet dat 't bestaat.
**Voor jouw eindopdracht: Desktop.**
**Bronnen:** [1] [2] [3] [5]
---
## Slide 6: Plan/Build/@explore + /init
### De vier dingen die je echt moet kennen
**Twee modes** (Tab om te wisselen):
- **plan** — read-only, denkt mee, wijzigt niks
- **build** — default, schrijft code, voert commands uit
**Sub-agents:**
- `@explore` — read-only verkenning (spaart tokens)
- `@general` — brede taak
- `@scout` — gerichte zoekopdracht
**`/init` commando** — eerste actie in elk nieuw project:
- Scant je repo
- Stelt vragen
- Schrijft/update je `AGENTS.md`
**Best practice:**
> Plan eerst. Lees mee. Geef feedback. Tab → Build.
**Bronnen:** [6] [7] [8]
---
## Slide 7: LIVE DEMO 1 — Desktop Tour
### Wat je nu gaat zien (~10 min)
**Setup:** OpenCode Desktop open op een leeg Next.js project.
**Wat ik laat zien:**
1. **TUI 1 minuut**`opencode` in terminal, snelle Tab/exit. "Hetzelfde, maar terminal-only."
2. **Desktop UI tour** — file tree, chat panel, diff viewer, Sessions sidebar
3. **Plan mode** — vraag `analyseer dit project`, zie dat niks wijzigt
4. **Tab → Build mode** — vraag iets simpels, zie diff
5. **`@explore`** — `@explore wat zit er in deze repo?` — aparte context
6. **`/init`** — laat AGENTS.md genereren
**Visual:** Mockup van Desktop layout met annotaties. PINK badge "LIVE DEMO".
---
## Slide 8: AGENTS.md — Projectregels
### De officiële OpenCode standaard
**Wat is AGENTS.md?**
Markdown in project-root dat OpenCode automatisch in elke context laadt. Officieel format — alternatief voor Cursor's `.cursorrules`.
**Twee locaties:**
- `./AGENTS.md` — per project (in repo)
- `~/.config/opencode/AGENTS.md` — globaal voor alle projecten
**Externe regels referencen:**
```
@rules/styling.md
@rules/security.md
```
**Hoe te maken:**
- Handmatig schrijven, OF
- `/init` in OpenCode — scant repo, stelt vragen, genereert
**Tip:** schrijf concrete regels die je AI kan controleren. "Gebruik clean code" werkt niet. "useGSAP alleen, geen useEffect" wel.
**Bronnen:** [9]
---
## Slide 9: opencode.json — Config
### Model · Permissies · Plugins
**Locaties:**
- `./opencode.json` — per project
- `~/.config/opencode/opencode.json` — globaal
**Basis:**
```json
{
"$schema": "https://opencode.ai/config.json",
"model": "openai/gpt-4o-mini"
}
```
**Permissies (uit officiele docs):**
```json
{
"permission": {
"bash": { "*": "ask", "git *": "allow", "rm *": "deny" },
"edit": { "*": "deny", "app/**/*.tsx": "allow" }
}
}
```
Drie levels: `allow` · `ask` · `deny`. Glob patterns voor bash én files.
**Bronnen:** [10] [11]
---
## Slide 10: opencode-worktree Plugin
### Auto-magisch worktrees aanmaken
**Wat doet het?**
Plugin van **kdcokenny**. Geeft de agent twee tools:
- `worktree_create` — branch + worktree
- `worktree_delete` — commit + cleanup
**Installatie via `ocx`:**
```bash
curl -fsSL https://kdco.dev/ocx/install.sh | sh
ocx add kdco/worktree --from https://registry.kdco.dev
```
**Desktop workflow:**
1. In main session: "Maak worktree feature-hero"
2. Plugin maakt worktree-folder
3. Klik **+ New Session** → **Open Folder** → kies worktree
4. Parallel agents in sidebar
**Bronnen:** [12] [13]
---
## Slide 11: Demo Stack — Next.js 16 + GSAP + Lenis
### De stack voor high-end scroll storytelling
**Stack:**
- **Next.js 16** App Router + TypeScript (Turbopack default)
- **TailwindCSS**
- **GSAP 3.15** + `@gsap/react` — sinds 2025 100% gratis (ScrollTrigger, SplitText)
- **Lenis 1.3** (`lenis/react`) — door Darkroom Engineering
**Waarom deze combinatie?**
Dit is dé stack waarmee award-winning scroll-storytelling sites gebouwd worden.
Niet "een" optie — **de** standaard op pro-niveau.
**Wie gebruikt dit?**
- Apple product pages (GSAP scroll animaties)
- Stripe, OpenAI marketing — beide GSAP-based
- Awwwards / FWA winnaars — bijna altijd GSAP
- Studios: **Active Theory**, **Locomotive**, **Resn**, **Darkroom Engineering** (makers van Lenis zelf)
**Waarom niet Framer Motion?**
- Framer Motion is uitstekend voor **app UI** (modals, transities, micro-interacties)
- GSAP heeft betere timing-precisie en GPU-optimalisaties voor **scroll storytelling**
- Voor jouw eindopdracht (een site die "wow" doet bij scrollen): GSAP
**Next.js 16 detail:**
- `cookies()`, `headers()`, `params`, `searchParams` zijn **async** — altijd `await`
**Bronnen:** [14] [15] [16] [17] [18] [19]
---
## Slide 12: Onze AGENTS.md
### Regels voor het scroll-animatie project
```markdown
# Project Rules
## Why this stack
High-end scroll storytelling site (Awwwards/FWA niveau).
GSAP + Lenis = pro standaard — Apple, Stripe, OpenAI, Active Theory,
Locomotive, Darkroom Engineering. Framer Motion is voor app UI, niet voor
scroll storytelling. Kies GSAP voor timing-precisie + GPU-perf.
## Stack
- Next.js 16 (App Router, TypeScript, Turbopack)
- TailwindCSS · GSAP 3.15+ (incl. ScrollTrigger, SplitText)
- Lenis 1.3+ (`lenis/react`)
- @gsap/react voor de useGSAP hook
## Hard rules
- Geen Framer Motion, react-spring, AOS
- Animaties altijd in Client Components (`"use client"`)
- useGSAP(() => {}, { scope: ref }) — nooit useEffect voor GSAP
- Lenis sync: gsap.ticker.add met autoRaf: false
- Next 16: await params, await cookies(), await headers()
## Patterns
- Eén <SmoothScroll> wrapper in app/layout.tsx
- Tailwind voor layout; GSAP voor transform/opacity
## Done =
- Geen hydration warnings
- ScrollTrigger.refresh() na dynamische content
```
**De `## Why this stack` sectie** geeft de agent context. Hij snapt nu
*waarom* deze keuzes — en stelt voor dezelfde redenen geen Framer Motion voor.
**Bronnen:** [14] [15] [19]
---
## Slide 13: Vercel + Preview Deployments
### Feature branches = automatische preview URLs
**Het idee:**
Elke push naar GitHub → Vercel maakt automatisch een **unieke preview URL** voor die branch. Geen handmatige deploys, geen "stuur me een screenshot".
**Setup (eenmalig per project):**
1. `npx vercel link` — koppelt repo aan Vercel project (of via dashboard)
2. Git remote staat → Vercel installeert eigen GitHub App
3. Klaar — elke `git push` triggert deploy
**Hoe het werkt:**
| Branch | Wat krijgt Vercel? | URL |
|--------|-------------------|-----|
| `main` | Production deploy | `jouw-app.vercel.app` |
| `feature-hero` | Preview deploy | `jouw-app-git-feature-hero-jij.vercel.app` |
| `feature-gallery` | Preview deploy | `jouw-app-git-feature-gallery-jij.vercel.app` |
**Waarom dit goud is voor scroll-storytelling:**
- Stuur preview URL naar designers/stakeholders per feature
- Vergelijk verschillende secties side-by-side
- Geen "het werkt op mijn machine"
- Comment in PR direct met working URL
**Combinatie met onze worktrees:**
- 1 worktree = 1 branch = 1 Vercel preview
- 3 features parallel = 3 live previews
**Bronnen:** [20] [21]
---
## Slide 14: LIVE DEMO 2 — Setup + Worktree + Vercel preview
### Wat je nu gaat zien (~20 min)
**Wat ik laat zien:**
1. **AGENTS.md** invullen met onze projectregels
2. **opencode.json** maken met permissions
3. Tonen dat `rm -rf` geblokkeerd wordt
4. **`ocx` + worktree plugin** verifiëren (was al klaar)
5. Via prompt: **worktree feature-hero** aanmaken
6. **+ New Session** → openen op worktree-folder
7. **SmoothScroll wrapper** laten bouwen — agent volgt AGENTS.md
8. **`git push origin feature-hero`** vanuit worktree
9. Open Vercel dashboard → toon **preview URL** verschijnt automatisch
10. Open preview URL → scroll-animatie werkt live
**Visual:** Mockup Sessions sidebar + Vercel preview URL. PINK badge "LIVE DEMO".
---
## Slide 15: Pauze
### Pauze!
**Visual:** "Pauze" groot, "15 minuten"
---
## Slide 16: Lesopdracht
### Bouw een scroll-sectie + preview — 28 minuten
**Setup (al klaar in starter):**
- Next.js 16 starter
- AGENTS.md, opencode.json, plugin
- GSAP + Lenis geïnstalleerd
- SmoothScroll wrapper bestaat al
**Jouw taak:**
0. Fork starter naar **jouw** GitHub + `vercel link`
1. `/init` runnen — check AGENTS.md
2. Vraag agent: maak worktree voor jouw feature
3. Open de worktree in nieuwe Sessions tab
4. Plan-mode → review → Tab → Build
5. Test lokaal op `npm run dev`
6. `git push origin <jouw-branch>` — Vercel deployt automatisch
7. Open preview URL → animatie werkt live → plak in chat
> **Niet klaar in de les?** Geen probleem — je werkt thuis in dezelfde fork
> verder. Het huiswerk bouwt voort op dit punt.
**Sectie keuze:** hero (SplitText) · features-grid (stagger) · testimonials (horizontaal) · gallery (parallax)
---
## Slide 17: Huiswerk
### Bouw verder in je les-repo
**Voor volgende week:**
Doorbouwen in dezelfde fork als in de les — eerst sectie 1 afmaken (indien nog niet), dan 2-3 extra secties tot een **kleine landing page** met 3-4 scroll secties.
**Eisen:**
- [ ] Eigen `AGENTS.md` (onze mag als basis)
- [ ] `opencode.json` met permissions
- [ ] **2+ worktrees** gebruikt (Sessions sidebar)
- [ ] **3 verschillende scroll-animaties**
- [ ] Lenis smooth scroll
- [ ] **Vercel gekoppeld** — main = productie, branches = previews
- [ ] `WORKFLOW.md` reflectie (max 400 woorden) met **screenshots van preview URLs per feature**
**Lever in:** GitHub URL + Production URL + minstens **2 preview URLs** (per worktree-branch) + screenshot `git worktree list`
**Bonus:** Eigen sub-agent · MCP server (context7) · Lighthouse 90+
---
## Slide 18: Afsluiting
### Volgende les — Introductie Cursor
**Vandaag gedaan:**
- Waarom OpenCode (vs Cursor)
- Plan/Build/@explore/`/init`
- AGENTS.md + opencode.json
- opencode-worktree plugin via ocx
- Live: Next.js 16 + GSAP + Lenis scroll-site
- Parallel agents via Sessions sidebar
- Vercel preview deployments per branch
**Volgende keer — Cursor:**
- De commerciele tegenhanger van OpenCode
- Cursor rules vs AGENTS.md
- Composer, Tab-completion, @-references
- Wanneer kies je welke tool?
**Vragen? Feedback?**
---
## Slide Summary
| # | Title | Type | Bronnen |
|---|-------|------|---------|
| 1 | Title | Opening | [1] |
| 2 | Terugblik | Intro | — |
| 3 | Plan | Intro | — |
| 4 | Waarom OpenCode | Theorie | [1] [4] |
| 5 | Wat is OpenCode | Theorie | [1] [2] [3] [5] |
| 6 | Plan/Build/@explore | Theorie | [6] [7] [8] |
| 7 | **LIVE DEMO 1** | Demo | — |
| 8 | AGENTS.md | Theorie | [9] |
| 9 | opencode.json | Theorie | [10] [11] |
| 10 | Worktree plugin | Theorie | [12] [13] |
| 11 | Demo stack | Theorie | [14][18] |
| 12 | Onze AGENTS.md | Theorie | [14] [15] [19] |
| 13 | Vercel preview deployments | Theorie | [20] [21] |
| 14 | **LIVE DEMO 2** | Demo | — |
| 15 | Pauze | Break | — |
| 16 | Lesopdracht | Praktijk | alle |
| 17 | Huiswerk | Praktijk | alle |
| 18 | Afsluiting | Closing | — |
---
## Bronnen
**OpenCode (officieel):**
- [1] OpenCode hoofdsite — https://opencode.ai
- [2] OpenCode Download (Desktop) — https://opencode.ai/download
- [3] OpenCode docs — https://opencode.ai/docs/
- [4] OpenCode GitHub (sst) — https://github.com/sst/opencode
- [5] DeepWiki: Desktop Applications — https://deepwiki.com/sst/opencode/6.7-desktop-applications
- [6] Modes (plan/build) — https://opencode.ai/docs/modes/
- [7] Agents (sub-agents) — https://opencode.ai/docs/agents/
- [8] Commands (slash) — https://opencode.ai/docs/commands/
- [9] Rules (AGENTS.md) — https://opencode.ai/docs/rules/
- [10] Config — https://opencode.ai/docs/config/
- [11] Permissions — https://opencode.ai/docs/permissions/
**Worktree plugin:**
- [12] opencode-worktree — https://github.com/kdcokenny/opencode-worktree
- [13] ocx (extension manager) — https://github.com/kdcokenny/ocx
**Next.js 16:**
- [14] Next.js 16 blog — https://nextjs.org/blog/next-16
- [15] Upgrading to v16 — https://nextjs.org/docs/app/guides/upgrading/version-16
**GSAP:**
- [16] GSAP docs v3 — https://gsap.com/docs/v3/
- [17] GSAP React (useGSAP) — https://gsap.com/resources/React/
- [18] GSAP License (gratis sinds 2025) — https://gsap.com/standard-license
**Lenis:**
- [19] Lenis GitHub — https://github.com/darkroomengineering/lenis
**Vercel:**
- [20] Vercel Preview Deployments — https://vercel.com/docs/deployments/preview-deployments
- [21] Vercel + Git Integration — https://vercel.com/docs/git