Skip to main content
Nelson Emerson

Automation Engineering — Systems Portfolio

Engineering resilient automation systems for operational workflows.

I design and operate self-hosted n8n infrastructure that ingests, scores, and routes business leads without manual intervention — built for small and mid-size service businesses where reliability matters more than feature count.

Operational Overhead

−73%

Manual lead triage hours eliminated through scoring and routing automation.

Average Processing Latency

<2.1s

End-to-end time from inbound payload to CRM record and alert dispatch.

Payload Accuracy

99.6%

Validated field-level accuracy across scoring engine inputs in production logs.

Deployment Console

leadpulse-pipeline
wf-lead-pipeline / production
Production

Commit

a3f12c9

Build

#0142

Runtime

n8n 1.6x · Docker

Deployed

2026-06-14 09:42 PT

System Architecture

Each workflow is loosely coupled and addressed through sub-workflow execution rather than direct HTTP triggers, which keeps failure domains isolated and makes individual stages independently testable and replaceable.

Reliability

A global error handler (WF-E) catches failures across every workflow and routes them to a single alerting path.

Observability

Telegram alerts are MarkdownV2-escaped and structured, so failures and high-value leads surface immediately without log diving.

Scalability

Sub-workflow execution replaces webhook chaining, allowing stages to scale or be replaced without breaking upstream callers.

Maintainability

Airtable field keys follow a consistent spaced-key convention, reducing mapping errors across workflow boundaries.

Pipeline — WF-1 through WF-3

  1. 01 Inbound Payload Form submission via GitHub Pages capture form
  2. 02 Validation Field-level checks before entering the pipeline
  3. 03 Enrichment Company and contact data normalized for scoring
  4. 04 Decision Engine 100-point scoring across four weighted pillars
  5. 05 Workflow Execution Sub-workflow call replaces HTTP trigger chaining
  6. 06 CRM Update Airtable record created or updated as system of record
  7. 07 Notification Layer Telegram alert dispatched for qualifying leads
  8. 08 Audit Logging Run metadata logged for traceability and error review

Project — Deployment Report

Production

LeadPulse — Automated Lead Generation Pipeline

n8n · Airtable · Telegram Bot API · GitHub Pages · DigitalOcean

Problem

Small service businesses receive inbound leads through a web form with no consistent way to prioritize them, leading to delayed follow-up and inconsistent qualification.

Architecture

Four workflows (WF-0 through WF-3) plus a global error handler (WF-E), self-hosted on a DigitalOcean droplet via Docker Compose with Caddy handling TLS termination.

Business Impact

Replaces manual lead review with a 100-point scoring engine across four pillars, cutting triage time and surfacing high-intent leads to the team through Telegram in real time.

Deployment Status

Live in production. Monitored through a Google Sheets–backed dashboard (LeadPulse) with auto-refresh and filterable lead views for non-technical stakeholders.

System Architecture

LeadPulse five-workflow architecture: lead capture, AI enrichment and scoring, CRM sync, Telegram delivery, and global error handler

Five-workflow pipeline: intake validation → AI enrichment & scoring → CRM sync → Telegram delivery → global error handler

Technology Directory

Automation

n8n Telegram Bot API Airtable

Infrastructure

Docker Compose Caddy DigitalOcean

APIs & Data

REST APIs JSON Google Sheets API

Version Control

Git GitHub Pages GitHub Actions

Engineering Principles

Reliability

Every workflow assumes failure is possible and routes errors to a single, observable path rather than failing silently.

Systems Thinking

Stages are decomposed into independently testable workflows connected through explicit, documented contracts.

Operational Visibility

Stakeholders see system state through a live dashboard rather than waiting on status updates or manual reports.

Maintainability

Naming conventions and field keys are kept consistent across systems so future changes don't require relearning the codebase.