Project 2026 PRIVATE DEMO READY

BART

A hosted marketing lead intake automation for Enterpryze workflows

Year 2026
Type Workflow Automation System
Role Product + Systems Design
Status PRIVATE DEMO READY
BART is a marketing lead intake automation built around a real sales operations workflow: receive a web enquiry, decide whether the company is already known, create or reuse the right Business Partner context, generate an Enterpryze sales opportunity, create the matching Jotform record, and notify the team in Microsoft Teams within seconds.
The hosted preview is running privately on the trusted network. The current demo state is deliberately safe by default: mock mode is active until demo-day approval, but the live path has already been proven against the demo organisation with new-prospect creation, existing-customer review, Jotform writeback, and Teams notifications.

01 - INSPIRATION

BART came from a common business-systems gap: web leads arrive with useful information, but turning that enquiry into clean CRM work still takes manual checking.

In the current intake workflow, a new-prospect web enquiry can take 15 to 20 minutes before it reaches the right salesperson. That delay matters. The prospect has already raised their hand, and the first response window is where the company can feel sharp, attentive, and easy to deal with.

BART compresses that handoff to about five seconds for the clean new-prospect path. The salesperson can receive the Teams card almost immediately, open the lead and Jotform, and call the prospect within roughly ten seconds of the enquiry being submitted. That is the kind of response speed a new prospect notices.

The manual version is also easy to get wrong. Someone has to decide whether the company already exists, whether the submitted contact is already on the account, whether a new prospect should be created, which salesperson should own the lead, where the enquiry evidence should live, and who needs to be notified.

The useful product shape was not a chatbot. It was a controlled intake workflow that joins the public form, CRM data, review decisions, and team notifications without guessing when the data is incomplete.

02 - MY ROLE & CONTRIBUTION

I shaped BART as a production-shaped demo rather than a throwaway form integration.

That work included:

  • defining the intake workflow around deterministic matching, not blind lead creation
  • building local and webhook intake paths that normalize into one canonical payload
  • replacing early JSON state with SQLite-backed migrations, workflow events, idempotency, match candidates, Jotform records, Enterpryze operations, and notification events
  • adding Business Partner/contact indexing so BART can distinguish new prospects, existing customers, and existing customers with missing contacts
  • designing a manual-review pause for existing customers when the submitted contact is not present yet
  • adding targeted Business Partner re-sync on review resume so the reviewer can add a contact in Enterpryze, then let BART continue safely
  • wiring Jotform creation and Enterpryze lead UDF update so the lead and submitted form stay linked
  • implementing proactive Teams cards for successful leads and missing-contact reviews
  • adding mock/live runtime mode controls so the hosted preview can stay safe until live testing is explicitly approved

The important decision was to make uncertainty visible. If the customer exists but the contact does not, BART stops and asks for a human review instead of inventing the missing relationship.

03 - BART WORKFLOW

Intake Layer

where lead data enters BART
Hosted Formprivate Tailscale preview form for controlled demo submissions
Website Webhookproduction-shaped intake path guarded by a shared webhook secret
Canonical Payloadnormalizes contact, company, phone, email, enquiry, and source
Idempotencykeeps repeated submissions and replay paths auditable

Match + Review Layer

how BART decides whether to write or pause
BP Indexlocal Business Partner and contact cache from Enterpryze readbacks
Score Candidatescompany, domain, email, and contact matching with reasons retained
New Prospectsafe create path when no existing account is selected
Existing Contactreuse matched account and contact for direct lead creation
Missing Contactpause before writes and send a Teams review card

Execution Layer

where approved work becomes CRM output
Enterpryze Leadcreates the sales opportunity with fixed MVP salesperson and contact person code
Jotform Recordcreates the form submission and stores exact country/region values
Lead UDF Linkwrites the Jotform edit link back to the Enterpryze lead
Readbackhydrates final salesperson/contact details from the persisted lead response

Notification + Control Layer

how the team sees what happened
Lead CardTeams card with source label, enquiry, contact details, salesperson mention, Jotform, and lead button
Review Cardmissing-contact card tells the reviewer exactly what to add or verify
Review Pageconfirm existing contact, reject, resume, and audit the decision path
Mock / Live Modevisible runtime state keeps preview safe until live testing is approved

State + Audit Layer

what BART keeps for diagnosis and replay
SQLite Storeintakes, candidates, decisions, events, operations, Jotforms, and notifications
Admin Readsitems, reviews, and errors endpoints for inspection without inline actions
Resume Safetytarget-syncs the selected BP before continuing after review
Error Trailfailed or blocked steps remain inspectable instead of disappearing
Mock-safe by default
Pause before ambiguous writes
CRM, Jotform, and Teams kept in sync

