AAAClient Project Dashboard
Sprint 6 · KidneyHoodLive
Project · Web Application

KidneyHood
Project Dashboard

A patient-facing eGFR projection tool with predictive modelling, reportable PDFs, and a tokenized clinician share-flow. Built by AAA over 6 sprints. This page updates each Monday with the week's ship list, tickets, deploys, and the live prototype.

Client
Lee
Engagement
Done-for-you build
Started
Mar 20, 2026
Target launch
May 8, 2026

Got a question?

Drop us a line and we'll respond fast. Goes straight to our team Slack — typical response within 2 business hours.

AAA team · online now
Typical response within 2 business hours.
Mar 20May 8
Sprint 5 — Readiness 22026-05-03 – 2026-05-08
Sprint 1 — Design Sprint2026-03-20 – 2026-03-26
Sprint 2 — Core Flow2026-03-26 – 2026-04-02
LKID Sprint 1 (deprecated)2026-03-26 – 2026-04-02
Sprint 3 — PDF, Polish & QA2026-04-20 – 2026-04-21
Sprint 5 — Readiness2026-04-20 – 2026-04-22

Sprint Progress

JIRA · auto-synced
Sprint 5 — Readiness · 2026-04-20 – 2026-04-227 of 7 complete
LKID-68Postmortem: Sprint 4 deploy found prod DB empty (migrations 001–004 had never run)
LKID-69Infra: clean up duplicate Postgres service on Railway
LKID-71Analytics: PostHog conversion funnel (landing → labs → gate → results → PDF)
LKID-72Error monitoring: Sentry (frontend + backend)
LKID-73SEO: Open Graph + meta + sitemap + robots.txt
LKID-74Security headers: CSP, HSTS, X-Frame-Options, Permissions-Policy
LKID-75Dashboard v2 for Lee — funnel view, recent leads, send counts

Project Stage

Build

0 notes · 0 comments
Team Notes
Comments

Live Prototype

Click through the live application — real layout, real components, real data. This is a working deployment, not a static mockup.

View Prototype
kidneyhood.vercel.app

Weekly Updates

Week 5 — Launch Readiness (in progress)

Sprint 5

April 20, 2026

  • Error monitoring live — Sentry wired on both backend and frontend, with PII scrubbing so patient report tokens never land in error logs
  • Conversion-funnel analytics live — PostHog events fire on every funnel step (landing → labs → gate → results → PDF) so we can see where users drop off
  • Results page visually reworked to match the finalized design — new scenario pills, tinted cards, layout, typography, and footer
  • Chart redesigned pixel-for-pixel to the design source — brighter hues, healthy-range gradient, dialysis-threshold band with dashed line, and end-point callouts showing live eGFR projections
  • Results page refactored into a reusable component (internal code health — no user-visible change)
  • Empty-DB postmortem closed — 5 open questions resolved; governance rules added to prevent recurrence
  • Duplicate Postgres service cleaned up — live DB unchanged, 26 predictions + 8 leads intact

H
Product Update
Husser — Product Manager

Sprint 5 is the last polish layer before public announcement. Five cards already shipped in the first day, three more queued.

What you can see as a user: the Results page now matches the finalized design. Every section from the kidney-health overview header down to the disclaimer has been rebuilt to the design spec — colors, typography, spacing, navy navigation bar, brand footer. The chart itself got the biggest visual update: brighter scenario colors that match your brand identity, a green gradient under the healthy-range line, a red-tinted dialysis zone with a dashed threshold at eGFR 12, and end-point callouts showing where each scenario ends up at the 10-year mark.

One tradeoff worth naming on the chart: the design's brighter yellow line technically fails WCAG AA contrast on white (2.38:1). We went with the design color anyway — pickling into the design language matters more than the contrast number for the trajectory chart specifically, since the shape and position of the line is what carries meaning, not its accessibility to an unsighted user. All the text and buttons on the page remain fully AA-compliant; only the four chart-line strokes are the override. Happy to revisit if you'd rather we darken them.

What's behind the scenes: error monitoring (Sentry) catches any crash in production and alerts us — it scrubs patient report tokens out of every error payload before they ever reach the Sentry dashboard. Analytics (PostHog) captures the conversion funnel so we can answer "of 100 people who land, how many complete labs, how many submit the gate, how many download the PDF." Both are env-gated no-ops until you set the API keys on Vercel, so neither is sending any data yet — the plumbing is there and the code is reviewed, you just flip the switch when you're ready.

