The board / Gated
Plyco outbound engine
Drafts the week's emails. Sends none of them. For now, that is the point.
Rails
- aloneReadsContacts and history from HubSpot.
- with a personWritesDrafts and rep tasks, by design. Today they stop at the review queue.
- not allowedMoneyNothing to price. Nothing to charge.
- with a personPublicWould send from reps' own inboxes. Hasn't yet.
- with a personUnattendedRuns weekly. Dry-run is the default.
- a person, every timeDecidesEvery draft is read by a person before anything else happens.
Problem
Outbound dies when a rep gets busy. The cadence slips, the follow-up never lands, the pipeline looks like a cliff.
The engine keeps the cadence and writes the first draft. Judgement, and the send button, stay with people.
System
Decisions
- Dry-run is the default. A kill switch, a bounce circuit breaker and daily caps sit in front of every send.
- A lint rule forbids delete calls against HubSpot from this codebase. The machine cannot tidy up after itself.
- 15% of each cohort is held out, so lift is measured, not assumed.
- Reply classification is scored against a labelled set before it is allowed to create a task.
Stack
Next.js 16, Inngest, Neon, Anthropic SDK, HubSpot, ZeroBounce