Nutlope/hallmark
Anti-AI-slop design skill for Claude Code, Cursor, and Codex.
CSS★ 32,391+455 that day#4 on trending
E31.1/100
Duplication92
0.6% in javascript, python, tsx, vueDead code10
28.4%Complexity33
88.6% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
0.63%duplicated code · 83 of 13,166 lines
9clones in code
42code files of 573 scanned
8.34%duplicated over all files · 484 clones
Most complex files
- skills/hallmark/scripts/sloplint.mjs3445 cx
- skills/hallmark/scripts/sloplint-render.mjs1423 cx
- skills/hallmark/scripts/theme.mjs516 cx
- site/themes/furrow/map.js335 cx
- site/themes/cobalt/wire.js308 cx
- skills/hallmark/scripts/refcheck.mjs250 cx
- site/themes/ribbon/night.js217 cx
- site/themes/bloom/page.js164 cx
- eval/gen-direct.py136 cx
- eval/gen-cli.mjs118 cx
Dead code 28.36% unused · 25 findings
- site/themes/furrow/map.jsunused-file
- site/themes/cobalt/wire.jsunused-file
- site/themes/ribbon/night.jsunused-file
- site/themes/bloom/page.jsunused-file
- site/themes/atelier/air.jsunused-file
- site/themes/bloom/arrange.jsunused-file
- site/themes/studio/spec.jsunused-file
- site/themes/terminal/page.jsunused-file
- site/js/headline.jsunused-file
- site/js/compare.jsunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 1 generated file: site/themes/terminal/art.js.
Largest clones in the code
- 16 lines in 2 placesjavascript172 tokens
62} 63 64function listRuns(filter) { 65 const out = []; 66 if (!existsSync(RUNS)) return out; 67 for (const briefId of readdirSync(RUNS).sort()) { 68 const briefDir = path.join(RUNS, briefId); 69 if (!statSync(briefDir).isDirectory()) continue; 70 if (filter.brief && briefId !== filter.brief) continue; 71 for (const cell of readdirSync(briefDir).sort()) {First 10 of 16 lines.
- 12 lines in 2 placesjavascript128 tokens
35); 36 37function parseArgs(argv) { 38 const args = { brief: null, arm: null, force: false, dryRun: false }; 39 for (let i = 0; i < argv.length; i++) { 40 const a = argv[i]; 41 if (a === "--brief") args.brief = argv[++i]; 42 else if (a === "--arm") args.arm = argv[++i]; 43 else if (a === "--force") args.force = true; 44 else if (a === "--dry-run") args.dryRun = true;First 10 of 12 lines.
- 10 lines in 2 placesjavascript109 tokensskills/hallmark/scripts/sloplint-render.mjs:44–53skills/hallmark/scripts/sloplint-render.mjs:402–407
44const img = new Image(); 45img.src = 'data:image/png;base64,' + b64; 46await img.decode(); 47const c = document.createElement('canvas'); 48c.width = img.width; c.height = img.height; 49const x = c.getContext('2d'); 50x.drawImage(img, 0, 0); 51const d = x.getImageData(0, 0, c.width, c.height).data; 52const ch = [[], [], []]; 53for (let i = 0; i < d.length; i += 4) { ch[0].push(d[i]); ch[1].push(d[i + 1]); ch[2].push(d[i + 2]); }402const img = new Image(); img.src = 'data:image/png;base64,' + b64; await img.decode(); 403const c = document.createElement('canvas'); c.width = img.width; c.height = img.height; 404const x = c.getContext('2d'); x.drawImage(img, 0, 0); 405const d = x.getImageData(0, 0, c.width, c.height).data; 406const ch = [[], [], []]; 407for (let py = 0; py < c.height; py++) for (let px = 0; px < c.width; px++) {
6 more
- 9 lines in 2 placesjavascript106 tokens
- 6 lines in 2 placesjavascript100 tokens
- 11 lines in 2 placesjavascript85 tokens
- 7 lines in 2 placesjavascript68 tokens
- 6 lines in 2 placesjavascript66 tokens
- 6 lines in 2 placesjavascript64 tokens
Largest clones over all files, tests and data included
- 12 lines in 44 placescssstyles518 tokenssite/made/atelier-architect/tokens.css:1–12site/made/bloom-swim-school/tokens.css:1–12site/made/cobalt-database-client/tokens.css:1–12site/made/coral-physio-booking/tokens.css:1–12site/made/furrow-farm-shop/tokens.css:1–12and 39 more
1:root { 2 color-scheme: light; 3 --space-3xs: 2px; --space-2xs: 4px; --space-xs: 8px; --space-sm: 12px; --space-md: 16px; --space-lg: 24px; --space-xl: 40px; --space-2xl: 64px; --space-3xl: … 4 --text-xs: 0.8125rem; --text-sm: 0.875rem; --text-md: 1rem; --text-lg: 1.25rem; --text-xl: 1.5625rem; --text-2xl: 1.953rem; --text-3xl: 2.441rem; 5 --text-display-s: clamp(2.25rem, 4vw + 0.5rem, 3.75rem); --text-display: clamp(2.75rem, 5vw + 1rem, 5.25rem); 6 --text-section: clamp(2rem, 2.5vw + 1rem, 3.5rem); --text-title: clamp(1.25rem, 0.75vw + 0.875rem, 1.625rem); --text-lead: clamp(1.125rem, 0.35vw + 1rem, 1.3… 7 --ease-out: cubic-bezier(0.16, 1, 0.3, 1); --ease-in: cubic-bezier(0.7, 0, 0.84, 0); --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); 8 --dur-micro: 120ms; --dur-short: 220ms; --dur-long: 420ms; 9 --color-error: oklch(52% 0.19 27); --color-success: oklch(50% 0.12 150); 10 --container: 1440px; --gutter: 64px; --gap-columns: 32px; --section-gap-s: 120px; --section-gap: 144px; --section-gap-l: 176px;First 10 of 12 lines.
- 26 lines in 11 placescssstyles978 tokenssite/made/atelier-architect/base.css:1–26site/made/hedgerow-dog-walking/base.css:1–26site/made/ribbon-meditation-app/base.css:1–26site/made/vellum-coffee-subscription/base.css:1–26site/made/vellum-translation/base.css:1–26and 6 more
1*, *::before, *::after { box-sizing: border-box; } 2html, body { overflow-x: clip; } 3html { scrollbar-color: var(--color-muted) var(--color-paper); scroll-padding-top: var(--space-3xl); } 4body { margin: 0; background: var(--color-paper); color: var(--color-ink); font-family: var(--font-body); font-size: var(--text-md); line-height: 1.55; -webkit… 5::selection { background: color-mix(in oklab, var(--color-accent) 22%, transparent); color: var(--color-ink); } 6:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; } 7a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 0.16em; } 8h1, h2, h3 { margin: 0; font-family: var(--font-display); font-weight: var(--display-weight, 700); font-synthesis: none; letter-spacing: var(--tracking-display… 9h1 { max-width: 20ch; font-size: var(--text-display); } h2 { max-width: 30ch; font-size: var(--text-section); } h3 { max-width: 40ch; font-size: var(--text-tit… 10.lead { font-size: var(--text-lead); line-height: 1.45; max-width: 52ch; }First 10 of 26 lines.
- 22 lines in 13 placescssstyles792 tokenssite/made/atelier-architect/base.css:5–26site/made/bloom-swim-school/base.css:5–26site/made/hum-coding-camp/base.css:5–26site/made/midnight-jazz-club/base.css:5–26site/made/terminal-migrations-cli/base.css:5–26and 8 more
5::selection { background: color-mix(in oklab, var(--color-accent) 22%, transparent); color: var(--color-ink); } 6:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; } 7a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 0.16em; } 8h1, h2, h3 { margin: 0; font-family: var(--font-display); font-weight: var(--display-weight, 700); font-synthesis: none; letter-spacing: var(--tracking-display… 9h1 { max-width: 20ch; font-size: var(--text-display); } h2 { max-width: 30ch; font-size: var(--text-section); } h3 { max-width: 40ch; font-size: var(--text-tit… 10.lead { font-size: var(--text-lead); line-height: 1.45; max-width: 52ch; } 11p { margin: 0; text-wrap: pretty; } 12p:not([class]) { max-width: 65ch; } 13img, video { max-width: 100%; height: auto; display: block; } 14svg { display: block; }First 10 of 22 lines.
- 12 lines in 17 placescssstyles518 tokens
- 23 lines in 7 placescssstyles852 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| javascript | 38 | 12,062 | 9 | 83 | 0.69% |
| python | 4 | 1,104 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| css | 270 | 19,653 | 247 | 3,230 | 16.44% |
| markup | 91 | 18,459 | 228 | 1,911 | 10.35% |
| javascript | 40 | 12,099 | 9 | 83 | 0.69% |
| markdown | 102 | 7,976 | 0 | 0 | 0% |
| json | 7 | 2,609 | 0 | 0 | 0% |
| python | 4 | 1,104 | 0 | 0 | 0% |
| yaml | 49 | 549 | 0 | 0 | 0% |
| tsx | 2 | 66 | 0 | 0 | 0% |
| text | 5 | 38 | 0 | 0 | 0% |
| bash | 1 | 29 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Oct 25, 2026 | #4 | 32,391 (+455) | 573 | 62,602 | 484 | 8.34% | 0.63% | E 31.1 | 7ec8682 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.