roast-my-design-system 5.1.2 → 5.1.4

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.2",
3
+ "version": "5.1.4",
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": [
@@ -13,7 +13,13 @@
13
13
  "tailwind",
14
14
  "ui",
15
15
  "claude-code",
16
- "developer-tools"
16
+ "developer-tools",
17
+ "mcp-server",
18
+ "ai-agents",
19
+ "linter",
20
+ "code-quality",
21
+ "cursor",
22
+ "windsurf"
17
23
  ],
18
24
  "homepage": "https://pencilrebel.github.io/roast-my-design-system/",
19
25
  "bugs": "https://github.com/pencilrebel/roast-my-design-system/issues",
@@ -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, '&amp;')}">${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
+ }
@@ -1,4 +1,4 @@
1
1
  // Single version constant for the engine — imported by diagnose (report
2
2
  // footer) and rules (generated-by line). This is the bump spot that used to
3
3
  // live as a const inside diagnose/index.mjs.
4
- export const VERSION = '5.1.2';
4
+ export const VERSION = '5.1.4';