← Portfolio | Produktfeedback-Triage
● n8n + Claude

AI + Automation

Produktfeedback-Triage

A live automation that reads incoming product feedback, classifies and prioritises it, and routes urgent cases to the team — built with n8n and the Claude API.

Live & Active n8n · Claude Haiku 4.5 · SMTP
The complete n8n workflow running and active
The running workflow — active in production

Feedback doesn't arrive sorted.

Product and innovation teams receive feedback constantly — bug reports, feature wishes, praise, questions — in no particular order, in more than one language, and with no signal of what's urgent. A security issue and a colour-scheme wish land in the same inbox looking the same.

Sorting it by hand is slow and inconsistent, and the urgent items are exactly the ones you can't afford to miss. This project automates that first triage step.

How a message moves through the system

A public form feeds each submission to Claude, which returns a structured classification. A switch routes on priority: urgent cases trigger an email alert and are logged; everything else is logged. If the AI step ever fails, a fallback still captures the message so nothing is lost.

Public form Name · area · feedback
Claude Haiku 4.5 Structured output + auto-fix
Switch on priority
Urgent → email alert + log
Normal → log
Error → fallback log (nothing lost)

Why it's built this way

Each choice trades something off. These are the ones I'd defend in an interview.

Haiku, not the largest model

Classification is an easy task. The smallest model that does it well is the cost-aware choice — engineering, not "I used AI."

A fixed chain, not an agent

An agent decides and loops — non-deterministic and slower. This job is fixed and one-shot, so predictability wins.

Structured output, not prose

Forcing Claude to return defined fields means the routing reads a value, not a guess parsed out of a sentence.

Auto-fix on the parser

Malformed output is sent back to the model to repair itself. Designing for the fact that LLM output is probabilistic, not assuming it's perfect.

Dropdown, not free text

Controlled input keeps the downstream data filterable and countable. Input design decides data quality.

Parallel branches, not chained

Alert and log run side by side. Chained, the log step would receive the email node's output and every field reference would break.

Log everything, including urgent

A triage system that drops its urgent items from its own log can't be reported on later.

Fallback marks "needs review"

An unclassified item mustn't fake a priority — neither false alarm nor false "harmless." It goes to a review queue with the original text intact.

Standout result

English in, German out — original preserved

A test written in English produced a German summary, tagged the language as English, and kept the original text untouched. The system normalises multilingual feedback into one working language without losing the source — a real capability for an international team, and one that fell out of the design rather than luck.

Six cases and a real failure

Every path was exercised, including the error path — by deliberately breaking the API key and watching the fallback catch the message.

Input Classification
API 500 error, customer blockedBug · high · de + alert
Dark-mode requestFeature wish · low · de
Praise for the new searchPraise · low · de
"Clunky but workable" (borderline)Usability · low · de
English: duplicate orders via webhookBug · high · en + alert
"Hi, I have a question." (vague)Other · low · de

Error-path test: the API key was deliberately broken. The step retried, failed, and the fallback logged the message as "unclassified / needs review" with the feedback text intact. Key restored — normal classification resumed.

The system, running

n8n Claude Haiku 4.5 (Anthropic API) Structured Output Parser SMTP (contact@sediqi.dev) n8n Data Table Docker Traefik Ubuntu VPS

See it work

The form is live. Submit a piece of feedback and it will be classified and routed in real time.

Open the live form