training-dashboard — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited training-dashboard (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate an HTML dashboard with retro styling showing comprehensive training progress toward the half marathon goal. Outputs a single HTML file saved to dashboard.html that can be opened in any browser.
When generating the dashboard, you will prompt the user for their preferences. If the user has previously provided preferences in the conversation, use those. Otherwise, ask for the following:
1. Layout Style
Ask: "What level of detail would you like?"
detailed (default): Full metrics, large charts, extensive commentarycompact: Key metrics, medium charts, brief commentaryultra-compact: Essential metrics only, small charts, minimal commentary2. Retro Style Theme
Ask: "Which retro theme would you like?"
terminal-green (default): Classic green phosphor CRT terminal (green on black)amber-monitor: Vintage amber monochrome display (amber on dark brown)ibm-blue: IBM mainframe blue screen (cyan on blue)paper-print: Dot matrix printer style (black on cream)3. Commentary Style
Ask: "What style of coaching commentary?"
conversational (default): Chatty, casual coaching style with personalityanalytical: Data-focused with objective observationsmotivational: Encouraging and uplifting focusminimal: Brief, to-the-point feedback4. Optional Customization
Only ask if the user seems interested in customization:
bar | sparkline | progress-bar)If the user wants to skip configuration or says "just use defaults", use:
detailedterminal-greenconversationalbar for mileage, timeline for phase, grid for sessionsBefore generating the dashboard, ask the user for their preferences (unless they've already specified them in the conversation):
Read these files:
training-plan.md - Full 12-week plan structure, goals, pacestraining-log/week-*.md - All completed training logsExtract from training-plan.md:
Extract from training logs:
Calculate these key metrics:
Plan Progress:
Mileage Tracking:
Session Completion:
Pace Adherence:
On Track Status: Determine overall status based on:
Status: On Track | Slightly Behind | Needs Adjustment | Ahead of Schedule
Create a single self-contained HTML file with:
<pre> tagsHTML Structure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Half Marathon Training Dashboard</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
/* Retro theme styles - see Theme Styles section below */
</style>
</head>
<body class="[theme-classes]">
<!-- Dashboard sections -->
</body>
</html>Theme Styles:
Terminal Green (terminal-green):
body {
background: #0a0a0a;
color: #33ff33;
font-family: 'Courier New', monospace;
}
.card {
background: #0f0f0f;
border: 2px solid #33ff33;
box-shadow: 0 0 10px rgba(51, 255, 51, 0.3);
}
.accent { color: #66ff66; }
.warning { color: #ffff33; }
.success { color: #33ff33; }
.muted { color: #5aaa5a; }Amber Monitor (amber-monitor):
body {
background: #2b1810;
color: #ffb000;
font-family: 'Courier New', monospace;
}
.card {
background: #1a0f08;
border: 2px solid #ffb000;
box-shadow: 0 0 10px rgba(255, 176, 0, 0.3);
}
.accent { color: #ffc840; }
.warning { color: #ff8800; }
.success { color: #ffb000; }
.muted { color: #7a5830; }IBM Blue (ibm-blue):
body {
background: #00007f;
color: #aaffff;
font-family: 'Courier New', monospace;
}
.card {
background: #000066;
border: 2px solid #aaffff;
box-shadow: 0 0 10px rgba(170, 255, 255, 0.3);
}
.accent { color: #ccffff; }
.warning { color: #ffff00; }
.success { color: #aaffff; }
.muted { color: #5588aa; }Paper Print (paper-print):
body {
background: #f5f5dc;
color: #1a1a1a;
font-family: 'Courier New', monospace;
}
.card {
background: #fafae6;
border: 2px solid #1a1a1a;
box-shadow: 3px 3px 0px rgba(0, 0, 0, 0.2);
}
.accent { color: #000000; font-weight: bold; }
.warning { color: #8b0000; }
.success { color: #006400; }
.muted { color: #666666; }ASCII charts are embedded within <pre> tags in the HTML for retro appearance:
Based on chart styles from user configuration in step 1, generate visualizations:
#### Bar Chart (for weekly mileage)
Week 1 [████████████████░░░░] 24.5 / 28 mi (88%)
Week 2 [█████████████░░░░░░░] 22.3 / 28 mi (80%)
Week 3 [████████████████████] 30.1 / 30 mi (100%)#### Sparkline (compact weekly mileage)
Weeks 1-12: ▂▃▅▇█▆▄▃▅▆▂░
Completed─┘ └─Planned#### Progress Bar (for phase progress)
Phase 2: Build ████████████████░░░░░░░░ 67% (Week 6 of 9)#### Phase Progress (compact style)
Phase: Foundation ✓✓✓ | Build ✓○○○ | Specific ○○○○ | Taper ○#### Grid (for session completion)
Week 1: [✓] Threshold [✓] Easy [✓] Long
Week 2: [✓] Intervals [✓] Easy [○] Long
Week 3: [✓] Threshold [✓] Easy [✓] Long#### Checklist (for session completion)
✓ 3x1 mile @ Threshold (Week 1)
✓ 8 miles Easy (Week 1)
✓ 10 miles Long (Week 1)
✓ 6x1k @ Interval (Week 2)
○ 9 miles Easy (Week 2) - MISSED#### Percentage Display (compact)
Sessions: 15/18 completed (83%)
Mileage: 48.2/56 miles (86%)Based on the commentary style selected by the user in step 1, provide feedback:
Conversational Style: "Alright, let's see how you're doing! You're in Week 2 of the Build phase, and honestly? Looking solid. You've knocked out 83% of your sessions, which is right where we want to be. The mileage is slightly behind (86%), but that's not a red flag at all - life happens, and you're still getting the quality work done.
One thing I'm noticing though - those easy runs are still a bit spicy. You're averaging 7:20/mile when we want 7:35-8:13. I know, I know, I sound like a broken record, but trust me on this one. Slow down those easy days and you'll actually feel better on the hard days. Deal?"
Analytical Style: "Current Status: Week 2, Build Phase (Week 6 of 12)
Motivational Style: "You're crushing it! 🎉 Week 2 of Build phase and you're showing up consistently. 83% completion rate shows serious commitment. Sure, the mileage is a touch behind, but you know what? Quality > quantity, and you're nailing those key workouts. Keep bringing this energy and that half marathon time is yours for the taking!"
Minimal Style: "Week 2/12. On track. 83% sessions complete. Easy runs too fast - slow down. Otherwise solid."
Combine all sections based on user configuration from step 1 using Tailwind classes:
HTML Layout Structure:
<body class="p-8 min-h-screen">
<div class="max-w-6xl mx-auto">
<!-- Header -->
<header class="card p-6 rounded-lg mb-6">
<h1 class="text-4xl font-bold mb-2">HALF MARATHON TRAINING DASHBOARD</h1>
<p class="text-xl">Target: 1:23:00 (6:19/mile)</p>
</header>
<!-- Sections in cards -->
<div class="space-y-6">
<!-- Each enabled section -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b pb-2">SECTION TITLE</h2>
<pre class="text-sm overflow-x-auto">ASCII content here</pre>
</div>
</div>
<!-- Footer -->
<footer class="mt-8 text-center muted text-sm">
Generated: [timestamp]
</footer>
</div>
</body>Section Order (include if enabled):
Write the complete HTML to dashboard.html in the project root directory. After saving, inform the user:
#### HTML Dashboard Example (Terminal Green Theme)
The generated dashboard.html file will be a complete, self-contained HTML file that looks like this:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Half Marathon Training Dashboard</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
body {
background: #0a0a0a;
color: #33ff33;
font-family: 'Courier New', monospace;
}
.card {
background: #0f0f0f;
border: 2px solid #33ff33;
box-shadow: 0 0 10px rgba(51, 255, 51, 0.3);
}
.accent { color: #66ff66; }
.warning { color: #ffff33; }
.success { color: #33ff33; }
.muted { color: #1a7a1a; }
pre { font-family: 'Courier New', monospace; }
</style>
</head>
<body class="p-8 min-h-screen">
<div class="max-w-6xl mx-auto">
<header class="card p-6 rounded-lg mb-6">
<h1 class="text-4xl font-bold mb-2">HALF MARATHON TRAINING DASHBOARD</h1>
<p class="text-xl mt-4 accent">Target: 1:23:00 (6:19/mile)</p>
<p class="text-lg muted" style="text-shadow: none;">Week 2 of 12 • Foundation Phase</p>
</header>
<div class="space-y-6">
<!-- Plan Overview -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">PLAN OVERVIEW</h2>
<div class="grid grid-cols-2 gap-4 text-lg">
<div><span class="muted">Goal Distance:</span> <span class="accent">13.1 miles</span></div>
<div><span class="muted">Target Time:</span> <span class="accent">1:23:00</span></div>
<div><span class="muted">Target Pace:</span> <span class="accent">6:19/mile</span></div>
<div><span class="muted">Weeks Remaining:</span> <span class="accent">10</span></div>
</div>
</div>
<!-- Phase Progress -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">PHASE PROGRESS</h2>
<p class="text-lg mb-2">Phase: Foundation ✓○○ | Build ○○○○ | Specific ○○○○ | Taper ○</p>
<p class="mt-4"><span class="muted">Current:</span> <span class="accent">Foundation Phase (Week 1 of 3)</span></p>
<p class="muted text-sm">Focus: Build volume foundation while introducing quality work</p>
</div>
<!-- On Track Status -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">STATUS: <span class="success">→ ON TRACK ✓</span></h2>
<div class="space-y-3">
<div>
<div class="flex justify-between mb-1">
<span>Overall Progress</span>
<span class="accent">82%</span>
</div>
<pre class="text-sm">[████████████████░░░░] 82%</pre>
</div>
<div class="grid grid-cols-2 gap-4 text-lg mt-4">
<div><span class="muted">Running Miles:</span> <span class="accent">22.4 / 24.5</span></div>
<div><span class="muted">Sessions:</span> <span class="accent">2.5 / 3</span></div>
</div>
</div>
</div>
<!-- Weekly Mileage -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">WEEKLY MILEAGE</h2>
<pre class="text-sm">
Week 1 [██████████████████░░] 22.4 / 24.5 mi (91%) <span class="success">✓</span>
Week 2 [░░░░░░░░░░░░░░░░░░░░] 0.0 / 28.0 mi (0%) <span class="accent">→</span>
Week 3 [░░░░░░░░░░░░░░░░░░░░] 0.0 / 30.0 mi (0%)
Week 4 [░░░░░░░░░░░░░░░░░░░░] 0.0 / 24.0 mi (0%)
</pre>
<div class="grid grid-cols-2 gap-4 text-lg mt-4">
<div><span class="muted">Total:</span> <span class="accent">22.4 miles</span></div>
<div><span class="muted">Weekly Avg:</span> <span class="accent">22.4 mi/wk</span></div>
</div>
</div>
<!-- Pace Adherence -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">PACE ADHERENCE</h2>
<div class="space-y-2 text-lg">
<div><span class="muted">Easy (7:35-8:13):</span> <span class="warning">7:22 ⚠ TOO FAST</span></div>
<div><span class="muted">Threshold (6:04-6:19):</span> <span class="success">6:12 ✓ GOOD</span></div>
<div><span class="muted">Interval (5:41-5:55):</span> <span class="success">5:56 ✓ GOOD</span></div>
<div><span class="muted">HM Pace (6:19):</span> <span class="muted">No data yet</span></div>
</div>
<p class="mt-4 warning text-sm">⚠ Primary Issue: Easy runs consistently too fast</p>
</div>
<!-- Coach's Commentary -->
<div class="card p-6 rounded-lg border-4">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">💬 COACH'S COMMENTARY</h2>
<div class="space-y-4 text-base leading-relaxed">
<p>Hey! Week 1 in the books - nice way to kick things off! 💪</p>
<p><span class="accent font-bold">The Good Stuff:</span><br>
That threshold workout? *Chef's kiss* You're executing quality sessions well and showing up consistently.</p>
<p><span class="warning font-bold">We Need to Talk:</span><br>
Those easy runs at 7:48 when we want 7:35-8:13... I know it feels wrong to slow down, but this is where the magic happens. Easy miles build your aerobic base without fatiguing you for the hard days.</p>
<p><span class="success font-bold">Bottom Line:</span><br>
You're on track! Just need ONE thing: when it says "easy", run ACTUALLY easy. Aim for 8:00 pace. Your future self will thank you!</p>
</div>
</div>
<!-- Next Week Preview -->
<div class="card p-6 rounded-lg">
<h2 class="text-2xl font-bold mb-4 border-b border-current pb-2">NEXT WEEK PREVIEW (Week 2)</h2>
<p class="text-lg mb-4"><span class="muted">Target Volume:</span> <span class="accent">28.0 miles</span></p>
<div class="space-y-2">
<p class="accent font-bold">Key Sessions:</p>
<ul class="list-disc list-inside muted space-y-1 ml-4">
<li>Intervals: 6 x 1km @ 5:41-5:55/mi</li>
<li>Easy: 9 miles @ 7:35-8:13/mi</li>
<li>Long Run: 11.5 miles easy</li>
</ul>
</div>
</div>
</div>
<footer class="mt-8 text-center muted text-sm py-4">
<p>Generated: 2026-01-27 • dashboard.html</p>
</footer>
</div>
</body>
</html>#### Compact Layout Example
═══════════════════════════════════════════════════
HALF MARATHON TRAINING DASHBOARD
Target: 1:23:00 (6:19/mile) | Week 2/12
═══════════════════════════════════════════════════
STATUS: → ON TRACK ✓
Phase: Foundation ✓✓✓ | Build ✓○○○ | Specific ○○○○ | Taper ○
Sessions: 15/18 (83%) ░░░░░░░░░░░░░░░░░░░░
Mileage: 48.2/56 mi (86%)
Week 1: ████████████████░░░░ 24.5/28 mi ✓
Week 2: █████████████░░░░░░░ 23.7/28 mi ✓
Pace Check:
Easy: 7:22 (target 7:35-8:13) ⚠ TOO FAST
Threshold: 6:12 ✓
Interval: 5:56 ✓
Coach Says: Solid work! Hitting your quality sessions well.
Just need to slow those easy runs down - aim for 7:45ish.
Week 3 is a big one (30 mi), but you're ready for it!
Next: 4x1mi @ Threshold, 10mi Easy, 12.5mi Long
═══════════════════════════════════════════════════#### Ultra-Compact Layout Example
HM Training: Week 2/12 | Target 1:23:00 | ON TRACK ✓
Phase: Foundation ✓✓✓ | Build ✓○○○ | Specific ○○○○ | Taper ○
Sessions: 15/18 (83%) | Miles: 48.2/56 (86%)
Wk1: ████░ 24.5mi | Wk2: ███░░ 23.7mi
Easy pace: ⚠ TOO FAST | Threshold/Interval: ✓ GOOD
Coach: Slow easy runs to 7:45. Otherwise solid!To use different dashboard settings:
Common preference patterns:
Regenerating with different settings: Just ask! "Can you regenerate with a different theme?" or "Show me the compact version instead."
training-plan.md and training-log/week-*.md files<pre> tags for monospace renderingdashboard.html in project root~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.