Skip to content

n8n Intake Automation — Eefje Bug/Feature Triage

Status: gepauzeerd sinds 2026-05-03 — niet geïmplementeerd Owner: Ivar Created: 2026-04-25 Related: 01-Projects/Webshop/Workflow-Fase-2-n8n-Intake.md (Obsidian vault)

Gepauzeerd (2026-05-03): het triage-volume (~0.6 min/dag) ligt een factor 50 onder de drempel (≥30 min/dag) die deze automatisering rechtvaardigt. Het ontwerp blijft bewaard als referentie en als pitch-materiaal voor klant-implementaties. Hervat-trigger: ≥10× volume-stijging of een eerste klant met dezelfde requirement.

Achterhaald detail: sinds 2026-05-06 loopt de Eefje-intake via Issue Forms in de aparte repo Voorman/freezedesign-feedback (zie de runbook Eefje Feedback Intake) — niet meer via email/WhatsApp naar .planning/todos/pending/. Ook gaan PR's inmiddels tegen staging in plaats van main. Bij een eventuele hervatting moet de trigger- en output-kant van dit ontwerp daarop worden aangepast; de triage-prompt en het JSON-schema blijven herbruikbaar.

Doel

Automatiseer de triage van Eefje's bug/feature rapporten naar .planning/todos/pending/ files met de juiste status. Vervangt het handmatige triage-werk dat Ivar nu doet.

Architectuur

┌─────────────────────────────┐
│ Eefje stuurt rapport        │
│ (email of WhatsApp)         │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ n8n trigger                 │
│ (IMAP voor MVP, Twilio v2)  │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ Fetch CLAUDE.md from GitHub │
│ Extract EEFJE_INTAKE block  │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ Anthropic Claude API        │
│ system: triage rules        │
│ user: ruwe input Eefje      │
│ output: strict JSON         │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ JSON Parse + validate       │
│ (faalt loud bij mismatch)   │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ Split In Batches (per item) │
└──────────────┬──────────────┘
       ┌───────┴───────┐
       ▼               ▼
   Switch op status field
       │       │       │
       ▼       ▼       ▼
   ┌──────┐ ┌──────┐ ┌──────────┐
   │READY │ │NEEDS │ │MILESTONE │
   │      │ │CLARI │ │CANDIDATE │
   └──┬───┘ └──┬───┘ └──┬───────┘
      │        │        │
      ▼        ▼        ▼
┌─────────────────────────────┐
│ GitHub: Create File         │
│ branch: eefje-intake/<date> │
│ path: .planning/todos/      │
│       pending/<slug>.md     │
└──────────────┬──────────────┘
       ┌───────┴───────┐
       ▼               ▼
┌──────────────┐  ┌──────────────┐
│ Create PR    │  │ Email naar   │
│ (auto-merge  │  │ Ivar:        │
│  uit, hij    │  │ summary +    │
│  reviewt)    │  │ PR link      │
└──────────────┘  └──────────────┘

MVP-fasering

MVP v0.1 — validate the triage (dag 1, ~4 uur)

Trigger en LLM, geen GitHub-write nog. Doel: meten of de auto-triage betrouwbaar is voordat we 'm laten schrijven.

Nodes: 1. IMAP trigger — pollt eefje-intake@<domain> elke 5 min 2. Set — normaliseert naar { from, subject, body, date } 3. HTTP Request — fetch .claude/CLAUDE.md raw van GitHub 4. Function — extract EEFJE_INTAKE_START ... EEFJE_INTAKE_END block 5. Anthropic Claude — triage call (zie prompt hieronder) 6. Email Send — output naar Ivar's inbox met JSON + ruwe input

Drempel om naar v0.2 te gaan: ≥7 van 9 items correct gecategoriseerd op de 2026-04-17 dry-run.

MVP v0.2 — schrijf todo files (dag 1-2, ~3 uur)

Voegt GitHub API toe. Per rapport een eigen branch en PR.

Extra nodes bovenop v0.1: 7. JSON Parse + validate — strict schema check 8. GitHub: Create Brancheefje-intake/<YYYY-MM-DD-HHMM> 9. Split In Batches — één iteratie per item 10. GitHub: Create File — todo.md per item 11. GitHub: Create PR — open tegen main, label eefje-intake 12. Email Send — Ivar krijgt PR-link in inbox

Auto-merge uit. Ivar reviewt elke PR voor merge — vangnet tijdens de eerste maand.

MVP v0.3 — WhatsApp loop (later, conditional)

Vereist Meta Business verificatie. Voorlopig optioneel.

Extra nodes: - Twilio WhatsApp als trigger (vervangt IMAP) - Twilio WhatsApp Send voor needs-clarification items - Wait node — pauzeert tot Eefje reageert (correlation key per item)

Triage-prompt (system message)

Je bent een triage-systeem voor bug- en feature-rapporten van Eefje,
de niet-technische eigenaar van Freeze Design (een Django/Next.js
webshop voor team- en sportkleding).

Je krijgt:
1. De huidige intake-rules uit CLAUDE.md (tussen EEFJE_INTAKE_START
   en EEFJE_INTAKE_END)
2. Eefje's ruwe rapport (Nederlands, vaak genummerde lijst)

Je taak: categoriseer elk item volgens de rules. Output STRICT JSON,
geen prose, geen markdown fences.

