Conversation List
The main dashboard page (/) displays all conversations in chronological order, with the most recently updated conversations at the top.
What You See
Each conversation card shows:- Session ID: The unique identifier for the chat session
- Last Updated: Timestamp of the most recent message
- Last Message Preview: A snippet of the most recent message content
dashboard/app/page.tsx:38:
Empty State
If no conversations exist yet, you’ll see a helpful message:No conversations yet Messages from the widget will appear here.
Session ID Grouping
Conversations are organized bysessionId, which is provided by:
- The widget (automatically generated or custom)
- Your headless API implementation
sessionId creates a separate conversation thread. This allows you to:
- Track individual user journeys
- Group messages from the same session
- Identify returning users (if you persist sessionId)
Example Session IDs
Individual Conversation View
Click any conversation card to view the full message thread.Conversation Details
The conversation detail page shows:- Session ID: Displayed in the page header
- Last Updated: Timestamp of most recent activity
- Full Message Thread: All messages in chronological order
Message Threading
Messages are displayed with:- Role: User or Assistant
- Timestamp: When the message was created
- Content: Full message text
dashboard/app/conversations/[id]/page.tsx:44:
Visual Design
Messages are styled differently based on role:- User messages: Styled with the
userclass for visual distinction - Assistant messages: Styled with the
assistantclass
Data Source
The dashboard fetches data directly from Convex using server-side queries:List Conversations
Fromdashboard/lib/convex.ts:38:
Get Conversation Thread
Fromdashboard/lib/convex.ts:45:
Navigation
Breadcrumb Navigation
When viewing an individual conversation, a back link is provided:URL Structure
Data Types
The dashboard works with strongly-typed data:ConversationSummary
ConversationMessage
ConversationThread
Timestamp Formatting
All timestamps are formatted using the Intl.DateTimeFormat API:Mar 3, 2026, 2:30 PM
Real-Time Updates
The dashboard uses Next.js Server Components, which means:- Data is fetched on every page load
- Refreshing the page shows the latest conversations
- No client-side polling or websockets needed
Error Handling
Conversation Not Found
If you navigate to a conversation that doesn’t exist, Next.js shows a 404 page:dashboard/app/conversations/[id]/page.tsx
Missing Convex Configuration
IfCONVEX_URL is not configured, an error is thrown when trying to fetch data: