Patterns
Start a new conversation
Compose intentional outreach while allowing a one-off address without silently creating a saved contact.
On this page
User goal
Compose intentional outreach while allowing a one-off address without silently creating a saved contact.
Workflow
| Step | Expected behavior |
|---|---|
| 1 | Open New message from the global header. |
| 2 | Confirm the source inbox and choose known recipients or enter a valid custom address. |
| 3 | Add copies only where appropriate. |
| 4 | Write a useful subject and complete body. |
| 5 | Select work type and assigned owner. |
| 6 | Use Send to create a local waiting conversation; unknown recipient receives a contactSnapshot. |
Decision and composition rules
- Known contact IDs are reused.
- One-off recipient snapshots are not automatically added to People.
- New Sales threads use Contacted stage.
Edge cases and recovery
- Blank subject/body or no recipient blocks sending.
- Source sample defaults should not be treated as a recommended production preset.
- The local attachment is fixed metadata.
- Route changes or reload can lose the draft.
Persistence boundary
The demonstrated frontend uses local React state or static fixtures. Read the readiness topic before connecting these actions to authenticated persistence. A visible toast, badge or timer is not a server acknowledgement.
Source references
| File | Responsibility |
|---|---|
| components/inbox/new-message-view.tsx | NewMessageView and snapshot creation |
| components/helpdesk-app.tsx | Local new conversation callback |
Examples from the app
Actual Sonarist components with fictional conversations, people, example.com addresses and simulated operational states. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-08 · Revision 10f45d1377b5 · Documentation v1.0.0