14 KiB
Les 14 — Lesstof
Cursor + Vercel: van leeg project naar preview-deploys
Vak: AI-Assisted Development Opleiding: NOVI Hogeschool Utrecht Vorige les: Les 13 — Agents Volgende les: Les 15 — RAG + Embeddings
Doel van deze les
Aan het einde van deze les heb je:
- Een vers Next.js project gescaffold via
npx create-next-app - Een GitHub-repo met je code
- Een Vercel-project met productie-URL én preview-URL's per branch
- Vercel CLI lokaal gekoppeld + één keer
vercel env pullgedaan - Een werkende
.cursor/rules/general.mdcenAGENTS.mdin je repo - Twee features gebouwd via Cursor in eigen branches → twee preview-URL's
- Eén Pull Request gemerged naar productie
1. Scaffolden met npx create-next-app
Wat het doet
create-next-app is het officiële scaffold-commando van het Next.js team. Eén commando, een paar interactieve vragen, en je hebt een werkende Next.js-app met sane defaults.
npx create-next-app@latest mijn-portfolio
De prompts uitgelegd
| Vraag | Aanbevolen | Waarom |
|---|---|---|
| TypeScript? | Ja | strict typing voorkomt veel bugs |
| ESLint? | Ja | code-style consistency |
| Tailwind CSS? | Ja | utility-first styling, breed gebruikt |
src/ directory? |
Ja | houdt project-root schoon |
| App Router? | Ja | de moderne Next.js flow (server components) |
| Turbopack? | Ja | snellere dev-builds |
| Import alias? | @/* |
@/components/foo ipv ../../components/foo |
Wat je krijgt
mijn-portfolio/
├── .gitignore # node_modules, .next, .env.local zijn al gegitignored
├── next.config.ts
├── package.json
├── tsconfig.json
├── src/
│ └── app/
│ ├── layout.tsx # root layout
│ ├── page.tsx # homepage
│ └── globals.css
└── public/
Direct npm run dev → localhost:3000 werkt. Vanaf hier ben je productief.
2. Git + GitHub
Init en eerste push
git init
git add .
git commit -m "init"
git branch -M main
# Met gh CLI (snelst):
gh repo create mijn-portfolio --public --source=. --push
# Of handmatig:
# 1. github.com → New repository → naam → Create (leeg, GEEN README)
# 2. git remote add origin <url>
# 3. git push -u origin main
Veelgemaakte fouten
| Fout | Oplossing |
|---|---|
gh: command not found |
brew install gh (Mac) / winget install GitHub.cli (Windows) |
Authentication required |
gh auth login doorlopen |
error: src refspec main does not match any |
Eerst git add . && git commit -m "init" |
fatal: remote origin already exists |
git remote remove origin en opnieuw |
Wat zit er NIET in je commit
Check je .gitignore — Next.js zet er standaard de juiste regels in:
node_modules/
.next/
.env.local
.env*.local
Belangrijk: controleer altijd na je eerste push op github.com dat .env.local daar NIET staat. Een gelekte secret-key is dezelfde dag onveilig.
3. Vercel — drie stappen naar productie
Project importeren
- Ga naar vercel.com/new
- Klik Import Git Repository
- Kies je
mijn-portfoliorepo - Framework auto-detect: Next.js
- Klik Deploy
Wacht ±45 seconden. Wat Vercel doet:
- Kloont je repo
- Detecteert framework
- Draait
npm install - Draait
npm run build - Deploy't naar Edge Network
- Geeft je een productie-URL
Twee URL-types
| Type | URL-format | Trigger |
|---|---|---|
| Productie | mijn-portfolio-<scope>.vercel.app |
push naar main |
| Preview | mijn-portfolio-git-<branch>-<scope>.vercel.app |
push naar elke andere branch |
Wat je vanaf nu krijgt zonder extra werk
- Elke push naar GitHub → automatische deploy
- Elke nieuwe branch → eigen preview-URL
- Pull Request → Vercel-bot post preview-URL als comment
- Productie-URL update vanzelf bij merge naar
main
4. Environment Variables in Vercel
Drie environments
| Environment | Actief bij |
|---|---|
| Production | deploys vanaf main |
| Preview | alle andere branches |
| Development | vercel dev lokaal |
Je kunt env vars in één, twee of alle drie tegelijk zetten.
NEXT_PUBLIC_ prefix
| Prefix | Wat gebeurt | Voorbeeld |
|---|---|---|
NEXT_PUBLIC_FOO |
wordt in browser-bundle gestopt | publieke API-URL, Supabase anon-key |
FOO (geen prefix) |
alleen server-side beschikbaar | OpenAI key, Stripe secret, DB password |
Regel: zet NEXT_PUBLIC_ ALLEEN op variabelen die echt publiek mogen zijn. Twijfel? Geen prefix.
Via het dashboard
Settings → Environment Variables → Add. Vul naam + waarde, kies environments, save.
5. Vercel CLI
Installeren
npm i -g vercel
vercel login # opent browser voor auth
Belangrijkste commando's
vercel link # lokale folder → Vercel project
vercel env pull .env.local # productie env vars → lokaal
vercel env pull --environment=preview .env.local
vercel env add OPENAI_API_KEY production
vercel env rm OPENAI_API_KEY production
vercel env ls # lijst alle vars
vercel # interactieve deploy
vercel --prod # productie deploy (handmatig)
vercel logs # runtime logs
vercel logs --follow # stream logs live
Typische workflow
# Project klaarzetten (eenmalig):
vercel link
# Bij elke nieuwe env var op productie:
vercel env pull .env.local
# Bij env var rotatie:
vercel env rm DATABASE_URL production
vercel env add DATABASE_URL production
6. Cursor — de IDE
Wat is Cursor
Cursor is een VS Code-fork met AI als kernfeature. Niet een extensie — het is de editor. Werkt met Claude, GPT, Gemini en lokale modellen.
Cursor 3 — twee windows
In Cursor 3 zijn er twee hoofdvensters:
| Window | Wat je er doet | Switch met |
|---|---|---|
| Editor Window (classic) | Code schrijven en reviewen — als VS Code | Cmd+Shift+N → Editor |
| Agents Window | Meerdere agents parallel managen | Cmd+Shift+N → Agents |
Sneltoets om te onthouden: Cmd+Shift+N switcht tussen beide.
Binnen het Editor Window:
- Cmd+L — chat-paneel (kies modus: Ask / Agent / Plan)
- Cmd+K — inline edit op selectie
- Tab — accepteer AI auto-completion
- Cmd+P — file search (zoals VS Code)
Binnen het Agents Window:
- Overzicht met lokale, cloud en remote agents
- Op één plek alle running + done agents
Gouden regel:
- Code schrijven of 1 feature bouwen → Editor Window + Agent mode in chat
- Meerdere features parallel → Agents Window met Background agents
- Snelle tweak in 1 file → Cmd+K
Versie-noot: info hieronder is gebaseerd op de officiële Cursor 3 documentatie (
cursor.com/docs). Cursor 3.7 en hoger heeft alle besproken features. Sommige UI-details kunnen per minor-versie iets verschillen.
Editor Window — stap voor stap
Je hoofdwerkplek voor code:
- Cmd+Shift+N — switcht naar Editor Window (als je in Agents Window zat)
- Layout: file explorer links, editor midden, terminal beneden (klassieke VS Code-stijl)
- Cmd+L opent chat-paneel rechts
- Voor snelle inline edits: selecteer code → Cmd+K → beschrijf wijziging
- Cursor toont diff inline in de editor (niet in een aparte panel)
- Tab om te accepteren, Esc om te rejecten
- Cmd+P voor file search
- Tab accepteert AI auto-completion suggesties
Wanneer: je standaard coding-flow, files reviewen met split screens, VS Code extensies gebruiken (linters, formatters, debugger).
Tip: kun je Cursor laten starten in Editor Window als default? Ja. Settings → "Open Agents Window on startup" → uit. Of start vanuit terminal met cursor --classic.
Agent mode (binnen chat in Editor Window) — stap voor stap
De AI-modus binnen het chat-paneel:
- Cmd+L opent chat-paneel rechts (in Editor Window)
- Bovenaan chat: mode-selector → kies "Agent"
- Typ de hele taak (niet een specifieke kleine wijziging)
- "Bouw een /about pagina met team-grid in onze huisstijl"
- Enter — agent start zelfstandig
- Cursor toont een lopende takenlijst + voortgang per stap
- Agent edit meerdere files, runt terminal-commando's (vraagt vooraf), kan zelfs web browsen
- Geen limiet op aantal tool-calls per taak
- Aan het einde: samenvatting → Keep / Accept all of per file
Wanneer: grotere features die meerdere bestanden raken, refactors, nieuwe pagina's of API-routes.
Belangrijke tip: hou je prompt specifiek. "Bouw een about-pagina met team-grid" = goed. "Bouw een mooie website" = veel te open.
Background agents (Agents Window) — stap voor stap
Async cloud-based agents in geïsoleerde VMs:
Cmd+Shift+N → Agents Window opent.
Een agent aanmaken:
- In Agents Window: klik New agent (of
+) - Kies environment: local / cloud / remote SSH
- Beschrijf de taak — specifiek, als een ticket
- Optioneel: branch-naam (
feature/about) - Klik Start
- Cmd+Shift+N terug naar Editor Window — agent babysit zichzelf
Resultaat ophalen:
- Cmd+Shift+N naar Agents Window
- Klare agents staan op Done in de agents-lijst
- Klik agent → zie diff + commit message + alle stappen
- Open in PR → automatische PR op GitHub
- Vercel maakt preview-URL → review → merge
Triggers van buitenaf: Background agents kun je in Cursor 3 ook starten vanuit je telefoon, Slack, GitHub of Linear — handig tijdens vergaderingen.
Wanneer: 2–4 parallelle features, lange refactors die je niet wilt babysitten, taken vanaf mobiel.
Context — @-mentions
In chat type je @ voor een autocomplete. Wat je kunt mention'en:
| Tag | Wat het doet |
|---|---|
@file:foo.tsx |
inclusief één specifiek bestand |
@folder:components |
hele map als context |
@code:functionName |
losse functie of class |
@docs |
externe documentatie |
@web |
live web-search |
@git |
git history / blame |
@recommended |
Cursor suggereert zelf relevante bestanden |
Tip: hou de scope klein. Veel mentions in één chat verslechtert de output, niet verbetert.
Cursor Rules
Markdown-bestanden in .cursor/rules/ die aan elke prompt worden toegevoegd als systeem-instructie.
Voorbeeld .cursor/rules/general.mdc:
---
description: Algemene project-conventies
alwaysApply: true
---
- TypeScript strict mode
- Tailwind voor styling — geen CSS modules
- Server components by default; "use client" alleen waar nodig
- Imports met @/ alias
- Geen any-types
YAML front-matter opties:
alwaysApply: true/false— actief in elke promptglobs: ["**/*.test.ts"]— alleen actief op matching bestandendescription: "..."— wat de rule doet
Project context — AGENTS.md
Eén markdown-bestand in je repo-root dat beschrijft:
- Tech stack + waarom die keuzes
- Architectuur en belangrijke patronen
- Hoe lokaal draaien, hoe deployen
- Pointers naar belangrijke bestanden
AGENTS.md wordt door Cursor, Claude Code én GitHub Copilot gelezen. Eén file, meerdere tools.
Background agents — async cloud
Tweede Cursor-sessie die asynchroon op een feature werkt, in een eigen Git branch, in een aparte tab.
Workflow:
- Beschrijf feature → klik "open in background"
- Agent werkt in eigen branch, jij blijft in main editor
- Agent meldt zich klaar → review diff → apply/iterate/discard
Wanneer: voor parallelle features. Drie of vier agents tegelijk is normaal.
Top 7 tips voor power-users
- Cmd+I voor Composer met multi-file context (niet alleen Cmd+L)
@-recommendedlaat Cursor zelf relevante bestanden voorstellen- Plan + Apply per stap — niet alles in één klap accepteren
alwaysApply: falserules voor opt-in conventies- Auto-mode — Cursor kiest beste model per taak
- Cmd+Shift+Enter voor diff-preview vóór accept
- Notepads — herbruikbare prompt-snippets per project
7. De feature-workflow
Vijf stappen, één feature
1. Plan → Cursor chat: beschrijf de feature, vraag plan
2. Branch → git checkout -b feature/x (Cursor kan dit ook)
3. Build → Apply het plan, eventueel inline tweaks
4. Commit+ → git add . && git commit -m "feat: x" && git push
Push
5. Preview → Vercel maakt preview-URL, test & itereer
Eén feature ≈ 10 minuten
Inclusief AI denkwerk. Wat dit versnelt is niet dat AI mooier code schrijft — het is dat de cycle korter wordt.
Anti-patterns
- Geen branch maken, direct op
mainwerken (geen preview, geen rollback) - 5 features in één commit ("WIP" commits)
- Plan niet lezen → Apply → het deugt niet → terugkrabbelen
- Background agents starten zonder duidelijke prompt → bagger output
8. Production checklist
Voordat je een app "klaar" beschouwt:
| Check | Waarom |
|---|---|
| Productie-URL werkt voor alle routes | Anders krijgen gebruikers 404 |
| Env vars staan goed (alle environments) | Anders crashen API routes |
.env.local staat in .gitignore |
Anders lekken keys op GitHub |
| Eerste feature-branch + PR gedaan | Bewijs dat preview-flow werkt |
.cursor/rules/general.mdc is ingevuld |
Anders weet Cursor je conventies niet |
AGENTS.md is ingevuld |
Anders weet AI de architectuur niet |
| Build slaagt zonder warnings | Anders begin je met technical debt |
404 en error.tsx pages bestaan |
Voor nette foutmeldingen |
9. Verder lezen
- Cursor docs —
docs.cursor.com— features, shortcuts, Rules-syntax - Vercel docs —
vercel.com/docs— alle CLI-commando's, env vars, domains - Next.js docs —
nextjs.org/docs— App Router, server components, routing - AGENTS.md spec —
agentsmd.org— community-gedragen format - Pro Git (gratis online) —
git-scm.com/book— definitieve Git-referentie
Samenvatting
Vandaag heb je geleerd:
- Scaffolden met
npx create-next-app— alle defaults uitgelegd - Git init + GitHub push (via
ghCLI of handmatig) - Vercel project koppelen — productie + preview URLs gratis erbij
- Vercel CLI —
link,env pull/add/rm,logs,--prod - Environment variables — drie environments,
NEXT_PUBLIC_prefix - Cursor: chat, plan, build, inline edit, rules, AGENTS.md, background agents
- Feature workflow: plan → branch → build → push → preview
- Top tips voor Cursor power-users
Volgende les bouwen we hier RAG bovenop — een PDF Q&A-app met embeddings.