workflows active: 44 last morning round: Thu 07:00 last deploy: 2026-09-03
Founder / 2026 to present STEDD / 01

Stedd

I built a product for the trades because I understand two things most software people do not: follow-up marketing, and how a contractor's day actually goes.

What it is

Revenue recovery for trades businesses. Four engines: Catch answers and captures the calls that would have been missed, Chase follows up on quotes that went quiet, Keep turns finished jobs into reviews, and Revive re-engages customers who lapsed. Two-tier packaging. We stay out of the CRM category on purpose. Nobody in the trades wants another system to manage. They want the leaks plugged.

The buyer is usually the office manager, or the spouse running the front of house while the owner is on a roof. Everything is built for that person, down to reports in plain English with receipts attached.

What's running

  • An AI voice agent that answers the line and books jobs while the caller is still on the call, checking the real calendar live and confirming a slot before hangup.
  • Nightly transcript QA. Every call gets reviewed against my checklist, and anything flagged pages me.
  • The prompt patch loop: the nightly QA proposes the smallest fix, I approve or reject from my phone with a single-use token, rollback is one click, and a monthly consolidation review keeps the prompt from drifting into a patchwork.
  • The outcome confirmation loop: clients confirm each week which leads became jobs and which quotes closed, with a reply grammar a busy owner can answer in ten seconds.
  • A per-client provisioner that stands up a phone number, a voice agent, and a website chat agent from one intake.
  • Nightly Postgres backups emailed with row counts, error alerting on every workflow, a revenue leak audit generator for prospects, and a sample Monday Report generator for demos.
  • Built and staged, waiting on carrier approval: the SMS engines and the founder daily digest.

The pilot is a pilot client in auto detailing, live on the voice line.

Stack

n8n on a digitalocean vps / postgres / retell / twilio / anthropic api / cloudflare workers (uptime monitor) / stripe / mercury / google business profile

There's also a self-hosted voice prototype, built on ConversationRelay, in the stedd-voice repo. Retell stays on the live line for now because my prototype isn't better than it yet. The README explains the tradeoff.

What I learned

A2P 10DLC registration will reject you for reasons that have nothing to do with what your product does, and every SMS feature you promised waits behind it. The SMS engines were built early and have sat staged for months. If I did it again I'd file the registration paperwork the same week as the LLC.

Early on I made a rule after watching how call handoffs actually land: the agent never presents itself as a replacement for a person the caller knows by name. It answers as the business, books the job, and never pretends to be anyone on the crew. Every prompt is written under that rule.

The outcome confirmation loop exists because dollars-saved reporting means nothing until somebody confirms the dollars. The system can count calls caught and quotes chased all day, but until the owner confirms a job actually closed, it's a guess. So confirmation is a product feature, and the Monday Report only claims what the client has confirmed.

0:00 / 1:26
  1. SteddThanks for calling Stedd, this is Sam. What can I do for you?
  2. CallerHi, I'm looking to get a quote on painting the outside of my house. It's 2 stories, maybe 2,400 square feet.
  3. SteddWe'd love to help with that. Can I get the address where the work would be done, including the street and town?
  4. CallerI'm in Warwick, New York. I can text over the street address.
  5. SteddThat works. Let me get your name first so we can pull this together for you.
  6. CallerIt's Will, W-I-L-L.
  7. SteddGot it, Will. And what's the best number to reach you at?
  8. CallerThe number I'm calling from is fine. A text is easiest.
  9. SteddPerfect, we'll use that number. So we've got a 2-story exterior paint job, roughly 2,400 square feet in Warwick, let me get you on the schedule for an estimate. Would a weekday morning or a weekend afternoon work better for you?
  10. CallerSaturday morning would be best, 9 or so, if that works.
  11. SteddJust to confirm, are you thinking this coming Saturday?
  12. CallerYes, that's right.
  13. SteddThis coming Saturday at 9 AM it is. We'll send a text to confirm once we have your street address, just shoot that over when you get a chance and we'll get you all set.
  14. CallerNo, that's everything. Thanks a lot. Bye.
  15. SteddSounds good, Will, we'll be in touch. Have a great day!
Monday Report Ridgeline Painting, sample
$3,360recovered this week
3estimates booked
  1. Mon 8:12aMissed call, called back inside two minutes, estimate booked
  2. Tue 6:40pCold quote chased, won back$2,800
  3. Wed 11:05aReview asked for after the job, earned
Demo call, recorded 2026-09-03. A synthesized voice reads the homeowner's lines into the live line; the agent is itself. Pauses between turns trimmed to a beat, nothing else cut.
The stedd.ai home page: the headline stop losing jobs you earned beside a live demo widget playing a transcript of the voice agent handling an after-hours fence call
stedd.ai, live. The demo widget runs the real line.
The stedd.ai ROI calculator: three sliders for job value, missed calls, and cold quotes, live math showing what slips through, and a cost comparison table
The ROI worksheet on stedd.ai.
Live booking stedd / the caller never waits on a callback Caller Voice agent n8n + calendar Calls in after hours too Proposes a time caller still on Checks calendar live Books or declines booked or busy Confirms live or another time nightly transcript QA reviews every completed call against the founder checklist
Live booking, as turns taken.
Stage 1 / propose (nightly) (trunk path shown: 15 of 17 nodes) SCHEDULE Nightly 1035pm ET POSTGRES Load Fresh Findings CODE Group By Agent LOOP Agent Loop POSTGRES Load Agent Context CODE Explode Finding Calls HTTP Fetch Call Transcript CODE Assemble Context IF Can Propose CLAUDE Claude Propose Patch CODE Validate Proposal POSTGRES Insert Proposal CODE Build Decision Email GMAIL Send Decision Email POSTGRES Mark Findings Processed Stage 2 / decide (apply or reject) (trunk path shown: 11 of 22 nodes) WEBHOOK Execute Patch POSTGRES Load Proposal CODE Evaluate Decision SWITCH Decision Router POSTGRES Claim Token IF Claim Won HTTP Push Prompt To Retell POSTGRES Record New Version POSTGRES Mark Proposal Applied TWILIO Confirm SMS RESPOND Respond Applied Stage 3 / rollback (one click) (trunk path shown: 9 of 10 nodes) WEBHOOK Rollback Request POSTGRES Load Rollback Target CODE Evaluate Rollback IF Can Rollback HTTP Push Base Prompt To Retell POSTGRES Record Rollback Version POSTGRES Mark Rolled Back TWILIO Rollback SMS RESPOND Respond Rolled Back Stage 4 / consolidate (monthly) SCHEDULE Monthly 1st 8am ET POSTGRES Load Prompt State CODE Build Consolidation Email GMAIL Send Consolidation Email
The prompt patch loop, all four stages. Rendered from workflow export, 2026-08-31.
The outcome confirmation loop stedd / a weekly reply grammar n8n Client Sunday 6pm email open leads, quotes Replies won, lost, pending Parse the reply outcomes applied Wednesday nudge skips who answered Flag the odd ones odd replies, to me
The outcome confirmation loop, as turns taken.
The Stedd Monday Report sample with numbered pins on the recovered-this-week tile, the quotes-rescued tile, and the per-touch receipts
  1. Recovered this week: the number the report exists for.
  2. Quotes chased and won back, with the dollars.
  3. Numbered per-touch receipts: what happened and what it was worth.
The Monday Report, sample edition: rendered straight from the demo generator's own template, seeded numbers and all.