04 - WORKFLOW STATES

Path 1

New prospect

BART creates the prospect Business Partner, creates the lead, creates the Jotform submission, updates the lead with the form link, and sends the Teams lead card in about five seconds, so the salesperson can contact the prospect almost immediately.

Path 2

Existing customer + known contact

BART reuses the matched account and contact, then creates the lead and downstream records without adding duplicate customer data.

Path 3

Existing customer + missing contact

BART pauses before writes, sends a review card, waits for the contact to be added or verified, target-syncs the account, then resumes only if the contact can be found.

Safety

Mock by default

The hosted demo stays in mock mode until live writes are approved. Live mode has separate health checks, readbacks, and a switch-back-to-mock handoff.

05 - TOOLS USED

BART combines a private hosted intake app, Enterpryze integration, form generation, review workflow, and team notifications.

  • Node.js / TypeScript for the hosted intake server and workflow orchestration
  • SQLite for workflow state, review decisions, match candidates, events, operations, Jotform records, and notification history
  • Enterpryze Public API + Outlook sales opportunity API for Business Partner lookup, prospect creation, contact readback, lead creation, and UDF update
  • Jotform API for creating the lead-form record and preserving an editable form link
  • Microsoft Teams Bot Framework for proactive lead and review cards
  • Express UI for the hosted intake form, review page, admin read endpoints, and demo polish
  • Encrypted runtime config for API credentials, webhook secrets, Teams notification token, and mock/live controls

The stack is practical because the workflow has to bridge a public lead form, CRM account truth, review decisions, and team notification without turning every submission into an unsafe write.

06 - CHALLENGES AND HOW I SOLVED THEM

One challenge was matching quality. A lead form gives names, domains, email addresses, and company text, but none of those alone are enough to safely decide whether a record is new or existing. I solved that with normalized matching, scored candidates, indexed Business Partner/contact data, and explicit classifications for new prospect, existing customer, and review-required cases.

Another challenge was missing contacts on existing customers. Creating a lead against the account without the correct contact would make the record less useful, but creating a new prospect would duplicate the company. I solved that by pausing before writes, sending a Teams review card, letting the reviewer add or verify the contact in Enterpryze, then target-syncing the selected Business Partner before resume.

A third challenge was live-demo safety. The system had to prove real Enterpryze, Jotform, and Teams wiring, but not stay dangerous between demos. I added mock/live mode separation, health checks that expose the current mode, safe hosted mock mode by default, and a demo-day cutover checklist for switching live only when approved.

The most subtle challenge was exact external values. A single mismatched Jotform dropdown value can store but render blank. BART now maps currency-driven country/region values to the exact form options and verifies payloads before treating the flow as polished.

07 - WHAT I LEARNED

BART reinforced that lead automation is mostly about respecting system boundaries.

The strongest lessons:

  • a clean intake form is not enough; the hard part is account/contact truth
  • matching workflows need a pause state, not just confidence scores
  • external systems punish almost-correct values
  • demo systems need obvious mock/live state and a fast way back to safe mode
  • speed is part of customer experience when a prospect has just asked to be contacted
  • notifications are product surfaces, not afterthoughts
  • readbacks matter because create responses are not always complete enough for downstream UI

The project is a strong example of controlled automation: fast when the path is known, deliberately slow when the data is ambiguous.

08 - HOW AI SUPPORTED THE WORK

AI supported architecture, implementation, API exploration, test coverage, UI polish, card copy, and repeated edge-case passes. It helped move quickly across the TypeScript workflow, Enterpryze payloads, Jotform payloads, Teams card structure, review states, and verification scripts.

The human judgment stayed in the operational boundaries: when to stop, when to resume, what should be reviewed, which fields must match exactly, and when live writes are allowed.

09 - CURRENT STATE

BART is private-demo ready and currently hosted on the trusted network in mock-safe mode. The hosted intake form, review path, admin read endpoints, Teams bot notification path, Jotform integration, and Enterpryze live-write path have all been exercised through controlled tests.

The verified demo behavior covers both important paths: a new-prospect enquiry can create the Business Partner, lead, Jotform submission, lead UDF link, and Teams notification in about five seconds; an existing-customer enquiry with a missing contact can pause for review, notify the reviewer, target-sync after the contact is added, resume, and create the downstream records without duplicating the customer.

For review and demos, the key safety rule is simple: hosted BART remains mock by default. Live mode is a deliberate cutover, not the resting state.