Subsystem deep-dive

callconnor.com

The public front door: an "Ask Connor" chatbot that talks to visitors, researches their company in real time, scores the conversation, and turns it into a qualified lead.

0
Claude models orchestrated
0
Lead signals scored
0
Downstream destinations
0
API keys in the browser
What happens in a conversation
Visitor in, qualified lead out

Every chat runs through a single Netlify serverless function that quietly does four jobs while it talks.

Visitor chats. callconnor.com — asks name + company up front, natural conversation (Sonnet).
Live company research. On name capture — Sonnet + web_search, injected into the system prompt, every later reply is company-aware.
Sentiment scoring. Every few exchanges — Haiku JSON classifier: sentiment · interest · topics · fit · priority.
Logged to Airtable. One row per lead — name · company · first question, full conversation + scores.
Where leads go
From a chat to my morning

A captured lead doesn't sit in a table; it surfaces where I'll actually see it.

Airtable

store

The system of record: structured fields, full transcripts, sentiment scores.

Morning briefing

daily

New leads show up in my daily briefing automatically.

Weekly review

weekly

The week's pipeline rolls into the weekly review.

Command Center

live

A dashboard panel shows leads and lets me edit the bot's prompt and redeploy.

Right model per job

2 models

Sonnet for conversation + research, Haiku for the cheap sentiment classifier.

Cost control

capped

History capped at 10 turns per request, plus a hard spend cap in the console.

Built right
A real deployment, not a toy

Key stays server-side

The Anthropic key lives only in the Netlify function, never shipped to the browser. All calls route through the serverless backend.

Auto-deploy from git

Source is a private GitHub repo; Netlify rebuilds on every push to main.

Edit the bot from the dashboard

The Command Center can rewrite the chatbot's system prompt and push a redeploy. No code editor needed.

Spend is bounded

Turn-history truncation plus a console spend cap keep a public, always-on bot from running away on cost.