Stick-to-bottom keeps the viewport pinned to the latest message while you stream.
It also leaves the user in control: once they scroll away from the bottom, new content can arrive without snapping the viewport away from what they are reading.
What happens when the assistant is doing multiple steps?
AI
You can combine the conversation viewport with reasoning and tool UI so the whole exchange remains in one scrollable surface.
Check scroll behavior
Verified the viewport remains pinned while the assistant streams.
Compose response
Added reasoning UI inline with the assistant message body.
Build a settings page with profile and notifications.
AI
Here is a settings layout outline with profile, notifications, and a danger zone section.
Profile card for avatar, display name, and email
Notification preferences grouped by channel
Danger zone with clear destructive affordances
Check scroll behavior
Verified the viewport remains pinned while the assistant streams.
Compose response
Added reasoning UI inline with the assistant message body.
Add a compact version that works well in a dashboard drawer.
AI
For a drawer, I would reduce section padding, keep labels visible, and move destructive actions behind a confirmation step. The same components can stay responsive with container width constraints.
AI components share the same spacing and typography rhythm
What changed for long conversations?
AI
Long threads keep their message column centered while the viewport owns scrolling. The optional jump button can be added when an app wants an explicit return-to-bottom control.
Show me the button treatment.
AI
Scroll away from the latest response and the button appears over the lower edge of the conversation. Pressing it returns the viewport to the newest message.
AI
The default conversation examples omit this control so teams can choose whether the extra affordance belongs in their product.
"use client";import { useEffect, useRef } from "react";import {