Dashboard-first journey guidance for n8n. Use when a user connected n8n and wants a Workflow Activity Dashboard (default) with auto-mapping and live preview, and optionally to turn a workflow into a product.
Your job is to get the agency user from Connected n8n → Live preview dashboard in minutes with low cognitive load:
For MVP, always start by selecting exactly one workflow that already has executions/events so the preview can be generated from real data immediately.
Never ask for UUIDs or show raw payloads unless user explicitly requests "raw".
When n8n is connected and you have events/executions, summarize like:
Detected signals (example phrasing):
Primary CTA language: "Build Dashboard"
Default recommendation: Workflow Activity Dashboard (aka workflow monitoring / ops dashboard).
Choose this when the user says anything like:
If the user asks for ROI: still start with Workflow Activity Dashboard, then add ROI widgets later (time saved, tasks automated estimates).
| Step | Tool | Purpose | Required |
|---|---|---|---|
| 1 | analyzeSchema | Detect fields from events (inspects state + labels JSONB) | YES |
| 2 | generateMapping | Map detected fields → template requirements using semantic aliases | YES |
| 3 | checkMappingCompleteness | Validate confidence ≥ 0.75, list missing fields | YES |
| 4 | validatePreviewReadiness | Confirm all prerequisites before preview generation | YES |
| 5 | runGeneratePreviewWorkflow | Generate the actual preview | YES |
analyzeSchema before any mapping toolgenerateMapping (id: generate-mapping) — NOT proposeMappinganalyzeSchema returnsanalyzeSchema returns fields from state JSONB (e.g., started_at, status, duration_ms), these are the normalized fields — prefer them over raw labels fields| User Says | Template ID | Required Fields |
|---|---|---|
| "workflow dashboard", "activity dashboard", "ops dashboard" | workflow-dashboard | workflow_id, status, started_at, ended_at |
| "workflow monitor" | workflow-dashboard | (same — workflow-monitor is a deprecated alias) |
| Default for n8n | workflow-dashboard | (always use this for n8n) |
Map these with highest priority:
statussuccess → completederror / crashed → failedwaiting / running → runningstoppedAt for completed/failed executionsstartedAt if stoppedAt missingduration if present(stoppedAt - startedAt) in ms when both existnow - startedAt (optional)workflowId (or workflow name if that's what you have)mode (webhook/manual/trigger)idUse user-friendly labels:
If node-level data is available, offer optional drill-down: "slow node", "failed node" (don't assume it exists).
Ask in a UI-friendly way:
Before calling runGeneratePreviewWorkflow, verify:
analyzeSchema returned fields from state JSONB (not just top-level columns)status field is mapped and has non-empty valuesstarted_at field is mapped (source: normalizer's state.started_at)ended_at field is mapped (source: normalizer's state.ended_at)duration_ms is available (computed by normalizer from timestamps)workflow_id is mapped for groupingIf started_at or ended_at are missing but timestamp exists:
→ Offer: "I found timestamps but not execution start/end times. This means duration-based widgets will be empty. Continue anyway?"
Only after dashboard preview is working, offer:
"Want to turn one of these workflows into a client-facing product (form → workflow → output), fully white-labeled?"
When user says yes:
For deeper details, read:
references/data-signals.mdreferences/workflow-archetypes.mdreferences/mapping-cheatsheet.md