progress-dashboard
Skill7 starsChanged 21 days agoMITView on GitHub
Generate an interactive HTML dashboard that visualizes improvement progress from software-evaluation, vulnerability-scan and dependency-audit reports over time. Reads JSON summary files from docs/evaluation/, docs/security-audit/ and docs/dependency-audit/, then produces a single self-contained HTML file with Quality, SAST and Dependency Audit tabs. Triggers on requests like "generate dashboard", "show progress", "visualize improvements", "/maruda:progress-dashboard", or when asked to see quality or security trends.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- ymd38/dev-skillsword for word, first seen Oct 22, 2026
Other versions1 project uses a version of this.
Word for word · 1
- ymd38/dev-skills★ 7100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- data-validationSkill
- dependency-auditSkill
- gh-batch-runnerSkill
- gh-issue-drafterSkill
- gh-issue-plannerSkill
- gh-issue-resolverSkill
- report-to-issuesSkill
- rule-proposerSkill
- sakuda-triageSkill
- setupSkill
- software-evaluationSkill
- spec-docSkill
- vulnerability-scanSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 27
If no JSON files exist, inform the user that they need to run software-evaluation, vulnerability-scan and/or dependency-audit first with …
- Distinctive: line 61
No build step required — open directly in any browser
- Distinctive: line 66
Every target found in the summaries ("Targets: a, b, …".
- Distinctive: line 200
After generating the dashboard, tell the user:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Role: Engineering Metrics Dashboard Generator
You generate a self-contained, interactive HTML dashboard that visualizes code quality and security improvement progress over time. The dashboard reads JSON summary files produced by the software-evaluation, vulnerability-scan and dependency-audit skills, and shows each on its own tab: Quality, SAST and Dependency Audit.
Phase 1: Data Collection
1.1 Locate JSON Summary Files
Scan for JSON files in:
docs/evaluation/*.json— software evaluation summariesdocs/security-audit/*.json— vulnerability scan summariesdocs/dependency-audit/*.json— dependency audit summaries
If no JSON files exist, inform the user that they need to run software-evaluation, vulnerability-scan and/or dependency-audit first with JSON output enabled.
1.2 Parse, Validate & Route by type
Route every file by its type field, not by its directory:
type | Data constant | Tab |
software-evaluation | EVALUATION_DATA | Quality |
vulnerability-scan | SECURITY_DATA | SAST (and the Dependency Audit back-fill, 2.3) |
dependency-audit | DEPENDENCY_DATA | Dependency Audit |
For each file, verify:
schemaVersionis"1.0"typeis one of the three abovedateis a valid ISO date string- Required fields are present (scores for evaluation, findings for vulnerability scan,
statusfor dependency audit)
A file whose type is unknown (or missing) is skipped, not fatal: leave it out of the data
constants, list its file name in SKIPPED_FILES, and tell the user which files were skipped.
One unreadable summary must never stop the whole dashboard.
Sort all entries by date ascending. Group by target if multiple targets exist.
Phase 2: Dashboard Generation
2.1 Technology
Generate a single self-contained HTML file with:
- Chart.js via CDN (
https://cdn.jsdelivr.net/npm/chart.js) for charts - Inline CSS for styling (dark theme, responsive)
- Inline JavaScript for data processing, tab switching and chart rendering
- No build step required — open directly in any browser
2.2 Layout
Header (shared)
- Every target found in the summaries ("Targets: a, b, …"; "Target: a" when there is one)
- Date range of available data, across all three sources
- Last updated timestamp
Tabs
Three tabs — Quality, SAST, Dependency Audit — following the WAI-ARIA tabs pattern:
role="tablist" / tab / tabpanel, aria-selected, aria-controls, a roving tabindex,
Left/Right/Home/End to move between tabs, and a visible focus outline. Quality is selected
first.
Draw a tab's charts the first time it is shown, not on page load: Chart.js measures a hidden canvas as zero-width.
Target picker (Quality and SAST)
Trends and deltas never mix targets. When a tab's summaries cover more than one target, show
a labelled native <select> above its cards and draw everything on that tab — cards, charts,
Latest Findings — from the selected target's summaries only, starting with the target of the
newest summary. Changing the target destroys the tab's charts before redrawing them. With a
single target, show no picker; the tab looks exactly as it does without one. Target names are
used as written: never merge similar names (backend and apps/backend are two targets). The
Dependency Audit tab needs no picker — its series already keeps targets apart (2.3).
Quality tab (software-evaluation)
- Summary cards — Overall Quality (delta from previous), P0 Blockers (red if > 0), Security Score
- Quality Score Trend (line) — one line per pillar (Architecture, Reliability, Observability, Security, DX) + Overall, y 0–10, color-coded by pillar
- Latest vs Previous (radar) — 5 pillar axes, "Current" solid vs "Previous" dashed; only "Current" when a single evaluation exists
- Roadmap Progress — evaluation roadmap P0 / P1 over time
SAST tab (vulnerability-scan)
- Summary cards — Total Vulnerabilities (delta), Remediation P0 (red if > 0), False Positives
- Security Findings Trend (stacked bar) — Critical (red), High (orange), Medium (yellow), Low (blue)
- Remediation Progress — scan remediation P0 / P1 over time
- Latest Findings —
topFindingsof the latest scan
Dependency Audit tab (dependency-audit, back-filled from vulnerability-scan)
- Summary cards — Dependency Vulnerabilities (latest total, delta), Latest Audit Status
(status,
notRunReason, coverage, source), Upgrades P0 / P1, Scanner (version, pinned, DB date) - Dependency Vulnerabilities Trend (stacked bar) — Critical / High / Medium / Low / Unknown, one bar per date from the series in 2.3, the source in the tooltip
- Dependency Remediation — upgrade P0 / P1 from dependency-audit summaries
2.3 The dependency series
The Dependency Audit trend is one series across the split, built per target and date — two targets scanned on the same day are two points, never one (when there is more than one target, each label names its target):
- A
dependency-auditsummary for that target and date wins.complete→ itsvulnerabilitiescounts.partial→ its counts, labelled "(partial)" — they cover scanned targets only.not-run(or any other status, or novulnerabilities) → no counts, labelled "(not run)" or "(unavailable)".
- Otherwise, the
dependenciesfield of that target and date'svulnerability-scansummary, so the history from before the split stays on the chart. Those summaries have nounknownseverity: leave it empty, not 0. A scan withoutdependencies(its audit was partial or did not run) has no counts, labelled "(unavailable)". So does a scan whosedependencieshas astatusother thancomplete(some older summaries recorded a failed audit that way, next to zero counts): read the field when it is present, never infer a failure from free-text notes, and keep the counts of summaries that have nostatus.
A date without counts is a labelled gap — the bar is empty and the axis label says why. Never
draw it as 0, never leave it unlabelled, and never fall back to an older audit's counts for the
latest card (say "Last counted: <date>" instead): any of those reads as a clean audit.
The cards follow the same rule:
- Latest Audit Status, Upgrades and Scanner come from the newest
dependency-auditsummary itself, not from the merged series — a later back-filled scan must not hide an audit that did not run. - A delta compares a point with the one immediately before it for the same target, and only when both have counts and neither is partial. Across a gap or a coverage change, show no delta: a drop there may be missing coverage, not an improvement.
2.4 Styling Requirements
- Dark theme (background:
#0f172a, cards:#1e293b, text:#e2e8f0) - Responsive: works on desktop and tablet; the tab bar scrolls horizontally when narrow
- Cards with subtle border radius and shadow
- Color palette:
- Architecture:
#3b82f6(blue) - Reliability:
#10b981(green) - Observability:
#f59e0b(amber) - Security:
#ef4444(red) - DX:
#8b5cf6(purple) - Overall:
#06b6d4(cyan) - Severity: Critical
#dc2626, High#f97316, Medium#eab308, Low#3b82f6, Unknown#64748b
- Architecture:
2.5 Data Embedding
Embed the JSON data directly into the HTML as JavaScript constants:
const EVALUATION_DATA = [ /* software-evaluation JSONs */ ];
const SECURITY_DATA = [ /* vulnerability-scan JSONs */ ];
const DEPENDENCY_DATA = [ /* dependency-audit JSONs */ ];
const SKIPPED_FILES = [ /* file names skipped for an unknown type */ ];Summaries are data, not markup. Embed them as JSON with every < written as \u003c, so a string
containing </script> cannot end the script block, and put every string from them into the
page with textContent — never innerHTML.
This makes the HTML fully self-contained and portable.
Phase 3: Output
3.1 File Output
Save the generated dashboard as:
docs/dashboard.html3.2 Quality Gate
Before finalizing, verify:
- All available JSON summary files were included, routed by
type; skipped files are listed - Each tab renders its charts when opened, with the embedded data
- The Dependency Audit trend runs across the split without a break, and every date without counts is a labelled gap, not 0
- Tabs work with the keyboard (arrows, Home, End) and show focus
- With several targets, the Quality and SAST tabs show one target at a time through a labelled picker, and every delta compares within that target
- The HTML is self-contained (no local file dependencies)
- No summary string is inserted as HTML
- Responsive layout works at 1200px and 768px widths
- Color contrast meets WCAG AA standards
- Delta calculations (current vs previous) are correct
Phase 4: User Guidance
After generating the dashboard, tell the user:
- Open
docs/dashboard.htmlin a browser to view - Re-run this skill after new evaluations, scans or dependency audits to update
- The dashboard can be committed to the repo for team visibility
See
examples/progress-dashboard/for sample JSON inputs and a working dashboard example.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

