← All posts

One URL per lead

v2.26.0 gives every lead a dedicated page at /gtm/lead/{hubspot_id} — the decidable card, the research record, and the decision trail on one addressable URL.

Vocion Teamv2.26.0

The personalization queue could tell you a lead existed and let you decide it inline, but it could not give you a place. Expanding a row built the dossier in the list; collapsing it threw that away; nothing you were looking at had a URL you could send to someone. v2.26.0 gives each lead its own page at /gtm/lead/{hubspot_id}, and turns the queue back into what a queue should be — a list.

What's new

Why we built it

A review queue answers "what needs me next." It is the wrong shape for "tell me everything about this lead." Those two questions were sharing one surface, and the dossier lost every time: it only existed while a row was expanded, it re-fetched on every toggle, and it could not be linked to. Meanwhile the queue paid for it — every row shipped a full dossier the reader would probably never open.

Splitting them lets each be honest. The queue lists and routes. The lead page holds the record.

How to use it

Open the queue at /gtm/personalization and click any row. You land on that lead's page, and what the top zone shows depends on where the lead actually is:

Lead stateTop zone
Pending personalization.enroll runThe same decidable card the review queue shows — Decline / Snooze / Enroll
DecidedThe record of the decision: enrolled, held, sent or snoozed, with the sends read-only
Pending but snoozedRenders when the snooze returns
Approved but failed in executionNamed as failed, rather than read as still waiting
An id the sweep never queuedAn empty state, with a door into HubSpot when the portal id resolves

Deciding the card here decides the same run the review queue would have decided — one operation, one run, whichever surface you were standing on.

Below the decision zone sits the research record: the brief, the reference articles derived from the claims' URL sources, the claims themselves, what research could not reach, the confidence, and the timeline.

To exercise all of it locally, the seed now stages the states rather than just the happy path:

cd vocion-core/packages/core
npm run seed:personalization-queue

That stages a decided lead carrying its approved sends, a brief-failed lead and a draft-failed lead, and claim sources are now real URLs so the reference-articles rail actually renders.

What's next