When we started building GrowthSync's MVP, we quickly noticed a very common recurring pattern. Users felt very weary letting AI1 just manage all of their communications with their end customers. That is totally understandable. Why would you want some random robot talking to your customers? One that does not capture your unique brand identity.

One solution for this was to create a draft mode. Our agent would create a draft reply for them in their brand voice which they can manually approve. This alone was not enough. We realized that there was a lot more to building trust than just an approval process. We needed a fool proof system that actually helps them inject their unique voice into every generated message.

Creating a brand voice

Since my brain was still in the old pre AI version of building UIs, the initial brand voice setup involved the following:

  1. Website URL: Used for a simple deterministic website scrape for our user's sites (typically Shopify).

  2. A brand voice textbox. This would be a way for them to describe their brand voice in human terms.

Our initial form

This worked relatively well. It could handle basic use cases like “Talk like a pirate.” This would add things like “Argh, Matey” to the messages, but it had trouble with more nuance. How can you joke around? How can you make sure that it stays serious if the conversation requires that, yet light hearted and professional when needed?

Getting more detailed

I realized that this would require talking to customers about their brand voice. They all have different ideas. Some have detailed brand documents, some have examples of what works and what doesn’t and others have simple guardrails like “Relaxed and professional.”

After doing this over and over, I realized that there isn’t necessarily an easy one size fits all approach. So, we could create the same type of interview/questionnaire we had been engaging in 1:1 with our customers, and build an agent to talk to them.

Our brand voice builder now feels like you are talking to a marketing professional. If you have docs that have scoped this out, then you can just share it with the agent and it will distill it for you.

An example of how the brand voice is created via chat

After doing that, we began getting much better feedback from users. Not only was it more loyal to the brand identity, but it was also much easier to set up. It relied less on prompt engineering, and more on just explaining your brand voice to the system and have it figure it out.

Technical Fun

It was actually interesting because I quickly hit the technical issues with my product assumptions.

I am very conservative when it comes to preventing AI spend from accidentally taking off. We have billing limits everywhere. We also make sure that certain features have a limit. If users start hitting them, then we bump the limit.

My product assumption was that people would not want to chat with this brand voice builder for too long. They want to download some thoughts, and stop. So, I added a very small cap on the length of the conversation, to prevent the context window from exploding with an extremely long conversation. However, the more I was testing it, the more I realized that we really needed the window and number of turns to have a relatively high cap. People don’t get their voice right in one exchange, or even two. They see a draft, react to it, and correct it, and that back-and-forth just takes longer than I’d assumed.

I also wanted to make sure that users had some sort of a jumping off point before beginning. We kept the website scraper to initially seed the brand voice builder as an initial message. It will scrape the site2 and use that to come up with an initial idea to iterate off of. That’s really the whole point of the format: nobody can describe their own brand voice from scratch, but almost everyone can correct a draft that’s close. So the first message was never really “tell me about your brand.” It’s “here’s what I’m hearing, is this you?” Then it keeps iterating until the user is comfortable with the output, and the whole conversation collapses down into two fields the rest of the system actually uses: the brand voice itself, and any extra context that doesn’t belong in the voice but still needs to shape a reply.3

Conclusion

None of this makes the model better at sounding like anyone. It just gives a user something to point at: the voice either came from a real back-and-forth, or the agent doesn’t run. You don’t have to trust that it sounds right. You can check what it was told to sound like, and that nothing goes out until it’s there.

1  On a side note - we really only use Vanilla Claude/ChatGPT. No need for anything like LangChain yet. I think we may wait a while until we do anything more complicated

2  We actually just use requests. Nothing fancy. Most of our users have a similar site setup - e.g. an about page, products pages, FAQ page, etc. We could, with a high degree of confidence, scrape most sites. It is much faster and more reliable than waiting on some AI browser bot to scrape it.

3  Because of how important this is, the brand voice fields are required before sending any campaigns. we don’t have a generic fallback. We would rather bet on increasing confidence by adding some friction in the process instead of just letting it run quickly and getting it wrong.