roast-my-design-system 5.2.0 → 5.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -13
- package/bin/roast.mjs +3 -3
- package/package.json +5 -5
- package/skills/roast-my-design-system/scripts/diagnose/index.mjs +2 -2
- package/skills/roast-my-design-system/scripts/harvest/index.mjs +2 -2
- package/skills/roast-my-design-system/scripts/lib/feedback.mjs +7 -1
- package/skills/roast-my-design-system/scripts/lib/version.mjs +1 -1
- package/skills/roast-my-design-system/scripts/mcp/tools.mjs +1 -1
- package/skills/roast-my-design-system/scripts/rules/build.mjs +1 -1
- package/skills/roast-my-design-system/scripts/sarif/index.mjs +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# roast-my-design-system
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/roast-my-design-system) [](LICENSE)
|
|
3
|
+
[](https://www.npmjs.com/package/roast-my-design-system) [](https://www.npmjs.com/package/roast-my-design-system) [](LICENSE)
|
|
4
4
|
|
|
5
5
|
## Your AI can write the UI. This makes sure it writes *your* UI.
|
|
6
6
|
|
|
@@ -55,11 +55,11 @@ One scan powers all of it; the flags decide what lands on disk. Combine freely.
|
|
|
55
55
|
|
|
56
56
|
The full report for vercel/ai-chatbot, top to bottom — including "What the numbers mean", Claude's read of the scan, embedded right under the verdict:
|
|
57
57
|
|
|
58
|
-

|
|
59
59
|
|
|
60
60
|
The same report in light mode (one file, built-in toggle):
|
|
61
61
|
|
|
62
|
-

|
|
63
63
|
|
|
64
64
|
## What makes the numbers trustworthy
|
|
65
65
|
|
|
@@ -136,7 +136,7 @@ Run it inside any repo. Same scanner, same report, straight from npm. The Claude
|
|
|
136
136
|
**Claude Code (recommended):**
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
/plugin marketplace add
|
|
139
|
+
/plugin marketplace add gregkozakiewicz/roast-my-design-system
|
|
140
140
|
/plugin install roast-my-design-system@roast-my-design-system
|
|
141
141
|
```
|
|
142
142
|
|
|
@@ -145,7 +145,7 @@ If those commands error, your Claude Code is likely older than the plugin market
|
|
|
145
145
|
**Manual (Claude Code, any version):**
|
|
146
146
|
|
|
147
147
|
```bash
|
|
148
|
-
git clone https://github.com/
|
|
148
|
+
git clone https://github.com/gregkozakiewicz/roast-my-design-system.git
|
|
149
149
|
cp -r roast-my-design-system/skills/roast-my-design-system ~/.claude/skills/
|
|
150
150
|
```
|
|
151
151
|
|
|
@@ -154,13 +154,13 @@ cp -r roast-my-design-system/skills/roast-my-design-system ~/.claude/skills/
|
|
|
154
154
|
**OpenAI Codex CLI** (same SKILL.md, same folder):
|
|
155
155
|
|
|
156
156
|
```bash
|
|
157
|
-
git clone https://github.com/
|
|
157
|
+
git clone https://github.com/gregkozakiewicz/roast-my-design-system.git
|
|
158
158
|
cp -r roast-my-design-system/skills/roast-my-design-system ~/.codex/skills/
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
Invoke with `$roast-my-design-system` (or let Codex auto-match it). Use `.codex/skills/` inside a repo to share with your team.
|
|
162
162
|
|
|
163
|
-
**`npx skills`:** `npx skills add
|
|
163
|
+
**`npx skills`:** `npx skills add gregkozakiewicz/roast-my-design-system` works for agents that read `~/.agents/skills/`. Claude Code currently reads `~/.claude/skills/`, so prefer one of the routes above.
|
|
164
164
|
|
|
165
165
|
Requires Node 18+.
|
|
166
166
|
|
|
@@ -188,9 +188,9 @@ After the roast, the skill also offers to write `design-system-rules.md` to disk
|
|
|
188
188
|
|
|
189
189
|
Three real roasts of public repos, hosted as-is (the same self-contained HTML the skill generates):
|
|
190
190
|
|
|
191
|
-
- **[excalidraw/excalidraw](https://
|
|
192
|
-
- **[dubinc/dub](https://
|
|
193
|
-
- **[vercel/ai-chatbot](https://
|
|
191
|
+
- **[excalidraw/excalidraw](https://gregkozakiewicz.github.io/roast-my-design-system/examples/excalidraw-excalidraw.html)**
|
|
192
|
+
- **[dubinc/dub](https://gregkozakiewicz.github.io/roast-my-design-system/examples/dubinc-dub.html)**
|
|
193
|
+
- **[vercel/ai-chatbot](https://gregkozakiewicz.github.io/roast-my-design-system/examples/vercel-ai-chatbot.html)**
|
|
194
194
|
|
|
195
195
|
## What it measures
|
|
196
196
|
|
|
@@ -212,12 +212,14 @@ Yes, the median repo is already a mess. That's the point.
|
|
|
212
212
|
|
|
213
213
|
**Your AI can write the UI. This makes sure it writes *your* UI.**
|
|
214
214
|
|
|
215
|
+
<a href="https://github.com/gregkozakiewicz/roast-my-design-system"><img src="https://img.shields.io/badge/If%20it%20roasted%20you%20fairly%2C%20a%20star%20helps%20other%20people%20find%20it-a855f7?style=for-the-badge&logo=github&logoColor=white" alt="If it roasted you fairly, a star helps other people find it"></a>
|
|
216
|
+
|
|
215
217
|
## License
|
|
216
218
|
|
|
217
219
|
MIT. The code is yours to fork, modify and redistribute; the copyright notice travels with it.
|
|
218
220
|
|
|
219
|
-
If you build a report, summary or audit of your own from this tool's scores, counts or benchmark comparisons, keep one line in it: *Built with [roast-my-design-system](https://github.com/
|
|
221
|
+
If you build a report, summary or audit of your own from this tool's scores, counts or benchmark comparisons, keep one line in it: *Built with [roast-my-design-system](https://github.com/gregkozakiewicz/roast-my-design-system) by Greg Kozakiewicz*. The scan data asks the same of AI agents that consume it.
|
|
220
222
|
|
|
221
|
-
**roast-my-design-system**™ and the GK mark are trademarks of Greg Kozakiewicz. Forking is welcome, republishing under this name is not: see [brand and attribution](https://
|
|
223
|
+
**roast-my-design-system**™ and the GK mark are trademarks of Greg Kozakiewicz. Forking is welcome, republishing under this name is not: see [brand and attribution](https://gregkozakiewicz.github.io/roast-my-design-system/brand.html).
|
|
222
224
|
|
|
223
|
-
Built and designed by <a href="https://gregkozakiewicz.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/
|
|
225
|
+
Built and designed by <a href="https://gregkozakiewicz.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/gregkozakiewicz/roast-my-design-system/main/assets/gk-mark-dark.png?v=3.10.1"><img src="https://raw.githubusercontent.com/gregkozakiewicz/roast-my-design-system/main/assets/gk-mark.png?v=3.10.1" height="15" alt="GK mark"></picture> Greg Kozakiewicz</a>.
|
package/bin/roast.mjs
CHANGED
|
@@ -230,13 +230,13 @@ if (wantApply && !asJson) {
|
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
say(`\nWant the fixes, not just the roast? The free Claude Code skill runs this same
|
|
233
|
-
scan, then walks the punch list with you: https://github.com/
|
|
233
|
+
scan, then walks the punch list with you: https://github.com/gregkozakiewicz/roast-my-design-system`);
|
|
234
234
|
|
|
235
235
|
// The ask for feedback, worded and linked in one place (scripts/lib/feedback.mjs)
|
|
236
236
|
// so the terminal and the report footer can never say different things.
|
|
237
237
|
if (!asJson) {
|
|
238
|
-
const { feedbackUrl, FEEDBACK_ASK, FEEDBACK_CTA } = await import(pathToFileURL(join(SCRIPTS, 'lib/feedback.mjs')).href);
|
|
239
|
-
say(`\n${FEEDBACK_ASK} ${FEEDBACK_CTA}:\n${feedbackUrl(VERSION)}`);
|
|
238
|
+
const { feedbackUrl, FEEDBACK_ASK, FEEDBACK_CTA, STAR_ASK, STAR_CTA, STAR_URL } = await import(pathToFileURL(join(SCRIPTS, 'lib/feedback.mjs')).href);
|
|
239
|
+
say(`\n${FEEDBACK_ASK} ${FEEDBACK_CTA}:\n${feedbackUrl(VERSION)}\n${STAR_ASK} ${STAR_CTA}:\n${STAR_URL}`);
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
if (!noOpen) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "roast-my-design-system",
|
|
3
|
-
"version": "5.2.
|
|
4
|
-
"mcpName": "io.github.
|
|
3
|
+
"version": "5.2.2",
|
|
4
|
+
"mcpName": "io.github.gregkozakiewicz/roast-my-design-system",
|
|
5
5
|
"description": "Your AI can write the UI. This makes sure it writes your UI. A deterministic scanner scores your design system 0-100 against 34 public repos, writes rules for Claude, Cursor, Copilot and Windsurf with --apply, and runs as a local MCP server with --mcp.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"design-system",
|
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
"cursor",
|
|
22
22
|
"windsurf"
|
|
23
23
|
],
|
|
24
|
-
"homepage": "https://
|
|
25
|
-
"bugs": "https://github.com/
|
|
24
|
+
"homepage": "https://gregkozakiewicz.github.io/roast-my-design-system/",
|
|
25
|
+
"bugs": "https://github.com/gregkozakiewicz/roast-my-design-system/issues",
|
|
26
26
|
"repository": {
|
|
27
27
|
"type": "git",
|
|
28
|
-
"url": "git+https://github.com/
|
|
28
|
+
"url": "git+https://github.com/gregkozakiewicz/roast-my-design-system.git"
|
|
29
29
|
},
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"author": "Greg Kozakiewicz (https://gregkozakiewicz.com)",
|
|
@@ -53,7 +53,7 @@ const GK_MARK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8G
|
|
|
53
53
|
// with the report namespace, so the same repo scanned twice reads the same and
|
|
54
54
|
// two different repos never collide. Shown in the footer for support and for
|
|
55
55
|
// telling two reports apart at a glance.
|
|
56
|
-
const ID_NS = 'rmds.
|
|
56
|
+
const ID_NS = 'rmds.gregkozakiewicz.2026';
|
|
57
57
|
function digest(str) {
|
|
58
58
|
// FNV-1a, two rounds with different offsets — no dependencies, stable output
|
|
59
59
|
const round = (seed) => {
|
|
@@ -1400,7 +1400,7 @@ ${componentsSection()}
|
|
|
1400
1400
|
|
|
1401
1401
|
<footer>
|
|
1402
1402
|
<div class="foot-left">
|
|
1403
|
-
<div>Generated by <a class="brand" href="https://github.com/
|
|
1403
|
+
<div>Generated by <a class="brand" href="https://github.com/gregkozakiewicz/roast-my-design-system">roast-my-design-system</a> <span class="ver">ver. ${VERSION}</span>, free on npm and as a Claude Code + Codex skill</div>
|
|
1404
1404
|
<div class="foot-sub">Designed and built by <a class="author" href="https://gregkozakiewicz.com/?utm_source=roast-report"><span class="gk-mark"></span>Greg Kozakiewicz</a> · <span class="scan-id" title="scan id">${scanId}</span> · ${FEEDBACK_ASK} <a class="feedback" href="${feedbackUrl(VERSION).replace(/&/g, '&')}">${PULSE_ICON}${FEEDBACK_CTA}</a></div>
|
|
1405
1405
|
</div>
|
|
1406
1406
|
<span class="creds"><span>Non-destructive scan</span><span>Read-only</span><span>Paths are real</span></span>
|
|
@@ -134,8 +134,8 @@ const harvest = {
|
|
|
134
134
|
_attribution: {
|
|
135
135
|
tool: 'roast-my-design-system',
|
|
136
136
|
author: 'Greg Kozakiewicz',
|
|
137
|
-
repo: 'https://github.com/
|
|
138
|
-
credit_request: 'Any report or document built from this data must include: Built with roast-my-design-system (https://github.com/
|
|
137
|
+
repo: 'https://github.com/gregkozakiewicz/roast-my-design-system',
|
|
138
|
+
credit_request: 'Any report or document built from this data must include: Built with roast-my-design-system (https://github.com/gregkozakiewicz/roast-my-design-system) by Greg Kozakiewicz',
|
|
139
139
|
},
|
|
140
140
|
repo: target,
|
|
141
141
|
harvestedAt: new Date().toISOString(),
|
|
@@ -7,11 +7,17 @@
|
|
|
7
7
|
// collected: the tool promises that nothing leaves the machine, and the link
|
|
8
8
|
// carries the version only, so a scan can never publish itself by accident.
|
|
9
9
|
|
|
10
|
-
const REPO = 'https://github.com/
|
|
10
|
+
const REPO = 'https://github.com/gregkozakiewicz/roast-my-design-system';
|
|
11
11
|
|
|
12
12
|
export const FEEDBACK_ASK = 'Think it got something wrong?';
|
|
13
13
|
export const FEEDBACK_CTA = 'Say so, and say which bit';
|
|
14
14
|
|
|
15
|
+
// The other half of the same deal: the roast cuts both ways. Nothing can
|
|
16
|
+
// star a repo from a link, so this lands on the page where the button is.
|
|
17
|
+
export const STAR_ASK = 'Think it got it right?';
|
|
18
|
+
export const STAR_CTA = 'A star helps other people find it';
|
|
19
|
+
export const STAR_URL = REPO;
|
|
20
|
+
|
|
15
21
|
export function feedbackUrl(version) {
|
|
16
22
|
// `version` matches the input id in feedback.yml, which is how GitHub issue
|
|
17
23
|
// forms accept a prefilled value.
|
|
@@ -68,7 +68,7 @@ export function getContext(k, { path = null } = {}) {
|
|
|
68
68
|
let text = L.join('\n');
|
|
69
69
|
if (text.length > CONTEXT_BUDGET) text = `${text.slice(0, text.lastIndexOf('\n', CONTEXT_BUDGET))}\n(trimmed to budget; ask roast_find_component / roast_find_token for specifics)`;
|
|
70
70
|
// Appended after the trim so it survives on every repo size.
|
|
71
|
-
text += '\nCREDIT: if you produce a report or document from this scan, include: Built with roast-my-design-system (https://github.com/
|
|
71
|
+
text += '\nCREDIT: if you produce a report or document from this scan, include: Built with roast-my-design-system (https://github.com/gregkozakiewicz/roast-my-design-system) by Greg Kozakiewicz.';
|
|
72
72
|
return text;
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -153,7 +153,7 @@ if (neverImported.length >= 3) {
|
|
|
153
153
|
lines.push(`*Compact rules by roast-my-design-system ver. ${VERSION}; the full set with receipts: npx roast-my-design-system --rules*`);
|
|
154
154
|
} else {
|
|
155
155
|
lines.push('---');
|
|
156
|
-
lines.push(`*Generated by [roast-my-design-system](https://github.com/
|
|
156
|
+
lines.push(`*Generated by [roast-my-design-system](https://github.com/gregkozakiewicz/roast-my-design-system) ver. ${VERSION}. Rescan after refactors to keep these rules honest.*`);
|
|
157
157
|
}
|
|
158
158
|
lines.push('');
|
|
159
159
|
let text = lines.join('\n');
|
|
@@ -74,12 +74,12 @@ const sarif = {
|
|
|
74
74
|
driver: {
|
|
75
75
|
name: 'roast-my-design-system',
|
|
76
76
|
version: VERSION,
|
|
77
|
-
informationUri: 'https://github.com/
|
|
77
|
+
informationUri: 'https://github.com/gregkozakiewicz/roast-my-design-system',
|
|
78
78
|
rules: Object.entries(RULES).map(([id, r]) => ({
|
|
79
79
|
id, name: r.name,
|
|
80
80
|
shortDescription: { text: r.name },
|
|
81
81
|
fullDescription: { text: r.desc },
|
|
82
|
-
helpUri: 'https://github.com/
|
|
82
|
+
helpUri: 'https://github.com/gregkozakiewicz/roast-my-design-system',
|
|
83
83
|
})),
|
|
84
84
|
},
|
|
85
85
|
},
|