A product case study

Sol Rising.

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.

Jump to the numbers

What Sol does

A guide that shows, does, and stays out of the way.

Tap a pill to filter, or press Try it on any card to watch Sol do it for real.

Talks and types

Voice and text share one brain. Start in either, switch any time, and pick up where you left off.

Knows where you are

Page awareness: on an artwork it talks about that artwork; on a rock, rocks. No re-explaining the context.

Shows, doesn’t tell

Ask for something calming and you get photo cards from the real catalog, with variety, not a spoken list.

Gets things done

Adds to your cart, opens pages, sends a note to Jason, requests a time, joins the list. It never touches payment details.

A free piece, every time

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.

Remembers, on your device

A first name and a few interests live in your browser, never on a server. “Forget me” erases it in one tap.

Quiet by design

It never opens on its own, offers at most three suggestions a visit, and treats a “no” as a no for two weeks.

Budgets and a kill switch

Daily message and voice-minute budgets, idle sessions that hang up, a text fallback, and one command that switches Sol off.

Honest about what it doesn’t know

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.

Gets you a real answer

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.

Emails you the results

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 conversation, start to finish.

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.

SolSeeing: art
Scripted example
Ask Sol anything…

What lands in my inbox

No dashboard to check. Every signal arrives as an email I already read.

Waiting for the first email…

Sign-up New sign-up: Luna (Newsletter via Sol)

A visitor joined the list from the chat. A free piece counts too.

Results Sol sent your search results, Luna

A visitor asks Sol to email a set of results, and it goes straight to their own inbox, not mine.

Message Message via Sol from Luna

When a visitor asks to write to me, the note arrives like any other.

Question Sol needs an answer: meteorites in the Rock Collection?

When Sol genuinely doesn’t know, it collects an email and flags it here, with a link to answer directly.

Meeting New chat request: Luna, Thu 2:30–3:00 PM

A time request through my scheduler. I approve it myself, then a Zoom link goes out.

Transcript Sol: “Something calm for my desk”

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

A website is a conversation people can’t have.

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.

Who it’s for, and the jobs

  • The browser wants to find something worth looking at, fast.
  • The buyer wants to get a piece (or a free one) with no friction.
  • The curious builder wants to see how it’s made.
  • The person who wants Jason wants to reach me, or book time, without hunting for a form.

Principles I wrote first

  • Brevity is a feature. One or two short sentences; the card says the rest.
  • Show, don’t tell. Real photos from the real catalog.
  • Quiet by default. It earns attention; it never grabs it.
  • Never invent. Every claim comes from the site’s own data or Sol says it doesn’t know.

The GTM lens

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.

1

Acquire

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.

2

Activate

First useful result in seconds, not a form. Time to first result is a tracked metric below.

3

Convert

Low-friction actions in the flow: cart, free piece, a note, a time request, a signup. Each is a measured step.

4

Learn

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

Small parts, clear jobs.

Sol is a thin front end, a managed voice-and-LLM agent, and a handful of tools that read the site’s own data.

  1. Visitortext or voice, any page
  2. sol.jsUI, memory on device, page context, 17 tools
  3. ElevenLabs Agentconversation, voice, LLM, knowledge
  1. The site’s catalogsart, rocks, favorites, projects, training
  2. One server routesession, kill switch, budgets, transcript email
  3. Daily stats jobrides an existing cron, builds this page’s trends

Decisions worth explaining

  • Text first, voice optional. Most visits are quiet ones.
  • Emails never reach the model. Signups are parsed on the device and masked in transcripts.
  • Fails closed. If a check breaks, Sol steps back rather than guessing.
  • One server function. The host caps functions, so every Sol route lives in one file.

What the agent can call

search_sitefind_artfind_rockfind_favoriteshow_projectsadd_to_cartview_cartclaim_free_pieceshow_schedulershow_message_formshow_newsletter_signupnavigatehighlightpractice_snapshotset_themerememberflag_unansweredoffer_followupcheck_for_answer

The stack

ElevenLabs AgentsGemini 2.5 FlashVanilla JSVercelPostgresResend

Choices and mistakes

What I chose, and what I got wrong.

Alternatives I considered

ChoseText first, voice optionalOver

A voice-first guide. Most visits are quiet ones, and a voice that speaks first is the fastest way to be annoying.

ChoseRead emails on the deviceOver

Letting the model collect them. A model can mishear or mistype an address, and then it would sit in a transcript.

ChoseA managed agent platformOver

Wiring my own model, speech and turn-taking. A managed one let me spend the time on behavior, limits and the experience.

ChoseOne guide on every pageOver

A dedicated chat page. People don’t go looking for a chat page; the help has to be where they already are.

ChoseLocal suggestions, no AI callOver

Asking the model for “more like this”. The catalog already knows, and it’s instant and free.

ChoseBudgets that degrade gracefullyOver

A hard stop when limits hit. Out of voice minutes becomes “let’s keep going in text.”

What I got wrong

1A pop-up hid the first message.

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.

2Quiet sessions ran to the time limit.

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.

3A hiccup made Sol disappear.

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.

4Sol kept asking to remember things.

“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

How I test Sol before it talks to you.

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.

Loading the report card…

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

What conversations are teaching me.

Refreshed daily from the conversation log. Trends and shares only; sections appear once there’s enough real traffic to mean something.

How it got better

Shaped by use, one version at a time.

Every release came from using it, watching it, or cutting something that didn’t earn its place.

  1. v8

    Gets you a real answer

    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.

  2. v7

    More opinionated, more fun

    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.

  3. v6

    Knows my story

    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.

  4. v5

    Sol Rising goes public

    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.

  5. v4

    Learns, sounds human

    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.

  6. v3

    Quiet and efficient

    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.

  7. v2

    Does things

    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.

  8. v1

    Launch

    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.

Next

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.

Maybe

Opt-in memory across devices, a public benchmark of cost per helpful conversation, and a calmer first-run for repeat visitors.

Not doing

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

What stays private, and what I can turn off.

  • Sol is an AI and says so. Chats may be transcribed, and the full details live in the privacy policy.
  • This page shows trends and shares only: no raw visitor counts, nothing a visitor typed, no individual conversations.
  • Typed emails are read on your device and masked in saved transcripts. Payment details are never shared with Sol.
  • I can switch Sol off with one command, and daily budgets pause it before it can run away.

Let’s talk

Building with AI agents? Let’s compare notes.

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.

Keep in Touch

Stay posted

Send a note

Hello Jason

A Friday night

The moments under an hour.

From first prompt to a live AI guide, built with Claude Code. Times are minutes since the first prompt.

  1. 0:00
    The first prompt

    “Build an AI guide for my site, with a voice and text.”

  2. 0:19
    The agent exists

    Created on ElevenLabs Agents, with a voice and a first set of rules.

  3. 0:27
    First commit

    Eleven tools, a kill switch, and a front end of about 700 lines.

  4. 0:38
    Chat and Talk

    Tabs, quick actions, and a privacy link, after the first real look.

  5. 0:46
    Privacy policy, updated

    A new section for the AI guide, and answers cut down to a sentence or two.

  6. 0:49
    Search and phones

    One search across art, rocks and favorites, plus a pass for mobile.

  7. 0:53
    Live

    Switched on for visitors.

53 minutes 13 commits 11 tools at launch

Everything after that was learning from use. The versions below tell that part.