vendor-clickthrough-pagesrun.md01_define/output/spec.mdThe vendor dashboard carries the most card-level clickthroughs of any persona — every headline
metric and card has a "View…" button — but all of them 404 today (/vendor/retention,
/vendor/delivery, etc. have no matching route). Vendors cannot drill into any of the numbers
their dashboard shows. This blocks the Q2 2026 "Refine the Bridge" objective of making the persona
dashboards navigable end-to-end (supports O1 vendor engagement / PMF), and vendor is the
highest-impact persona in that cut. The shared detail-page foundation (stub 1,
clickthrough-detail-foundation) is already in place — DetailPageShell and the
/dashboards/<persona>/<slug> convention exist — so this run consumes it rather than inventing a
new pattern.
Build a destination page for each vendor card-level clickthrough using the existing
DetailPageShell, and fix each button's href to the /dashboards/vendor/<slug> convention. Each
page surfaces the source card's existing mock data from lib/mock/vendor.ts — not new, richer,
or filtered data — framed by the shell with a back-link to /dashboards/vendor. Destination pages
(shared "View accounts" targets deduped to one route each):
| Source card / button | Target route | Data surfaced |
|---|---|---|
| NRR / GRR headline "View accounts" | /dashboards/vendor/retention |
NRR, GRR, expansion/contraction/churn, retention-by-speed/region |
| Active Service Revenue "View accounts" | /dashboards/vendor/revenue |
ARR/ASR, change |
| Retention driven by speed "View retention report" | /dashboards/vendor/retention |
(shares the retention page) |
| Delivery performance "View delivery report" | /dashboards/vendor/delivery |
pctWithinSLA, slaTarget, velocity trend |
| Revenue leakage "View accounts" | /dashboards/vendor/risk |
totalAtRisk + breakdown by cause |
| Renewal risk "View all risks" | /dashboards/vendor/renewals |
per-account flags, revenue, severity, owner |
| CSAT "View CSAT detail" | /dashboards/vendor/csat |
avgCSAT, rev-weighted CSAT, churn prediction |
| Service quality "View breakdown" | /dashboards/vendor/health |
healthRate, change |
| Revenue funnel "View full funnel" | /dashboards/vendor/funnel |
funnel stages (count, revenue) |
| Revenue lost "Analyse drop-offs" | /dashboards/vendor/pipeline |
per-stage lost count/revenue |
| Top customers "View all customers" | /dashboards/vendor/customers |
per-customer leads, delivered, CSAT, spend, status |
Call sites to fix (hrefs from /vendor/* → /dashboards/vendor/*): headline-metrics-section.tsx
(via the shared HeadlineMetric footer for NRR/GRR/ASR), retention-by-speed-section.tsx,
delivery-velocity-card.tsx, revenue-leakage-card.tsx, renewal-risk-table.tsx,
customer-health-section.tsx, funnel-chart-card.tsx, funnel-section.tsx,
top-customers-table.tsx (and the CSAT/service-quality/pipeline sources among them). Reuse the
source card's existing render for the data where cheap — the goal is that the page exists and shows
the card's data, not a bespoke report.
DetailPageShell with a working back-link to /dashboards/vendor.app/(demo)/dashboards/vendor/<slug>/page.tsx (retention, revenue, delivery, risk,
renewals, csat, health, funnel, pipeline, customers) and resolves to a real URL.lib/mock/vendor.ts),
visible and accessible.HeadlineMetric "View accounts" footers resolve to their intended vendor routes
(retention, revenue).#anchor scrolls.02_build/output/notes.mdapps/demo/app/(demo)/dashboards/vendor/{retention,revenue,delivery,risk,renewals,csat,health,funnel,pipeline,customers}/page.tsx:
ten new destination pages, each built on the shared DetailPageShell (persona vendor, back-link
to /dashboards/vendor), rendering the source card's existing mock data from lib/mock/vendor.ts
with the app's local UI primitives (Card/Table/Typography/Badge). No new/enriched data.apps/demo/components/dashboard/vendor/* (9 files): fixed each card-level "View…" href from the
broken /vendor/* prefix to the /dashboards/vendor/<slug> convention —
headline-metrics-section.tsx (NRR/GRR→retention, ASR→revenue via the shared HeadlineMetric),
retention-by-speed-section.tsx, delivery-velocity-card.tsx, revenue-leakage-card.tsx,
renewal-risk-table.tsx, customer-health-section.tsx (csat + health),
funnel-chart-card.tsx, funnel-section.tsx (pipeline), top-customers-table.tsx.Shared "View accounts" targets were deduped: NRR and GRR both point at /dashboards/vendor/retention
(one page), matching the spec's dedupe table.
DetailPageShell
with a back-link to /dashboards/vendor — all 9 call sites rewired; shell provides the back-link.app/(demo)/dashboards/vendor/<slug>/page.tsx
(retention, revenue, delivery, risk, renewals, csat, health, funnel, pipeline, customers).lib/mock/vendor.ts).HeadlineMetric "View accounts" footers resolve to retention and revenue.03_release/output/changelog.mdPublished at apps/help/app/changelog/2026-07-17-vendor-clickthrough-pages/page.mdx (personas: vendor).
Title: Click through any vendor dashboard card to see the detail behind it
Every "View…" button on the vendor dashboard now opens a destination page instead of 404-ing — retention, revenue, delivery, risk, renewals, CSAT, service quality, funnel, pre-go-live drop-offs, and top customers. Each page shows the same figures as its source card, with a back-link to the dashboard.
03_release/output/investor-update.mdWho it's for: Vendor partners What shipped: Every card on the vendor dashboard now clicks through to a detail page instead of a dead link. Why it matters: Navigable dashboards deepen vendor engagement — advancing Refine the Bridge and our Q2 objective for product-market fit with vendor partners.
Ten card destinations now resolve, from retention to top customers.
Dig deeper: <merged-PR URL> · <changelog entry URL>