Files
novi-lessons/Samenvattingen/Les11-Samenvatting.md
2026-01-29 16:16:07 +01:00

449 lines
10 KiB
Markdown

# Les 11: Project Setup & Repository Structure
---
## Hoofdstuk
**Hoofdstuk 3: Advanced** (Les 10-18)
## Beschrijving
Zet je eindproject professioneel op met de juiste structuur, documentatie, en AI-configuratie. Je past alles toe wat je hebt geleerd en maakt je project klaar voor Cursor.
---
## Te Behandelen
### Waarom Goede Structuur Belangrijk Is
**Voor AI:**
- AI begrijpt beter wat je project doet
- Betere code suggestions
- Minder hallucinaties
**Voor jezelf:**
- Makkelijker navigeren
- Sneller features bouwen
- Betere samenwerking
---
### Eindproject Aanmaken
```bash
# Kies een goede naam voor je project
npx create-next-app@latest ai-recipe-generator
# of: smart-budget-buddy
# of: travel-planner-ai
# of: jouw-eigen-idee
# Beantwoord de vragen:
# ✔ Would you like to use TypeScript? → Yes
# ✔ Would you like to use ESLint? → Yes
# ✔ Would you like to use Tailwind CSS? → Yes
# ✔ Would you like to use `src/` directory? → Yes
# ✔ Would you like to use App Router? → Yes
# ✔ Would you like to customize the default import alias? → No
cd ai-recipe-generator
```
---
### De Ideale Folder Structuur
```
ai-recipe-generator/
├── .cursor/
│ └── rules/
│ └── general.mdc # Cursor instructies
├── docs/
│ ├── PROJECT-BRIEF.md # Project beschrijving
│ ├── PROMPT-LOG.md # AI prompts logboek
│ └── AI-DECISIONS.md # Architectuur beslissingen
├── src/
│ ├── app/
│ │ ├── api/ # API routes (voor AI)
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── components/
│ │ ├── ui/ # Herbruikbare UI components
│ │ └── features/ # Feature-specifieke components
│ ├── lib/
│ │ └── supabase.ts # Supabase client
│ └── types/
│ └── index.ts # TypeScript types
├── .env.example # Template voor env vars
├── .env.local # Echte env vars (niet committen!)
├── .gitignore
└── README.md
```
**Maak de folders aan:**
```bash
mkdir -p .cursor/rules
mkdir -p docs
mkdir -p src/components/ui
mkdir -p src/components/features
mkdir -p src/lib
mkdir -p src/types
```
---
### .cursorrules Files
**.cursor/rules/general.mdc:**
```markdown
# Project: AI Recipe Generator
## Tech Stack
- Next.js 14 met App Router
- TypeScript (strict mode)
- Tailwind CSS voor styling
- Supabase voor database en auth
- Vercel AI SDK voor chat features
## Code Conventies
- Gebruik functionele React components
- Gebruik named exports (geen default exports)
- Destructure props in function signature
- Gebruik async/await (geen .then() chains)
- Schrijf TypeScript types voor alle props en data
## File Naming
- Components: PascalCase (Button.tsx, RecipeCard.tsx)
- Utilities: camelCase (formatDate.ts, fetchRecipes.ts)
- Types: PascalCase met 'Type' suffix (RecipeType.ts)
## Styling
- Alleen Tailwind classes, geen inline styles
- Mobile-first approach
- Gebruik consistent spacing (4, 8, 16, 24, 32)
## Supabase
- Client in src/lib/supabase.ts
- Gebruik typed queries waar mogelijk
- Handle errors expliciet
## AI Features
- API routes in src/app/api/
- Gebruik Vercel AI SDK useChat hook
- Stream responses voor betere UX
```
---
### docs/ Folder
#### docs/PROJECT-BRIEF.md
```markdown
# Project Brief: AI Recipe Generator
## Projectnaam
AI Recipe Generator
## Tagline
"Ontdek recepten op basis van wat je in huis hebt"
## Probleem
Mensen hebben vaak ingrediënten in huis maar weten niet wat ze
ermee kunnen maken. Ze verspillen voedsel of bestellen onnodig.
## Oplossing
Een app waar je ingrediënten invoert en AI receptsuggesties genereert.
Je kunt chatten met de AI voor variaties en tips.
## Doelgroep
- Studenten met beperkt budget
- Thuiskoks die inspiratie zoeken
- Mensen die voedselverspilling willen verminderen
## Core Features
1. Ingrediënten invoeren
2. AI genereert recepten op basis van ingrediënten
3. Chat interface voor follow-up vragen
4. Recepten opslaan als favoriet
5. Login om favorieten te bewaren
## Nice-to-have Features
- Dieetwensen (vegetarisch, glutenvrij, etc.)
- Boodschappenlijst genereren
- Recept delen
## Tech Stack
- Frontend: Next.js, TypeScript, Tailwind CSS
- Backend: Supabase (database, auth)
- AI: Vercel AI SDK met OpenAI
- Deployment: Vercel
```
#### docs/PROMPT-LOG.md
```markdown
# Prompt Log
Dit document bevat de belangrijkste prompts die ik heb gebruikt.
## Template per prompt:
### [Datum] - [Onderwerp]
**Doel:** Wat wilde ik bereiken?
**Prompt:**
\`\`\`
De exacte prompt die ik gebruikte
\`\`\`
**Resultaat:** Wat was het resultaat? Werkte het?
**Geleerd:** Wat heb ik hiervan geleerd?
---
## Prompts
### [Datum] - Project Setup
**Doel:** Basis project structuur opzetten
**Prompt:**
\`\`\`
[Nog in te vullen tijdens development]
\`\`\`
**Resultaat:**
**Geleerd:**
---
(Voeg minimaal 10 prompts toe tijdens je project)
```
#### docs/AI-DECISIONS.md
```markdown
# AI Decisions Log
Dit document bevat architectuur- en designbeslissingen gemaakt met AI hulp.
## Template per beslissing:
### [Datum] - [Beslissing titel]
**Context:** Wat was de situatie?
**Vraag aan AI:** Wat heb ik gevraagd?
**Opties:** Welke opties werden voorgesteld?
**Keuze:** Wat heb ik gekozen en waarom?
**Trade-offs:** Wat zijn de voor- en nadelen?
---
## Beslissingen
### [Datum] - Database Schema
**Context:** Ik moet bepalen hoe ik recepten opsla.
**Vraag aan AI:** "Wat is een goede database structuur voor een recept app?"
**Opties:**
1. Één tabel met JSON voor ingrediënten
2. Genormaliseerde tabellen (recipes, ingredients, recipe_ingredients)
**Keuze:** Optie 1 - één tabel met JSON
**Trade-offs:**
- Pro: Simpeler, sneller te implementeren
- Con: Minder flexibel voor complexe queries
---
(Voeg minimaal 5 beslissingen toe tijdens je project)
```
---
### Environment Variables
**.env.example (WEL committen):**
```bash
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
# OpenAI (voor Vercel AI SDK)
OPENAI_API_KEY=your-openai-key
```
**.env.local (NIET committen):**
```bash
# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://xxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx
# OpenAI
OPENAI_API_KEY=sk-xxxxx
```
---
### README.md Best Practices
```markdown
# AI Recipe Generator
Ontdek recepten op basis van wat je in huis hebt.
## Features
- Voer ingrediënten in die je hebt
- AI genereert receptsuggesties
- Chat voor follow-up vragen
- Sla favoriete recepten op
## Tech Stack
- Next.js 14 (App Router)
- TypeScript
- Tailwind CSS
- Supabase
- Vercel AI SDK
## Getting Started
### Prerequisites
- Node.js 18+
- npm of yarn
- Supabase account
- OpenAI API key
### Installation
1. Clone de repository:
\`\`\`bash
git clone https://github.com/jouw-username/ai-recipe-generator.git
cd ai-recipe-generator
\`\`\`
2. Installeer dependencies:
\`\`\`bash
npm install
\`\`\`
3. Kopieer environment variables:
\`\`\`bash
cp .env.example .env.local
\`\`\`
4. Vul je credentials in `.env.local`
5. Start development server:
\`\`\`bash
npm run dev
\`\`\`
6. Open [http://localhost:3000](http://localhost:3000)
## Scripts
- `npm run dev` - Start development server
- `npm run build` - Build voor productie
- `npm run lint` - Run ESLint
## Deployment
Deze app is gedeployed op Vercel: [link naar productie]
## Author
[Jouw naam]
```
---
### GitHub Repository Aanmaken
```bash
# Initialiseer Git (als dat nog niet is gebeurd)
git init
# Maak eerste commit
git add .
git commit -m "Initial Next.js setup with project structure"
# Maak repository op GitHub.com, dan:
git remote add origin https://github.com/jouw-username/ai-recipe-generator.git
git branch -M main
git push -u origin main
```
---
## Tools
- Next.js
- Cursor
- Git & GitHub
- Supabase
---
## Lesopdracht (2 uur)
### Richt je Eindproject Repository In
**Deel 1: Project Aanmaken (20 min)**
- Kies je eindproject (Recipe Generator / Budget Buddy / Travel Planner / eigen idee)
- Run `npx create-next-app@latest [project-naam]`
- Open in Cursor
**Deel 2: Folder Structuur (20 min)**
- Maak alle folders aan volgens de structuur
- Maak alle bestanden aan
- Test: folder structuur is compleet
**Deel 3: .cursorrules (30 min)**
- Schrijf `general.mdc` met jouw project details
- Pas de tech stack, conventies, en styling regels aan
- Test: open een file en vraag Cursor iets - volgt hij je regels?
**Deel 4: Documentatie (30 min)**
- Vul PROJECT-BRIEF.md volledig in
- Maak templates klaar in PROMPT-LOG.md en AI-DECISIONS.md
- Schrijf complete README.md
**Deel 5: Git (20 min)**
- Initialiseer Git
- Maak GitHub repository
- Push alles
### Deliverable
- GitHub repository URL
- Volledig ingevulde PROJECT-BRIEF.md
- Werkende .cursorrules file
- Screenshot van Cursor die je regels volgt
---
## Huiswerk (2 uur)
### Verfijn Setup & Start Bouwen
**Deel 1: Extra .cursorrules (30 min)**
- Maak `components.mdc` met component conventies
- Maak `api.mdc` met API route conventies
- Test beide in Cursor
**Deel 2: Basis Components (1 uur)**
Maak 3-5 basis UI components in `src/components/ui/`:
- Button.tsx
- Card.tsx
- Input.tsx
- (optioneel: Modal.tsx, Toast.tsx)
Gebruik Cursor met je .cursorrules!
Log effectieve prompts in PROMPT-LOG.md
**Deel 3: Supabase Setup (30 min)**
- Maak nieuw Supabase project voor eindopdracht
- Configureer `.env.local` en `.env.example`
- Bespreek met AI welke tabellen je nodig hebt
- Maak eerste tabel aan
- Documenteer in AI-DECISIONS.md
### Deliverable
- Minimaal 2 .cursorrules files
- Minimaal 3 UI components
- Supabase project gekoppeld
- Eerste entries in PROMPT-LOG.md en AI-DECISIONS.md
---
## Leerdoelen
Na deze les kan de student:
- Een professionele project structuur opzetten
- .cursorrules files schrijven die Cursor instrueren
- Documentatie files aanmaken (PROJECT-BRIEF, PROMPT-LOG, AI-DECISIONS)
- Environment variables correct beheren
- Een GitHub repository aanmaken en pushen
- De basis leggen voor AI-assisted development met goede context