Problem
ChatThread.tsx tracks whether the reader is pinned to the bottom (pinnedRef, gap < 80px) and correctly suppresses auto-scroll when you've scrolled up to read history — but there is no visible affordance to jump back to the live bottom.
Why it matters
When you scroll up during a long streaming turn, you're stuck scrolling manually. ChatGPT, Claude, Telegram, WhatsApp all show a floating ↓ pill that appears when you're away from the bottom and snaps you back (with an unread/new-content hint).
Suggested fix
Render a floating "↓ Jump to latest" button (with optional new-message count) when !pinnedRef.current; on tap, smooth-scroll endRef into view.
Where
mobile/src/components/ChatThread.tsx (pinned tracking already at lines ~80–97).
Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.
Problem
ChatThread.tsxtracks whether the reader is pinned to the bottom (pinnedRef, gap < 80px) and correctly suppresses auto-scroll when you've scrolled up to read history — but there is no visible affordance to jump back to the live bottom.Why it matters
When you scroll up during a long streaming turn, you're stuck scrolling manually. ChatGPT, Claude, Telegram, WhatsApp all show a floating ↓ pill that appears when you're away from the bottom and snaps you back (with an unread/new-content hint).
Suggested fix
Render a floating "↓ Jump to latest" button (with optional new-message count) when
!pinnedRef.current; on tap, smooth-scrollendRefinto view.Where
mobile/src/components/ChatThread.tsx(pinned tracking already at lines ~80–97).Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.