roast-my-design-system 5.1.2 → 5.1.3
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/bin/roast.mjs
CHANGED
|
@@ -211,6 +211,13 @@ if (wantApply && !asJson) {
|
|
|
211
211
|
say(`\nWant the fixes, not just the roast? The free Claude Code skill runs this same
|
|
212
212
|
scan, then walks the punch list with you: https://github.com/pencilrebel/roast-my-design-system`);
|
|
213
213
|
|
|
214
|
+
// The ask for feedback, worded and linked in one place (scripts/lib/feedback.mjs)
|
|
215
|
+
// so the terminal and the report footer can never say different things.
|
|
216
|
+
if (!asJson) {
|
|
217
|
+
const { feedbackUrl, FEEDBACK_ASK, FEEDBACK_CTA } = await import(pathToFileURL(join(SCRIPTS, 'lib/feedback.mjs')).href);
|
|
218
|
+
say(`\n${FEEDBACK_ASK} ${FEEDBACK_CTA}:\n${feedbackUrl(VERSION)}`);
|
|
219
|
+
}
|
|
220
|
+
|
|
214
221
|
if (!noOpen) {
|
|
215
222
|
// Windows: `start` treats a first quoted arg as the window TITLE, and Node
|
|
216
223
|
// quotes paths containing spaces — pass an empty title so the path lands
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "roast-my-design-system",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.3",
|
|
4
4
|
"mcpName": "io.github.pencilrebel/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": [
|
|
@@ -22,6 +22,7 @@ import { rulesMarkdown } from '../rules/build.mjs';
|
|
|
22
22
|
import { nearColorPairs } from '../lib/nearpairs.mjs';
|
|
23
23
|
import { neverImportedComponents } from '../lib/neverimported.mjs';
|
|
24
24
|
import { VERSION } from '../lib/version.mjs';
|
|
25
|
+
import { feedbackUrl, FEEDBACK_ASK, FEEDBACK_CTA } from '../lib/feedback.mjs';
|
|
25
26
|
|
|
26
27
|
// The benchmark (Ideal-2026 norms + scanned-repo stats) ships next to the
|
|
27
28
|
// code so the page works offline; degrade gracefully when absent.
|
|
@@ -318,6 +319,11 @@ const ICONS = {
|
|
|
318
319
|
info: '',
|
|
319
320
|
};
|
|
320
321
|
|
|
322
|
+
// Feather "activity", the pulse line, points reversed so it traces left to
|
|
323
|
+
// right. Sits before the footer's feedback link
|
|
324
|
+
// and inherits its colour through currentColor, so it follows the theme.
|
|
325
|
+
const PULSE_ICON = '<svg class="pulse" viewBox="0 0 24 24" aria-hidden="true"><polyline points="2 12 6 12 9 3 15 21 18 12 22 12"/></svg>';
|
|
326
|
+
|
|
321
327
|
// Comparison rows inside a tile: your number vs each yardstick.
|
|
322
328
|
// ▼ mint = you sit at or under the reference, ▲ coral = you're over it.
|
|
323
329
|
function row(label, valText, refVal, value) {
|
|
@@ -1210,6 +1216,17 @@ const html = `<!doctype html>
|
|
|
1210
1216
|
border-top:1px solid var(--line); margin-top:40px; padding-top:22px; color:var(--dim); font-size:11.5px; }
|
|
1211
1217
|
.foot-left { display:grid; gap:5px; }
|
|
1212
1218
|
.foot-sub { color:var(--dim2); }
|
|
1219
|
+
.foot-sub .feedback { color:var(--accent); font-weight:700; text-decoration:none; }
|
|
1220
|
+
.foot-sub .feedback:hover { text-decoration:underline; }
|
|
1221
|
+
.foot-sub .pulse { width:14px; height:14px; vertical-align:-3px; margin-right:5px; fill:none;
|
|
1222
|
+
stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
|
|
1223
|
+
/* The line traces itself and sweeps out, like a heart monitor. 46 is the
|
|
1224
|
+
polyline's own length, so the dash covers it exactly. */
|
|
1225
|
+
.foot-sub .pulse polyline { stroke-dasharray:46; animation:pulse-trace 3.4s cubic-bezier(.5,0,.5,1) infinite; }
|
|
1226
|
+
@keyframes pulse-trace { 0% { stroke-dashoffset:46; } 55% { stroke-dashoffset:0; } 100% { stroke-dashoffset:-46; } }
|
|
1227
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1228
|
+
.foot-sub .pulse polyline { animation:none; stroke-dashoffset:0; }
|
|
1229
|
+
}
|
|
1213
1230
|
.scan-id { font-family:var(--mono); font-size:11px; letter-spacing:.04em; }
|
|
1214
1231
|
footer .brand { color:var(--accent); font-weight:700; text-decoration:none; }
|
|
1215
1232
|
footer .brand:hover { text-decoration:underline; }
|
|
@@ -1338,7 +1355,7 @@ ${componentsSection()}
|
|
|
1338
1355
|
<footer>
|
|
1339
1356
|
<div class="foot-left">
|
|
1340
1357
|
<div>Generated by <a class="brand" href="https://github.com/pencilrebel/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>
|
|
1341
|
-
<div class="foot-sub">Designed and built by <a class="author" href="https://gregkozakiewicz.com"><span class="gk-mark"></span>Greg Kozakiewicz</a> · <span class="scan-id" title="scan id">${scanId}</span></div>
|
|
1358
|
+
<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>
|
|
1342
1359
|
</div>
|
|
1343
1360
|
<span class="creds"><span>Non-destructive scan</span><span>Read-only</span><span>Paths are real</span></span>
|
|
1344
1361
|
</footer>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// The one place feedback is asked for. Used by the report footer and by the
|
|
2
|
+
// npx CLI's outro, so the wording and the link never drift apart.
|
|
3
|
+
//
|
|
4
|
+
// It is a plain link to a GitHub issue form (.github/ISSUE_TEMPLATE/feedback.yml
|
|
5
|
+
// in the public repo, which is where the questions and Greg's note live, so the
|
|
6
|
+
// wording can change without a release). Nothing is sent and nothing is
|
|
7
|
+
// collected: the tool promises that nothing leaves the machine, and the link
|
|
8
|
+
// carries the version only, so a scan can never publish itself by accident.
|
|
9
|
+
|
|
10
|
+
const REPO = 'https://github.com/pencilrebel/roast-my-design-system';
|
|
11
|
+
|
|
12
|
+
export const FEEDBACK_ASK = 'Think it got something wrong?';
|
|
13
|
+
export const FEEDBACK_CTA = 'Say so, and say which bit';
|
|
14
|
+
|
|
15
|
+
export function feedbackUrl(version) {
|
|
16
|
+
// `version` matches the input id in feedback.yml, which is how GitHub issue
|
|
17
|
+
// forms accept a prefilled value.
|
|
18
|
+
return `${REPO}/issues/new?template=feedback.yml&version=${encodeURIComponent(version)}`;
|
|
19
|
+
}
|