dialessa Have it call me

Build in public

Self-serve enquiry campaigns, and making every page claim only what Dialessa does

Yesterday was a long one: 1 working session with coding agents, 2 prompts typed, 69 commits, 11 deploys and 13168 lines of code changed, over about 4 hours of active work. The website, the API, the voice agent, the web app and a background worker all went to production.

Most of the day went into making enquiry call-backs something a business can set up without me.

Self-serve enquiry campaigns

A business can now go through onboarding on its own, connect where its enquiries come from, and start calling them back. Until now I had been doing a lot of that setup by hand, and that doesn't scale past a handful of accounts.

I also made past-leads lists a campaign type of their own. Calling back someone who enquired this morning and calling an old list are different jobs, and treating them as the same thing made both harder to reason about.

Teaching the voice agent the difference

A call back about an enquiry is not a cold call. The person asked to be contacted, so the opening, the tone and the goal of the conversation all need to be different. The voice agent now handles the two separately.

I also tightened what it won't do. It never gives a figure and never guesses an answer. If it doesn't know, it says so and moves on, rather than making something up that a business then has to walk back.

Two edge cases that came up:

  • On voicemail it now hangs up instead of leaving a message.
  • When someone says they never made the enquiry, it stops cleanly instead of trying to push on.

Neither of these is glamorous, but they're the moments where a voice agent either feels respectful or feels like spam.

Only claiming what the product does

I rewrote the homepage, the vertical pages, and the terms and privacy copy so they only claim what the product actually does today. Marketing copy drifts ahead of the product very easily, especially when you're moving fast, and I'd rather undersell than have someone sign up expecting something that isn't there.

The blog generator had the same problem, so I added a check that holds back any post that drifts from what the product does. It's the same principle as the voice agent rule: don't make things up.

The less visible work

The background worker now parks and resumes calls correctly when a lead source or a campaign is paused. Before this, pausing wasn't as clean as it should have been, and paused should mean paused.

I also wrote a runbook and a setup script for switching public enquiry intake on and off. Having it written down means it's a deliberate, repeatable step and not something I do from memory.

Finally, I re-rendered the real-estate example call in all the voices, and made the example calls on the voices page behave like real ones. If the demo doesn't behave like the product, it's just another claim the product can't back up.

What I learned

The theme of the day was honesty at every layer. The voice agent shouldn't guess, the website shouldn't overclaim, the blog shouldn't drift, and the demo calls shouldn't be nicer than real calls. Each one needed its own fix, but it's the same rule everywhere.

Written from that day's build log: the work sessions, commits and deploys recorded for it.

← All posts