# Les 7: Van In-Memory naar Supabase (Introductie) --- ## Hoofdstuk **Deel 2: Technical Foundations** (Les 4-9) ## Beschrijving Eerste kennismaking met Supabase. Studenten maken hun QuickPoll uit Les 6 af, leren wat een relationele database is via de Supabase GUI (geen SQL nodig), en koppelen voor het eerst een echte database aan hun Next.js app. > **Reflectie na geven:** Te veel materiaal voor één les. Studenten kwamen niet door Deel 3 heen. Daarom is Les 8 toegevoegd waarin de Supabase-koppeling rustig opnieuw wordt doorlopen, plus een /create pagina. --- ## Lesopbouw ### Deel 1 — Poll afmaken (30 min, klassikaal) Onaffe stukken uit Les 6 wegwerken: - `votePoll()` functie in `data.ts` - POST route die echt verwerkt (geen `console.log` meer) - **Server Component + VoteForm split** — kernmoment van de les - GET route + visuele percentage bars in `PollItem` ### Deel 2 — Supabase Introductie, No Code (45 min) Voor de meeste studenten hun eerste database ervaring. - Wat is Supabase? Open-source Firebase alternatief op Postgres - Project aanmaken (via GitHub login) - `polls` tabel aanmaken via Table Editor (id, question, created_at) - `options` tabel aanmaken met foreign key naar polls (CASCADE) - RLS policies uitleggen en SELECT policies aanzetten - Testdata invoeren via de GUI - SQL Editor: eerste `SELECT`, `WHERE` en `JOIN` query ### Pauze (15 min) ### Deel 3 — Supabase koppelen aan Next.js (60 min) - `npm install @supabase/supabase-js` - `.env.local` met `NEXT_PUBLIC_SUPABASE_URL` + `NEXT_PUBLIC_SUPABASE_ANON_KEY` - `lib/supabase.ts` client - Types updaten (`Poll`, `Option`) - `data.ts` herschrijven met Supabase queries (`select`, `eq`, `single`) - Homepage async maken - `PollItem`, `VoteForm`, detailpagina aanpassen - Testen op localhost — data overleeft restart ### Vragen + Huiswerk (15 min) **Huiswerk:** /create pagina bouwen (formulier → INSERT in Supabase) — voor de meeste studenten te zwaar gebleken, daarom in Les 8 herhaald. --- ## Kernconcepten - Server Component vs Client Component patroon - Database-as-a-service (Supabase = Postgres + Auth + REST + Realtime) - Tabellen, kolommen, primary keys, foreign keys, CASCADE - Row Level Security (RLS) basics - Environment variables in Next.js (`NEXT_PUBLIC_` prefix) - Supabase JavaScript client: `from`, `select`, `eq`, `single` --- ## Tools - Next.js 15 - Supabase (Table Editor, SQL Editor) - Cursor / VS Code - TypeScript - `@supabase/supabase-js` --- ## Lesopdracht Volg de docent klassikaal mee door Deel 1 → 3. Aan het eind draait je QuickPoll app met data uit Supabase. ## Huiswerk - /create pagina afmaken (formulier dat een nieuwe poll insert) - Validatie toevoegen - Eventueel: extra SQL queries proberen --- ## Lesmateriaal - `Les07-Slide-Overzicht.md` - `Les07-Docenttekst.md` - `Les07-Live-Coding-Guide.md` - `Les07-Lesopdracht.pdf` - `Les07-Slides.pptx` --- ## Leerdoelen Na deze les kan de student: - Uitleggen wat Supabase is en wanneer je het inzet - Een Supabase project aanmaken via de GUI - Tabellen met relaties (foreign keys) aanmaken in de Table Editor - RLS policies opzetten voor publieke read access - De Supabase JavaScript client installeren en configureren - Environment variables gebruiken voor API keys - Data ophalen met `select`, `eq` en relaties (`options(*)`) - Het Server Component + Client Component patroon toepassen --- ## Lessons Learned (voor v2) - 3 hoofddelen in 1 les is te ambitieus voor het tempo van deze klas - /create pagina als huiswerk werkt niet — studenten hebben begeleiding nodig bij hun eerste INSERT - Splits Supabase introductie en concrete code-koppeling over twee lessen → **Les 8 voegt dit toe**