# Les 8 — Slide Overzicht
## Supabase Auth: Inloggen & Registreren

---

## Slide 1: Titelslide
**Layout:** Split (cream links, blauw rechts) — Keynote stijl
- NOVI Hogeschool logo
- "AI leerlijn"
- **Next.js**
- **Les 8**

---

## Slide 2: Terugblik vorige les
**Layout:** Cream + blauw blob rechts
- **Titel:** Terugblik vorige les
- Links: Wat we gebouwd hebben
  - Stemmen werkend gemaakt
  - Supabase account + project aangemaakt
  - Polls + options tabellen
  - Foreign keys & CASCADE
  - RLS policies (SELECT/UPDATE voor anon)
  - Testdata via Table Editor
- Rechts: Wat nog mist
  - Supabase niet gekoppeld aan Next.js
  - Geen login/registratie

---

## Slide 3: Planning
**Layout:** Gele achtergrond + decoratieve blobs
- **Titel:** Planning
- Deel 1: Live Coding Supabase koppelen — 65 min
  - Client setup, environment variables
  - Data layer herschrijven
  - Components aanpassen
  - Data persisten testen
- Pauze — 15 min
- Deel 2: Uitleg + Zelf Doen — 60 min
  - 30 min: Uitleg Auth functies
  - 30 min: Zelf /create pagina bouwen
- Afsluiting — 30 min

---

## Slide 4: Van Array naar Database
**Layout:** Cream + blauw blob rechts
- **Titel:** Van Array naar Database
- Links: code block met de oude in-memory code
  ```
  let polls: Poll[] = [
    { id: "1", question: "...", ... }
  ];
  ```
- Rechts: Supabase query
  ```
  const { data } = await supabase
    .from("polls")
    .select("*, options(*)");
  ```
- Pijl van links naar rechts: "Zelfde functies, andere data source"

---

## Slide 5: Live Coding Deel 1
**Layout:** Blauw volledig + cream blob links
- **Titel:** Live Coding
- **Subtitel:** Deel 1: Supabase × Next.js
- Stappen:
  - @supabase/supabase-js installeren
  - .env.local configureren
  - Supabase client maken
  - TypeScript types definiëren
  - data.ts herschrijven
  - Components aanpassen
  - Testen: data moet bewaard blijven

---

## Slide 6: Het Patroon
**Layout:** Cream + blauw blob rechts
- **Titel:** Het Patroon
- Server Component:
  ```
  async function PollList() {
    const { data } = await supabase.from("polls").select("*");
    return <div>{/* renderen */}</div>;
  }
  ```
- Client Component:
  ```
  export default function VoteButton() {
    const [loading, setLoading] = useState(false);
    // interactie, fetch naar API
  }
  ```
- Uitleg: "Dit patroon verandert NIET — alleen de data source"

---

## Slide 7: Pauze
**Layout:** Cream + grote blauwe cirkel
- **Titel:** Pauze
- **Subtitel:** 15 minuten
- "Supabase is gekoppeld! Na de pauze: Authentication"

---

## Slide 8: Wat is Auth?
**Layout:** Cream + blauw blob rechts
- **Titel:** Wat is Auth?
- Authenticatie = wie ben je? (login, registratie)
- Autorisatie = wat mag je? (RLS policies, protected routes)
- Supabase Auth biedt:
  - Email/password
  - OAuth (Google, GitHub)
  - Magic links
  - Session management

---

## Slide 9: Auth Functies
**Layout:** Cream + blauw blob rechts
- **Titel:** Auth Functies
- Code examples:
  ```
  // Sign Up
  await supabase.auth.signUp({ email, password });

  // Sign In
  await supabase.auth.signInWithPassword({ email, password });

  // Sign Out
  await supabase.auth.signOut();

  // Get User
  const { data } = await supabase.auth.getUser();
  ```

---

## Slide 10: Zelf Doen
**Layout:** Blauw volledig + cream blob links
- **Titel:** Zelf Doen
- **Subtitel:** Bouw Auth in je project
- Stappen:
  - @supabase/ssr package installeren
  - Auth helpers configureren
  - Sign-up & login pagina's
  - Middleware voor sessies
  - /create pagina bouwen

---

## Slide 11: Huiswerk
**Layout:** Cream + blauw blob rechts
- **Titel:** Huiswerk
- Opdracht: /create pagina bouwen
  1. Alleen ingelogde users kunnen polls maken
  2. Poll wordt gekoppeld aan user.id
  3. Test: zet je eigen polls online
- Extra:
  - Google OAuth integreren
  - Profiel pagina maken
  - Dark mode

---

## Slide 12: Afsluiting
**Layout:** Blauw volledig + cream/roze/zwart blobs links
- **Titel:** Tot volgende week!
- Volgende les: Deployment + meer features
- "Je hebt nu een echte app met login, database en auth!"
