← All projects
LIVE DEMO

Quote Lifecycle Desk

n8n follows quotes across scheduled emails, replies, reviews and failure paths without duplicating a milestone

STACKn8n 2.31.6 / PostgreSQL 16.14 / Google Sheets API / Gmail API / OpenRouter structured output / Next.js / Docker
CONTEXTSelf-directed spec project
DATE2026-07
Open recruiter demo quote-lifecycle-desk-demo.aaron.cv
EVIDENCE, NOT CLAIMS

The lifecycle risks a reviewer can trigger

The public console states the expected policy result before every run, then shows structured classification, confidence, guardrail, Sydney business-hours routing, idempotency, retries, audit ID, execution trace and the stored synthetic state. The public parser is deterministic and makes no model call. The 64-case and 8-case figures both come from the hash-locked release evidence measured on 1 August 2026; the accepted delivery run later that day wrote its own live results to the current-run path and left the published figures untouched.

64/64 live model responses passed the structured schema Versioned 64-case acceptance matrix
64/64 guarded dispositions matched the acceptance oracle Deterministic validation after structured output
22/22 ambiguous and malformed cases routed to review No sales outcome accepted for these cases
56/64 raw provider classifications matched before guardrails Reported separately from guarded system quality
20 + 20 concurrent scheduler and dispatch workers in the shared-milestone test One action, outbox row, effect and lifecycle event
8/8 behaviour classes passed in the selected release run 1 August 2026 at 21:57 UTC; 2,739 tokens, no provider errors
11/11 acceptance gates passed in the accepted delivery run 1 August 2026 at 23:05 UTC; two gates compare the installed instance with the build
Not measured production accuracy, throughput and business impact Synthetic reference traffic only
01

A milestone is not sent twice

A unique database key, transactional lease and stored action receipt suppress repeated scheduler and webhook effects.

VERIFY: Run Duplicate milestone and inspect the two calls in the raw response
02

A reply resolves to one quote or none

Automatic processing requires the stored Gmail thread and visible quote reference to agree on one record.

VERIFY: The source suite covers exact, missing, wrong, multiple and conflicting references
03

A promised date moves the next action

A valid deferred decision schedules one check at 09:00 Australia/Sydney and cancels the previous pending check.

VERIFY: The acceptance suite verifies the deterministic deferred_check state
04

Uncertainty cannot become a sales outcome

Low confidence, ambiguity, malformed schema and contradictory evidence leave the quote open and create review.

VERIFY: Run Low-confidence reply and inspect state.reviews
05

The report is replayable

Totals and loss reasons come from stored events and an event watermark; the same input produces byte-identical JSON and hash.

VERIFY: Download the measured evidence summary
06

Failures are bounded

Retryable mail and carrier errors stop after three total attempts and create one dead letter per source key.

VERIFY: Run Provider failure and inspect retry count, fallback and stored dead letter
07

The installed instance must match the build

Delivery compares every installed n8n workflow node for node with the versioned builders and requires the four named credentials to resolve. A drifted workflow, or a credential a test run left behind, fails the release check instead of passing behind green tests.

VERIFY: Compare delivery verification and independent review in the measured evidence summary
08

Published claims stay tied to one accepted release

The accepted evidence locks four source hashes and all six must-prove mappings. Both live suites now move only through an explicit snapshot selection, so a routine provider run cannot age a published figure, and the replaced matrix stays committed next to it. A separate export gate compares the sanitized 11-workflow set and its 97 nodes with the versioned builders.

VERIFY: Download the measured evidence summary from the proof console
TRY THESE CASES
Routine acceptanceWon, normal priority, confidence above 0.85 and a stored lifecycle update
Urgent exceptionHuman handoff, commercial escalation and no stored sales outcome
Low-confidence replyConfidence below 0.85, quote stays open and one review record
After-hours exceptionSydney business hours false and next-business-day review routing
Duplicate milestoneFirst event handled, second suppressed and one audit reference
Provider failureThree attempts, one dead letter and human review fallback
Custom synthetic replyThe same schema, 0.85 confidence gate, routing rules and audit check apply
RUNTIME PATH
  1. Public proof console validates a synthetic reply and calls one internal n8n webhook
  2. n8n returns structured lifecycle category, priority, confidence and Sydney business-hours state
  3. A deterministic gate chooses state change, human review or dead-letter fallback
  4. The maintained public workflow executes versioned PostgreSQL transaction functions
  5. PostgreSQL stores quote state, idempotency receipt, audit events, reviews and dead letters
  6. Private acceptance profiles test Google Sheets, Gmail threading and model output without exposing credentials
DATA BOUNDARY

Synthetic data only in the public demo. The browser can reach the proof console, not n8n, PostgreSQL or provider credentials.

  • The public custom-input path uses a deterministic sandbox parser and does not call a model provider.
  • Live acceptance used private Gmail, Sheets and model profiles; those credentials are absent from the demo stack.
  • Provider processing region and retention were not configured or measured.
  • Workflow executions omit success and error payload storage; synthetic state resets nightly.
  • No client data, client tenant, revenue result, conversion result or saved-time claim is part of this project.

Long-running quotes create a coordination problem: the follow-up date lives in one place, the email thread in another and the eventual decision often arrives as unstructured text. Quote Lifecycle Desk treats the lifecycle as stored events instead of a set of editable status cells.

A real Google Sheets acceptance profile reads and writes synthetic quote rows. n8n schedules day-10 follow-up and day-21 escalation, then Gmail replies must match both the stored thread and the visible quote reference before a record can change. PostgreSQL owns the state machine, unique milestone claims, outbox, review queue, audit trail and dead letters.

Reply classification uses a strict versioned schema and a deterministic gate. Confidence below 0.85, malformed output, contradictory evidence or an invalid decision date leaves the quote unchanged and creates human review. Weekly reporting is replayed from stored events and an event watermark, so the same event set produces the same content hash.

This is a self-directed spec project with synthetic data, not client work. The public console runs the real n8n sandbox workflow and PostgreSQL transactions. Live Gmail, Sheets and model credentials stay outside the public stack; their results are reported only from the versioned acceptance evidence.

What it does

Quote Lifecycle Desk public sandbox showing scenario controls and an empty isolated workspace
The source demo opens with the sandbox boundary and gives each browser an isolated synthetic scenario.
Quote Lifecycle Desk after a day-10 follow-up, showing the next escalation and two audit events
Advancing the virtual clock records one day-10 follow-up and deterministically schedules the next escalation.
Quote Lifecycle Desk dead-letter view showing one mail timeout after three attempts
The bounded failure path stops after three attempts and leaves one visible dead letter.

Want something like this for your business?

Next one
yours?

Send a short description of what eats your time. You will usually see a working prototype before you have paid anything.

© 2026 aaron.cv · Torhout, Belgium (CET) aaronsinnaeve5@gmail.com Upwork