design-twitch-panels — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited design-twitch-panels (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.
Produces a single self-contained HTML file containing 7 pixel-exact canvases:
All panels share visual treatment so they read as a coherent set in the channel sidebar. Only the offline banner takes liberties with the variation matrix.
DESIGN.md exists for the brand./design/<brand-slug>/artifacts/twitch-panels.html (single file — overwrite OK; canonical channel asset set for the brand)
test -f ./design/<brand-slug>/tokens.cssAsk in one message:
1. Offline banner copy — max 10 words (e.g. "Live coding on payments. Tuesdays 2pm.")
2. About — 2-3 sentence bio
3. Schedule — stream cadence string (e.g. "Tuesdays 14:00 GMT−5 · sometimes Saturdays")
4. Commands — list of chat commands + descriptions
5. Socials — array of handle + URL
6. Specs / Setup — gear list (optional; some streams skip this panel)
7. Support — donation / merch / sponsorship links (optional)Offline banner archetype — pick from:
inverse-text (full canvas dark inversion — canonical v2 feature)single-word (one massive Fraunces serif word; works for branded streams with a strong identity word)type-only (statement at maximum scale, no chrome)chrome-led (running head + headline + dateline — last resort)Panel register — pick ONE pattern and apply to ALL 6 panels:
cream-card-hairline — cream surface, hairline border, label + body typecream-card-bracketed — cream surface, corner-frame L-marks (brand-signature lineart)inverted-mini — dark inversion across all panels (rare; risks visual weight imbalance with the offline banner)chromeless — no border, just type with section name in small caps + bodyTemplate:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><Brand> — Twitch panels</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=<families>&display=swap">
<style>
/* Embed tokens.css verbatim */
<contents of tokens.css>
html, body { margin: 0; padding: 0; background: #2a2a2a; min-height: 100vh; font-family: var(--type-sans-family); }
body { display: flex; flex-direction: column; align-items: center; gap: 32px; padding: 32px 0; }
.canvas-label { font-family: var(--type-mono-family); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: rgba(255,255,255,0.7); align-self: center; }
/* Offline banner — 1920×1080 */
.canvas-offline {
width: 1920px; height: 1080px;
background: var(--color-surface);
color: var(--color-ink);
position: relative; overflow: hidden;
padding: 96px 112px;
box-sizing: border-box;
display: grid;
/* grid template per chosen archetype */
}
/* Panel — 320×160 */
.canvas-panel {
width: 320px; height: 160px;
background: var(--color-surface);
color: var(--color-ink);
position: relative; overflow: hidden;
padding: 16px 20px;
box-sizing: border-box;
border: 1px solid var(--color-rule); /* hairline register */
display: grid;
grid-template-rows: auto 1fr;
gap: 8px;
}
.canvas-panel .label {
font-family: var(--type-display-family); font-weight: 600;
font-variant-caps: small-caps; font-feature-settings: 'smcp';
text-transform: lowercase;
font-size: 12px; letter-spacing: 0.1em;
color: var(--color-ink-3);
margin: 0;
padding-bottom: 6px;
border-bottom: 1px solid var(--color-rule);
}
.canvas-panel .body {
font-family: var(--type-sans-family);
font-size: 12px; line-height: 1.4;
color: var(--color-ink);
margin: 0;
overflow: hidden;
}
.canvas-panel .body .mono { font-family: var(--type-mono-family); font-size: 11px; letter-spacing: 0.04em; color: var(--color-ink-3); }
/* Panel grid — show all 6 panels in 2 columns × 3 rows below the banner for preview */
.panels-grid {
display: grid;
grid-template-columns: repeat(3, 320px);
gap: 16px;
}
@page { size: 1920px 1080px; margin: 0; }
</style>
</head>
<body>
<!--
Variation choices:
banner-archetype: <picked>
panel-register: <picked>
-->
<span class="canvas-label">→ OFFLINE BANNER · 1920×1080 · upload to Twitch channel offline screen</span>
<article class="canvas-offline">
<!-- per chosen archetype -->
</article>
<span class="canvas-label">→ PANELS · 320×160 each · upload individually to Twitch channel sidebar</span>
<div class="panels-grid">
<article class="canvas-panel">
<h2 class="label">about</h2>
<p class="body"><!-- bio content --></p>
</article>
<article class="canvas-panel">
<h2 class="label">schedule</h2>
<p class="body"><!-- schedule string --></p>
</article>
<article class="canvas-panel">
<h2 class="label">commands</h2>
<p class="body"><span class="mono">!commands</span> · <span class="mono">!socials</span> · <span class="mono">!gear</span></p>
</article>
<article class="canvas-panel">
<h2 class="label">socials</h2>
<p class="body"><!-- handles --></p>
</article>
<article class="canvas-panel">
<h2 class="label">specs · setup</h2>
<p class="body"><!-- gear list --></p>
</article>
<article class="canvas-panel">
<h2 class="label">support</h2>
<p class="body"><!-- support links --></p>
</article>
</div>
</body>
</html>Twitch panels at ./design/<brand-slug>/artifacts/twitch-panels.html.>
Banner:<archetype>· Panels:<register>.
>
Export each canvas: open in browser → DevTools → set viewport to canvas dims → screenshot the.canvas-offlineor each.canvas-panelseparately. Upload via Twitch dashboard → Settings → Channel.
Governed by three shared canonical references — read them, do not restate them:
Forbidden (fast scan — the references hold the full list):
hsl(230–280) family on a near-white surface. The single loudest AI tell.Required variation (every invocation):
Authenticity: prefer specific over generic everywhere — real datelines (not "today"), the brand's actual voice (not "build the future" filler), concrete CTAs over placeholders.
var(--*) from tokens.css.../design-anti-patterns.md (the hard floor — wins every conflict), ../design-principles.md (the craft floor), and ../design-variation-sop.md (direction roster + offer-3 procedure). The anti-patterns file is the canonical anti-tell list.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.