design-business-card — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited design-business-card (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 two pixel-exact 1050×600 canvases — the front and back of a standard 3.5×2 inch business card at 300dpi. Print-ready dimensions; bleed and crop notes documented at the end of the file.
This skill is the most extreme reduction test in the platform-skills set. A business card has ~6 square inches of total real estate; the brand must speak with nearly no text. If the brand can't hold its identity at this scale, the design system has a problem worth surfacing.
DESIGN.md exists for the brand./design/<brand-slug>/artifacts/business-card-YYYY-MM-DD-<slug>.html
test -f ./design/<brand-slug>/tokens.cssAsk in one message:
1. Name — as it should appear on the card
2. Title / role — short, sentence-case (no periods on titles — they're labels not sentences)
3. Primary contact — pick ONE: email OR URL (the one you most want to receive)
4. Optional secondary contact — the other one
5. Optional location — city · timezone (e.g. "Louisville · GMT−5")
6. Optional secondary handle — e.g. "github.com/handle" for engineering brandsIf the user wants more than 4 lines of text on the front, push back: "Business cards work at 4 lines max. What's essential?"
This is the rare skill where the front and back can take DIFFERENT visual approaches because they serve different functions (front = info; back = mark/identity):
Front archetype:
chrome-led — name + title + contact-row, structured. Most common; readable.type-only — name at maximum scale, contact details small in corner. Confident.inverse-text — full canvas dark inversion (canonical v2 feature treatment). Bold.Back archetype:
wordmark-dominant — full brand wordmark centered or off-center; nothing else. The mark IS the back.single-mark — a single brand device (single character, monogram, or symbol) at maximum scale.inverse-text — dark inversion with wordmark in cream. Mirrors the front if front is also inverted.chromeless — the back is intentionally near-empty cream. The negative space IS the message.Color treatment — pick a relationship between front and back:
same-surface (both cream OR both inverted)inverted-back (front cream, back dark — a register flip when you turn the card)inverted-front (front dark, back cream — punchy front, quiet back)Template:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><Brand> — Business card — <name></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; }
/* Front + Back — both 1050×600 (3.5×2 inch at 300dpi) */
.canvas-front, .canvas-back {
width: 1050px; height: 600px;
position: relative; overflow: hidden;
padding: 48px 56px;
box-sizing: border-box;
display: grid;
}
.canvas-front {
background: var(--color-surface);
color: var(--color-ink);
grid-template-rows: auto 1fr auto;
gap: 16px;
}
.canvas-back {
background: var(--color-surface); /* or --color-ink for inversion */
color: var(--color-ink);
display: grid; place-items: center; /* default for wordmark-dominant back */
}
/* === Front composition === */
.front-name {
font-family: var(--type-display-family);
font-weight: 500;
font-size: 64px;
line-height: 1.0;
letter-spacing: -0.018em;
margin: 0;
color: var(--color-ink);
}
.front-title {
font-family: var(--type-display-family);
font-weight: 600;
font-variant-caps: small-caps; font-feature-settings: 'smcp';
text-transform: lowercase;
font-size: 16px; letter-spacing: 0.08em;
color: var(--color-ink-3);
margin: 12px 0 0;
}
.front-contact {
align-self: end;
display: flex; flex-direction: column; gap: 6px;
font-family: var(--type-mono-family);
font-size: 16px; letter-spacing: 0.04em;
color: var(--color-ink);
}
.front-contact .secondary { color: var(--color-ink-3); }
.front-contact .label { font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--color-ink-3); margin-right: 12px; }
/* === Back composition === */
.back-wordmark {
font-family: var(--type-display-family);
font-weight: 500;
font-size: 84px;
letter-spacing: -0.018em;
color: var(--color-ink);
margin: 0;
text-align: center;
}
/* Inverted variant */
.canvas-front--inverted, .canvas-back--inverted {
background: var(--color-ink);
color: var(--color-surface);
}
.canvas-front--inverted .front-name { color: var(--color-surface); }
.canvas-front--inverted .front-title { color: rgba(251, 250, 249, 0.55); }
.canvas-front--inverted .front-contact { color: var(--color-surface); }
.canvas-front--inverted .front-contact .secondary { color: rgba(251, 250, 249, 0.55); }
.canvas-front--inverted .front-contact .label { color: rgba(251, 250, 249, 0.55); }
.canvas-back--inverted .back-wordmark { color: var(--color-surface); }
@page { size: 1050px 600px; margin: 0; }
</style>
</head>
<body>
<!--
Variation choices:
front-archetype: <picked>
back-archetype: <picked>
color-relation: <picked>
-->
<span class="canvas-label">→ FRONT · 1050×600 · 3.5×2 inch at 300dpi · name + contact</span>
<article class="canvas-front">
<header>
<h1 class="front-name">[Speaker name]</h1>
<p class="front-title">[title / role]</p>
</header>
<span></span>
<div class="front-contact">
<span><span class="label">Email</span>[email@domain]</span>
<span class="secondary"><span class="label">Web</span>[domain.com]</span>
<span class="secondary"><span class="label">Loc</span>[city · timezone]</span>
</div>
</article>
<span class="canvas-label">→ BACK · 1050×600 · wordmark-dominant</span>
<article class="canvas-back">
<h1 class="back-wordmark">[Wordmark]</h1>
</article>
<!--
PRINT NOTES:
- 1050×600 px = 3.5×2 inches at 300dpi (standard US business card)
- Add 0.125" bleed on all sides for print → final: 1087.5×637.5 px (37.5px bleed each side)
- Or 1125×675 px with safer 0.25" bleed
- Crop marks NOT included — most print services add their own
- For print-ready PDF: open each canvas in browser → File → Print → Save as PDF (page size auto-set by @page)
- Recommended printers: Moo, Vistaprint, Jukebox (luxe stocks recommend cotton or fluorescent paper for cream brands)
-->
</body>
</html>Business card at ./design/<brand-slug>/artifacts/business-card-YYYY-MM-DD-<slug>.html.>
Front:<archetype>· Back:<archetype>· Color:<relation>.
>
Export each side: open in browser → DevTools → 1050×600 viewport → screenshot each.canvas-frontand.canvas-backseparately. Or use browser's "Save as PDF" with page size 1050×600.
>
For print: add 0.125-0.25" bleed (notes in file footer). Most print services accept the rendered PNG/PDF directly.
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.