Skip to content
CREDITS

Eer wie eer toekomt.

Deze site is één persoon + een stapel gereedschap + een klein gezelschap mensen van wie ik leer. Ik noem ze hier, zodat het netjes op een rij staat.

01 · FRAMEWORKS & TOOLS

Waar het op draait.

  • Next.jsApp router, server components, de hele site rust erop.
  • React
  • TypeScriptStrict mode. Elk rood golfje waard.
  • ViteBeide zusterapps (Snoek & Partners, AI-ftershow) draaien op Vite.
  • Tailwind CSSGebruikt binnen de iframe-games. De hoofdsite draait op plain CSS + tokens.
  • lucide-reactIconen, inclusief die binnen Snoek & Partners.
  • ffmpegDe masteringketen op elke podcastaflevering.
02 · MODELS & APIS

Waar het mee praat.

  • Google GeminiGemini 2.5 Flash drijft de Prompt Scribe-installatie en de chaos-engine in de game aan.
  • Nano Banana (gemini-2.5-flash-image)Beeldgeneratie voor de 9:16-illustraties bij de artikelen en de Win95-portretten in beide games.
  • gemini-3.1-flash-imageFotorealistische podcastcast — de 8 groepscomposities per aflevering en de 6 solo-portretten. Geconditioneerd op fotografische character sheets; vraagt om een 'fictional cast'-instructie, anders blokkeert de safety guard fotorealistische gezichten.
  • Veo 2, Veo 3, Veo 3.1, OmniElke clip in het video-models-artikel. Onderwerp van een eigen stuk.
  • NotebookLMTe zien in het Interactivity-artikel; het audio-overzichtpatroon inspireerde het podcastformat.
  • ElevenLabs (eleven_v3 Text-to-Dialogue)Elke synthetische stem op deze site komt uit ElevenLabs Voice Design + de Text-to-Dialogue API. Zeven terugkerende stemmen: Rutger (een kloon van zijn eigen stem), Frits, Dino, Oracle, Angela, Marie, Saar.
  • WhiskBeeldgeneratie geconditioneerd op referenties. Gebruikt in de Character Sheet-tutorial.
03 · DE SYNTHETISCHE CAST

Wie je hoort in de podcasts.

De terugkerende podcastgasten zijn verzonnen personages — stem, gezicht en persoonlijkheid zijn allemaal gegenereerd. Niemand van hen is een echt persoon. Rutger is de enige echte stem in de show (een kloon van zijn eigen stem), dus hij staat niet in dit lijstje. Je kunt ze ontmoeten op de podcastpagina.

  • Frits — De NestorEen vermoeid, briljant archetype van een Nederlandse creative director. Stem: ElevenLabs Voice Design. Portret: gemini-3.1-flash-image.
  • Dino — De Creatieve DinosaurusEen senior art director die met opzet elke trend heeft overleefd. Stem: ElevenLabs Voice Design. Portret: gemini-3.1-flash-image.
  • Oracle — De StrateegEen merkstrateeg met voor alles een framework. Stem: ElevenLabs Voice Design. Portret: gemini-3.1-flash-image.
  • Angela — De Chief of StaffDe onverstoorbare volwassene die de boel draaiende houdt. Stem: ElevenLabs Voice Design. Portret: gemini-3.1-flash-image.
  • Marie — De MerkautoriteitDé autoriteit op het gebied van merkenbouw (Binet/Field, Ehrenberg-Bass, Ritson, Nelson-Field, BrandZ); beslecht merkdiscussies in één chirurgische zin. Stem: ElevenLabs Voice Design. Portret: gemini-3.1-flash-image.
  • Saar — De ActriceEen beroemde filmactrice die er zo ongeveer niets van volgt — volledig verzonnen, elke gelijkenis met een echte ster berust op toeval. Stem: ElevenLabs Voice Design. Portret: gemini-3.1-flash-image.
04 · PER ASSETKLASSE

