Health

Product

Why Health exists, who it serves, and what success looks like.

Spot outdated projects worth selling upgrades for, keep them secure, size sell hours for PMs, and hide inactive ones.

01

What it is

An internal sales + security control room for agency GitHub repos: which stacks are outdated, what an upgrade is worth, and which projects are still in play.

Primary surface

A severity-sorted project list. Collapsed rows show identity, Runtime, and Security. Expand for EOL detail, alerts and posture, upgrade sell-hour estimates, and hide/show for inactive projects.

Data stance

Cache-first reads. Scans run when someone hits Refresh, not on every page load, so GitHub rate limits stay healthy.

We ship

  • Worst-first view of sellable upgrade opportunities
  • Honest EOL ages, alert severity, and sell-hour signals
  • Hide inactive projects so triage stays on active work
  • Copy and Slack so PMs and leads share the same context

We do not ship

  • A marketing portfolio or agency brochure
  • A generic security-dashboard SaaS skin
  • Celebration metrics or vanity charts
  • Timesheet or delivery-hour forecasts

02

Users

Engineers trust the data; PMs and commercial leads act on it. One product, no “simple” vs “pro” modes.

Engineers & tech leads

Need density, exact versions, alert titles, and upgrade line items. Prefer scannable data over explanation.

PMs & commercial

Need plain status and sell-hour estimates to price and pitch upgrades without pinging development, and to skip inactive projects.

Do

Write so an engineer trusts the data and a PM can size (and sell) without a Slack thread to engineering.

Don’t

Don’t keep inactive projects in the main list, hide them so sellable work stays obvious.

03

Jobs to be done

If a screen doesn’t help one of these jobs, it doesn’t belong.

Find sellable work

Spot outdated but active projects where an upgrade is still worth pitching, worst first.

Triage risk

Keep security visible: EOL, Critical, posture. Filter to Needs attention or Healthy, or search by name.

Estimate sell hours

Expand Upgrade for commercial pitch bands, enough for a PM to size and sell without asking development first. Not a timesheet forecast. Method: only sellable products; EOL → major (hours scale with version gap + audit/QA buffer); still supported but behind → patch; Effort Lean · Standard · Heavy; portfolio weight Auto or Custom; euros = sell hours × browser rate. Full write-up: How hours are estimated.

Hide inactive

Remove inactive projects from triage, each visible Dashboard card and Opportunities row shows Hide without expanding. Review or restore via the Hidden filter (or Settings → Open Hidden), each hidden card shows Unhide the same way. Long past EOL is a hint, hide is a deliberate choice.

Share context

Copy a report or post to Slack so planning and commercial share one source of truth.

Refresh

Pull a new snapshot deliberately when someone wants fresh data.

04

Key flows

Three paths cover daily use. Everything else is support.

01 · Arrive

Open the dashboard → load from cache → worst-first list → filter or search as needed.

02 · Inspect

Expand a card → Runtime / Security / Upgrade → set rate, effort, portfolio weight, copy report, or share to Slack.

03 · Refresh

Hit Refresh → phase indicators while scanning → snapshot persists → list updates.

Last refresh time lives on the Refresh control (hover / focus), not a permanent header clock. After a scan, Refresh briefly shows Updated. Footer = filtered / total repo count only.

05

Success signals

We are doing the job when sellable upgrades are obvious, security risk is clear, inactive projects are out of the way, and PMs can size work without asking engineering first.

Pipeline

Active outdated projects with sell-hour signals surface in seconds , inactive ones stay in Hidden, not in the sales list.

Estimation

A PM can leave with a rough sell-hour range from Upgrade, without a Slack ping to development.

Hierarchy

Severity is obvious, colour plus labels, one accent rail, calm chrome.

Restraint

Scans stay rate-limit friendly; the UI stays quiet when nothing is happening.

06

Non-goals

Saying no keeps the product sharp.

Out of scope

  • General project management or CMS
  • Required database for core scan and cache
  • Multi-tenant SaaS for external customers
  • Product analytics or third-party trackers
  • A documentation portal that replaces the app

07

Surface map

Where meaning lives in the shipped product.

Overview

App home (/), org rollup in Portfolio · Security · Opportunity · Actions. Coloured tiles jump to filtered Dashboard or Opportunities.

Dashboard

Triage list (/dashboard), filters, refresh, expandable detail. Share a card with /dashboard?project=name.

Settings

Estimate prefs and server status. Quiet link to Brand OS, not the home for Product / Experience / Brand / Design.

Brand OS

/brand-os, hub for the living guides and estimate method. Quiet secondary chrome link beside the work nav (also from Settings).

Product

/product, problem, users, jobs, flows, boundaries.

Experience

/experience, annotated flows and durable UI states.

Brand

/brand, meaning of look and voice: mark, colour, type, principles.

Design

/design, tokens and component specimens for makers.

Do

Keep work chrome identical: HealthLogo left + quiet desktop tagline; Overview · Opportunities · Dashboard · Settings; quiet Brand OS → /brand-os. One dark system. Report language EN|NL only for Copy / Slack.

Don’t

Don’t bury the problem definition only in internal docs: /product is the living brief. Don’t put four guide links in the primary work row, one quiet Brand OS hub entry is enough.