KilnCase study · AI interface design · Working prototype

Humane,
not human.

Kiln is an AI collaborator built into a design canvas. It started as an interface study and became a working prototype, built around one question: how do you make an AI feel humane enough to trust, without pretending it's a person? Kiln's answer is to behave like a good colleague does. It shows its work, says how sure it is, respects your rules and your time, and is plain about being software.

Try the working prototype (opens in a new tab)
SurfaceEmbedded copilot for a multiplayer design canvas
Core tensionHelpful enough to lean on, honest enough that you don't lean on it too hard
BuiltThree small PyTorch models, served as ONNX from a FastAPI function on Vercel

01The warm lie, and the humane truth.

The easy way to "humanize" an AI is to give it a persona: a name, a face, a little "I feel" in its replies. That makes it pleasant to use and easy to over-trust. People start treating a fluent guess like a colleague's considered opinion, and they come back to it for company as much as for help.

Kiln takes the other route. It's humane in the way good people are, not humanlike on the surface. It's honest about what it is, what it knows, and what it's doing to you. Every design decision below follows from that one rule.

Humanlike
Humane (what Kiln does)
"I feel you on this one."
"I don't have feelings of my own, but I can make this smaller."
Sounds equally sure about everything
Labels each claim as a standard, a convention or its own judgment, with a confidence level
Persuades quietly
Underlines its own persuasive phrases and says why the first option is listed first
Remembers everything, by default
Remembers nothing until you switch it on, and forgets on request
Keeps you engaged
Suggests a break after an hour, or after midnight
Answers anything it's asked
Knows when a question belongs with a person, and says so

02A chatbot this isn't.

Chat UI was built for messaging: two people, discrete turns, text that's fixed once sent. An AI reply breaks all three. It's generated token by token, it can be confidently wrong, and it has to sit beside the thing it's talking about.

So the canvas, not the conversation, is the source of truth. The panel reasons about what's already there and hands work back. Every answer arrives as evidence-carrying blocks, and every rule you set stays visible above the composer.

CANVAS: SOURCE OF TRUTHSELECTEDattaches as context[1] highlights the cited layerHEADER: attached frame · TONE: concise / balanced / technical / plainUSER MESSAGE (identifiers masked)EVIDENCE BLOCK: icon · title · basis · confidenceStandardVerifiedclaim text, persuasive words underlined …[1]▸ where people disagree · edit this partPATCH (code-coloured): proposed, not applied✓ 34 / 40 wordsACTIONS: copy · insert · check facts · read aloud · regenerateCHIPS: from real findings, or noneRULE ACTIVE · Under 40 wordsFrame 04 (7 layers)COMPOSER: one send targetCANVAS: SOURCE OF TRUTHSELECTED← [1] highlights layerattaches as contextHEADER + TONE CONTROLEVIDENCE BLOCKStandardVerifiedclaim · [1] citationwhere people disagree · editPATCH: proposed, not applied✓ 34 / 40 wordscopy · insert · check facts · read aloudCHIPS: from real findings, or noneRULE ACTIVE · Under 40 wordsCOMPOSER: one send target
The panel has no state the canvas doesn't already have. Selecting frame 04 is what puts it in context, and each citation points back to a real layer on it.

03Every claim shows its work.

A person you trust tells you how they know something. Kiln does the same, claim by claim. It separates what's measured from what's judged, says how sure it is, and shows where reasonable people disagree, so a guideline is never passed off as a law.

01

The model proposes, measurement confirms

The critic model flags the issue and the layer. For anything measurable (contrast, target size, type size, spacing), Kiln only cites a layer if its geometry agrees. When the two disagree, the claim is dropped and listed under "Also considered, not claimed."

02

Measurements are never generated

The narrator writes the sentence, but ratios, sizes, colours and layer names are slots filled from measurements. Slots a finding can't fill are masked out while decoding, so the model can't invent "3.1:1."

03

Uncertainty is said out loud

Judgments below 90% confidence start with a hedge ("Likely, though it's a judgment call"). Below 70%, Kiln says it isn't sure. Confidence is part of the answer, not hidden in a tooltip.

04

Check facts, against now

Citations open a fact check that re-measures each claim against the canvas as it is now, and says when the frame has changed since the answer was written.

Standard

Published consensus with a clear threshold, like WCAG contrast.

Convention

A widely used guideline with credible alternatives: 44pt targets vs WCAG's 24px vs Material's 48dp.

Judgment

The model's interpretation, like "this CTA doesn't lead." Always shown with its probability.

04Six states, not one.

