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_atkolom toevoegt (typetimestamptz, nullable) aan mijnsessionstabel. 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
createSessionfunctie inlib/sessions.ts, voeg automatisch eenexpires_attoe 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-sessionsdie alle rijen uit desessionstabel verwijdert waarbijexpires_atin het verleden ligt. Voeg ook de benodigdesupabase/functions/cleanup-expired-sessions/index.tstoe.
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
profilestabel alssession_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_at30 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.
Bij Eighty leer ik je Claude Code in het Nederlands gebruiken, van installatie tot een werkend SaaS-product. Wekelijks een nieuwe module, persoonlijke begeleiding.
