Skip to Content

← All archived runs

Run: customer-clickthrough-pages

run.md

Run: customer-clickthrough-pages

  • branch: claude/customer-clickthrough-pages-pipeline-axrxe0
  • pr: #675

01_define/output/spec.md

Spec: Customer dashboard clickthrough pages

  • slug: customer-clickthrough-pages
  • personas: Customer
  • touches: apps/demo
  • complexity: standard

Problem

Two card-level clickthroughs on the customer dashboard 404: "View invoices" (/customer/invoices) on the value/finance card and "View all activity" (/customer/activity) on the latest-update card. Their hrefs point at routes that were never built and don't follow the /dashboards/customer/<slug> convention the clickthrough foundation (stub 1, shipped) established. This is the last of four dashboard-clickthrough stubs advancing the Refine the Bridge initiative's Q2 2026 objective — dashboards navigable end-to-end — closing the customer persona's dead-end links.

Proposed change

Build the two destination pages using the shared detail-page shell (apps/demo/components/dashboard/detail-page-shell.tsx) and repoint the source hrefs to the /dashboards/customer/<slug> convention. Each page surfaces the same mock data its source card already holds (apps/demo/lib/mock/customer.ts), with a back-link to /dashboards/customer.

Source card / button Target route Data to surface
"Am I getting value for money" → "View invoices" /dashboards/customer/invoices paid, valueDelivered, totalContract, invoiceDue (ref, dueDate, amount)
"Latest update" → "View all activity" /dashboards/customer/activity latestSummary + activity entries with impact tags

The two source buttons live in apps/demo/components/dashboard/customer/value-section.tsx. The "Open workspace" button in progress-section.tsx already resolves to /workspace/customer and is left unchanged.

Acceptance criteria

  • "View invoices" navigates to /dashboards/customer/invoices, which renders (no 404) using the shared detail-page shell with a back-link to /dashboards/customer.
  • "View all activity" navigates to /dashboards/customer/activity, which renders (no 404) using the shared detail-page shell with a back-link to /dashboards/customer.
  • The invoices page shows the value card's mock data — paid, valueDelivered, totalContract, and the invoiceDue (ref, dueDate, amount) — from lib/mock/customer.ts.
  • The activity page shows the latest-update card's mock data — latestSummary and the activity entries with their impact tags — from lib/mock/customer.ts.
  • "Open workspace" still resolves to /workspace/customer (unchanged).

Out of scope

  • Handler-less stubs on this dashboard ("Ask a question", action rows, CSAT feedback widget).
  • Real invoicing or activity-feed functionality (mock data only).
  • Other personas (admin and vendor clickthrough pages are separate stubs).

Open questions

  • none

02_build/output/notes.md

Build notes: customer-clickthrough-pages

  • commits: feat: customer-clickthrough-pages — invoices + activity destination pages, fix card hrefs

What changed

  • apps/demo/app/(demo)/dashboards/customer/invoices/page.tsx (new): "View invoices" destination. Server component rendering DetailPageShell (persona="customer", back-link to /dashboards/customer) with the value card's finance mock — paid, valueDelivered, totalContract (progress bar), and the invoiceDue banner + ref/dueDate/amount rows. Reuses the shared StatBox / SummaryRow / AlertBanner / Progress atoms and fmt.
  • apps/demo/app/(demo)/dashboards/customer/activity/page.tsx (new): "View all activity" destination. DetailPageShell + the latest-update banner and every activity entry with its impact tag, reusing ActivityItem and the same impactTagConfig mapping the source card uses.
  • apps/demo/components/dashboard/customer/value-section.tsx: repointed the two card-footer hrefs from the 404ing /customer/invoices and /customer/activity to the foundation's /dashboards/customer/<slug> convention. "Open workspace" in progress-section.tsx left untouched.

Acceptance criteria status

  • "View invoices" navigates to /dashboards/customer/invoices, renders via the shared shell with a back-link to /dashboards/customer.
  • "View all activity" navigates to /dashboards/customer/activity, renders via the shared shell with a back-link to /dashboards/customer.
  • Invoices page shows the value card's mock — paid, valueDelivered, totalContract, invoiceDue (ref, dueDate, amount) — from lib/mock/customer.ts.
  • Activity page shows the latest-update mock — latestSummary + activity entries with impact tags.
  • "Open workspace" → /workspace/customer unchanged (progress-section.tsx not touched).

Verify result

  • mechanical checks (format · lint · typecheck · build) run in CI + the Vercel preview, not here. No check expected to fail: pages are server components composed only of existing local atoms, no new deps, no @sustentus/ui import, Typography used throughout, sentence-case copy.

Notes for review

  • Destination pages mirror the source cards' data/voice rather than inventing new content — same transparent customer voice. No real invoicing/activity behaviour (explicitly out of scope).

03_release/output/changelog.md

Changelog: customer-clickthrough-pages

Persona: customer. Live entry: apps/help/app/changelog/2026-07-17-customer-clickthrough-pages/page.mdx.

Your dashboard's invoice and activity links now open real pages

You can now open your invoices and your full activity history straight from your dashboard. The "View invoices" and "View all activity" links on your home cards now take you to dedicated pages — each with a link back to your dashboard — instead of a missing-page error.

03_release/output/investor-update.md

Customers can navigate their whole dashboard — no more dead ends

Who it's for: Customers What shipped: The customer dashboard's "View invoices" and "View all activity" links now open real pages instead of returning a missing-page error. Why it matters: Advances Refine the Bridge — dashboard usability — by removing the customer dashboard's last dead-end links.

This completes the customer set of the dashboard clickthrough work.

Dig deeper: <merged-PR URL> · <changelog entry URL>

03_release/output/release.md

Release: customer-clickthrough-pages

  • pr: #675 (https://github.com/sustentus/sustentus/pull/675) · merged: pending (this run)
  • CI: green — Quality Project (format · lint · typecheck · build) success, preview migrations success, spec-structure advisory success; Vercel demo preview Ready
  • technical docs: no technical docs impact — demo-only dead-link fix; technical/demo-environment describes personas at a high level, not destination routes
  • business docs: no business docs impact — demo mock UI, no change to real product capability in business/**
  • release notes: both — changelog entry + investor draft in this PR
  • sent: pending

Review summary

  • /code-review medium (standard complexity). No blocking correctness findings on the 3-file code diff (two new pages + two href fixes).
  • impactTagConfig / activityIcon in activity/page.tsx mirror the maps in value-section.tsx — accepted, not refactored: the spec requires the destination to show the same data as its source card, and demo conventions discourage premature abstraction for two small maps.
  • Progress divides by finance.totalContract — theoretical NaN only if a future mock sets it to 0; the fixed mock is 15000 and this mirrors the existing source card. No fix.

Acceptance check (vs spec)

  • "View invoices" → /dashboards/customer/invoices renders via the shared shell, back-link to /dashboards/customer — new page committed, demo preview Ready.
  • "View all activity" → /dashboards/customer/activity renders via the shared shell, back-link to /dashboards/customer — new page committed.
  • Invoices page shows paid, valueDelivered, totalContract, invoiceDue (ref, dueDate, amount) from lib/mock/customer.ts.
  • Activity page shows latestSummary + activity entries with impact tags from lib/mock/customer.ts.
  • "Open workspace" → /workspace/customer unchanged — progress-section.tsx untouched.