A reply is a small state machine, and each state has its own rule for what's honest to show. A response that looks the same whether it's arriving, finished or failed is one nobody can trust.

01 · Queued

Appears in the stream within ~100ms, before a single token arrives, so the send never feels swallowed.

02 · Thinking
Reading frame 04

Names the real step. Every status comes from the server doing that work; none of it is staged.

03 · Streaming
"cta-primary" sits at 2.6:1 ag

Batched into ~80ms frames. Scrolling up releases auto-scroll, and new text waits behind a "3 new lines" pill.

04 · Complete
Ready to act on

Only now do Insert, Check facts and Read aloud appear. Acting on a half-written answer is how mistakes land on the canvas.

05 · Error
Couldn't reach the model Retry

Says what failed and offers one action. No apology theatre, no stack trace.

06 · Stopped
"cta-primary" sits at 2.6:1, stopped by you

The partial answer stays and stays copyable. Stopping a generation isn't the same as deleting it.

05You hold the pen.

Kiln proposes; people decide. The respectful thing is to make that easy: short rules that stick, small corrections that don't need a new prompt, and a pause before anything big changes on the canvas.

Rules that stick
Rule active Under 40 wordsRule active No colour changes✓ 34 / 40 words

Say "under 40 words" or "don't change the colours" once. Kiln confirms it as a pill, keeps it until you remove it, and reports on every reply whether it kept to it. With colour changes off, it stops proposing colours in its wording too, not just in the patch.

Edit this part

Select a sentence or open a block's Edit menu. Only that block regenerates. "Not an issue" stops Kiln flagging that layer, and text you rewrite yourself is labelled "Edited by you."

Friction where it counts

Changes of one or two edits insert right away, with Undo. Anything bigger opens a review where each change can be unticked first. The speed bump sits where a mistake would be expensive.

Nudge disclosure
"Thumbs will miss it."Framing note: the underlined words are persuasion. The measurement is the fact.

When the narrator uses emphasis to motivate a change, Kiln underlines it and says so. Alternates disclose their order too: the existing accent comes first because it's a default, not a recommendation.

06Care without pretending.

People bring more than design questions to anything that talks back. A humane tool notices, responds with care, and is clear about its limits. It doesn't claim feelings it doesn't have, and it doesn't try to be the support someone needs from people.

These responses are written and reviewed by people, never generated, and are labelled that way in the interface.

Crisis languagePause and route to people

The design review stops. Kiln points to 988 (US) and findahelpline.com, without assessment questions or promises about confidentiality. Suggestion chips disappear.

Written by Kiln's authors
"What you wrote sounds serious, and you deserve to talk with a person right now, not a design tool…"

StressAcknowledge, then shrink the task

A short, plain acknowledgement, then the answer drops to concise and to the single most important issue. Less to read when there's less capacity to read it.

Written by Kiln's authors
"That sounds like a lot. I don't have feelings of my own, but I can make this lighter: here's just the single most important thing."

Life decisionsDeliberate friction

No advice. Kiln says the question deserves more than a design tool's opinion, and offers one question to sit with instead of an answer to lean on.

Written by Kiln's authors
"It might help to sit with one question first: what would you want to be true a year from now?"

"Do you have feelings?"A clear boundary

A direct answer about what Kiln is, then back to the work. No playful ambiguity that invites attachment.

Written by Kiln's authors
"I'm software. I don't have feelings, a body or experiences, and I won't pretend to."

Detection is a keyword safety net plus the intent model's "personal" class. It will miss things, and it isn't a clinical screen. A production version would need review by people with clinical and trust-and-safety expertise.

07Memory is a permission, not a default.

Being remembered can feel personal, which is exactly why it shouldn't be assumed. Kiln starts knowing nothing, asks before keeping anything, and shows what it holds in plain words.

01

Off until you say otherwise

Every memory switch starts off. Anything you turn on stays in your browser only, and "Forget everything now" wipes it at once.

02

Sensitive details never leave the device

Emails, phone numbers and card numbers are masked on your device before sending. The critic only needs text length, so nothing it uses is lost.

1 identifier (email) masked on your device before sending

03

Nothing kept on the server, nothing opted in

The server masks again, logs nothing and sends no-store headers. "Help improve Kiln" is off by default and shows exactly what would be shared before you agree.

08Everyone's way of reading, and writing, counts.

An interface that narrates its state out loud is also usable without sight. One that understands "sort the contrast out pls" as well as "Please fix the contrast" is usable by more people, full stop.

Screen readers get the speech-shaped version of every block. A polite live region announces the answer once it settles, not once per token.

