About this demo
What ProductPulse is, and how it's built
A read-only executive product-analytics demo built on synthetic data — every number on every screen is fictional, and every status is computed, never asserted.
Product context
ProductPulse is an executive product-analytics dashboard for a fictional B2B SaaS product. It tracks adoption, engagement, and revenue — and, critically, maintains an initiative registry that connects specific shipped work (AI features and standard product work alike) to the metric movement that followed. Most growth dashboards answer what happened; ProductPulse also answers what did we ship that caused it, and did it work?
ProductPulse is the natural second half of AgentOps: AgentOps asks “is this AI initiative safe to launch?” before it ships. ProductPulse asks “did it actually work?” after. Governance before, accountability after.
Architecture
- Next.js App Router with TypeScript strict mode; every route is statically prerendered.
- No backend, no database, no APIs — a fully typed synthetic dataset lives in
src/data/. - Impact statuses come from a deterministic pure function in
src/lib/impact.ts, covered by a vitest suite. Same inputs, same status, always — no AI calls, no scoring drift. - Tailwind CSS with shadcn/ui components and Recharts, deployed on Vercel from GitHub
main.
Security posture
- Read-only by design: no forms, no write paths, no authentication, no uploads, no cookies.
- All data is synthetic and labeled as such in the UI.
- No secrets, no API keys, no environment variables exposed to the browser.
- A STRIDE threat model and security policy ship with the repo — see docs/threat-model.md and SECURITY.md.
Fischer Product Lab
One suite, one thesis: turn noisy, high-stakes reality into governed, decision-quality executive signal.
Source for this demo: github.com/Fischer-Product-Lab/productpulse
Glossary
Every metric on these screens, in plain language. The same definitions power the tooltips on the stat cards.
- DAU
- Daily Active Users — unique users who took a meaningful action on a given day.
- WAU
- Weekly Active Users — unique users active in the last 7 days.
- MAU
- Monthly Active Users — unique users active in the last 30 days.
- Stickiness
- DAU ÷ MAU — the share of monthly active users who show up on a given day; a measure of how habitual the product is.
- Activation rate
- The share of signed-up accounts that reached their first core workflow.
- Habit rate
- The share of activated accounts that made the product part of their regular routine.
- Adoption lift
- Percentage-point change in adoption of the relevant workflow, from the pre-launch baseline to today.
- MRR
- Monthly Recurring Revenue — subscription revenue normalized to one month.
- Net new MRR
- The total change in Monthly Recurring Revenue this month: new + expansion − contraction − churned.
- NRR
- Net Revenue Retention — recurring revenue kept from the existing customer base after expansion, contraction, and churn. Above 100% means the base grows even with zero new sales.
- AI cost savings
- Hours of manual work eliminated by AI initiatives, valued at a blended fully-loaded hourly rate ($95/hr in this demo).
- Impact status
- Deterministic rating of every shipped initiative: Strong Impact (adoption lift ≥25 pts plus a measurable business outcome), Underperforming (lift under 5 pts), Monitor (everything between). Computed by a pure function — never asserted.
- Cohort retention
- Of the users who activated in a given month, the share still active N months later. Each row of the cohort table follows one activation class through time.
- Churn risk
- Deterministic per-segment rating from usage signals: High (inactive 30+ days, or under 0.5 sessions/week while inactive 14+ days), Elevated (under 2 sessions/week, inactive 7+ days, or seat utilization under 30%), Low otherwise.
- Seat utilization
- The share of purchased seats that are actively used across a segment's accounts.
- Attribution caveat
- A flag raised when another initiative launched within six weeks of this one — adoption movement inside that shared window may belong to either launch, so neither can claim it cleanly.