Closing the loop when an advertiser hands a line item to a vendor or influencer. The theme: an assignment should notify the assignee, require an explicit accept, and open a conversation — not vanish into a status field.
Notifications on every transition
Assigning a line item now alerts the assignee ("New deliverable assigned"), deep-linked to their deliverable page. Submitting proof notifies the advertiser; approve/reject notify the assignee; accepting notifies the assigner that work has started.
Explicit accept step
New POST /campaigns/{cid}/line-items/{lid}/accept moves a deliverable from Assigned → In Progress and stamps when work began. Proof can no longer be submitted straight from "Assigned" — the assignee must accept first, so an assignment is never silently treated as started. The proof form stays disabled with a hint until accepted.
In-app chat per deliverable
Deal chat gained a fourth thread type for line items. Conversation parties are the campaign owner and the assignee's workspace (vendor or influencer), and the chat bell routes each thread to the correct role's deliverable page.
New vendor deliverable page
Vendors get a dedicated deliverable detail page at parity with the influencer view, addressing the backing line item directly for accept and submit-proof.
Schema: additive migrations only (line_items.started_at, line-item-backed deals, audience location detail) — no backfill required.
---