Schema:
{
  "items": [
    {
      "raw_text": "<exact wat Eefje schreef>",
      "category": "homepage | designer | catalog | admin | email | auth | images | other",
      "type": "bug | feature | design-fix | refactor | content-delivery",
      "status": "ready | needs-clarification | awaiting-decision | blocked-on-content | needs-scoping | milestone-candidate",
      "title_slug": "<kort kebab-case, max 60 char>",
      "summary_nl": "<1-2 zinnen, herformuleerd vanuit Eefje's input>",
      "clarification_question_nl": "<vraag aan Eefje, of null>",
      "blocking_reason_nl": "<waarom blocked, of null>",
      "estimated_effort": "S | M | L | XL"
    }
  ],
  "summary": {
    "total": <int>,
    "ready": <int>,
    "blocked": <int>,
    "milestone_candidates": <int>
  }
}

Beslisboom voor status:
- ready: het is duidelijk wat moet gebeuren, geen content nodig van Eefje
- needs-clarification: input is onduidelijk, vraag terug nodig
- awaiting-decision: Eefje moet eerst een keuze maken (welke optie?)
- blocked-on-content: heeft asset/tekst van Eefje nodig
- needs-scoping: te groot om in één todo te vatten, moet opgeknipt
- milestone-candidate: nieuwe major feature, hoort in een milestone

Output schema-validatie wordt gedaan, dus geen velden weglaten of
extra velden toevoegen.

GitHub File Create — todo template

Voor elk item wordt een file geschreven naar .planning/todos/pending/<title_slug>.md:

---
status: <status>
category: <category>
type: <type>
created: <ISO date>
source: eefje-intake-automation
source_email: <message-id of WhatsApp ID>
estimated_effort: <S|M|L|XL>
---

# <title nl>

## Wat Eefje schreef

> <raw_text>

## Samenvatting

<summary_nl>

<!-- conditional blocks per status -->

## Vraag aan Eefje  <!-- alleen bij needs-clarification -->

<clarification_question_nl>

## Blocked op  <!-- alleen bij blocked-on-content -->

<blocking_reason_nl>

## Te beslissen  <!-- alleen bij awaiting-decision -->

<blocking_reason_nl>

Configuratie-vereisten

Item Waar Notitie
Email-adres eefje-intake@<domain> DNS + IMAP Inbox-only, geen UI nodig
GitHub Personal Access Token n8n credentials Scope: repo voor freeze-design repo
Anthropic API key n8n credentials Sonnet 4.5 of hoger
n8n credentials voor IMAP n8n credentials App-password ipv account-pw
Twilio credentials n8n credentials Pas bij MVP v0.3

Beslismomenten

Wanneer Vraag Drempel
Na dry-run op 2026-04-17 note Naar v0.2? ≥7/9 correct
Na 1 maand v0.2 live Houden? ≥80% accuracy op echte input
Na 1 maand v0.2 live Naar v0.3 (WhatsApp)? Eefje vindt email te omslachtig

Eerste pilot — dry run input

Eefje's note van 2026-04-17 (verkort):

Hoi Ivar, paar dingen:
1. Die groene bar moet weg, en logo iets groter
2. Bij 'Ontwerp het zelf' wil ik een andere afbeelding (ik mail 'm)
3. De categorie
4. Achtergrond moet wit
5. Ik denk teamwear/workwear/sportswear, en dan 'Ga naar collectie'
   knoppen — maar weet niet zeker
6. Kunnen we ook producten van eigen ontwerp? Dus zonder de tool?
7. Hoodies, sweaters, t-shirts apart?
8. Bij productoverzicht: kunnen we kiezen welke foto eerste is?
   Lijkt nu random
9. Varsity jackets — die tweekleur is te ingewikkeld, makkelijker maken

Verwachte output (Ivar's handmatige triage als gold standard):

# status reden
1 ready duidelijk, geen content nodig
2 blocked-on-content wacht op afbeelding
3 needs-clarification onvolledige zin
4 ready duidelijk
5 awaiting-decision "weet niet zeker"
6 milestone-candidate grote nieuwe feature
7 needs-clarification hoodies-sweaters-t-shirts hoe precies?
8 ready duidelijk genoeg
9 needs-scoping "makkelijker" is te open

Drempel v0.2: 7/9 match. Andere matches mogen "redelijke verschillen" zijn (bijv 3 als needs-scoping ipv needs-clarification — beide vergen input van Eefje).

Risico's en mitigatie

Risico Kans Impact Mitigatie
Triage-prompt drift (CLAUDE.md verandert, n8n niet) Hoog Medium Live fetch CLAUDE.md uit GitHub bij elke run
Claude API outage Laag Medium Email naar Ivar dat triage faalde, fallback handmatig
Eefje stuurt attachments Hoog Laag v0.1: vermeld in output dat attachment er is, Ivar bekijkt
Te veel false positives in PR's Medium Medium Auto-merge UIT in eerste maand, Ivar reviewt alles
GitHub PR-spam Laag Laag Eén PR per rapport, niet per item

Wat NIET in deze automation

  • Eefje informeren over status — dat blijft menselijk werk via WhatsApp. Een automation die Eefje vraagt "is mijn vraag duidelijk genoeg?" is een UX-ramp.
  • Code schrijven op basis van todos — Claude Code (handmatig of via Cline Kanban in fase 3) doet dat, niet n8n. Scheid intake van execution.
  • Status-transities (ready → in-progress → done) — die lopen via GSD-workflow in de repo, niet via n8n.

Portfolio-positionering

Voor de freelance-pitch: dit is geen one-off. Het patroon is generaliseerbaar naar elke MKB met gestructureerde input van niet-technische gebruikers:

  • Restaurant: gasten-feedback formulier → categorisatie → routing naar chef/manager
  • Boekhouder: klant stuurt factuur → OCR → categorisering → boekhoudpakket
  • Advocaat: intake-formulier → triage → routing naar juiste rechtsgebied
  • ZZP'er: contact-formulier → urgentie-classificatie → agenda of email

Dezelfde architectuur, andere prompt en andere output-target.