# Les 9 Huiswerk: Bouw je eigen app met de 5 Cursor-technieken **Vak:** AI-Assisted Development **Opleiding:** NOVI Hogeschool Utrecht **Deadline:** Voor de volgende les --- ## Overzicht In de les heb je 5 Cursor-technieken geleerd en toegepast op LinkVault. Nu is het tijd om te laten zien dat je deze technieken zelfstandig kunt toepassen. Je gaat een **eigen app** bouwen van scratch -- geen LinkVault! --- ## Kies je app Kies een van de volgende projecten (of bedenk er zelf een): | Optie | Omschrijving | |-------|-------------| | **Recepten app** | Recepten opslaan met ingredienten, bereidingswijze en tags | | **Film tracker** | Films bijhouden met rating, genre en watchlist | | **Notitie app** | Notities met categorieen en zoekfunctie | | **Eigen idee** | Overleg dit eerst met Tim voordat je begint! | **Tech stack:** Next.js 16, TypeScript, Tailwind CSS (net als in de les). --- ## Checklist: Wat moet je opleveren? Gebruik deze checklist om te controleren of je alles hebt gedaan. Elk punt is **verplicht** (tenzij anders aangegeven). - [ ] **1. Cursor Rules** -- `.cursor/rules/` map aangemaakt met minimaal 2 rule bestanden (met YAML frontmatter!) - [ ] **2. Plan Mode** -- Plan Mode gebruikt om je app te plannen (maak een screenshot van je plan) - [ ] **3. Agent Mode** -- Agent Mode gebruikt om minimaal 2 features te bouwen - [ ] **4. Debug Mode** -- Debug Mode gebruikt voor minstens 1 bug (maak een screenshot van je debug sessie) - [ ] **5. Tests** -- Tests geschreven met de agent (minimaal 3 unit tests) - [ ] **6. Code Review** -- "Find Issues" gedraaid en eventuele issues gefixt - [ ] **7. Semantic Commits** -- Semantic commits gemaakt (feat:, fix:, docs:, etc.) - [ ] **8. GitHub** -- Alles gepusht naar een GitHub repository - [ ] **9. (Bonus)** -- Pull Request aangemaakt en door Cursor laten reviewen --- ## Wat lever je in? 1. **GitHub repository link** -- Zorg dat de repo public is (of nodig Tim uit als collaborator) 2. **Korte reflectie (200 woorden)** -- Beantwoord deze vragen: - Welke Cursor-technieken werkten het beste voor jou? - Waar liep je vast? - Wat doe je de volgende keer anders? 3. **Screenshots** van: - Je Plan Mode plan - Een Debug Mode sessie - Je test resultaten (terminal output) --- ## Tips - Begin met Plan Mode! Laat Cursor eerst een plan maken voordat je gaat bouwen. - Commit vroeg en vaak. Gebruik semantic commits vanaf het begin. - Loop je vast? Gebruik Debug Mode -- beschrijf de fout en laat Cursor helpen. - Houd je prompt requests in de gaten. Je hebt 500 fast requests per maand op het Student Plan. --- ## Appendix A: Keyboard Shortcuts Reference Alle belangrijke Cursor sneltoetsen op een rij: | Actie | Windows / Linux | macOS | |-------|----------------|-------| | Chat openen | `Ctrl+L` | `Cmd+L` | | Plan Mode toggle | `Shift+Tab` | `Shift+Tab` | | Inline Edit | `Ctrl+K` | `Cmd+K` | | Composer | `Ctrl+I` | `Cmd+I` | | Autocomplete accepteren | `Tab` | `Tab` | | Terminal openen | `` Ctrl+` `` | `` Ctrl+` `` | | Command Palette | `Ctrl+Shift+P` | `Cmd+Shift+P` | --- ## Appendix B: .cursor/rules Templates Maak een `.cursor/rules/` map in je project root en voeg daar `.mdc` bestanden toe. Hieronder staan templates die je kunt kopieren en aanpassen voor je eigen project. ### project.mdc (algemene projectregels) ```markdown --- description: Algemene projectregels en conventies alwaysApply: true --- # Project Regels ## Tech Stack - Next.js 16 met App Router - TypeScript (strict mode) - Tailwind CSS voor styling ## Conventies - Gebruik functionele componenten met TypeScript interfaces - Bestandsnamen in kebab-case - Componenten in PascalCase - Gebruik `async/await` in plaats van `.then()` chains ## Mappenstructuur - `src/app/` -- App Router pagina's en layouts - `src/components/` -- Herbruikbare componenten - `src/lib/` -- Utility functies en types - `src/types/` -- TypeScript type definities ``` ### components.mdc (componentregels) ```markdown --- description: Regels voor React componenten globs: - "src/components/**/*.tsx" - "src/app/**/*.tsx" --- # Component Regels ## Structuur - Elke component heeft een eigen map met index.tsx - Props worden gedefinieerd als TypeScript interface boven de component - Gebruik `"use client"` alleen wanneer nodig (interactieve componenten) ## Styling - Gebruik Tailwind utility classes - Geen inline styles - Gebruik `cn()` helper voor conditionele classes ## Toegankelijkheid - Alle images hebben een alt attribuut - Interactieve elementen hebben aria-labels - Gebruik semantische HTML elementen ``` ### styles.mdc (styling regels) ```markdown --- description: Regels voor styling en Tailwind gebruik globs: - "src/**/*.css" - "src/**/*.tsx" --- # Styling Regels ## Tailwind CSS - Gebruik de standaard Tailwind kleurenpalet - Definieer custom kleuren in `tailwind.config.ts` - Gebruik `dark:` variant voor dark mode support - Responsive design: mobile-first (`sm:`, `md:`, `lg:`) ## CSS Bestanden - Gebruik `globals.css` alleen voor CSS variabelen en base styles - Geen component-specifieke CSS bestanden -- gebruik Tailwind classes ``` --- ## Appendix C: Prompt Templates Goede prompts maken het verschil. Hieronder staan templates die je kunt gebruiken voor elke techniek. ### 1. Plan Mode prompt ``` Ik wil een [app naam] bouwen met Next.js 16, TypeScript en Tailwind CSS. De app moet het volgende kunnen: - [Feature 1] - [Feature 2] - [Feature 3] Maak een gedetailleerd plan met: 1. Mappenstructuur 2. Benodigde componenten 3. Data model / types 4. Stappen om te bouwen (in volgorde) Gebruik de App Router en server components waar mogelijk. ``` ### 2. Agent Mode feature prompt ``` Bouw de [feature naam] feature voor mijn app. Wat het moet doen: - [Beschrijving van de feature] - [Verwacht gedrag] - [Edge cases] Gebruik bestaande types uit src/types/ en componenten uit src/components/. Volg de regels in .cursor/rules/. ``` ### 3. Debug Mode prompt ``` Ik krijg de volgende fout: [Plak hier de foutmelding of beschrijf het onverwachte gedrag] Wat ik verwacht: [beschrijf het verwachte gedrag] Wat er gebeurt: [beschrijf wat er daadwerkelijk gebeurt] Het relevante bestand is [bestandsnaam]. Kun je de bug vinden en fixen? ``` ### 4. Test writing prompt ``` Schrijf unit tests voor [component/functie naam]. Test minimaal: - Het happy path (normaal gebruik) - Edge cases (lege input, lange strings, etc.) - Error handling Gebruik de bestaande test setup in het project. ``` ### 5. Semantic commits prompt ``` Maak een semantic commit message voor de huidige wijzigingen. Gebruik dit formaat: - feat: voor nieuwe features - fix: voor bugfixes - docs: voor documentatie - style: voor opmaak (geen code wijzigingen) - refactor: voor code refactoring - test: voor tests - chore: voor overige taken Houd de message kort en beschrijvend in het Engels. ``` ### 6. Code review prompt ``` Review de code in [bestandsnaam of map]. Let op: - TypeScript best practices - Performance issues - Security problemen - Toegankelijkheid - Code duplicatie Geef concrete suggesties voor verbeteringen. ``` --- ## Appendix D: Troubleshooting ### Plan Mode verschijnt niet | Probleem | Oplossing | |----------|----------| | Plan Mode optie niet zichtbaar | Zorg dat je Cursor versie up-to-date is (Help > Check for Updates) | | Toggle doet niets | Probeer `Shift+Tab` in het chat venster, niet in de editor | | Plan wordt niet gegenereerd | Zorg dat je prompt duidelijk genoeg is -- geef context over wat je wilt bouwen | ### Agent Mode voert niets uit | Probleem | Oplossing | |----------|----------| | Agent maakt geen bestanden aan | Controleer of Agent Mode actief is (niet Ask Mode) in de chat dropdown | | Agent stopt halverwege | Druk op "Continue" of geef een follow-up prompt | | Agent maakt fouten | Wees specifieker in je prompt, verwijs naar bestaande bestanden | ### .cursor/rules worden niet opgepikt | Probleem | Oplossing | |----------|----------| | Rules hebben geen effect | Controleer dat de map `.cursor/rules/` heet (niet `.cursor/rule/`) | | YAML frontmatter fout | Controleer de `---` blokken bovenaan elk `.mdc` bestand | | Globs matchen niet | Check je glob patronen -- `src/**/*.tsx` matcht alles onder src/ | | Bestanden staan verkeerd | De `.cursor/` map moet in je project root staan | ### Tests draaien niet | Probleem | Oplossing | |----------|----------| | `npm test` geeft fout | Controleer of Vitest of Jest is geinstalleerd: `npm install -D vitest` | | Tests worden niet gevonden | Bestandsnaam moet eindigen op `.test.ts` of `.test.tsx` | | Import errors in tests | Controleer je `tsconfig.json` paths en test configuratie | | Module not found | Voer `npm install` uit om dependencies te installeren | ### Git / GitHub problemen | Probleem | Oplossing | |----------|----------| | `git push` geeft permission denied | Controleer of je SSH key of personal access token is ingesteld | | Repo niet gevonden op GitHub | Maak eerst een repo aan op github.com en volg de instructies | | Merge conflicts | Gebruik `git status` om conflicten te zien, los ze op in Cursor | | Vergeten te committen | `git add .` en daarna `git commit -m "feat: beschrijving"` | --- Veel succes en plezier met bouwen! Kom je er niet uit, stel je vraag in het les-kanaal.