Wat je ziet, gerangschikt naar wat het maakte.

Dezelfde verzameling als hierboven, maar nu geordend op output in plaats van op tool. Per assetklasse: het model, de vastgezette prompttemplate in de repo, en het script dat hem aanstuurt. Opnieuw te draaien — richt een verse checkout op dezelfde prompts en dezelfde output komt er weer uit.

  • Hero-portretcyclus (6 fotografisch)
    Waar
    / (homepage-hero), /#media-kit
    Model
    Fotografisch — niet AI-gegenereerd. Studiosessie.

    De site heeft drie visuele registers. Dit is het enige met een echte camera. Overal elders geldt: geprompt, daarna gekozen.

  • Artikelillustraties (12 × 9:16, donker)
    Waar
    /business/multiplier-myth, /business/thirty-minute-kitchen, /business/agent-inclusive (4 per artikel, per fase wisselend van kant)
    Model
    Nano Banana (gemini-2.5-flash-image)
    Prompttemplate
    drop/article-image-prompts.md

    12 kant-en-klare 9:16-prompts, één per artikelfase.

  • Win95-personageportretten (15 — 8 boardroom + 7 agent-game)
    Waar
    /creative/boardroom-game (iframe), /technical/agent-game
    Model
    Nano Banana (gemini-2.5-flash-image)
    Prompttemplate
    scripts/generate-win95-portraits.py · STYLE_PRELUDE
    Script
    scripts/generate-win95-portraits.py

    Microsoft Bob / Encarta '95-register. Karikaturen van echte figuren krijgen de satirische-hernoeming + IMAGE_OTHER-guard-workaround.

  • Podcastcast-portretten (8 groepscomposities + 6 solo, 1:1, fotorealistisch)
    Waar
    /podcasts
    Model
    gemini-3.1-flash-image, geconditioneerd op fotografische 6-hoeks character sheets
    Prompttemplate
    scripts/generate-podcast-portraits.py · STYLE_PRELUDE + COMP_FRAMING_TEMPLATE
    Script
    scripts/generate-podcast-portraits.py

    Donker, redactioneel fotorealistisch register. De 6-hoeks sheets in drop/podcast-character-sheets/ worden bij het renderen als multi-image-referenties meegegeven; --cast rendert de solo-tegels, --comps de groepsscènes (sommige met thematische achtergronden — een keuken, een agent-diagram, een slide-vs-live-scherm).

  • Videoclips (Veo-lijn — 8 in sectie 1 + 5 verspreid over andere secties)
    Waar
    /creative/video-models
    Model
    Veo 2, Veo 3, Veo 3.1 (Fast + Lite), Omni
    Prompttemplate
    drop/Model_Explainer/structured/ (vastgezette prompts per sectie)
    Script
    scripts/render-clip.py

    Vastgezette prompts voor elke vergelijkingsclip — van begin tot eind opnieuw te draaien.

  • Podcastaudio (8 afleveringen — 7 artikelbegeleiders + 1 special)
    Waar
    /podcasts en de PodcastTab bij elk artikel
    Model
    ElevenLabs eleven_v3 Text-to-Dialogue, 6 stemmen
    Prompttemplate
    scripts/podcasts/<slug>/script.md + voices.json
    Script
    scripts/render-podcast.mjs

    Sequentiële dialoog uit de Text-to-Dialogue API. De stem van Marie Furie wordt alleen voor korte tussenwerpsels gebruikt (vastgelegd: nooit als enige gast, nooit een monoloog).

  • Podcast-overlaplaag (backchannels + gelach over de dialoogbasis)
    Waar
    Keuken-aflevering (de rest staat op de roadmap)
    Model
    ffmpeg adelay + amix
    Script
    scripts/overlay-reactions.mjs

    Over de eleven_v3-basis heen gelegd. Les uit de eerste poging: gelach heeft een echte clou nodig, backchannels werken overal natuurlijk — begin met de backchannels.

  • Sitecode (Next.js-app + React server components + TypeScript)
    Waar
    Elke pagina op rutgertuit.nl
    Model
    Claude (Sonnet + Opus 4.6/4.7) via Claude Code

    Sessie na sessie pair-programmen. Het zichtbare vakmanschap zit in de kleine dingen — toegankelijke breadcrumbs, OG-cards per route, de 'height: auto !important'-fix voor next/image, JSON-LD per route. Geprompt, daarna gekozen.

  • Tekst (artikelen, FAQ-antwoorden, bio's, /how-i-think-items)
    Waar
    Overal waar tekst staat
    Model
    Concept met Claude · geredigeerd door Rutger
    Prompttemplate
    docs/brand-voice-guideline.md (de Audience Test + Tuit Post-structuur)

    Elke alinea doorstaat de Audience Test (Nederlandse CMO / bureau-CEO) of valt af. Geen 'AI Thought Leader'-taal. Een disclaimer over persoonlijke meningen geldt op elke pagina.

05 · INFRASTRUCTURE

Waar het woont.

  • Google Cloud RunHost de Next.js-container in europe-west4.
  • Google Cloud BuildPushes naar main triggeren RTNLPUSH; deploy in één stap.
  • Google Secret ManagerBewaart de Gemini API-key, cross-project gekoppeld vanuit rutger-dml.
06 · OPEN-SOURCE REPOS USED

Code waar ik uit putte.

De externe GitHub-repo's waar deze site bovenop is gebouwd. Vooral de voorbeelden in google-gemini/cookbook scheelden uren werk aan de render-scripts.

  • google-gemini/cookbookVoorbeelden als referentie voor de Veo- + Nano Banana-render-scripts. Het poll-en-download-patroon in render-clip.py komt hier rechtstreeks vandaan.
  • googleapis/python-genaiDe Python Gemini SDK die in render-clip.py en de Win95-portretgenerator wordt gebruikt.
  • googleapis/js-genai (@google/genai)JS SDK-conventies voor de /api/gemini-serverroute achter de Prompt Scribe-installatie. Vervangt het inmiddels verouderde google-gemini/generative-ai-js.
  • vercel/next.jsHet framework. Alles van app-router-conventies tot next/image leeft stroomafwaarts van deze repo.
  • vitejs/viteBuild tool voor beide zusterapps (Snoek & Partners, AI-ftershow). De base-URL-truc waardoor de iframe-game onder /boardroom-game/ wordt gevonden, is een Vite-feature.
07 · SIBLING REPOS

Die van mij.

  • github.com/rutgertuit/RTNLDeze site.
  • Snoek & Partners (Boardroom_Game)Zusterrepo. De Nederlandse reclamebureau-roguelite, ingebed via iframe op /creative/boardroom-game.
  • AI-ftershow (DML)Zusterapp. De live Prompt Scribe-installatie is hiervandaan overgezet.
  • rutgertuit/LuminaryVoice-first deep-research-agent. Genoemd in het Interactivity-artikel.
08 · MENSEN VAN WIE IK LEER

Tabbladen die altijd openstaan.

Vier kanalen waar ik steeds op terugkom. Geen van hen heeft hier iets gesponsord; ze bleven gewoon opduiken in mijn feed en in mijn denken.

  • Two Minute PapersWhat a time to be alive — Károly is sinds 2017 mijn weerbericht voor AI-onderzoek.
  • David OndrejScherp over hoe de bouwstack voor agentic AI er week na week echt uitziet.
  • Colin and SamirDe beste doorlopende duiding van de creator-economie en het YouTube-platform.
  • Yaro / yaroflasherMontagevakmanschap + creator-leven van iemand die het werk ook echt doet.
TOT SLOT, DANK

En tot slot — aan iedereen die AI gebruikt om méér te doen, en niet om hetzelfde te doen met minder mensen. Dat is het stuk dat dit de moeite waard maakt.

— Rutger