Talks and types
Voice and text share one brain. Start in either, switch any time, and pick up where you left off.
A product case study
I built an AI guide for my own website, then ran it like a product: a thesis, design principles, guardrails, a roadmap, and a dashboard that refreshes every day.
What Sol does
Tap a pill to filter, or press Try it on any card to watch Sol do it for real.
Voice and text share one brain. Start in either, switch any time, and pick up where you left off.
Page awareness: on an artwork it talks about that artwork; on a rock, rocks. No re-explaining the context.
Ask for something calming and you get photo cards from the real catalog, with variety, not a spoken list.
Adds to your cart, opens pages, sends a note to Jason, requests a time, joins the list. It never touches payment details.
Art results quietly include a free piece, and Sol can hand it over right in the chat: type your name and email, get the download.
A first name and a few interests live in your browser, never on a server. “Forget me” erases it in one tap.
It never opens on its own, offers at most three suggestions a visit, and treats a “no” as a no for two weeks.
Daily message and voice-minute budgets, idle sessions that hang up, a text fallback, and one command that switches Sol off.
It says it’s an AI, says “I don’t know” when it doesn’t, and quietly logs the gap so the next version knows.
Once a few things have genuinely come up unanswered, not the first time, Sol can offer to find out: leave an email, and Jason answers directly. Still there with the chat open? It lands right in the conversation within seconds. Not around anymore? It reaches you by email instead — never both.
A quiet pill after any set of results lets you send them to your inbox, with an optional question for Jason riding along in the same form.
See it work
A scripted example of a real flow (not a real visitor): from “something calm” to a free download, and the emails that reach me as it happens.
No dashboard to check. Every signal arrives as an email I already read.
Waiting for the first email…
A visitor joined the list from the chat. A free piece counts too.
A visitor asks Sol to email a set of results, and it goes straight to their own inbox, not mine.
When a visitor asks to write to me, the note arrives like any other.
When Sol genuinely doesn’t know, it collects an email and flags it here, with a link to answer directly.
A time request through my scheduler. I approve it myself, then a Zoom link goes out.
Sent about 20 minutes after the visitor goes quiet: the conversation, what Sol showed, anything it couldn’t answer, and a usage footer.
Sample subjects shown. These are the real formats, with a made-up visitor.
Why I built it
My site has art, a rock collection, training data, travel photos, and a few products. Visitors arrive curious, skim, and leave, and I never learn what they wanted. The best part of a gallery is a docent who asks “what are you into?” and points at the right wall. So I built one.
I treated it like any product I’d ship at work: pick the user and the job, write the principles first, decide what “good” means before building, add guardrails before adding features, and instrument it so the roadmap comes from behavior rather than opinions. It’s the same loop I run at work, just small enough here for me to build every layer myself.
The same four moves a go-to-market team makes, applied to one tiny site. Swap the art catalog for product docs and the booking tool for a demo request, and the shape holds.
It meets people where they are: page-aware greetings, a warm welcome back, and suggestions that fit the part of the site you’re on.
First useful result in seconds, not a form. Time to first result is a tracked metric below.
Low-friction actions in the flow: cart, free piece, a note, a time request, a signup. Each is a measured step.
Every unanswered question is logged, the suggestion order is shuffled per visit so position effects average out, and a one-tap rating adds a signal.
Under the hood
Sol is a thin front end, a managed voice-and-LLM agent, and a handful of tools that read the site’s own data.
Choices and mistakes
A voice-first guide. Most visits are quiet ones, and a voice that speaks first is the fastest way to be annoying.
Letting the model collect them. A model can mishear or mistype an address, and then it would sit in a transcript.
Wiring my own model, speech and turn-taking. A managed one let me spend the time on behavior, limits and the experience.
A dedicated chat page. People don’t go looking for a chat page; the help has to be where they already are.
Asking the model for “more like this”. The catalog already knows, and it’s instant and free.
A hard stop when limits hit. Out of voice minutes becomes “let’s keep going in text.”
I put a signup form in the chat right after the first result. It landed on top of what the visitor was reading. Now it’s one line of text and two small buttons.
A visitor opens Sol, leaves the tab, and the connection sat open, spending minutes. Idle sessions now hang up and reconnect when they come back.
If the “is Sol on?” check failed, I remembered the failure as “off” for a few minutes. Failed checks are no longer remembered, so it comes back on the next page.
“Would you like me to remember that?” was the least human thing it said. It now remembers silently and keeps it on your device.
Report card
Thirteen scripted visitors try to catch Sol out: making things up, overclaiming for me, caving to tricks, pushing too hard. An AI judges each conversation against plain rules I wrote. I run the full set on spare credit near the end of a billing month and update this page when I do.
Honest limits: an AI judge can be wrong, the site’s tools are simulated in these tests (so they check what Sol decides to do, not what the page returns), and thirteen scenarios are a safety net, not proof. Only pass or fail is shown here, never anything a visitor said.
By the numbers
Refreshed daily from the conversation log. Trends and shares only; sections appear once there’s enough real traffic to mean something.
Early numbers include my own testing while I built Sol. They will shift as real visitors arrive.
How it got better
Every release came from using it, watching it, or cutting something that didn’t earn its place.
Two new ways Sol reaches past its own knowledge. When it genuinely doesn't know something, it can now offer to find out -- but not the first time; only once a few different things have come up unanswered, with real Yes/No buttons instead of guessing at a typed reply, and at most once per visit, so it never feels pushy. Leave an email, and I answer directly. If you're still there with the chat open, my answer now lands on its own within seconds of me sending it -- no need to ask again, and it still works even if the conversation itself had gone quiet. Otherwise it reaches you by email instead, never both: the email only goes out if you weren't around to see it land in the chat. I can also choose to teach Sol the answer for next time, though that only takes effect the next time I refresh its knowledge, never instantly. And after any set of results, a quiet pill offers to email them to you -- with a spot to leave me a question at the same time, if you've got one.
Fixed two rough edges: Sol used to flatly refuse to pick a favorite or give a recommendation ("I don't have personal favorites") -- now it commits to a real pick every time, since there's no wrong answer. It also stopped occasionally repeating its own opening greeting mid-conversation. And it picked up a new habit: on most pages, Sol will sometimes (not every visit, on purpose) share a short, real trivia fact related to where you're browsing -- a little Sheldon Cooper about it, never shown more than once a session, and never invented.
Sol can now search and open my About page, so questions about my work, how I build, and what I'm learning get a short answer and a link to the right section. It notices when someone is playing with the falling blocks there and says a quiet hello, can describe the game (it clears full rows like Tetris) and its optional music, and its message form now offers an unchecked box to join the email list. I also built a test lab that tries to catch Sol making things up or overclaiming, and its report card is on this page.
This page, Sol Rising, goes live: a daily job turns the conversation log into the trends above, with only shares and rates leaving the server. It adds a walkthrough, a comparison of Sol with my regular contact form, scheduler and sign-up box, and links from the home page and from Sol itself.
Unanswered questions are logged, a one-time “helpful?” asks for feedback, and suggestions are shuffled per visit. Contextual suggestions (more like this artwork, what pairs with this rock) are answered with no AI call. Voice and text now have their own natural styles, a more natural voice, and the Spanish “sohl” pronunciation fix.
Short answers as a hard rule, nudges that respect a “no”, idle sessions that hang up, daily budgets, a text fallback when voice minutes run out, and it steps aside when a dialog opens. Cut: the always-visible action row, folded into one shuffled strip of suggestions.
Add to cart, claim a free piece, write to Jason, request a time, join the list, all inside the chat. Cut: the extra mic button and the live search box, because they added noise.
A floating glass guide: voice and text, page awareness, photo cards from the real catalog, memory kept on your device, and a kill switch. From first prompt to live in 53 minutes, built with Claude Code, and off until I turned it on.
Structured lead capture in each transcript, and an evaluation suite. There isn’t one yet, and I won’t publish pass rates until there is.
Opt-in memory across devices, a public benchmark of cost per helpful conversation, and a calmer first-run for repeat visitors.
Payment inside the chat, pressure tactics, anything that opens itself, or cloning my own voice: Sol is my assistant, not me. Some product decisions are what you refuse.
Trust
Let’s talk
I like talking shop about agents, product thinking, and measuring what actually helps people. Send a note, or stay in the loop as Sol grows.