15 · Arrival · First thread
A thread, a pause, a map being born.
15 / 22
The first thread of a new account is the only time we slow down on purpose. A blank canvas, a single prompt, then a deliberate reveal: the map of the user's work and world materializes as the Librarian understands what they just said. This happens once per account — after that, life is just threads.
Figments.
First thread · let's set up your context map.
680px, generous gutters. No
map. Opener types out character-by-character at ~55 cps; cursor rests for
800 ms then fades. The user replies; the Librarian begins extracting.
Onboarding
First thread
Librarian
Hi. Before we build anything, tell me what you do — or drop a
CV / LinkedIn export and I'll read it for you.
You
I'm an ML engineer. Building Clepsy W, a
privacy-first time tracker.
Librarian
context_map.write
project:clepsy-w → +1 fact
running…
A · before
B · 275 ms in
C · settled
Onboarding
First thread
I work closely with Mira on it, and use Gmail +
Notion daily.
context_map.write
+4 nodes · +5 edges
820 ms
create person:mira · edge → project:clepsy-w
create integration:gmail · edge → person:self
create integration:notion · edge → person:self
create memory:ml-ops-expertise · edge → person:self
Got it — pulled Mira into the project, connected your Gmail and
Notion identities, and noted your ML Ops focus. Want me to sketch
a morning digest that pulls Clepsy-related items from all three?
Type a reply…
⌘↵ send · ⇧↵ newline
A · two-pane
B · mid-collapse
C · studio
01
The map reveals once, per account. After that it lives
in the sidebar spine and the Observatory. The ritual is never replayed,
not even on re-login.
02
No empty map is ever shown. The pane only arrives once
there is something to put in it. If the user's first reply is thin, the
chat stays centered and the ritual defers.
03
Cause precedes effect. The tool call streams and
resolves in the chat; 80 ms later, the pane arrives. The user sees the
sentence being understood, then the understanding taking a shape.
04
Motion is deliberate, never bouncy. Every curve is
--ease-reveal. Nothing elastic, nothing spring-physics,
nothing "fun." The ritual earns its weight by refusing cheap theatre.
Motion spec
Shell assembly
translate + fade, staggered per region
200 ms each
--ease-reveal
Opener typewriter
char-by-char, cursor rests 800 ms then fades
~35 ms/char
linear
Chat: center → left
max-width + translate
550 ms
--ease-reveal
Map pane reveal
translateX(32 → 0) + opacity(0 → 1)
550 ms, +80 ms post tool-call
--ease-reveal
Node materialize
opacity(0 → 1) + translateY(2 → 0 px)
400 ms
--ease-reveal
Edge draw
stroke-dashoffset(total → 0)
300 ms, +200 ms after endpoints
linear
Newest-node pulse
amber ring radius + opacity
1400 ms, once
ease-out
Collapse to spine
scale(1 → 0.22) + translate toward sidebar
600 ms
--ease-reveal