Eighty
← Blog

Privacy als selling point: bouw een auto-delete sessie in je SaaS met Claude Code

18 mei 2026/4 min lezen/Door de Eighty redactie

Apple gooit privacy in de strijd als wapen tegen OpenAI en Google. Niet met betere AI, maar met de belofte dat jouw gesprekken zichzelf verwijderen. Slim. En als je een SaaS bouwt waarbij gebruikers iets intikken, is dit ook voor jou een concrete feature die vertrouwen opbouwt. Vandaag bouw je dat met Claude Code.

Wat is er gebeurd?

Apple bereidt een grote Siri-update voor waarbij chats automatisch worden verwijderd na een sessie. Dat meldt Bloomberg via The Verge. De gedachte: als jij als gebruiker weet dat je gesprek niet ergens blijft hangen, vertrouw je het product meer. Apple hoopt daarmee een achterstand op AI-concurrenten te compenseren met een privacyvoordeel.

Dit is geen niche-feature meer. Het wordt een verwachting.

Wat betekent dit voor jouw project?

Als jouw SaaS ook maar iets opslaat wat op gebruikersinput lijkt, zoals een chat, een notitie, een zoekopdracht of een formulier, dan is een auto-delete optie een snelle manier om vertrouwen te winnen. Zeker als je doelgroep in sectoren zit met privacybewuste klanten, denk aan HR, coaching, finance of zorg.

Dit is ook gewoon technisch gezond: data die je niet nodig hebt, bewaar je niet. Minder rommel in je database, minder risico.

Hoe pak je het aan met Claude Code?

We bouwen een auto-delete mechanisme voor een chat- of sessie-tabel in Supabase. De aanpak werkt in drie stappen: tabel aanpassen, een cleanup-functie bouwen en die functie automatisch laten draaien.

Stap 1: voeg een expires_at kolom toe aan je tabel

Open Claude Code in je project en geef deze prompt:

Voeg een migratie toe voor Supabase die een expires_at kolom toevoegt (type timestamptz, nullable) aan mijn sessions tabel. Maak ook een index op die kolom zodat queries snel zijn.

Claude Code genereert zoiets:

-- supabase/migrations/20260518_add_expires_at_to_sessions.sql

ALTER TABLE sessions
  ADD COLUMN expires_at TIMESTAMPTZ;

CREATE INDEX idx_sessions_expires_at
  ON sessions (expires_at)
  WHERE expires_at IS NOT NULL;

Run de migratie via supabase db push of direct in het Supabase dashboard.

Stap 2: zet de vervaldatum bij het aanmaken van een sessie

Nu wil je dat nieuwe sessies standaard een vervaldatum krijgen, zeg 30 dagen. Prompt:

In mijn createSession functie in lib/sessions.ts, voeg automatisch een expires_at toe die 30 dagen in de toekomst ligt. Gebruik de bestaande Supabase client die al in het bestand staat.

Resultaat ziet er ongeveer zo uit:

// lib/sessions.ts
export async function createSession(userId: string) {
  const expiresAt = new Date();
  expiresAt.setDate(expiresAt.getDate() + 30);

  const { data, error } = await supabase
    .from('sessions')
    .insert({
      user_id: userId,
      expires_at: expiresAt.toISOString(),
    })
    .select()
    .single();

  if (error) throw error;
  return data;
}

Stap 3: bouw de automatische cleanup

Hier wordt het interessant. Je kunt Supabase Edge Functions of een cron-job gebruiken om verlopen sessies te verwijderen. Prompt:

Maak een Supabase Edge Function genaamd cleanup-expired-sessions die alle rijen uit de sessions tabel verwijdert waarbij expires_at in het verleden ligt. Voeg ook de benodigde supabase/functions/cleanup-expired-sessions/index.ts toe.

Claude Code schrijft dan iets als:

// supabase/functions/cleanup-expired-sessions/index.ts
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2';

Deno.serve(async () => {
  const supabase = createClient(
    Deno.env.get('SUPABASE_URL')!,
    Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!,
  );

  const { error, count } = await supabase
    .from('sessions')
    .delete({ count: 'exact' })
    .lt('expires_at', new Date().toISOString());

  if (error) {
    return new Response(JSON.stringify({ error: error.message }), { status: 500 });
  }

  return new Response(JSON.stringify({ deleted: count }), { status: 200 });
});

Deploy de functie met:

supabase functions deploy cleanup-expired-sessions

En stel een dagelijkse cron in via het Supabase dashboard onder Edge Functions - Schedules, met de waarde 0 3 * * * (elke nacht om 03:00).

Bonus: laat gebruikers het zelf instellen

Wil je het echt als feature communiceren? Prompt:

Voeg een instelling toe in mijn gebruikersinstellingen-pagina waarmee de gebruiker kan kiezen na hoeveel dagen hun sessies worden verwijderd: 7, 30 of 90 dagen, of nooit. Sla dit op in de profiles tabel als session_retention_days (integer, nullable). Gebruik de bestaande Shadcn Select component.

Wat te checken na afloop

  • Maak een testsessie aan en kijk in Supabase of expires_at 30 dagen vooruit staat.
  • Verander de datum handmatig naar gisteren en roep de cleanup-functie aan via het Supabase dashboard (Edge Functions - Run). Kijk of de rij verdwijnt.
  • Controleer of je andere queries nergens actief de verlopen sessies mee ophalen. Voeg zo nodig .gt('expires_at', new Date().toISOString()) toe als filter, of bouw een Row Level Security policy die verlopen sessies automatisch uitsluit.

Privacy als feature kost je een middagje werk. En het staat goed op je landingspagina.


Wil je dit zelf leren?

Bij Eighty leer ik je Claude Code in het Nederlands gebruiken, van installatie tot een werkend SaaS-product. Wekelijks een nieuwe module, persoonlijke begeleiding.