Skip to content

Make the whole thinking experience feel alive - #23

Merged
Clondin merged 1 commit into
mainfrom
claude/bot-thinking-orb-ui-ks4q6x
Aug 23, 2026
Merged

Make the whole thinking experience feel alive#23
Clondin merged 1 commit into
mainfrom
claude/bot-thinking-orb-ui-ks4q6x

Conversation

@Clondin

@Clondin Clondin commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • carry the liquid thinking orb into running tool lines
  • add tab title and favicon status while work runs or finishes in the background
  • leave a compact receipt for longer completed turns
  • add a subtle completion sweep to the newest answer
  • show the streaming answer tail while the reader is scrolled up
  • add a desktop conversation minimap for longer chats
  • animate thinking-state transitions while respecting reduced-motion preferences

Scope

Frontend presentation only. Ten app files changed; no server, authentication, policy, database, migration, secret, or deployment configuration changes.

Validation

  • Vercel branch deployment passed
  • git diff --check passed
  • GitHub CI will run on this PR

The orb becomes one continuous character: a running tool line now shows
the same liquid orb (small) where the anonymous step spinner was, so
when the thinking line yields to a running step the orb reads as moving
into the work rather than vanishing. The unused step-spinner CSS goes.

Around it, five new thinking-surface behaviors:

- Tab status (lib/tab-status.ts): a pulsing orb-blue favicon dot and
  "●" title prefix while a turn runs; if the answer lands in a hidden
  tab the dot becomes a green check and the title says "✓" until the
  person next looks. No notification permission involved.
- Turn receipt: a long turn no longer collapses into nothing — a quiet
  "Worked for 47s · 3 steps" line takes the thinking line's slot until
  the next turn starts. Turns under 10s earn no receipt.
- Settle sweep: the answer that just finished gets a one-time soft band
  of orb-blue light sweeping across it, marking the done moment.
- Live stream tail: while scrolled up mid-turn, the scroll-to-end pill
  quotes the trailing words of the answer currently streaming, so the
  conversation stays visibly alive from anywhere in history.
- Minimap: conversations with six or more of the person's messages get
  a dot rail along the right edge — hover for the first words, click to
  jump — sampled down for very long histories, hidden on small screens.

The thinking line also enters and exits through AnimatePresence instead
of popping between frames. All movement is transform/opacity, and
reduced motion is respected on every new piece.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhN2rgAuEbGHyiLvpPY52
@vercel

vercel Bot commented Aug 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openbot Ready Ready Preview Aug 23, 2026 6:37pm

@Clondin
Clondin merged commit 460969c into main Aug 23, 2026
16 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 86d11a4ada

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1457 to +1459
const answerId = latestAssistantRef.current;
if (answerId === undefined) return;
setSettlingId(answerId);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Only settle an answer created by the completed turn

When a turn fails, is stopped, or otherwise ends without new assistant text after an earlier successful exchange, latestAssistantRef.current still points to the previous answer, so the falling busy edge applies the new completion sweep to that historical message. Capture the assistant ID at the rising edge and only set settlingId when a different answer appeared during this turn.

Useful? React with 👍 / 👎.

Comment thread app/src/lib/tab-status.ts
Comment on lines +134 to +135
setTitle("✓");
setFavicon(drawDot(DONE_GREEN, "#15803d", true));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not show the completion check for failed turns

When a turn rejects, is stopped, or ends without an answer while the tab is hidden, active still transitions from true to false and runs this cleanup, which unconditionally displays a green check and title. The tab therefore advertises that an answer arrived even though returning to the conversation shows a stopped or failed turn; the hook needs an outcome signal or should reserve the completion check for confirmed successful answers.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants