Vendors. In the ticket.
A lightweight CRM lives next to your tickets — companies, contacts, vendor-visible comments, per-vendor color pills, mute + daily digest. Email loops back into the same thread, attributed and color-coded.
Companies + contacts. No second tool.
Companies, scoped to projects
Each vendor company belongs to a project and carries an optional domain used for inbound sender-domain matching. Move a ticket between projects → vendor contacts detach (vendor scope is project-bound).
Contacts with real fields
Name, email, phone, role / title — all encrypted under standard mode. Email also gets HMAC'd into a blind index so inbound webhooks can look up senders without decrypting the table.
Generic mailbox blocklist
support@, helpdesk@, noreply@ and friends are rejected at write time to prevent reply loops with the vendor's own helpdesk. The list is extensible per workspace via auth_settings.email_blocklist.
Attach contacts to tickets
Attached contacts receive vendor-visible comments and can be CC'd in inbound creation flows. Attaching a contact does not auto-enroll them in status updates — that takes a Notify Vendor click first.
Same vendor, same color. Always.
Vendor-visible comments show a brand-colored TO VENDOR pill. Inbound vendor replies (auto-ingested via email match) show a FROM {company} pill in a deterministic per-vendor color hashed from the company id.
- →Same vendor → same color across users, sessions, and renders.
- →Hue spread is theme-aware — pastel + dark text on light, muted dark + light text on dark.
- →Skips the sickly yellow-green band so vendor pills never collide with the brand accent.
- →Multiple vendors on one ticket stay distinct and readable.
Notify Vendor is a deliberate click.
Resolvd never auto-blasts a vendor on ticket creation. Staff review the ticket, then click Notify Vendor. After that first outbound, status-change and resolved updates fire automatically — but only because someone said the relationship is real.
| Event | Trigger | Attachments |
|---|---|---|
| new_ticket | Manual — Notify Vendor button | Yes (images) |
| new_comment | Admin / Manager marks comment 'Share with vendor' | Yes (images) |
| status_change | After first vendor outbound succeeds | Body only |
| ticket_resolved | After first vendor outbound succeeds | Body only |
| ticket_reopened | Auto-reopen or manual | Body only |
Internal-only comments never leak through templates — the renderer filters on is_external_visible=true.
Noisy vendor? Mute the firehose.
Toggle Auto-mute vendor replies on a ticket. Matched vendor replies still land in the thread but with is_muted=true; the UI collapses them into a "N muted vendor replies" bucket. Followers don't get paged.
A daily digest at the configured local time (default 15:00, configurable via auth_settings.muted_digest_timezone) catches up every follower with a summary of muted replies in the prior 24h. Admin / Manager can un-mute any single comment to bring it back into the main thread.
Tune notifications per company.
Each company under Admin → Companies has a notification preferences panel:
Fires on status_change events
Uncheck "All statuses" to select individual status names
Fires on ticket_resolved
Fires on ticket_reopened (auto- or manual)
new_ticket and new_comment always send regardless of company prefs — those are explicitly triggered by staff.
Spell ticket refs cleanly.
Hover or focus any ticket reference in the UI to get a NATO phonetic readback popover — WEB-0079 reads as "Whiskey Echo Bravo · 0 0 7 9". Letters become NATO words; digits and dashes stay as-is. Toggleable per-org and per-user.
Need phonetic spelling outside Resolvd — for serial numbers, license plates, confirmation codes? Pair with AlphabetSoup, a standalone NATO parser by the same team. Web app today; browser extensions on the roadmap.
Whiskey Echo Bravo
- 0 0 7 9
▸ Per-user: on
Set up your first vendor.
Admin → Companies → New. Add contacts, attach to tickets, click Notify Vendor when you're ready to engage.