Les 4 van 8

Bouw je eerste persoonlijke AI-uitleg

Je koppelt voor het eerst echte AI-modellen aan een onderwijsapp. Het onderwerp staat vast, maar de leerling vult een hobby in. Eén klik levert twee AI-uitleggen op, zodat je inhoud, wachttijd en kosten kunt vergelijken.

Het eindresultaat

De leerstof blijft gelijk, de uitleg sluit aan op de hobby

De app toont altijd dezelfde basisuitleg over vraag en aanbod. De leerling vult één hobby in. Twee modellen krijgen exact dezelfde opdracht en maken ieder een eigen uitleg met een herkenbaar voorbeeld.

Interactieve schets
Vast onderwerp

Vraag en aanbod

Vul een hobby in en bekijk hoe hetzelfde begrip op een andere manier kan worden uitgelegd.

Gebruik alleen een hobby. Vul geen naam of andere persoonlijke gegevens in.

Standaarduitleg

Voor iedere leerling hetzelfde

Vraag is hoeveel mensen iets willen kopen. Aanbod is hoeveel ervan te koop is. Als veel mensen iets willen en er weinig van is, stijgt de prijs vaak. Bij veel aanbod en weinig vraag daalt de prijs vaak.

Model A
Hier verschijnt antwoord A

Vul eerst een hobby in.

Model B
Hier verschijnt antwoord B

Vul eerst een hobby in.

Deze schets gebruikt vaste voorbeeldtekst. In jouw eigen project laat je OpenRouter beide AI-uitleggen tegelijk maken en meet je de echte wachttijd in de app. Deze schets gebruikt geen credits en doet daarom geen snelheidsmeting na.

Onder de motorkap

De API-sleutel blijft op de server

De browser hoeft alleen de hobby te kennen. Jouw server voegt de geheime sleutel en dezelfde vaste uitlegopdracht toe voordat OpenRouter beide modellen tegelijk aanroept.

  1. 1

    De leerling vult een hobby in

    De browser verstuurt alleen de hobby naar jouw eigen serverroute.

  2. 2

    De server leest de sleutel

    De API-sleutel blijft in .env.local en komt niet in de browser terecht.

  3. 3

    OpenRouter roept twee modellen aan

    Dezelfde opdracht gaat tegelijk naar model A en model B.

  4. 4

    De app toont drie uitleggen

    De standaarduitleg en beide AI-antwoorden blijven naast elkaar staan.

BrowserJouw serverrouteOpenRouterVergelijking in de app

Eenmalig instellen

Maak een sleutel voor dit experiment

Geef de sleutel een herkenbare naam en stel een lage bestedingslimiet in. Je kunt deze sleutel later verwijderen zonder andere projecten te raken.

Open je OpenRouter-sleutels
NaamVibe Coden Expert les 4
Credit limitLaag, bijvoorbeeld $ 1
Na aanmakenKopieer de sleutel direct

Deel de sleutel niet. Zet hem niet in een screenshot of chatbericht. Heb je hem toch gedeeld? Verwijder de sleutel in OpenRouter en maak een nieuwe.

In je project

Zet alleen je API-sleutel in .env.local

Kopieer je geheime OpenRouter-sleutel zelf naar dit lokale bestand. Deel de sleutel niet met je vibe-code tool en zet hem nooit rechtstreeks in je prompt.

Modelcodes zijn niet geheim. Die kies je hieronder en zet je rechtstreeks in de bouwprompt. Ze horen dus niet in.env.local.

.env.local
OPENROUTER_API_KEY=plak_hier_jouw_eigen_sleutel

Kies twee modellen voor de bouwprompt

Open de actuele OpenRouter-catalogus, open een model en kopieer de volledige officiële modelcode. Iedere klik in je app gebruikt beide modellen en kost daarom twee aanvragen.

Kopieer de volledige codes uit de actuele OpenRouter-catalogus.

1

Controleer .gitignore

.env.local mag niet naar GitHub worden gestuurd.

2

Herstart je server

Stop en start je lokale server nadat je de API-sleutel hebt toegevoegd.

Bouwen

Laat je vibe-code tool de vergelijkingsapp bouwen

Kies hierboven eerst je twee modelcodes. Kopieer daarna de volledige prompt naar je vibe-code tool. De modelcodes staan in de prompt; alleen je geheime API-sleutel blijft in .env.local.

We gaan in dit bestaande Next.js-project een kleine onderwijsapp met AI-integratie bouwen. Installeer geen nieuwe dependency als dat niet nodig is.

DOEL
De app legt het vaste onderwerp "vraag en aanbod" uit. De leerling vult alleen een hobby in. Na één klik maken twee verschillende AI-modellen via OpenRouter ieder een korte uitleg met een voorbeeld uit die hobby. De leerling vergelijkt de inhoud en de wachttijd.

GEBRUIK DEZE TWEE MODELLEN
- Model A: plak_hier_modelcode_a
- Model B: plak_hier_modelcode_b
- Gebruik deze twee volledige modelcodes rechtstreeks in de servercode voor de twee OpenRouter-aanvragen.
- Zet de modelcodes niet in .env.local. Alleen de geheime API-sleutel hoort daar te staan.

INTERFACE
- Toon bovenaan het vaste onderwerp: Vraag en aanbod.
- Toon altijd deze standaarduitleg:
  "Vraag is hoeveel mensen iets willen kopen. Aanbod is hoeveel ervan te koop is. Als veel mensen iets willen en er weinig van is, stijgt de prijs vaak. Bij veel aanbod en weinig vraag daalt de prijs vaak."
