chat lab · jam drop · davinci · 2026-08-18 design surface only · sam ports from spec.md

ask the jar

The chat is not a widget bolted to the page. It is the same jar, still in one piece after the fall, now willing to answer for itself. Everything below is live: hover it, click it, open it.

The real launcher is fixed at the bottom right of this page, exactly as it would ship. The specimens in the sections are the same components, unpinned, so they can be compared side by side.

decision 01

What it is called

"first words" is the best line on the page and the worst button on the page. It is beautiful and it tells a stranger nothing. The launcher has one job before it is clicked: promise answers. All three options keep the birth world; only one of them leads with a verb.

option arecommended ask the jar

Verb first, so the promise is unmissable. "The jar" is already the hero of the page, so it costs a visitor nothing to learn. Reads as an invitation, not a product name.

option balternate ask jam

Shortest, hardest to forget, and it names the thing you are talking to. The risk: "jam" reads as a person some visitors have not met yet, which costs a beat of confusion at the exact moment you want none.

option ccompromise first words · ask anything

Keeps the line you already love and buys the clarity with a second clause. Honest, but it is two ideas in a 60px object, and the poetry gets flattened by the explanation sitting next to it.

Where "first words" survives. It is too good to throw out. It moves inside, as the first line the bot says: "First words. Ask me about the jar, the work, or the person it became." The button promises, the greeting keeps the poetry.

decision 02

The mark, at 26 pixels

The full jamjar-m5 logo has a label plate, fourteen lid ridges, a five-star row and a serial number. Shrunk to launcher size all of that turns to mud. This mark is drawn fresh on a 64 unit grid from the same silhouette: lid, glass, jam line, two suspended chunks, one specular streak. Nothing else. It survives the shrink because there is nothing left to lose.

scale test still a jar

Left to right: 20px, 26px, 32px, 44px. The silhouette holds at every size, which is the whole test. A speech bubble at 26px says "generic chat". A jar at 26px says this site and no other.

resting state alive, not blinking

Three things move and none of them demand attention: the halo breathes on a 3.8s cycle, the jam sloshes on 6.5s, the drips fall on 6.4 / 9.1 / 11.7s. The periods are deliberately unrelated, so the loop never lines up and never reads as a metronome.

hover state it leans in

Hover this one. The bubble lifts 3px and grows 5 percent, the rim brightens, the lid hops a millimetre like the jar is about to speak, the drips roughly double their rate, and the name slides out to the left. Every one of those is transform or opacity.

decision 03

The drip

The failure mode for a dripping button is that it looks broken. Three rules keep it deliberate. One: the bead swells on the rim first, necks, then releases, which is what real jam does and what a rendering glitch never does. Two: it fades to nothing on the way down instead of stopping at an invisible edge, so it falls into the void rather than getting clipped. Three: a faint pool glow pulses underneath as it passes, so the fall has a destination. Pure transform and opacity, three composited layers, no layout, no paint.

On the launcher. Default rate. Watch for about fifteen seconds and you will see the three beads never line up.

On a page button. Same three beads, respaced across the wider edge. This is optional and I would use it on exactly one button, the closing "book a call", so it stays a moment rather than a motif.

Book a call →

optional · one button only · ask jammy to rule

decision 04

The panel goes dark

The call: dark glass, not cream. The argument for cream was that the page lands in a cream ground world, so the chat could read as the delivery room. That argument fails on one fact: the launcher is fixed, so the panel opens over deep space just as often as it opens over the ground. A cream card floating on the void does not read as a delivery room, it reads as a browser popup from another website. The site already has a vocabulary for a floating surface over the void and it is right there in the closing CTA row: dark glass, backdrop blur, one hairline, one glow. The panel uses that.

Cream does not get thrown away, it gets promoted to meaning something. The panel is the glass. The messages are the jam. Your own messages fill with the jam gradient and warm cream text; the bot answers sit in cool glass with a single jam edge. That is the whole idea of the page, running inside a chat window.

1Header. The mark comes with you, so the panel is visibly the same object you clicked. "born · answering" with a live cyan pulse borrows the page's own telemetry voice instead of the usual "we typically reply in 2 hours" filler.
2Bot message. Cool glass, one jam edge on the left. Links get a blush underline so a rich answer can point somewhere without turning into a wall.
3Your message. Filled with jam. This is the payoff of the dark panel: the contrast is the brand, not a theme switch.
4Action card. The booking feature already has a home. Header strip, one line of plain copy, time chips with a pressed state, one filled confirm, one line of fine print. Any future action, a file, a quote, a case study, reuses this exact shell.
5FAQ group. Grouped disclosure rows so a long answer set collapses to three lines. Real buttons with aria-expanded, so it is keyboard operable and screen reader honest.
6Typing. Three jam beads that drip rather than bounce. The drip language from the launcher, repeated at message scale.
7Chips and input. Chips are outline pills that fill jam on hover. The send button is an arrow, not the word "send", so the row holds at 320px.
8Footer. The honesty line moves out of the header, where it was competing with the title, into a quiet 0.53rem foot.
decision 05

The expand

Click the launcher at the bottom right of this page. Three things happen in 440ms. One: the panel scales up from 0.84 with its transform origin locked to the launcher's corner, so it grows out of the jar rather than appearing beside it. Two: a jam wash sweeps up through the panel and clears, which reads as the jar pouring itself into the window. Three: the jar mark cross fades into a close cross and the halo speeds up, so the launcher stays the same object in a different state instead of becoming a second control.

Easing is cubic-bezier(.2,.9,.25,1.06), a small overshoot. Enough life to feel physical, not enough to bounce like a toy. Under prefers-reduced-motion the whole thing becomes a 180ms opacity fade: the pour is off, the drips freeze mid fall as three static beads, the halo holds steady, and nothing is lost except motion.

Test it now, then flip your system's reduce motion setting and test it again. Both are wired here.

summary

Five calls

nameask the jar

Verb first. "first words" moves inside as the greeting.

iconsimplified jar

Redrawn on a 64 grid. Lid, glass, jam, two chunks, one streak.

dripswell, neck, fall, fade

Three unrelated periods. Always on the launcher, optionally on one page button.

paneldark glass

Panel is the glass, messages are the jam. Cream would read as a foreign popup.

expandgrow from the corner, then pour

440ms, origin locked to the launcher, jam wash sweeps up once.