feat(dashboard): overhaul one-off components page and chart UX#100
Merged
Merged
Conversation
|
No dependency changes detected. Learn more about Socket for GitHub. 👍 No dependency changes detected in pull request |
georgewrmarshall
previously approved these changes
Jul 14, 2026
georgewrmarshall
left a comment
Contributor
There was a problem hiding this comment.
Really nice 🔥 Just need to investigate and address socket security issue
Renames "Untracked Components" to "One-off Components" throughout the UI
and rewrites the page with clearer intent, better scoring, and richer
context. Key changes across components and hooks:
**UntrackedComponents page**
- Filters to `local-oneoff` source category only — platform primitives and
third-party packages are no longer shown in either table.
- Renames "Potential MMDS Replacements" → "Replace with MMDS today" and
"Future DS Candidates" → "Introduce to MMDS".
- Adds a **Priority score** column (instances × confidence weight) with an
inline bar to highlight the highest-value migration targets.
- Adds a **Breadth signal** column to the DS Roadmap table (instances ×
unique teams), replacing the old instances-only sort.
- Default sort changes: replaceable table sorts by priority desc;
candidates table sorts by breadth desc.
- New **Migration vs Overall adoption callout** at the top of each project
section shows the gap between the tracked migration rate (MMDS ÷
MMDS+deprecated) and the true overall adoption rate (which also accounts
for one-off instances).
- Replaces the old source-category badge UI with a `SourceCell` component
that links directly to the source tree when a reliable path is available,
with a fallback GitHub code-search link.
- New `OneoffTrendChart` line chart shows replaceable, candidate, and total
one-off instance counts over time alongside the overall adoption %.
- `SummaryCard` gains colour accent variants (green / purple / blue / amber).
- `@unknown` owners are filtered out of the team dropdown.
**CodeOwnerAdoptionChart**
- Adds a configurable `threshold` prop (default 90 %).
- Bars are now colour-coded by adoption %: green ≥ threshold, amber ≥ 70 %
of threshold, red below — replacing the old blue/orange stacked bars.
- Adds a compliance summary header showing teams on-target vs below-target.
- Sorts teams by migration % descending (best first) instead of total
instances.
- Legend is removed in favour of an inline colour key.
**CodeOwnerTrendChart / CodeOwnerAdoptionTrendChart**
- Adds a **Team filter** dropdown to both trend charts, letting users focus
on a single team's line. Clearing the filter restores all lines.
- Team colours remain stable when the filter is applied (colour index is
computed against the full owner list).
- Chart height reduces to 300 px in single-team mode.
**Overview page**
- Adds a new `DeprecatedDeltaSparkline` component below each project's
deprecated-instances chart, showing week-over-week deltas as a green
(reduction) / red (increase) bar chart.
- Passes the explicit `threshold={90}` prop to both `CodeOwnerAdoptionChart`
instances.
**Hooks & types**
- New `useUntrackedTimeline` hook fetches `untracked-timeline.json`.
- New `UntrackedProjectTimeline` and `UntrackedTimeline` types added to
`metrics.ts`.
- New `scripts/update-untracked-timeline.js` script (and corresponding
`update-untracked-timeline` package.json entry) that builds the timeline
JSON consumed by the hook.
Co-authored-by: Cursor <cursoragent@cursor.com>
be6b58a to
5a95deb
Compare
georgewrmarshall
approved these changes
Jul 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR rewrites the One-off Components page (formerly "Untracked Components") and adds several UX improvements across the Overview page charts.
One-off Components page (
UntrackedComponents.tsx)local-oneoffsource category entries — platform primitives and third-party packages are excluded from both tables.instances × confidence weight(exact ×3, strong ×2, partial ×1), visualised as an inline bar.instances × unique teams, surfacing components used widely across the org as stronger roadmap signals.OneoffTrendChart— new line chart showing replaceable, candidate, and total one-off instance counts over time alongside overall adoption %, with a trend pill showing the weekly change direction.SourceCellcomponent replaces the old source-category badge display. Uses a direct tree link when a reliable path is available, falling back to a GitHub code-search link — no more broken 404 links.SummaryCardgains colour accent variants (green / purple / blue / amber) to visually differentiate the four stat cards.@unknownowners are filtered out of the team dropdown.CodeOwnerAdoptionChart.tsxthresholdprop (default90).Legendis replaced with an inline colour key.CodeOwnerTrendChart.tsx+CodeOwnerAdoptionTrendChart.tsxOverview.tsxDeprecatedDeltaSparklinecomponent added below each project's main chart — a compact bar chart showing week-over-week changes in deprecated instances (green = reduction, red = net increase).threshold={90}to bothCodeOwnerAdoptionChartinstances.Hooks, types & scripts
useUntrackedTimeline()hook inuseMetricsData.ts— fetchesuntracked-timeline.json, gracefully handling 404 (returnsnull).UntrackedProjectTimelineandUntrackedTimelineTypeScript types inmetrics.ts.scripts/update-untracked-timeline.jsscript that builds the timeline JSON consumed by the hook, with a correspondingupdate-untracked-timelineentry inpackage.json.Test plan
cd dashboard && npm run dev) and verify the One-off Components page loads without errors for both Mobile and Extension.DeprecatedDeltaSparklinerenders on the Overview page for both projects.yarn update-untracked-timelineto confirm the new script generatesuntracked-timeline.jsoncorrectly, then copy todashboard/public/metrics/and verify theOneoffTrendChartrenders.npm run build) and confirm no TypeScript errors.