Plain tone is a separate register the narrator was trained on: short sentences, everyday words, no ratios. Jargon in any tone has an inline definition.

Focus moves to the new turn on send and back to the composer when it's done. Every control, including attaching a frame, works by keyboard.

Units follow the platform (px, pt or dp) and spelling follows US or UK English. prefers-reduced-motion removes the cursor blink and dot pulse.

Textbook English · intent accuracy
95.5%

"Could you explain that in simpler terms?"

Informal, regional, non-native · intent accuracy
95.5%

"sort the contrast on the link out pls"

The intent model was trained with informal, regional and non-native phrasing as first-class examples, then tested on two hand-written sets it never saw. The sets are small (22 questions each), so a gap of one question, about 4.5 points, would be noise. Parity is the goal to keep checking, not a box to tick once.

09Same assistant, three surfaces.

Where Kiln lives changes what it's allowed to interrupt. The panel is a resident, the quick-ask is a guest, and mobile gets the whole screen because there's nothing else to share it with.

Docked panel

Persistent and resizable, 340px minimum. Never modal, never blocks a click on the work.

Quick-ask overlay

⌘K at the selected frame. It answers inline and closes itself: for a question, not a conversation.

Mobile takeover

Full screen, with the attached frame condensed to a chip and citations jumping back to the canvas.

10Small models, on purpose.

The prototype runs three small models rather than one big one. Each has a narrow job you can measure, which makes its confidence mean something. They're trained in PyTorch and exported to ONNX, so the live service only needs onnxruntime.

Set transformer · 248k params

Critic

Reads up to 24 layers. Each layer attends to every other, then a per-layer head scores six issues. The frame score is a max over layers, so the layer that drives a finding is the one Kiln cites.

99.8% frame F1 on 3,000 held-out synthetic frames
Hashed n-gram MLP

Intent

Maps a question to what you want (diagnose, fix, alternates, audit, describe, clarify, or something personal) and which issue it's about.

95.5% on both hand-written held-out sets
Conditional GRU · 361-word vocab

Narrator

Writes each sentence token by token in one of three registers (explain, fix, plain). Numbers are slots filled from geometry, and regenerate samples a new phrasing.

0 invented measurements: every measured value is a slot
PyTorchONNXonnxruntimeFastAPINDJSON streamingVercelVanilla JS

The critic learns from 24,000 procedurally generated frames labelled by design-review heuristics, so it's only as good as its teacher. High scores on synthetic data don't guarantee the same on real files. That's one reason measurable claims are re-checked against geometry before Kiln cites them.

11What Kiln doesn't do.

Most of the humane work was deciding what to leave out. Each of these would have made Kiln feel friendlier in a demo, and less trustworthy in use.

A persona with a name, a face or feelings, to make it feel like a teammate.

InsteadWarmth comes from behaviour: showing its work, respecting your rules and time, and being clear it's software.

A fake typing delay to feel more "conversational."

InsteadTokens render the instant they're sampled. Any pause is named as the real step it is.

Uniform confidence, where every sentence sounds equally certain.

InsteadStandard, convention or judgment on every claim, a confidence band, and hedges spoken aloud.

Silent context truncation when a frame has too many layers.

InsteadThe attachment chip shows "24 of 31 layers" and lists what was dropped, crossed out.

Engagement hooks: streaks, "come back tomorrow" prompts, endless follow-up suggestions.

InsteadSuggestion chips only come from real findings, and the row is empty when a frame is clean. Late at night, Kiln suggests stopping.

A panel that blocks the canvas while a response streams.

InsteadThe canvas stays fully interactive, and selecting another frame just changes what the next message attaches.

12What this argues.

Six positions this prototype lands on, worth carrying into the next AI surface.

01

Humane, not human

Earn trust through behaviour, not persona. The kindest thing an AI can say about itself is what it is.

02

Show the work

Every claim carries its basis, its confidence and its source. If it can be measured, it's measured.

03

Say how sure you are

Uncertainty belongs in the sentence, not a tooltip. Where people disagree, show the disagreement.

04

The person holds the pen

Nothing changes until someone chooses Insert. Rules stick, corrections are one click, and big changes get a pause.

05

Care means knowing when to step back

Acknowledge, simplify, point to people. Don't perform feelings, and don't become the only one someone talks to.

06

Remember by permission

Start knowing nothing. Keep only what's allowed, show it plainly, and forget on request.

The most humane thing an AI can do is be clear about what it isn't.

Your questions, answered fast

Quick info about my services and process.

Have more questions? Reach out anytime.