Eighty
← Blog

Claude Code en OpenAI's IPO-filing: wat betekent de AI-race voor jouw SaaS-kosten?

9 juni 2026/4 min lezen/Door de Eighty redactie

OpenAI gaat naar de beurs, en jij betaalt de rekening

Wat is er gebeurd?

OpenAI heeft afgelopen maandag confidentieel een S-1 IPO-aanvraag ingediend, exact zoals Anthropic dat een week eerder deed. Twee AI-giganten die tegelijk naar de beurs gaan betekent één ding: aandeelhouders willen rendement, en dat zet druk op de prijzen van de APIs waar jij en ik op bouwen. Geen paniek, maar wel het moment om je eigen kostenplaatje scherp te krijgen.

Wat betekent dit voor jouw project?

Als jouw SaaS gebruikmaakt van AI-calls (via OpenAI, Anthropic of allebei), dan wil je nu weten hoeveel je per gebruiker per maand uitgeeft aan tokens. Niet als spreadsheet-oefening, maar als levend dashboard in je eigen app. Zo zie je direct wanneer een feature te duur wordt of wanneer een prijswijziging van een aanbieder je marge raakt. Met Claude Code bouw je dat in een paar prompts.

Hoe pak je het aan met Claude Code?

Stap 1: geef Claude Code context over je huidige setup

Open Claude Code in je project en begin met een beschrijving van hoe je nu AI-calls doet. Hoe specifieker, hoe beter het resultaat.

Ik heb een Next.js SaaS-app waarbij ik API-calls maak naar OpenAI's GPT-4o. Die calls zitten in /lib/ai.ts. Ik wil per API-call bijhouden hoeveel input- en output-tokens er gebruikt worden, en dat opslaan in mijn Supabase-database. Maak een wrapper-functie die dit automatisch doet.

Claude Code schrijft dan iets als:

// lib/ai-tracked.ts
import OpenAI from 'openai';
import { createClient } from '@/lib/supabase';

const openai = new OpenAI();

export async function trackedCompletion(
  messages: OpenAI.ChatCompletionMessageParam[],
  userId: string,
  featureName: string
) {
  const response = await openai.chat.completions.create({
    model: 'gpt-4o',
    messages,
  });

  const usage = response.usage;

  if (usage) {
    const supabase = createClient();
    await supabase.from('ai_usage_log').insert({
      user_id: userId,
      feature: featureName,
      input_tokens: usage.prompt_tokens,
      output_tokens: usage.completion_tokens,
      model: 'gpt-4o',
      created_at: new Date().toISOString(),
    });
  }

  return response;
}

Stap 2: laat Claude Code de database-tabel aanmaken

Maak een Supabase SQL-migratie aan voor de tabel ai_usage_log die past bij de wrapper uit stap 1. Voeg ook een berekende kolom toe voor de kosten in euro's, waarbij input-tokens $2,50 per miljoen kosten en output-tokens $10 per miljoen (GPT-4o tarieven).

Je krijgt dan een migratie-bestand:

-- supabase/migrations/20260609_ai_usage_log.sql
CREATE TABLE ai_usage_log (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
  feature TEXT NOT NULL,
  model TEXT NOT NULL,
  input_tokens INTEGER NOT NULL DEFAULT 0,
  output_tokens INTEGER NOT NULL DEFAULT 0,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Berekende view voor kosten per call
CREATE VIEW ai_usage_with_cost AS
SELECT
  *,
  ROUND(
    (input_tokens::NUMERIC / 1000000 * 2.50) +
    (output_tokens::NUMERIC / 1000000 * 10.00),
    6
  ) AS cost_usd
FROM ai_usage_log;

-- Index voor snelle queries per gebruiker
CREATE INDEX idx_ai_usage_user_id ON ai_usage_log(user_id, created_at DESC);

Stap 3: bouw een simpel kostenoverzicht in je dashboard

Maak een React component AiCostWidget die de totale AI-kosten van de ingelogde gebruiker voor de huidige maand ophaalt uit de ai_usage_with_cost view en toont als een klein kaartje. Gebruik de Supabase client die al in het project zit.

// components/AiCostWidget.tsx
'use client';

import { useEffect, useState } from 'react';
import { createClient } from '@/lib/supabase';

export function AiCostWidget({ userId }: { userId: string }) {
  const [cost, setCost] = useState<number | null>(null);
  const supabase = createClient();

  useEffect(() => {
    const fetchCost = async () => {
      const startOfMonth = new Date();
      startOfMonth.setDate(1);
      startOfMonth.setHours(0, 0, 0, 0);

      const { data } = await supabase
        .from('ai_usage_with_cost')
        .select('cost_usd')
        .eq('user_id', userId)
        .gte('created_at', startOfMonth.toISOString());

      if (data) {
        const total = data.reduce((sum, row) => sum + (row.cost_usd ?? 0), 0);
        setCost(total);
      }
    };

    fetchCost();
  }, [userId]);

  return (
    <div className="rounded-xl border p-4">
      <p className="text-sm text-muted-foreground">AI-kosten deze maand</p>
      <p className="text-2xl font-bold">
        {cost === null ? '...' : `$${cost.toFixed(4)}`}
      </p>
    </div>
  );
}

Stap 4: vervang je bestaande AI-calls

Zoek alle plekken in dit project waar ik openai.chat.completions.create aanroep en vervang die door de trackedCompletion wrapper uit /lib/ai-tracked.ts. Geef elke call een logische featureName mee zoals 'summarize', 'generate-email' of 'chat'.

Claude Code zoekt automatisch door je codebase en doet de vervangingen. Check daarna de diff goed - je wilt niet per ongeluk calls missen.

Wat te checken na afloop

  • Stuur een test-request naar een van je AI-features en kijk of er een rij verschijnt in de ai_usage_log tabel in Supabase Studio.
  • Ga naar de ai_usage_with_cost view en check of de cost_usd kolom een logisch getal toont (een korte call van 500 tokens totaal zou rond de $0,000025 moeten uitkomen).
  • Voeg de AiCostWidget toe aan je dashboard en kijk of die na de test-call een bedrag toont.
  • Als je meerdere modellen gebruikt: pas de kostberekening aan per model in de view, of voeg een CASE-statement toe op basis van de model-kolom.

Dit kost je vanavond een uur. En als de tarieven volgend kwartaal omhooggaan omdat Anthropic of OpenAI hun aandeelhouders moet tevreden stellen, heb jij als eerste door wat dat voor jouw marge betekent.


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.