Stap 1: Voorbereiding — wat heb je nodig?
Voordat je begint heb je drie dingen nodig: een RSS feed van je blog (de meeste WordPress/Ghost/Webflow blogs hebben dit automatisch op /feed of /rss.xml), een Claude API key (via console.anthropic.com), en een Buffer-account voor het plannen van LinkedIn-posts.
Check je RSS feed door je blog-URL plus /feed in te typen in je browser. Je ziet een XML-pagina met je laatste artikelen. Kopieer deze URL — die gebruik je in stap 2.
# Test je RSS feed in terminal
curl -s https://jouwblog.nl/feed | head -50
# Mogelijke RSS-paden:
# https://jouwblog.nl/rss.xml
# https://jouwblog.nl/feed.xml
# https://jouwblog.nl/atom.xml
Stap 2: n8n RSS trigger instellen
Open n8n en maak een nieuw workflow aan. Voeg als eerste node een 'RSS Feed Trigger' toe. Plak je RSS-URL in het veld. Stel de poll interval in op 1 uur — n8n checkt dan elk uur of er nieuwe posts zijn.
Activeer 'Only trigger on new items' zodat bestaande posts niet opnieuw verwerkt worden. n8n slaat intern op welke items al verwerkt zijn op basis van de pubDate en GUID uit de RSS feed.
// RSS trigger configuratie
{
"feedUrl": "https://jouwblog.nl/feed",
"pollTimes": {
"item": [{ "mode": "everyHour" }]
},
"options": {
"returnAll": false,
"limit": 1
}
}
Stap 3: Blog-inhoud extraheren en opschonen
De RSS feed geeft je de titel, samenvatting en URL — maar voor goede LinkedIn-posts heb je de volledige blogtekst nodig. Voeg een 'HTTP Request' node toe die de blog-URL ophaalt en de HTML naar tekst converteert.
Voeg een 'Function' node toe die de HTML-tags verwijdert en de tekst opschoont. Gebruik deze aanpak:
// HTML stripper in n8n Function node
const html = $json.content || $json.description || "";
const text = html
.replace(/<[^>]+>/g, " ") // verwijder HTML tags
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/ /g, " ")
.replace(/\s+/g, " ") // meerdere spaties naar één spatie
.trim()
.substring(0, 4000); // beperk lengte voor Claude
return {
blogTitel: $json.title,
blogUrl: $json.link,
blogTekst: text,
gepubliceerdOp: $json.isoDate
};
Stap 4: Claude LinkedIn-post laten schrijven
Voeg een 'HTTP Request' node toe die Claude's API aanroept. Dit is de eerste content-generatie stap. Claude schrijft een LinkedIn-post met een sterke hook, de kernwaarde van je artikel, en een call-to-action.
const linkedinPrompt = `Je bent een LinkedIn content expert. Schrijf een LinkedIn-post op basis van dit blogartikel.
Titel: ${blogTitel}
URL: ${blogUrl}
Inhoud: ${blogTekst.substring(0, 2000)}
Vereisten:
- Begin met een ijzersterke hook (eerste zin die scrollstopper is)
- Maximaal 1300 tekens (LinkedIn-limiet voor meer tonen)
- Gebruik witte regels voor leesbaarheid
- Eindig met een vraag of CTA
- Voeg 3-5 relevante hashtags toe op de laatste regel
- Schrijf in de jij-vorm, direct en persoonlijk
- Geen emojis in elke zin, max 2-3 strategisch
Geef alleen de post terug, geen uitleg.`;
De output sla je op als linkedinPost in een Set node. Tip: genereer twee varianten door de temperature op 0.9 te zetten en de API twee keer aan te roepen — kies dan de beste variant.
Stap 5: Nieuwsbriefsectie genereren
Maak een tweede HTTP Request node voor Claude, nu voor de nieuwsbriefsectie. Dit formaat is anders dan LinkedIn: wat langer (300 woorden), meer context, en eindigt met een lees-verder link.
const newsletterPrompt = `Schrijf een nieuwsbriefsectie van 300 woorden voor dit artikel.
Titel: ${blogTitel}
Inhoud: ${blogTekst.substring(0, 2000)}
Structuur:
1. Opening: waarom dit ertoe doet voor de lezer (2-3 zinnen)
2. De 3 belangrijkste inzichten in bullet points
3. Praktische tip die ze vandaag kunnen toepassen
4. Afsluiting: Lees het volledige artikel hier: [LINK]
Toon: vriendelijk, direct, waardevol. Geen marketing-taal.
Doelgroep: MKB-ondernemers en marketeers in Nederland.
Geef alleen de tekst terug.`;
Voeg de blog-URL dynamisch in via een Replace node na de Claude-call. Vervang [LINK] door de echte URL uit $json.blogUrl.
Stap 6: Video-script schrijven met Claude
De derde Claude-call genereert een video-script van 2-3 minuten. Perfect voor een korte LinkedIn-video, een YouTube-short, of een Instagram Reel. Het script heeft een vaste structuur: intro (15 sec), drie hoofdpunten (elk 30-40 sec), en een outro (15 sec).
const videoPrompt = `Schrijf een video-script van 2-3 minuten op basis van dit artikel.
Titel: ${blogTitel}
Inhoud: ${blogTekst.substring(0, 1500)}
Structuur:
[INTRO - 15 seconden]
Haak + wat de kijker leert
[PUNT 1 - 40 seconden]
Eerste inzicht met concreet voorbeeld
[PUNT 2 - 40 seconden]
Tweede inzicht met actiebare tip
[PUNT 3 - 40 seconden]
Derde inzicht, het meest verrassende
[OUTRO - 20 seconden]
Samenvatting + CTA (lees artikel of abonneer)
Schrijf spreektaal, niet leestaal. Korte zinnen. Actief.`;
Bewaar het script als tekstbestand via een 'Write Binary File' node, of stuur het naar jezelf via e-mail. Dan kun je het opnemen wanneer het jou uitkomt.
Stap 7: Buffer schedule instellen voor LinkedIn
Voeg een 'HTTP Request' node toe die de LinkedIn-post naar Buffer stuurt via de Buffer API. Buffer plant de post in op het optimale tijdstip — standaard werkdagen tussen 08:00-09:00 of 17:00-18:00.
// Buffer API call
{
"method": "POST",
"url": "https://api.bufferapp.com/1/updates/create.json",
"headers": {
"Authorization": "Bearer {{ $env.BUFFER_ACCESS_TOKEN }}"
},
"body": {
"profile_ids[]": "{{ $env.BUFFER_LINKEDIN_PROFILE_ID }}",
"text": "{{ $json.linkedinPost }}",
"scheduled_at": "{{ $json.scheduledTime }}"
}
}
Tip: plan posts niet direct nadat ze geschreven zijn. Voeg een 'Wait' node toe van 30 minuten zodat je tijd hebt om de post te reviewen in Buffer voor publicatie.
Stap 8: Nieuwsbrief exporteren naar Beehiiv
Dit is een optionele stap voor wie Beehiiv gebruikt als nieuwsbrief-platform. De Beehiiv API laat je automatisch een concept-post aanmaken met de gegenereerde nieuwsbriefsectie.
// Beehiiv draft post aanmaken
{
"method": "POST",
"url": "https://api.beehiiv.com/v2/publications/{{ $env.BEEHIIV_PUB_ID }}/posts",
"headers": {
"Authorization": "Bearer {{ $env.BEEHIIV_API_KEY }}",
"Content-Type": "application/json"
},
"body": {
"subject": "{{ $json.blogTitel }}",
"content": "{{ $json.newsletterSectie }}",
"status": "draft",
"audience": "free"
}
}
Troubleshooting: als de RSS trigger niet afvuurt op nieuwe posts, controleer of je blog-software de pubDate correct instelt. Ghost doet dit automatisch; WordPress soms niet als je een caching-plugin gebruikt.
Uitbreidingen: voeg een vierde Claude-call toe die een Twitter/X-thread schrijft (8-10 tweets). Of laat Claude een Instagram-carousel-script maken (10 slides met een hook op slide 1). De structuur is identiek — alleen de prompt verandert.