- Voeg een tekstveld toe met het label "Welke hobby past bij jou?" en de placeholder "bijv. vibe coden".
- Voeg één knop toe met de tekst "Maak twee uitleggen".
- Toon tijdens het wachten bij beide modellen een eigen laadstatus en schakel de knop tijdelijk uit.
- Toon naast de standaarduitleg twee antwoordkaarten: Model A en Model B. Zet op iedere kaart de gebruikte modelcode en de gemeten wachttijd in milliseconden.
- Noem dit "Wachttijd in deze app". Leg in kleine tekst uit dat deze tijd ook netwerk en provider bevat en dus geen zuivere snelheidstest van alleen het model is.
- Zet bij ieder AI-antwoord: "Gemaakt met AI. Controleer de uitleg."
- Laat de standaarduitleg staan als één of beide AI-aanvragen mislukken. Toon de fout per model, zodat een geslaagd antwoord wel zichtbaar blijft.

VEILIGE SERVERKOPPELING
- Maak een POST-route op /api/uitleg.
- Lees uitsluitend OPENROUTER_API_KEY op de server uit process.env.
- Stuur de API-sleutel nooit naar de browser, zet hem niet in een NEXT_PUBLIC-variabele en log hem nergens.
- Laat de browser alleen de hobby naar /api/uitleg sturen.
- Controleer op de server dat de hobby na trimmen tussen 2 en 60 tekens bevat.
- Stuur beide aanvragen met fetch naar https://openrouter.ai/api/v1/chat/completions.
- Geef beide modellen exact dezelfde opdracht: leg vraag en aanbod in maximaal vier korte zinnen uit aan een vijftienjarige, gebruik één concreet voorbeeld dat past bij de hobby en verzin geen feiten over de leerling.
- Beperk ieder antwoord tot ongeveer 180 tokens.
- Start beide modelaanvragen tegelijk. Maak voor ieder model een aparte async functie, noteer Date.now() direct voor en na de fetch en voer de twee functies parallel uit met Promise.allSettled.
- Geef per model als JSON terug: model, uitleg of fout, en durationMs. Geef nooit de API-sleutel terug.
- Eén klik veroorzaakt dus twee betaalde OpenRouter-aanvragen.

PRIVACY EN TESTEN
- Zet onder het invoerveld: "Gebruik alleen een hobby. Vul geen naam of andere persoonlijke gegevens in."
- Voeg geen database, accounts of opslag toe.
- Controleer dat de app bruikbare foutmeldingen toont als de sleutel ontbreekt, een modelcode fout is of één model niet reageert.
- Test dat beide aanvragen parallel starten en dat één mislukte aanvraag het andere antwoord niet verwijdert.

Voer daarna de bestaande lint- en buildcontrole van het project uit. Leg kort uit welke bestanden je hebt aangepast, waar ik alleen OPENROUTER_API_KEY in .env.local moet invullen en in welk serverbestand de twee modelcodes staan.

Echt proberen

Vergelijk twee modellen met één hobby

Met één klik verstuur je dezelfde opdracht tegelijk naar beide modellen. Je ziet twee antwoorden en twee wachttijden. OpenRouter registreert ook twee betaalde aanvragen.

  1. 1

    Gebruik één hobby

    Vul bijvoorbeeld vibe coden in en maak beide uitleggen.

  2. 2

    Vergelijk antwoord en tijd

    Bekijk hoe de inhoud verschilt en welk antwoord eerder klaar was.

  3. 3

    Open daarna Activity

    Zoek de twee aanvragen en vergelijk wat ieder model heeft gekost.

OpenRouter ActivityVind je de twee aanvragen van dezelfde klik?

Vergelijk de modelcode en kosten. De wachttijd meet je in de app; Activity gebruik je voor de echte kostenregistratie.

Open Activity
401

Controleer de API-sleutel en herstart de server.

402

Controleer je OpenRouter-tegoed en de limiet van de sleutel.

Geen antwoord

Lees de foutmelding van je serverroute en controleer de modelcode.

Nu doen

Actie van deze les

Laat twee modellen dezelfde uitleg maken

Rond alleen deze twee controles af. Eén goede vergelijking is genoeg voor deze les.

0van 2 stappen gedaan

Checklist

0 van 2 gedaan

Bezig
Mijn API-sleutel staat alleen in .env.local en één klik toont twee AI-antwoorden met hun wachttijd.
Ik heb de twee aanvragen teruggevonden en de kosten vergeleken in OpenRouter Activity.
Klaar als:

Je hebt dezelfde onderwijsopdracht eerlijk vergeleken. Je zag live verschil in antwoord en wachttijd en vond de echte kosten terug in Activity.

Vragen en opmerkingen

Praat verder over deze les

Stel een vraag, lees mee of help een andere cursist op weg.

0 vragenAlles is beantwoord
Vragen laden...

Voortgang bewaren

Markeer deze les als afgerond

Zo weet je straks precies waar je bent gebleven.

Volgende stap

Je eerste AI-integratie werkt

In les 5 zet je deze AI-integratie veilig online. Je koppelt het project aan GitHub en Vercel en controleert of de API-sleutel alleen op de server beschikbaar is.

Ga naar les 5: veilig deployen