← Selected projects
Research-led outreachPrototype · 2025–26

Contextual Outreach

A prototype built around an IT consultancy's problem: research a prospect, work out who's worth talking to, and draft outreach that's grounded in what the company actually does and the work the consultancy has already done.

01 / The problem

Outreach only sounds personal if the system actually knows something.

This started as a side project after some open ended conversations with an IT consultancy. The question I kept coming back to was whether research on a prospect could actually turn into outreach that sounds like a person wrote it. To get there it had to find the right contacts, understand what the company is actually dealing with, tie that to work the consultancy had already done, and still let the sender decide the tone. Delivery turned out to be the harder half. LinkedIn doesn't allow unauthorized automation, so writing something worth sending and actually sending it across channels are two very different problems.

End-to-endresearch-to-outreach prototype built independently

02 / Architecture

Clear boundaries meant research, rules, generation, and delivery could each be swapped without disturbing the others.

A Vue interface calls thin ASP.NET Core endpoints, which delegate to single-purpose application use cases and domain entities. Repository and service interfaces isolate PostgreSQL, CRM intake, web research, AI providers, and channel delivery. This allowed the complete research-to-workflow path to be built while keeping uncertain email and LinkedIn execution at the infrastructure edge.

03 / Engineering

The decisions behind the system.

01

Multi-source company and contact enrichment

Give it a company name and a domain and it builds a picture of that company. The rule underneath is that no single source and no single model answer gets to be the truth on its own.

Implementation details
  • First-party website analysis and external signal discovery run concurrently before their evidence is merged
  • Synthesis prioritizes company-owned material for stable facts and external sources for recent hooks
  • Freshness, source quality, deduplication, and traceability remain production extension points
02

Context-aware outreach generation

Writing a draft isn't one prompt. Most of the work is deciding what the model should know before it writes anything, and the sender still owns how it sounds.

Implementation details
  • The context builder combines prospect intelligence, the active contact, sender identity, company positioning, previous cases, and a channel prompt
  • Separate strategies support collected-data and web-search paths for email and LinkedIn content
  • Drafts remain editable and support conversational revision, while factual and stylistic review stays human-owned
03

Stateful multi-channel workflow engine

A sequence you wrote once becomes a real schedule for one specific prospect. Before it's allowed to start, the system checks that everything it's going to need actually exists.

Implementation details
  • Ordered steps support email, LinkedIn messages, connection requests, waits, and lightweight interactions
  • Activation validates enrichment and generation requirements before converting local offsets into scheduled timestamps
  • A background worker and executor are implemented, but channel actions remain mock adapters rather than production delivery claims
04

Clean Architecture around volatile integrations

I rebuilt the backend around clear layers so no external provider ends up owning the logic. The workflow is mine. The integrations just plug into the edge of it.

Implementation details
  • Domain entities encapsulate prospect ownership, active-contact selection, workflow transitions, ordering, and activation rules
  • Single-action use cases expose one entry point while thin endpoints translate HTTP concerns
  • The additional types and wiring improve replaceability, but consistent authorization and integration coverage still require production review

04 / Product walkthrough

CONTEXTUAL OUTREACH / PRODUCT WALKTHROUGH04 IMPLEMENTED VIEWS

05 / Evaluation

Tested and walked through. Never actually used in production.

There are unit tests over the domain rules and the main use cases, and I walked the workflow through with the consultancy repeatedly to check it matched how they actually sell. That tells you the thing behaves as built and that the problem was real. It tells you nothing about adoption, reply rates, deliverability, or whether it would have made anyone money.

It was never deployed. Partway through, the consultancy bought an existing commercial tool that already handled the LinkedIn side, so my version stayed what it started as: an exploration.

06 / Outcome

A working prototype, and a clear answer about where the real wall is.

It connects the whole path: pull in a prospect, research the company and the people in it, bring in previous client work, generate a draft you can edit and argue with, then schedule the sequence. It also made something clear I hadn't expected going in. Whether you build or buy a tool like this comes down to which integrations you're allowed to make, not to how good your application is.

Delivered

The whole path end to end: prospect intake, research, contact enrichment, drafting, revising by conversation, settings, and workflow scheduling.

Validated

Regular conversations with the consultancy kept it tied to how they actually work, and tests plus interface walkthroughs confirmed the parts that exist behave the way they should.

Next

Sending anything for real would need approved channel integrations, better traceability back to sources, wider integration tests, and actual users.

Next projectVend & Go