What problem does this solve?
The GSV web chat experience uses auto-scroll during streaming responses, which can fight the reader when they try to scroll up, select text, or interact with earlier messages. This is a common pain point in streaming chat UIs — the interface moves the reader against their intent.
What would you like to see?
Adopt the streaming chat UX principles outlined by shadcn (source) — a comprehensive set of best practices for scroll behavior in streaming chat interfaces:
-
Move only when the reader asked to move. Auto-scroll should never be the default. If someone is reading, don't pull them somewhere else.
-
Follow only while they're following. If they're at the live edge, keep the stream in view. If they scroll away, leave them there.
-
Every interaction is intent. Scrolling is not the only signal. Selecting text, using the keyboard, opening a link, searching should all stop the interface from moving.
-
Start a new turn near the top of the viewport. This gives the new turn somewhere it can be read from the beginning.
-
Then stream in the answer. The streaming answer can then grow into the available space.
-
Keep part of the previous conversation in context. Enough of the previous turn should remain visible so the reader knows where they are.
-
Let new content arrive offscreen. The conversation can keep streaming without changing what the reader is looking at.
-
Show what's happening out of view. Make it clear when a response is still streaming or when new messages have arrived.
-
Make it easy to return to the latest reply. A "Jump to latest" action should bring the reader back and resume following.
-
Let people jump anywhere in the conversation. Long threads need message links, search, unread markers, and direct navigation.
-
Reopen where the reader left off. A saved conversation should open at the last meaningful turn (usually the last user message), not the absolute bottom.
-
Keep the reader's place when layout changes. Images load, markdown expands, code blocks render, older messages appear above — none of that should make the reader lose their place.
-
Handle interruptions without stealing position. Stopping, retrying, regenerating, branching, or errors should not unexpectedly move the conversation.
-
Stay responsive in long threads. Streaming text, markdown, code, images, and long history should still feel responsive.
-
Be accessible without the noise. Keep the transcript navigable, preserve keyboard focus, and announce important events at a comfortable pace.
The core idea: It's all about the scroll. Scroll Engineering.
Anything else?
These principles come from @shadcn (Vercel): https://x.com/shadcn/status/2070394918720221522
GSV's chat is a primary interface for interacting with agents, and conversations can get long with streaming responses, tool call results, and multi-turn workflows. Implementing these scroll engineering principles would significantly improve the reading and interaction experience.
What problem does this solve?
The GSV web chat experience uses auto-scroll during streaming responses, which can fight the reader when they try to scroll up, select text, or interact with earlier messages. This is a common pain point in streaming chat UIs — the interface moves the reader against their intent.
What would you like to see?
Adopt the streaming chat UX principles outlined by shadcn (source) — a comprehensive set of best practices for scroll behavior in streaming chat interfaces:
Move only when the reader asked to move. Auto-scroll should never be the default. If someone is reading, don't pull them somewhere else.
Follow only while they're following. If they're at the live edge, keep the stream in view. If they scroll away, leave them there.
Every interaction is intent. Scrolling is not the only signal. Selecting text, using the keyboard, opening a link, searching should all stop the interface from moving.
Start a new turn near the top of the viewport. This gives the new turn somewhere it can be read from the beginning.
Then stream in the answer. The streaming answer can then grow into the available space.
Keep part of the previous conversation in context. Enough of the previous turn should remain visible so the reader knows where they are.
Let new content arrive offscreen. The conversation can keep streaming without changing what the reader is looking at.
Show what's happening out of view. Make it clear when a response is still streaming or when new messages have arrived.
Make it easy to return to the latest reply. A "Jump to latest" action should bring the reader back and resume following.
Let people jump anywhere in the conversation. Long threads need message links, search, unread markers, and direct navigation.
Reopen where the reader left off. A saved conversation should open at the last meaningful turn (usually the last user message), not the absolute bottom.
Keep the reader's place when layout changes. Images load, markdown expands, code blocks render, older messages appear above — none of that should make the reader lose their place.
Handle interruptions without stealing position. Stopping, retrying, regenerating, branching, or errors should not unexpectedly move the conversation.
Stay responsive in long threads. Streaming text, markdown, code, images, and long history should still feel responsive.
Be accessible without the noise. Keep the transcript navigable, preserve keyboard focus, and announce important events at a comfortable pace.
The core idea: It's all about the scroll. Scroll Engineering.
Anything else?
These principles come from @shadcn (Vercel): https://x.com/shadcn/status/2070394918720221522
GSV's chat is a primary interface for interacting with agents, and conversations can get long with streaming responses, tool call results, and multi-turn workflows. Implementing these scroll engineering principles would significantly improve the reading and interaction experience.