Overview
On Poe, follow-up actions are a core interaction pattern in single-user chat. After a bot responds, users can tap suggested actions to continue the conversation, compare responses across different bots, or explore models without needing to type.
These interactions are critical to Poe's identity as an AI aggregator — they help users discover and experiment with different models naturally.
But when we began building group chats, we removed follow-up actions entirely. They weren't designed for multiple people.
This project focused on rethinking follow-up actions for collaborative contexts: preserving bot discovery, reducing UI complexity, and defining interaction patterns for AI systems where there wasn't much precedent.
Existing Flow
In single-user chat, follow-up actions appeared beneath the latest bot response. Tapping one would trigger another response or compare the answer against a different bot. The resulting interaction appeared as plain text followed by the new bot response.
Key limitations: actions were tied only to the latest response, and the resulting UI was visually disconnected from the rest of the chat.
Problem
In group chats, several issues emerged immediately:
- Should actions appear for everyone or only the triggering user?
- The UI consumed too much vertical space
- Interactions didn't scale visually in active conversations
- The resulting messages felt disconnected from the chat itself
We still needed to support conversation continuity, bot discovery, and cross-model comparison. And there was a second issue: even in single-user chats, follow-up actions only worked on the latest bot message — which felt unnecessarily limiting.
Constraints
Before diving in, here's where we ultimately landed:
To get there, I distilled the requirements into core goals. The system needed to:
- Show who triggered an action
- Show what the action references
- Create a clear interaction entry point
- Indicate that referenced content was tappable
While also:
- Minimizing height
- Minimizing redundancy
- Relying on familiar interaction patterns
The challenge wasn't just visual design — it was designing something users could intuitively understand without explanation.
Entry Point
My first explorations focused on reducing the size of the existing follow-up action UI while preserving the same interaction model.

Even reduced, they still consumed too much vertical space for group chat contexts. So I shifted directions.
Exploration: Nested Overflow Menus
I explored moving follow-up actions into the existing overflow menu — tap overflow, select "Compare," choose another bot from a nested menu.

This tested well internally from a UX perspective. But after discussing implementation with engineering, I learned our existing overflow component didn't support nested interactions — and supporting this behavior would significantly increase scope.
Final Direction
Instead of nesting actions inside the menu, we simplified: the overflow menu becomes the entry point, and selecting it opens a modal containing available actions.


This preserved discoverability while dramatically reducing UI noise in the main conversation surface.
Chat Alignment
Previously, follow-up actions rendered as plain text followed by a bot response.

Early Exploration: Making Complexity Explicit
My initial instinct was to make the system fully legible — rich metadata, explicit labels, heavily annotated UI.

I compared

Someone else compared

Someone else compared

Someone else compared
But these directions violated the original goals of simple, lightweight, and intuitive. The UI explained too much.
Exploration: A Distinct Message Type
Next, I explored making follow-up actions visually unique from other chat messages.

Compare

Image upscale

Voice request

Animation request
Feedback surfaced an important issue: this introduced yet another message type into the design system, increasing both design and engineering complexity. At the same time, we were already hearing that Poe felt overly complex. This direction amplified that problem rather than solving it.
Unifying Decision
I realized follow-up actions and replies could share the same visual and behavioral model. I borrowed from familiar messaging patterns — specifically lightweight reply previews similar to WhatsApp.

Compare (Text)

Image upscale

Voice request

Animation request
1 — Reduced Learning Cost
Users already understood that replies reference another message and that tapping them jumps back to context. We didn't need to teach a new interaction model.
2 — Reduced System Complexity
Replies were already on the roadmap. By framing follow-up actions and replies as the same system, we accelerated reply functionality, reused infrastructure, and justified investing more deeply in the interaction model. This reframing significantly improved cross-functional alignment.
AI Challenges
Challenge 1 — Compare on a compare on a compare
One particularly tricky issue emerged around comparison chains. "Compare" lets users generate responses from different bots to the same prompt — GPT-5, then Claude, then Gemini. Compare works by tracing back to the original user prompt, stripping bot mentions, and excluding previous bot responses from context.
Option 1
Show the original user message
Option 2
Show the bot response the user actually clicked
Option 2 matched reply mental models — previews show what you clicked — but it misrepresented what the model was actually seeing. Behind the scenes, compare always traced back to the original user message. I pushed for Option 1 because it aligned with a core product principle:
Challenge 2 — The Context Window Problem
Models also silently lose access to older messages as context windows fill — even when users can still visually see them. This created edge cases affecting follow-up actions, compare behavior, and referenced message navigation.
History visible but not accessible
Context cleared
Failure States
We considered rehydrating older messages and rebuilding context dynamically. Technical limitations made this difficult. Instead, I pushed for simple, transparent, honest failure states — rather than hiding AI limitations, we exposed them clearly and predictably.
No follow up actions
Reference can't be accessed
To validate whether deeper infrastructure investment was necessary, I partnered with engineering to add logging around these failure states post-launch.
Results
We landed on a system where replies and follow-up actions share one interaction model, the UI scales naturally in group conversations, interactions remain lightweight and familiar, and AI-specific edge cases are handled transparently.
follow-up action usage the day after launch
A major implementation win: this work effectively enabled two roadmap projects simultaneously — the follow-up actions redesign and reply infrastructure.
Learnings
Visual artifacts accelerate alignment
Even discarded explorations were valuable. Concrete mocks helped teams react faster, uncover edge cases, and align around abstract AI behaviors. In ambiguous AI interaction design, visuals moved conversations forward faster than discussion alone.
Explore wide early
Many of my early explorations were far from the final solution. But without them, I don't think we would've reached the direction we ultimately shipped.
Reflection
Early exploration isn't about finding the answer immediately — it's about creating enough surface area for strong ideas to emerge.
That principle continues to shape how I approach design work today. The most important decisions on this project came from being willing to explore directions I knew might not ship — and using them as material to think with.
