Hoe ik een contentkwaliteitsladder met drie niveaus heb gebouwd
Het schalen van programmatische websites is lastig. Als je alleen op AI vertrouwt om je content te schrijven, gaat je site kapot zodra de API uitvalt.
Ik heb drie directory-sites gelanceerd: Top AI Tools, Find Games Like en Open Alternative To. Ik gebruik een contentkwaliteitsladder met drie niveaus om ervoor te zorgen dat ze altijd informatie tonen, zelfs zonder een actieve AI-verbinding.
Het systeem gebruikt een enkele kolom in de database genaamd model_used. Deze houdt drie kwaliteitsniveaus bij:
- seeded-from-json: Basisgegevens uit een bestand. Het is gestructureerd maar beperkt.
- fallback-template: Een standaardtemplate dat wordt gebruikt als de AI faalt of de API-sleutel ontbreekt. Het is technisch correct, maar mist persoonlijkheid.
- claude-haiku-4-5: De gewenste staat. Dit zorgt voor hoogwaardige redactionele samenvattingen en genuanceerde details.
Ik gebruik een specifieke SQL-query om upgrades te beheren. Het script zoekt naar twee zaken:
- Nieuwe vermeldingen die nog geen content hebben.
- Bestaande vermeldingen die alleen content van lage kwaliteit hebben (seeded of fallback).
Het script sorteert deze op populariteit. Het upgrade eerst de meest bezochte pagina's. Dit zorgt ervoor dat je pagina's met het meeste verkeer direct de beste content krijgen.
Het proces is volledig geautomatiseerd en idempotent. Ik gebruik een upsert-patroon. Als een upgrade slaagt, overschrijft de database de oude fallback-content met de nieuwe AI-content. De kolom model_used wordt automatisch bijgewerkt.
Ik gebruik ook Anthropic prompt caching. Dit bespaart veel geld en tokens. Omdat mijn system prompts voor elke vermelding hetzelfde zijn, bereidt de eerste aanroep de cache voor. De volgende 99 aanroepen in een batch lezen uit die cache tegen lagere kosten.
Belangrijke architecturale keuzes:
- Foutafhandeling: Als Claude faalt, crasht het systeem niet. Het schrijft simpelweg het fallback-template en gaat door naar het volgende item.
- SEO-veiligheid: Als een pagina helemaal geen nuttige content heeft, gebruik ik een noindex-tag. Dit voorkomt dat Google lege pagina's indexeert.
- Statische builds: Ik exporteer de database naar JSON-bestanden voor Astro. Dit betekent dat mijn site online blijft, zelfs als de database of de AI-API een storing heeft.
Deze opzet stelt me in staat om snel te bouwen zonder de stabiliteit van de site in gevaar te brengen.