What just shipped for you: a new "Launch Metrics" panel row below — total predictions, total leads, opt-in rate, BUN tier distribution, and a recent-leads table with masked emails (first initial + first-char-only email, so it's HIPAA-safe at a glance). Auto-refreshes every 10 minutes. PostHog funnel and Klaviyo email-performance cards are still placeholders — they turn on the moment you set the API keys on the hosting side. After SEO basics (OG tags, sitemap, structured data) and security headers this sprint, we're launch-ready.


JD
Technical Update
John Donaldson — API Designer

Sprint 5 shipped 6 engineering cards in the first day: LKID-72 (Sentry), LKID-71 (PostHog), LKID-76 (Results design parity), LKID-79 (ResultsView refactor), LKID-80 (chart redesign), LKID-75 (dashboard v2 launch-metrics panels). Two more queued: LKID-73 (SEO), LKID-74 (security headers).

Sentry (LKID-72): @sentry/nextjs v10 + sentry-sdk[fastapi]. Env-gated init on both sides — silent no-op when DSN unset. before_send hook scrubs /results|/gate|/reports/<token> patterns from URLs, exception messages, breadcrumb data, and the extra dict across frontend client/server/edge and backend. Session replay off, traces sample rate 0.1 in prod. Backend has 6 scrubber tests pinning the regex export for frontend parity.

PostHog (LKID-71): posthog-js with person_profiles "identified_only" (we never call posthog.identify), autocapture allowlist of "click" and "submit" (no input events — lab values/names/emails never sent), and explicit exclusions for /client/* and /internal/chart/*. Four custom events — labs_submitted, gate_captured, results_viewed, pdf_downloaded — with no raw PII, only bucketed tier labels (ckd_stage, bun_tier) and a report_token_prefix hash.

Results design parity (LKID-76): rebuilt /results/[token] end-to-end against project/Results.html. Fixed a sitewide font regression — Nunito Sans and Manrope now load via next/font/google at the <html> level instead of being imported locally per-page. Added design tokens (--kh-*, --s-*-bg/-border/-text) in globals.css. Dark navy nav + brand footer now consistent across landing, labs, gate, and results.

ResultsView extract (LKID-79): moved the ready-state JSX of /results/[token] into app/src/components/results/ResultsView.tsx as a pure-presentational component. The page wrapper kept tokenized fetch, PostHog events, and all testids. Zero behavior change.

Chart redesign (LKID-80): palette swapped to the design source (brighter hues — #3FA35B green, #1F2577 navy, #D4A017 amber, #6B6E78 slate). Added SVG healthy-range gradient, red-tinted dialysis band with dashed #E0A0A0 threshold line, and end-point callout circles with live engine-computed eGFR. Chart lines are solid 2.5px round-linecap. Introduced a chrome?: boolean prop so /internal/chart/[token] (PDF render target) keeps its legacy full-chrome layout while /results/[token] shows the design-match version. Inga's palette memo has a SUPERSEDED block at the top explaining the intentional AA-contrast override on the four trajectory strokes.

Dashboard v2 (LKID-75): new GET /client/[slug]/metrics endpoint reads directly from Postgres and returns totals, 7-day windowed counts, opt-in rate (with a min-N gate of 10 to avoid wobbly percentages), BUN tier distribution, and the last 10 captured leads with HIPAA-safe masking (first-char + domain-first-char + TLD, plus first-name initial only). 7 new backend tests cover the endpoint including explicit HIPAA negative-assertions. Frontend LaunchMetrics component polls every 10 minutes and cancels its interval on unmount. PostHog funnel and Klaviyo email-performance panels ship as skeleton placeholders — they turn on automatically once the API keys land on Vercel. 3 non-blocking nits logged as follow-ups: opt-in-rate denominator includes Clerk-webhook leads with no predictions (could exceed 100%), missing @limiter.limit() decorator, sparkline day-buckets not pinned to UTC.

Governance (LKID-68 close-out): added SOP Rule 7 (binding runbook + delta-review requirement on any deploy-touching PR) and Rule 8 (G1 preDeployCommand is fail-closed permanent, no bypass for hotfixes). Railway deployment checklist now classified BINDING with that status in its header. LKID-69 orphan Postgres service verified empty and deleted via Railway GraphQL; post-delete checks passed (live DB unchanged, /health 200).

What's Coming

Sprint 3 — Polish & QA

Complete

Mar 30 – Apr 9

  • Visx eGFR trajectory chart (4 lines, responsive)
  • PDF export via Playwright (pixel-perfect chart fidelity)
  • Medical disclaimers and legal copy
  • Rules engine v2.0 — matched against your golden vectors
  • Rate limiting on API endpoints
  • Boundary tests + golden files + E2E suite + axe-core audit
  • Pre-release QA gate signed off

Sprint 4 — No-Auth Tokenized Flow

Complete

Apr 19 – Apr 20

  • New patient funnel: /labs → /gate → /results (no account required)
  • Report token delivery — each report has a signed shareable link
  • Resend transactional email with PDF report attached
  • Klaviyo warm-campaign event wired (eGFR, BUN tier, report link)
  • WCAG 2 AA accessibility across the chart and stat cards
  • Three deploy guardrails added so we can't ship blind again
  • Legacy Clerk-gated pages removed — clean codebase

Sprint 5 — Launch Readiness

In Progress

Apr 20 – (in progress)

  • Shipped — Error monitoring (Sentry) on backend + frontend
  • Shipped — Conversion analytics (PostHog funnel: labs / gate / results / PDF)
  • Shipped — Results page visual parity with finalized design
  • Shipped — Chart redesign to match design brand identity
  • Shipped — Dashboard v2 for you (launch-metrics panels below)
  • Up next — SEO basics (OG tags, sitemap, structured data)
  • Up next — Security headers (CSP, HSTS, X-Frame-Options)

Application live — Sprint 5 in progress

April 20, 2026

Six Sprint 5 cards already shipped: error monitoring, analytics funnel, Results redesign, component refactor, chart update, and your dashboard v2. SEO and security headers up next.

GitHub Activity

  • 612548aprchore: clean up Copilot auto-merge/findings-fixer workflowsweb3seaJun 11
  • 6416bd9prchore: remove disabled copilot-review workflowweb3seaJun 11
  • ed8d168prfeat(workflows): add findings-fixer.yml — auto-fix Copilot findings via Claudeweb3seaJun 4
  • 621d9efprfeat(workflows): add dashboard-sync.yml — update dashboard on PR mergeweb3seaJun 4
  • 550bc4cprfeat(workflows): add auto-merge.yml — always-on merge when checks greenweb3seaJun 4
  • 52390ebprfix(ci): use botIds GraphQL mutation for Copilot reviewerweb3seaMay 22
  • e611698prchore(husser): daily board sweep 2026-05-21web3seaMay 22
  • 3ec611bprchore(husser): daily board sweep 2026-05-20web3seaMay 22
  • 6df9cfdprchore(husser): daily board sweep 2026-05-19web3seaMay 22
  • 72111eeprchore(husser): daily board sweep 2026-05-18web3seaMay 22
  • 0422e21prchore(husser): daily board sweep 2026-05-17web3seaMay 22
  • 2b4ce9dprchore(husser): daily board sweep 2026-05-16web3seaMay 22
  • 9b28a09mergedchore(husser): daily board sweep 2026-05-14 (#105)Brad WilcoxMay 22
  • 68ac035mergedchore(husser): daily board sweep 2026-05-13 (#104)Brad WilcoxMay 22
  • 43b57f0prchore(ci): add copilot-review.yml to request Copilot reviewerweb3seaMay 21
  • 1da1187prdocs: surface cross-repo Skills in CLAUDE.mdweb3seaMay 21
  • b53d631prchore: trim CLAUDE.md from 421 → 143 linesweb3seaMay 15
  • c3cb75bmergedchore(husser): daily board sweep 2026-05-12Brad WilcoxMay 13
  • 8129795mergedchore(husser): daily board sweep 2026-05-11Brad WilcoxMay 12
  • 189e8e0mergedchore(husser): daily board sweep 2026-05-10Brad WilcoxMay 11

5 commits and 15 PRs merged.

Velocity & Burndown

28140
S1S2S3S4S5S6
PlannedActualCurrent sprint
Total planned
88tickets
Total done
82tickets
Avg velocity
14per sprint

Document Library

Markdown
Lean Launch MVP PRD
Binding scope document — approved March 25, 2026. Corrected March 26.
Markdown
Server-Side Calc Spec v1.0
Lee's calculation specification — received and acknowledged March 26.
Markdown
Design Sprint Outputs
User flows, wireframes, and 21-component inventory from Sprint 1.
Markdown
QA Report — Design Sprint
Yuri's review: 7 issues found (3 medium, 4 low), all resolved.
Markdown
Design Sign-Off
Inga's 12-point review: 12/12 pass with 6 non-blocking exceptions.