The Messages page is a unified inbox for all customer communication. Every conversation tied to a booking or slip reservation lives in one place, organized as a two-pane layout with conversation threads on the left and the active conversation on the right.
Layout
The page uses a split-pane design:
- Left pane -- Scrollable list of all conversations, sorted by most recent message. Each entry shows the customer name, inventory or order name, last message preview, timestamp, and an unread badge.
- Right pane -- Full message thread for the selected conversation. Messages appear in chronological order with clear visual distinction between staff messages and customer messages.
On mobile devices, the layout stacks vertically. Tap a conversation to view it, and use the back arrow to return to the conversation list.
Conversation list
Each conversation entry displays:
| Field | Description |
|---|---|
| Avatar | Color-coded customer initial |
| Customer name | Full name of the renter |
| Inventory / Order name | The asset name for single bookings, or "Order (N items)" for multi-item orders |
| Last message | Preview text of the most recent message |
| Timestamp | Relative time (e.g., "2 hours ago") for the last message |
| Unread badge | Count of unread customer messages |
| Status chip | Current booking status |
Searching conversations
Use the search bar at the top of the conversation list to filter by customer name, inventory name, or message content. Results update as you type.
Order-level conversations
When a customer places a multi-item order, all messages from every line item in that order are merged into a single conversation. This prevents the same customer from appearing as 15 separate threads when they booked 15 items in one order. The conversation shows "Order (N items)" as the inventory name and aggregates all messages with deduplication.
Slip reservation messages
Messages from slip reservations (marina slip tenants) appear alongside booking conversations. They are visually distinguished by a boat icon next to the slip name. Sending messages to slip reservations uses a separate endpoint, but the interface is identical.
Reading messages
Click any conversation to view the full message thread. Messages display:
| Element | Description |
|---|---|
| Sender | "You" for staff messages, customer name for renter messages |
| Timestamp | Date and time the message was sent |
| Message body | Full text of the message |
| Read indicator | Checkmark showing the message has been read |
Messages from customers appear on the left side. Messages from staff appear on the right side with a different background color.
Sending a message
- Select a conversation from the left pane.
- Type your message in the compose area at the bottom of the right pane.
- Press Enter or click the Send button.
Messages are sent immediately. The conversation list re-sorts to move the active conversation to the top. The customer receives the message via the same channel they originally used (email notification tied to their booking).
Messages you send from the booking detail page also appear in this inbox, so you always have a complete conversation history in one place.
Unread tracking
When you open a conversation, all unread messages from the customer are automatically marked as read. The unread badge on the conversation entry clears, and the backend is updated so the read state persists across devices.
The unread count also feeds into the Unread Messages widget on the dashboard, so you can see at a glance how many conversations need attention.
Auto-refresh
The messages page polls for new messages every 10 seconds and also refreshes when you switch back to the browser tab. This ensures you see new customer messages promptly without needing to manually refresh.
Navigating to booking details
From any conversation, you can navigate directly to the associated booking detail page by clicking the booking reference. This is useful when a customer message requires you to check pricing, reschedule, or process a payment.
Messages cannot be deleted from the customer-facing thread. All sent messages are permanent and visible to both staff and the customer. Internal notes should be added to the booking detail page rather than sent as messages.

