Client case study · PE-backed DevOps software company · Enterprise B2BIn production

SOWs that write themselves. Edits that stay.

A production platform that turns structured sales inputs into rule-driven project timelines and polished Word documents, without ever overwriting a reviewer's judgment.

  • One browser app: company, scope, answers and signers captured once, saved as versioned drafts.
  • 30+ codified rules: the same scope always produces the same timeline, ready for review.
  • Constrained AI: natural-language commands, with every database change made by deterministic logic.
ClientPE-backed DevOps software company
EngagementParamount engagement
Built onn8n · PostgreSQL · Qdrant · Claude
1 · Scope
2 · Timeline, reviewed
SOW [Client] 001 – Implementation ServicesPeriod of PerformanceProject Timeline
.docx

Meet our client

Client
PE-backed DevOps software company
Industry
Enterprise software, DevOps & configuration management
Market
Enterprise B2B

In a nutshell

The client's sales and delivery teams assembled every Statement of Work by hand. We built a browser-based SOW authoring and document-generation platform, orchestrated through eight n8n workflows, that saves versioned drafts, builds timelines from reusable content and 30+ business rules, preserves reviewed edits when scope changes, and renders the final Word document from the approved state.

Client data protectedNames, scope, hours and screens on this page are sanitised or changed. The workflow is real; the data is not.
01 · The problem

Same scope. Different SOW. Every time.

Timelines lived in people's heads. Give the same scope to two estimators and you got two plans. Ask them again and watch it happen.

The scope
Estimator Amanual
Estimator Bmanual
The platform30+ rules
Illustrative estimates · manual results vary on purpose to show the problem
What was going wrong
  • Copy, paste, re-enter: reusable technical content and engagement details were copied between SOWs by hand.
  • Timelines by judgment: two people could produce different delivery plans from the same scope.
  • Fragile edits: a late scope change meant regenerating the timeline, and reviewer edits were lost.
  • Content tied to formatting: layout and content were coupled, so every change risked the other.
02 · The approach

Generate, review, then render. In that order.

Automation should raise consistency without removing judgment. So the platform splits generation from rendering, and the reviewed timeline becomes the source of truth. Step through one SOW.

The principleOnce a timeline has been reviewed, the approved version is authoritative. The final document is always rendered from it, never silently regenerated. Reopening a saved SOW loads that approved timeline as it was saved, not a fresh one.
One engagement, start to finish
  • Enter it once: someone on the sales or delivery team fills in the company, SOW details, scope, technical answers and signers in the Form App, and saves a draft.
  • Review the plan: the platform builds the timeline from the rules; a reviewer edits tasks, adds rows and reorders them, then saves it as approved.
  • Change the scope: if scope changes after review, the platform removes only the generated rows owned by the dropped scope, adds the new scope before the closing phases, and keeps the reviewer's edits.
  • Render the document: the Word file is built from the approved timeline, using the standard or Upgrade & Training template.
  • Hand off to readiness: once the SOW is signed, its scope seeds the readiness checklist, one section per technology, to prepare the project for implementation.
03 · The rule engine

Pick a scope. Watch 30+ rules build the timeline.

The real scope options from the Form App. Toggle them and the engine assembles delivery weeks, applying the codified rules you can see firing alongside.

Rules fired

    Rule behaviour is real (BR-001 to BR-032). Technology hours are illustrative; in production they come from the Qdrant content catalog and approved overrides.

    How a timeline is assembled
    • Normalize first: scope is reduced to four canonical groups, aliases are resolved against the catalog, and duplicates removed.
    • Content from Qdrant: technology blocks come from the sow_templates collection; rules, fixed blocks and hour overrides from PostgreSQL.
    • Capacity-aware: a codified planning rule (BR-025) gives each timeline week a capacity of 40 hours; content that overflows creates continuation weeks.
    • Fixed closing phases: Requirements opens when DevOps exists; Cutover, HyperCare and Project Wrap close, sized by DevOps count.
    04 · Scope reconciliation

    Change the scope. Keep the edits.

    A reviewer has already edited this timeline. Now the customer drops OIC and adds Salesforce and Jira. Compare regenerating from scratch with the platform's ownership-aware reconciliation.

    − OIC+ Salesforce+ Issue Tracking (Jira)
    Approved timeline · before
    After
    Removed vs keptDropping scope is deliberate, so the generated rows it owns go with it. Rows a reviewer added stay, even when they share a week with the removed scope.
    How reconciliation works
    • The backend decides the delta: added, removed and unchanged scope are calculated from previous and current scope, never trusted from the browser.
    • Rows know their owner: generated rows carry scope group, key, label and source week, so only removed scope's rows are removed.
    • Human edits survive: mixed weeks with reviewer content are preserved; new scope is inserted before the fixed closing phases.
    • Tidy finish: aggregates rebuild, zero-hour SCM rows merge into host weeks, and the sequence is renumbered.
    05 · The constrained Copilot

    Conversational, but never in control

    Type a command, or pick one. Known commands skip the model entirely. Free-form ones go to Claude as a parser, and the answer is validated before anything changes. The model never touches the database.

    Validated result
    { }
    Command handling is simulated on this page to show the real routing logic
    Why the AI stays boxed in
    • Deterministic first: create, open and copy lifecycle commands are recognised by code and never sent to a model.
    • A parser, not an agent: free-form text goes to an Anthropic model at temperature 0 with an allow-list of operations and a fixed output schema.
    • Validated, then routed: unsupported operations are rejected; ordinary edits stay in the browser, lifecycle actions go to the database.
    • Parameterized SQL only: every state-changing database action is built by workflow logic, never written by the model.
    06 · Document generation

    Layout lives in the template. Logic lives in the engine.

    The approved state is rendered into version-controlled Word templates with Docxtemplater. Switch the engagement type and watch the template change while the timeline stays exactly the same.

    Approved stateapproved_sections.timeline_weeks
    master-sow-template.docx
    Why the split matters
    • Independent failure modes: a formatting defect can't alter a correct timeline, and a timeline fix never needs a template change.
    • Two document types: standard engagements and Upgrade & Training SOWs use separate templates; Upgrade is a protected branch, not a ninth workflow.
    • Change layout without redeploying: templates are mounted into the n8n container from the host filesystem.
    • Checked on every release: both document types are generated, opened and inspected for raw tags, missing tables and clipping.
    07 · Implementation readiness

    From signed SOW to a ready project

    The SOW's scope also seeds a readiness checklist portal. Consultants manage the checklist catalog from inside each technology section, and a tiered match makes sure Okta never resolves to Azure AD.

    Which catalog section does this checklist section belong to?
    Single-pass OR match
    Tiered match, strongest signal first
    Remove an item without breaking past SOWs

    Removing a catalog item is a soft-disable. Future checklists stop seeing it; SOW sessions that already copied it keep their values.

    Global catalog
      SOW 001 · already loaded
        SOW 002 · loads later
          How the readiness portal works
          • Scope in, checklist out: each technology in the SOW loads its own checklist section, with notes and values for up to three environments.
          • Global vs per-SOW: catalog tables are shared; each SOW session keeps its own copied state and entered values.
          • Strongest match first: section title, then technology label, then tool category, then main category, each tried across the whole catalog.
          • Export ready: completed checklists export per technology, and the Services Copilot can update or export them by command.
          Next in the chainThe checklist is the step between the signed SOW and implementation. The Implementation Execution Portal case study picks up from there: it turns the SOW and its completed checklist into review-ready implementation documents.
          08 · Architecture and operations

          Eight workflows. Three stores. One rollback away.

          Responsibilities are split across eight n8n workflows instead of one monolith. Tap a workflow to see its job, or switch to the release path every production change follows.

          Built to be recovered
          • One owner per webhook: every production path has exactly one active workflow, so routing never collides.
          • Change a copy first: edits happen on inactive workflow copies, tested against representative fixtures before promotion.
          • Back up everything: PostgreSQL, Qdrant snapshots, templates and workflow JSON exports before every deployment.
          • No secrets in exports: credentials are excluded from workflow exports and from all documentation.
          Proof

          Inside the platform

          Real screens from the Form App, the generated Word document and the readiness portal. Customer and staff names are blurred.

          09 · The result

          Reproducible, reviewable, recoverable

          A slow, judgment-heavy authoring process became a production workflow that standardizes delivery planning while keeping human judgment authoritative.

          30+codified business rules replacing informal planning knowledge
          8n8n workflows with clearly separated responsibilities
          3separated stores: PostgreSQL state, Qdrant content, mounted templates
          1browser app from first input to final Word document
          The resultEvery SOW now starts from the same rules, every reviewed edit survives a scope change, and every document is rendered from approved state.
          n8nJavaScript code nodesPostgreSQLPL/pgSQLJSONB stateQdrantAnthropic ClaudeLangChain for n8nDocxtemplaterDOCX templatesHTML/JavaScript Form AppWebhook APIs
          What comes next · designed, not yet built Work in progress
          • An Admin Portal: an authenticated portal to manage technologies, aliases, hours, questions, fixed blocks and rules.
          • Catalog-driven forms: scope options and questions rendered from the catalog instead of hard-coded in the Form App.
          • Validate, publish, roll back: every configuration change previewed, regression-checked and reversible.
          • Source document management: versioned ingestion and publishing of reusable Qdrant content.
          Document automation, with judgment

          Automate the document. Keep the expertise.

          Rule-driven generation, human review that sticks, and AI kept inside safe boundaries.

          What a first conversation covers
          1. 01Your business objective
          2. 02The technical context
          3. 03The right next step
          Discuss a project View all case studies →