Files
novi-lessons/Les08-Van-InMemory-naar-Supabase/Les08-Huiswerk.md
2026-06-07 10:44:05 +02:00

2.4 KiB

Les 8 — Huiswerk

QuickPoll polish + bonus features

Deadline: Voor Les 9 Inleveren: GitHub repo via Teams


Opdracht 1 — Deploy naar Vercel

Push je app naar GitHub (als nog niet), dan:

  1. vercel.com → Add New Project → import jouw repo
  2. Add env vars: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY
  3. Deploy

Test op productie URL — moet werken.

Noteer in DEPLOY.md: productie URL.


Opdracht 2 — Voeg validatie toe

Server actions valideren nu te min. Voeg toe:

  • Min 3, max 100 karakters voor poll-titel
  • Min 2, max 10 opties
  • Toon validation errors inline (geen throw)
  • Form blijft ingevuld bij error

Hint: return error-object uit server action, gebruik useActionState in form.


Opdracht 3 — Optimistic UI

Voeg useOptimistic toe aan VoteForm voor instant vote-feedback:

const [optimisticOptions, addOptimisticVote] = useOptimistic(
  poll.options,
  (state, optionId) => state.map(o =>
    o.id === optionId ? { ...o, votes: o.votes + 1 } : o
  )
);

Bij click: roep addOptimisticVote(optionId) aan voor de server call.


Opdracht 4 — TypeScript types

Genereer types vanuit Supabase (uit Les 7 bonus):

pnpm dlx supabase gen types typescript --linked > types/database.ts

Update lib/supabase.ts:

import type { Database } from "@/types/database";
export const supabase = createClient<Database>(...);

Refactor één query om de gegenereerde types te gebruiken (autocomplete moet werken).


Opdracht 5 — Reflectie (250 woorden)

In REFLECTIE.md:

  • Wat voelt natuurlijk aan Server Actions + Supabase combo?
  • Welke RPC functions zou je nog meer willen maken?
  • Wat verbaast je over Supabase t.o.v. eerdere database-ervaringen?
  • Wat is je grootste vraag voor Les 9 (Auth)?

Bonus

  • Realtime updatessupabase.channel(...).on("postgres_changes", ...) voor live vote-updates
  • Delete polls — admin-page met delete button
  • Public link sharing — kopieer-URL knop voor polls

Inleveren

GitHub repo URL + Vercel productie URL via Teams. Werkende app + REFLECTIE.md + DEPLOY.md.


Tips

  • Validation is meestal het vervelendste — werk er gestaag aan
  • Optimistic UI voelt magisch maar is lastig — test edge cases
  • Tijd: ~2-3 uur

Volgende les: Supabase Auth. We laten users inloggen + RLS per user.