1. Het probleem: aankondigingen zijn het minst gelezen berichttype op Discord
Elke communitybeheerder kent het patroon. Je schrijft een zorgvuldige aankondiging, pint deze vast, pingt iedereen, en binnen een uur is het begraven onder memes en twee discussies. Discord is een real-time stroom zonder redactionele laag. Een lid dat op dinsdag incheckte, zal nooit zien wat je op maandag hebt gepost.
Een wekelijkse samenvatting vervangt die gok met een ander contract. In plaats van meer berichten in de stroom te duwen, haalt het de week uit de stroom en publiceert het opnieuw als één gestructureerd, scanbaar document. De samenvatting wordt gegenereerd uit gesprekken van leden, niet uit aankondigingen van beheerders. Dat onderscheid zorgt ervoor dat het niet aanvoelt als marketing.
2. De pijplijn: samplen, clusteren, schrijven, publiceren
De Sovereign samenvattings-taak wordt elke maandag om 09:00 UTC uitgevoerd. Het samplet de berichten van de afgelopen 7 dagen (maximaal 100, waarbij alleen echte inhoud langer dan 3 tekens wordt behouden), bepaalt de doeltaal vanuit een prioriteitsketen — dashboardtaal, vervolgens tenantinstellingen, dan de voorkeurslocale van de Discord guild, dan een fallback — en overhandigt het sample aan de LLM onder een strikt promptcontract.
Dat contract is de kwaliteitscontrole. De prompt verbiedt zakelijke opvulling, beperkt de uitvoer tot 15–20 regels en dwingt een vaste structuur van drie blokken af: belangrijkste hoogtepunten (3–4 feitelijke opsommingen), successen en statistieken (2 korte punten), en twee prioriteiten voor de komende week. Het model krijgt de instructie om elke regel te baseren op de echte berichten in het sample. Het verzint geen benchmarks.
De gepubliceerde samenvatting wordt opgeslagen met de weekgrenzen, samenvatting en toponderwerpen, zodat dezelfde inhoud opnieuw kan worden afgespeeld als een nieuwsbrief-e-mail, een forumthread of een vastgezet kanaalbericht.
// Language resolution: dashboard UI > tenant settings > guild locale > fallback
const LANG_PRIORITY = [targetLang, settings.language, guildLocale, 'fr'];
const effectiveLang = LANG_PRIORITY.find(Boolean);
// 7-day sampling window, max 100 messages, real content only
const weekStart = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
const sample = await prisma.unifiedMessage.findMany({
where: { member: { tenantId }, createdAt: { gte: weekStart } },
orderBy: { createdAt: 'asc' },
take: 100
});
// Prompt contract enforced on the LLM:
// 1. Key highlights: 3-4 factual bullets taken from real messages
// 2. Wins & metrics: 2 short points
// 3. Focus for the week: 2 priorities
// Hard cap: 15-20 lines. Corporate filler: forbidden.3. Publicatie: de Founder webhook, geen botbericht
Sovereign publiceert de samenvatting via een kanaal webhook, gekleed met het merkprofiel van de community — naam en avatar van de oprichter of het bedrijf, nooit de botgebruikersnaam. Leden lezen het als een menselijke stem, wat zowel de betrokkenheid als het vertrouwen verandert.
Discord beperkt berichten tot 2.000 tekens, dus de pijplijn verdeelt de samenvatting in stukken van 1.900 tekens en plaatst de stukken achter elkaar. Als er geen webhook beschikbaar is, valt de bot terug op een normaal bericht. Eén mechanisme, twee paden, geen gedupliceerde logica.
De samenvattings-prompt verbiedt expliciet zakelijke opvulling en generieke marketing. Als de week geen echte hoogtepunten opleverde, zegt de samenvatting dat ook. Een eerlijke, magere week verdient meer vertrouwen dan een verzonnen indrukwekkende week.