Skip to content

Lemonbrand/outbound-engine

Repository files navigation

Outbound Engine

Part of the LemonBrand Build Challenges — tools you build, tools you own.

A proof-of-concept outbound email tool for podcast guest outreach, built in 21 minutes and 3 seconds with Claude Code. Manages contacts, templates, and AI-powered email generation — all running locally.

Outbound Engine Screenshot

What This Is (And What It Isn't)

This is a proof of concept — not a polished product. It was built in a single timed session to demonstrate what's possible when you pair Claude Code with a clear idea and a tight deadline.

What works well:

  • The matrix aesthetic is genuinely fun
  • The three-touchpoint email strategy is solid
  • Template variable merging works
  • Contact and template CRUD is functional

What's rough:

  • AI generation shells out to the Claude Code CLI instead of using an API key (should call Haiku or Sonnet via the Anthropic API directly)
  • No real history UI — the backend stores drafts but there's no tab to browse them
  • Not particularly useful for actual outreach tracking — you can't mark contacts as "emailed" or "replied" or track where someone is in the sequence
  • Data lives in flat JSON files with no validation
  • No search, no filtering, no sorting
  • Single-user only, no auth

The point isn't that this is ready to use. The point is that it went from zero to a working prototype in 21 minutes. Fork it, gut it, rebuild the parts that matter to you.

What It Does

  • Contact Management — Store guest details, notes, custom fields for personalization
  • Template System — Three-touchpoint email sequence (The Fan, The Value Add, The Hail Mary)
  • AI Generation — Uses Claude Code CLI to personalize emails following the anti-AI strategy (works, but should use an API key instead)
  • Template Preview — Merge {{variables}} into templates before generating
  • Optional SMTP — Send emails directly if you configure credentials
  • Matrix UI — Scanlines, digital rain, monospace everything

Quick Start

# Clone it
git clone https://github.com/lemonbrand/outbound-engine.git
cd outbound-engine

# Install dependencies
npm install

# Run it
npm start

Open http://localhost:3000. That's it.

Optional: AI-Powered Generation

If you have Claude Code CLI installed, the "Generate" button will use Claude to personalize your templates. Without it, the tool falls back to simple template merging.

If you're forking this: You'd probably want to swap the CLI call for a direct Anthropic API call using claude-3-haiku or claude-3-5-sonnet. The current approach works but it's clunky — it spawns a subprocess for every generation.

Optional: SMTP Sending

Copy .env.example to .env and fill in your SMTP credentials to send emails directly. Leave them empty for draft-only mode.

How It Works

Three tabs.

1. Templates

Pre-built three-touchpoint outreach sequence based on the anti-AI strategy:

Touchpoint Name When Goal
1 The Fan Day 0 Prove you know them + low friction ask
2 The Value Add Day 3-4 Show you're looking for a convo, not a booking
3 The Hail Mary Day 8-10 Remove guilt, leave door open

Templates use {{variable}} syntax that maps to contact fields and custom fields.

2. Contacts

Add the people you want to reach out to. Each contact has:

  • Name, email, company, role
  • Tags for filtering
  • Notes (your research about them)
  • Custom fields — these map directly to template variables

3. Compose

Pick a contact + template, preview the merge, then generate with Claude or save a manual draft.

Missing: A history/drafts tab. The backend saves every generated email to history.json with timestamps and status, but there's no UI to browse it. That's what 21 minutes gets you.

Project Structure

outbound-engine/
├── server.js              # Express API + Claude CLI integration
├── public/
│   └── index.html         # Full UI (vanilla HTML/CSS/JS)
├── data/                   # JSON file storage (gitignored)
│   ├── contacts.json      # Your contact list
│   ├── templates.json     # Email templates
│   └── history.json       # Generated/drafted emails
├── data-sample/            # Sample data (seeds on first run)
├── .claude/
│   └── outbound-strategy.md  # The anti-AI email writing guide
├── .env.example           # SMTP config template
└── package.json

Tech Stack

  • Node.js + Express — Lightweight API server
  • Vanilla HTML/CSS/JS — No frontend framework, no build step
  • Claude Code CLI — AI email personalization (should be swapped for API)
  • Nodemailer — SMTP email sending (optional)
  • JSON files — Local data storage, no database

The Anti-AI Strategy

The built-in strategy guide (.claude/outbound-strategy.md) is honestly the most valuable part of this repo. It follows three principles:

  1. Raw — Lowercase, no HTML, stream of consciousness. Kill the polish.
  2. Real — Reference specific details that prove you consumed their content.
  3. Relevant — Make it about them, not about you.

The goal: your email should fail the "Did AI write this?" test. If ChatGPT isn't sure, rewrite it messier.

If You're Forking This

Here's what would make this actually useful:

  1. Swap CLI for API — Use the Anthropic SDK with an API key instead of shelling out to claude. Call Haiku for speed, Sonnet for quality.
  2. Add a history tab — The backend already stores everything in history.json. Just needs a UI.
  3. Track outreach status — Add a status field to contacts: not_contacted, touchpoint_1_sent, replied, booked, etc.
  4. Sequence automation — Auto-suggest the next touchpoint based on days since last email.
  5. Better data storage — SQLite or even just validated JSON schemas.

Why This Exists

This is one of 28 build challenges from LemonBrand. Each challenge is a timed build session — the goal is to show what's possible, not to ship a perfect product.

21 minutes. Zero to working prototype. That's the point.

Related Build Challenges

  • Pricing Calculator — Dead-simple pricing for freelancers and consultants
  • Proposal Generator — Turn a conversation into a formal proposal
  • Invoice Generator — Create and track invoices
  • Contract Builder — Standard agreements with custom terms

See all challenges at lemonbrand.io.

License

MIT — do whatever you want with it.


Built with Claude Code in 21 minutes and 3 seconds as part of a LemonBrand build challenge.

About

A local outbound email tool for podcast guest outreach — AI-powered, anti-AI aesthetic. Part of the LemonBrand Build Challenges.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors