487 lines
15 KiB
Markdown
487 lines
15 KiB
Markdown
# 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
|