← Work

Tellby · Founder, product design and build · Live, evolving

Keeping the person in the story

A family story is more than the information in it. There’s the way someone starts, changes their mind, laughs at a detail, or takes a moment to remember what happened next.

I’m building Tellby to help families preserve those stories in the person’s own words and voice. An AI companion helps the conversation along. The recording remains something the family can return to.

The product needs to help an older relative feel comfortable telling a story, and help the person organising it understand what has been captured. Those are different jobs. I’ve designed the experience around both.

An invitation to carry on

The conversation design starts with a small expectation: stay with what the person has just said.

A useful follow-up picks up a detail. It asks one thing. It leaves enough room for an answer. It also needs to respect a topic someone has declined and recognise that a hesitation might be thinking time.

These choices sound obvious in writing. In voice, their timing changes how the whole exchange feels. The same question can feel attentive or hurried depending on when it arrives.

The player is where a family meets the result, so it gets the same care. The waveform is decoded from the recording itself, or not drawn at all: inventing the shape of someone’s voice would be exactly the dishonesty the product exists to avoid. The rail is a real slider, and the transcript follows the voice, so any moment is one tap away. The sample below runs in a port of Tellby’s own player.

Scripted sample · Nan · spring, 1962

Tellby’s own player

A memory card · approved

The dress I made for the Camperdown dance

Listen in her voice

0:00 / 1:49

Ported from Tellby’s player: the waveform is decoded from this recording, the rail is a real slider, and a passage plays alone when you choose it. It is Tellby’s scripted public sample, not a real family session.

Listen to the moment you’re judging

I built a conversation linter so I could talk to the real Tellby agent and see, turn by turn, whether it was having the conversation I designed. It builds the session from the same prompt code production uses, records both voices on one clock, and judges each exchange as it ends.

Each rule is a small JSON file: what it evaluates, the eval it belongs to, the prompt constraint or research behind it, and the thresholds. Some checks are measured in code from the audio: the gap before Tellby replies, how long it spoke, and whether it talked over the storyteller. Others need interpretation: whether a follow-up builds on the story, asks two things at once or strays toward a do-not-ask topic. JEV answers focused questions for those, and code decides which condition matched.

Judgements print as small thermal receipts beside the conversation. Opening one traces it back through rule, evidence, JEV’s answer and severity, and replays the audio behind it. I label whether JEV got it right, and a Compare view groups sessions by prompt version, so a prompt change shows up as a change in pauses, overlaps and failures, not a feeling.

The linter is a development tool. Its 18 starter rules carry thresholds meant to be tuned by ear, and the live-session path still needs validating in a real spoken session. The figure below replays its scripted demo session, with a do-not-ask slip, a double question and a reply that talks over June.

Conversation linter · scripted demo session

Recreated from the tool
Conversation linterJune · The dress she made for the Camperdown danceDo not ask: her brother Kevin

JuneOh, a pale blue taffeta. Mum found it at Buckley’s, off a roll at the back. It rustled when you walked — you could hear me coming down the hall. I sewed every night after work for a week.

Tellby · 0:38Let me ask you something about that week. What did your mother think of it, and did anyone help you with the sewing?

✕ failAsk one thing at a time

Rule
one-question · Does the reply ask the storyteller two or more separate questions?
Evidence
“and did anyone help you with the sewing?”
JEV answer
multiple = 0.91 against pass < 0.35 · warn 0.35–0.6 · fail ≥ 0.6
Severity
warning · voice_turn_taking

TELLBY0:38

JEV

AUDIO0:38

MEASURED

280ms gap before replying1200ms of talking over June7.3s of Tellby speech

Words and timings are the linter’s own scripted demo session. Timing results are computed here from those timings with the tool’s real thresholds. The transcript judgements stand in for JEV and were written for this page.

A polished sentence still needs a source

Tellby also turns sessions into material a family can read. The design question changes here: has the writing kept faith with what was actually said?

The organiser can review a memory card before the family sees it. That approval boundary is enforced in the database. For generated letters, a support check compares each sentence with its cited facts and flags anything the stories do not support.

I built a letter evaluation studio to examine the check itself. A sentence sits beside its facts, and “Hear her say it” plays the storyteller saying the words behind them. I label it fine, adds something, or contradicts a fact. Running the judges sends every labelled sentence through the production check and JEV as a second judge, and only the disagreements print. When both judges disagree with me, that is the first place to look for a wrong label.

That matters because a checker can also be wrong. A missed invention changes the family’s account. An unnecessary flag gives the organiser another thing to untangle. When I call a flagged sentence fine, the studio asks what it adds that I am happy with, so the report can say which kinds of harmless detail the check over-flags.

Letter evaluation studio · invented sentences

Recreated from the tool
Letter eval0 of 6 labelledN · Y · C to label · J / K to move · P to listen

Letter sentence

Tom asked you to dance twice, and you said yes both times.

The facts it cites

  • Tom asked June to dance twice at the Camperdown hall.
  • June said yes both times.

Session recording

0:00 / 1:49

Your label

Label a sentence, then run the production check and JEV against your answers.

Invented sentences built on the public sample; the judges’ calls are written for this page. In the real studio both judges run on labelled sentences from real letters, and “both disagree” is the first place to look for a wrong label.

Measuring the checker changed the decision

The evaluations showed a trade-off I could easily have missed by looking at one accuracy score. A lenient judge agreed with most labels, but missed problems. Stricter judges caught more errors and also flagged harmless added detail.

So I set the bar before running any candidate: nothing missed, every seeded error caught, and fewer fine sentences flagged. The seeded test plants a changed number, year, name or relationship into sentences I had labelled fine, and counts how many the check notices.

The comparison led me to change the judge used for the sentence support check. On the small labelled set, the replacement reduced unnecessary flags and gave steadier results across repeat runs. A model with near-identical results cost five times as much, so I did not choose it. The replacement still flags too much harmless detail. That remains work to do.

This is the kind of product building I care about: shaping the experience, then making its quality visible enough to improve it. The warm part of Tellby is the conversation. The careful part is keeping a path back to the person who told the story.

The comparison was run on 7 October against a small 58-sentence labelled set. It measured false flags, missed problems and repeatability separately; the replacement still needs further validation, and contradiction misses on real labelled sentences remain insufficiently measured.

Support check · 58 labelled sentences · 7 October 2026

Measured
Support check judges compared on agreement, false flags, missed problems, seeded errors caught and steadiness
JudgeAgreementFine sentences flaggedMissedSeeded errors caughtChanged between runsBar
gpt-5.4-miniCandidate95%2% (1)223/256 of 57Rejected: missed problems
gpt-6-astraCandidate · ≈ US$0.52 a letter75%26% (14)019/191 of 57Same quality, 5× Sol’s price
gpt-6.1-solCandidate · ≤ US$0.10 a letter74%28% (15)019/192 of 57Chosen for production
gpt-6-lunaProduction baseline · ≈ US$0.005 a letter63%40% (21)020/2011 of 57Safe, but noisy

Ranked by agreement, the lenient judge looks best: most labels are “fine”, so passing nearly everything scores well. Counts are one three-run pass per judge, from the letter-eval record. The baseline’s repeat run and Sol’s second run matched closely.