roast-my-design-system 3.9.0 → 3.10.0
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
CHANGED
|
@@ -25,11 +25,11 @@ Your AI agent (Claude, Cursor, Copilot) builds UI by imitating what's already in
|
|
|
25
25
|
|
|
26
26
|
The full report for vercel/ai-chatbot, top to bottom:
|
|
27
27
|
|
|
28
|
-

|
|
29
29
|
|
|
30
30
|
The same report in light mode (one file, built-in toggle):
|
|
31
31
|
|
|
32
|
-

|
|
33
33
|
|
|
34
34
|
## What makes the numbers trustworthy
|
|
35
35
|
|
|
@@ -38,7 +38,7 @@ The same report in light mode (one file, built-in toggle):
|
|
|
38
38
|
- **No network, no telemetry.** Everything runs locally. Nothing about your code leaves your machine.
|
|
39
39
|
- **Honest exclusions.** Test files, Storybook stories, docs sites, example apps, SVG artwork, and email templates (which *must* inline styles) are excluded, so you can't discredit the numbers on a technicality.
|
|
40
40
|
- **Intent-aware counting (v3).** Runtime-computed inline styles, compound-component APIs and wrapper components are not crimes and are not counted as ones. Token-led repos are judged on their hardcoded strays, not their token architecture. Repeated arbitrary values are read as decisions without names, not drift.
|
|
41
|
-
- **A real benchmark.** The "Avg Design System" yardstick comes from scanning 30 public React repos (cal.com, excalidraw, outline, twenty, dub, langfuse…). Median: 96 colours, 14 greys, 14 duplicated components,
|
|
41
|
+
- **A real benchmark.** The "Avg Design System" yardstick comes from scanning 30 public React repos (cal.com, excalidraw, outline, twenty, dub, langfuse…). Median: 96 colours, 14 greys, 14 duplicated components, 45 inline style blocks, 91 arbitrary Tailwind values.
|
|
42
42
|
- **A second yardstick: reputable systems.** Curated, scoped scans of 10 well-known design systems (shadcn/ui, Primer, Polaris, Carbon, Material UI, Chakra, Ant Design, GOV.UK, Spectrum, Cloudscape) show what disciplined looks like at scale.
|
|
43
43
|
|
|
44
44
|
## Install
|
|
@@ -119,9 +119,9 @@ Three real roasts of public repos, hosted as-is (the same self-contained HTML th
|
|
|
119
119
|
| Typefaces | 2–3 | 2 | 1 |
|
|
120
120
|
| Border radii | up to 10 | 12 | 2 |
|
|
121
121
|
| Duplicated components | 0 | 14 | 10 |
|
|
122
|
-
| Inline style blocks | 0 |
|
|
122
|
+
| Inline style blocks | 0 | 45 | 12 |
|
|
123
123
|
| Arbitrary Tailwind values | ~20 | 91 | 0 |
|
|
124
|
-
| Near-identical colour pairs | 0 |
|
|
124
|
+
| Near-identical colour pairs | 0 | 3 | 1 |
|
|
125
125
|
| !important declarations | 0 | 5 | 3 |
|
|
126
126
|
| Components never imported | 0 | 0 | 0 |
|
|
127
127
|
|
|
@@ -133,4 +133,4 @@ MIT. The code is yours to fork, modify and redistribute; the copyright notice tr
|
|
|
133
133
|
|
|
134
134
|
**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://pencilrebel.github.io/roast-my-design-system/brand.html).
|
|
135
135
|
|
|
136
|
-
Built and designed by <a href="https://gregkozakiewicz.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark-dark.png?v=3.
|
|
136
|
+
Built and designed by <a href="https://gregkozakiewicz.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark-dark.png?v=3.10.0"><img src="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark.png?v=3.10.0" height="15" alt="GK mark"></picture> Greg Kozakiewicz</a>.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "roast-my-design-system",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.0",
|
|
4
4
|
"description": "Roast your design system with real data. A deterministic, zero-dependency scanner that counts everything that betrays a design system, from colours and their near-identical twins to greys, spacing values, typefaces, duplicated and never-imported components, inline styles, !important and arbitrary Tailwind values, scores it 0-100 against Ideal Design System norms and a 30-repo benchmark, generates a shareable HTML diagnosis, and with --rules writes the agent rules file (CLAUDE.md, .cursor/rules) that stops the mess coming back.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design-system",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"builtAt": "2026-08-
|
|
2
|
+
"builtAt": "2026-08-03T22:23:05.232Z",
|
|
3
3
|
"repoCount": 30,
|
|
4
4
|
"ideal2026": {
|
|
5
5
|
"colors": {
|
|
@@ -103,12 +103,12 @@
|
|
|
103
103
|
50,
|
|
104
104
|
61,
|
|
105
105
|
69,
|
|
106
|
-
|
|
106
|
+
87,
|
|
107
107
|
89,
|
|
108
|
-
|
|
108
|
+
103,
|
|
109
109
|
112,
|
|
110
110
|
137,
|
|
111
|
-
|
|
111
|
+
145,
|
|
112
112
|
154,
|
|
113
113
|
169,
|
|
114
114
|
169,
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
303,
|
|
120
120
|
385,
|
|
121
121
|
403,
|
|
122
|
-
|
|
122
|
+
1649
|
|
123
123
|
],
|
|
124
124
|
"p25": 38,
|
|
125
125
|
"median": 96,
|
|
@@ -133,10 +133,10 @@
|
|
|
133
133
|
0,
|
|
134
134
|
0,
|
|
135
135
|
2,
|
|
136
|
-
2,
|
|
137
136
|
3,
|
|
138
137
|
4,
|
|
139
138
|
4,
|
|
139
|
+
4,
|
|
140
140
|
5,
|
|
141
141
|
8,
|
|
142
142
|
8,
|
|
@@ -186,12 +186,12 @@
|
|
|
186
186
|
34,
|
|
187
187
|
37,
|
|
188
188
|
50,
|
|
189
|
-
|
|
190
|
-
54,
|
|
189
|
+
52,
|
|
191
190
|
55,
|
|
191
|
+
58,
|
|
192
192
|
59,
|
|
193
193
|
61,
|
|
194
|
-
|
|
194
|
+
70,
|
|
195
195
|
78,
|
|
196
196
|
82,
|
|
197
197
|
84,
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
],
|
|
200
200
|
"p25": 9,
|
|
201
201
|
"median": 27,
|
|
202
|
-
"p75":
|
|
202
|
+
"p75": 57,
|
|
203
203
|
"p90": 78
|
|
204
204
|
},
|
|
205
205
|
"typefaces": {
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
28,
|
|
269
269
|
33,
|
|
270
270
|
35,
|
|
271
|
-
|
|
271
|
+
39,
|
|
272
272
|
39,
|
|
273
273
|
49,
|
|
274
274
|
61
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
"p25": 8,
|
|
277
277
|
"median": 16,
|
|
278
278
|
"p75": 27,
|
|
279
|
-
"p90":
|
|
279
|
+
"p90": 39
|
|
280
280
|
},
|
|
281
281
|
"radii": {
|
|
282
282
|
"values": [
|
|
@@ -303,8 +303,8 @@
|
|
|
303
303
|
20,
|
|
304
304
|
20,
|
|
305
305
|
21,
|
|
306
|
-
|
|
307
|
-
|
|
306
|
+
25,
|
|
307
|
+
25,
|
|
308
308
|
25,
|
|
309
309
|
26,
|
|
310
310
|
26,
|
|
@@ -372,25 +372,25 @@
|
|
|
372
372
|
8,
|
|
373
373
|
10,
|
|
374
374
|
17,
|
|
375
|
-
17,
|
|
376
375
|
19,
|
|
377
376
|
20,
|
|
378
377
|
21,
|
|
379
|
-
22,
|
|
380
378
|
23,
|
|
379
|
+
23,
|
|
380
|
+
30,
|
|
381
381
|
38,
|
|
382
|
-
|
|
383
|
-
|
|
382
|
+
61,
|
|
383
|
+
65,
|
|
384
384
|
92,
|
|
385
|
-
|
|
385
|
+
99,
|
|
386
386
|
103,
|
|
387
387
|
115,
|
|
388
|
-
|
|
388
|
+
208
|
|
389
389
|
],
|
|
390
390
|
"p25": 1,
|
|
391
391
|
"median": 14,
|
|
392
|
-
"p75":
|
|
393
|
-
"p90":
|
|
392
|
+
"p75": 36,
|
|
393
|
+
"p90": 99
|
|
394
394
|
},
|
|
395
395
|
"inlineStyles": {
|
|
396
396
|
"values": [
|
|
@@ -403,16 +403,16 @@
|
|
|
403
403
|
5,
|
|
404
404
|
7,
|
|
405
405
|
11,
|
|
406
|
-
|
|
407
|
-
22,
|
|
406
|
+
20,
|
|
408
407
|
23,
|
|
409
408
|
23,
|
|
410
|
-
|
|
409
|
+
26,
|
|
411
410
|
41,
|
|
412
411
|
43,
|
|
413
412
|
46,
|
|
414
|
-
|
|
413
|
+
48,
|
|
415
414
|
51,
|
|
415
|
+
57,
|
|
416
416
|
69,
|
|
417
417
|
71,
|
|
418
418
|
76,
|
|
@@ -420,15 +420,15 @@
|
|
|
420
420
|
82,
|
|
421
421
|
117,
|
|
422
422
|
119,
|
|
423
|
-
|
|
423
|
+
168,
|
|
424
424
|
173,
|
|
425
425
|
1178,
|
|
426
|
-
|
|
426
|
+
3033
|
|
427
427
|
],
|
|
428
428
|
"p25": 8,
|
|
429
|
-
"median":
|
|
429
|
+
"median": 45,
|
|
430
430
|
"p75": 78,
|
|
431
|
-
"p90":
|
|
431
|
+
"p90": 169
|
|
432
432
|
},
|
|
433
433
|
"arbitrary": {
|
|
434
434
|
"values": [
|
|
@@ -444,29 +444,29 @@
|
|
|
444
444
|
4,
|
|
445
445
|
16,
|
|
446
446
|
26,
|
|
447
|
-
|
|
447
|
+
28,
|
|
448
448
|
60,
|
|
449
449
|
78,
|
|
450
450
|
103,
|
|
451
451
|
125,
|
|
452
452
|
148,
|
|
453
|
-
|
|
454
|
-
|
|
453
|
+
175,
|
|
454
|
+
196,
|
|
455
455
|
234,
|
|
456
456
|
271,
|
|
457
457
|
321,
|
|
458
458
|
380,
|
|
459
459
|
407,
|
|
460
|
-
468,
|
|
461
|
-
470,
|
|
462
460
|
492,
|
|
463
|
-
|
|
464
|
-
|
|
461
|
+
574,
|
|
462
|
+
621,
|
|
463
|
+
642,
|
|
464
|
+
1753
|
|
465
465
|
],
|
|
466
466
|
"p25": 0,
|
|
467
467
|
"median": 91,
|
|
468
468
|
"p75": 309,
|
|
469
|
-
"p90":
|
|
469
|
+
"p90": 579
|
|
470
470
|
},
|
|
471
471
|
"nearPairs": {
|
|
472
472
|
"values": [
|
|
@@ -480,16 +480,16 @@
|
|
|
480
480
|
0,
|
|
481
481
|
0,
|
|
482
482
|
0,
|
|
483
|
-
0,
|
|
484
483
|
1,
|
|
485
484
|
1,
|
|
486
485
|
2,
|
|
487
486
|
2,
|
|
488
487
|
2,
|
|
488
|
+
4,
|
|
489
489
|
9,
|
|
490
490
|
12,
|
|
491
491
|
13,
|
|
492
|
-
|
|
492
|
+
14,
|
|
493
493
|
15,
|
|
494
494
|
16,
|
|
495
495
|
23,
|
|
@@ -499,10 +499,10 @@
|
|
|
499
499
|
47,
|
|
500
500
|
49,
|
|
501
501
|
70,
|
|
502
|
-
|
|
502
|
+
152
|
|
503
503
|
],
|
|
504
504
|
"p25": 0,
|
|
505
|
-
"median":
|
|
505
|
+
"median": 3,
|
|
506
506
|
"p75": 21,
|
|
507
507
|
"p90": 47
|
|
508
508
|
},
|
|
@@ -567,9 +567,9 @@
|
|
|
567
567
|
5,
|
|
568
568
|
7,
|
|
569
569
|
10,
|
|
570
|
+
11,
|
|
570
571
|
13,
|
|
571
|
-
|
|
572
|
-
22,
|
|
572
|
+
16,
|
|
573
573
|
26,
|
|
574
574
|
36,
|
|
575
575
|
39,
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
],
|
|
580
580
|
"p25": 0,
|
|
581
581
|
"median": 0,
|
|
582
|
-
"p75":
|
|
582
|
+
"p75": 13,
|
|
583
583
|
"p90": 40
|
|
584
584
|
},
|
|
585
585
|
"components": {
|
|
@@ -597,35 +597,35 @@
|
|
|
597
597
|
342,
|
|
598
598
|
350,
|
|
599
599
|
417,
|
|
600
|
-
|
|
600
|
+
606,
|
|
601
601
|
637,
|
|
602
602
|
777,
|
|
603
603
|
796,
|
|
604
604
|
836,
|
|
605
605
|
936,
|
|
606
|
-
940,
|
|
607
606
|
962,
|
|
608
607
|
970,
|
|
608
|
+
1046,
|
|
609
609
|
1052,
|
|
610
610
|
1081,
|
|
611
|
-
1216,
|
|
612
|
-
1379,
|
|
613
611
|
1414,
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
612
|
+
1456,
|
|
613
|
+
1551,
|
|
614
|
+
1708,
|
|
615
|
+
2530,
|
|
616
|
+
2669
|
|
617
617
|
],
|
|
618
618
|
"p25": 233,
|
|
619
619
|
"median": 707,
|
|
620
|
-
"p75":
|
|
621
|
-
"p90":
|
|
620
|
+
"p75": 1051,
|
|
621
|
+
"p90": 1567
|
|
622
622
|
}
|
|
623
623
|
},
|
|
624
624
|
"repos": [
|
|
625
625
|
{
|
|
626
626
|
"repo": "calcom/cal.com",
|
|
627
627
|
"designSystem": "custom",
|
|
628
|
-
"codeFiles":
|
|
628
|
+
"codeFiles": 4389,
|
|
629
629
|
"metrics": {
|
|
630
630
|
"colors": 385,
|
|
631
631
|
"greys": 77,
|
|
@@ -877,52 +877,52 @@
|
|
|
877
877
|
{
|
|
878
878
|
"repo": "dubinc/dub",
|
|
879
879
|
"designSystem": "custom",
|
|
880
|
-
"codeFiles":
|
|
880
|
+
"codeFiles": 3974,
|
|
881
881
|
"metrics": {
|
|
882
|
-
"colors":
|
|
882
|
+
"colors": 103,
|
|
883
883
|
"greys": 14,
|
|
884
|
-
"spacing":
|
|
884
|
+
"spacing": 58,
|
|
885
885
|
"typefaces": 3,
|
|
886
|
-
"fontSizes":
|
|
887
|
-
"radii":
|
|
886
|
+
"fontSizes": 39,
|
|
887
|
+
"radii": 25,
|
|
888
888
|
"shadows": 0,
|
|
889
|
-
"exactDuplicates":
|
|
890
|
-
"inlineStyles":
|
|
891
|
-
"arbitrary":
|
|
892
|
-
"nearPairs":
|
|
889
|
+
"exactDuplicates": 23,
|
|
890
|
+
"inlineStyles": 48,
|
|
891
|
+
"arbitrary": 621,
|
|
892
|
+
"nearPairs": 14,
|
|
893
893
|
"important": 1,
|
|
894
|
-
"neverImported":
|
|
895
|
-
"components":
|
|
894
|
+
"neverImported": 16,
|
|
895
|
+
"components": 1551
|
|
896
896
|
}
|
|
897
897
|
},
|
|
898
898
|
{
|
|
899
899
|
"repo": "formbricks/formbricks",
|
|
900
900
|
"designSystem": "custom",
|
|
901
|
-
"codeFiles":
|
|
901
|
+
"codeFiles": 2336,
|
|
902
902
|
"metrics": {
|
|
903
|
-
"colors":
|
|
903
|
+
"colors": 145,
|
|
904
904
|
"greys": 18,
|
|
905
|
-
"spacing":
|
|
905
|
+
"spacing": 52,
|
|
906
906
|
"typefaces": 2,
|
|
907
907
|
"fontSizes": 28,
|
|
908
908
|
"radii": 25,
|
|
909
909
|
"shadows": 6,
|
|
910
|
-
"exactDuplicates":
|
|
911
|
-
"inlineStyles":
|
|
912
|
-
"arbitrary":
|
|
910
|
+
"exactDuplicates": 61,
|
|
911
|
+
"inlineStyles": 20,
|
|
912
|
+
"arbitrary": 196,
|
|
913
913
|
"nearPairs": 13,
|
|
914
914
|
"important": 83,
|
|
915
915
|
"neverImported": 0,
|
|
916
|
-
"components":
|
|
916
|
+
"components": 1046
|
|
917
917
|
}
|
|
918
918
|
},
|
|
919
919
|
{
|
|
920
920
|
"repo": "openstatusHQ/openstatus",
|
|
921
921
|
"designSystem": "custom",
|
|
922
|
-
"codeFiles":
|
|
922
|
+
"codeFiles": 1948,
|
|
923
923
|
"metrics": {
|
|
924
|
-
"colors":
|
|
925
|
-
"greys":
|
|
924
|
+
"colors": 87,
|
|
925
|
+
"greys": 4,
|
|
926
926
|
"spacing": 9,
|
|
927
927
|
"typefaces": 3,
|
|
928
928
|
"fontSizes": 14,
|
|
@@ -930,8 +930,8 @@
|
|
|
930
930
|
"shadows": 0,
|
|
931
931
|
"exactDuplicates": 92,
|
|
932
932
|
"inlineStyles": 119,
|
|
933
|
-
"arbitrary":
|
|
934
|
-
"nearPairs":
|
|
933
|
+
"arbitrary": 175,
|
|
934
|
+
"nearPairs": 4,
|
|
935
935
|
"important": 0,
|
|
936
936
|
"neverImported": 5,
|
|
937
937
|
"components": 1081
|
|
@@ -940,7 +940,7 @@
|
|
|
940
940
|
{
|
|
941
941
|
"repo": "lukevella/rallly",
|
|
942
942
|
"designSystem": "custom",
|
|
943
|
-
"codeFiles":
|
|
943
|
+
"codeFiles": 734,
|
|
944
944
|
"metrics": {
|
|
945
945
|
"colors": 26,
|
|
946
946
|
"greys": 4,
|
|
@@ -951,17 +951,17 @@
|
|
|
951
951
|
"shadows": 0,
|
|
952
952
|
"exactDuplicates": 10,
|
|
953
953
|
"inlineStyles": 23,
|
|
954
|
-
"arbitrary":
|
|
954
|
+
"arbitrary": 28,
|
|
955
955
|
"nearPairs": 2,
|
|
956
956
|
"important": 0,
|
|
957
|
-
"neverImported":
|
|
958
|
-
"components":
|
|
957
|
+
"neverImported": 11,
|
|
958
|
+
"components": 606
|
|
959
959
|
}
|
|
960
960
|
},
|
|
961
961
|
{
|
|
962
962
|
"repo": "mfts/papermark",
|
|
963
963
|
"designSystem": "shadcn",
|
|
964
|
-
"codeFiles":
|
|
964
|
+
"codeFiles": 1365,
|
|
965
965
|
"metrics": {
|
|
966
966
|
"colors": 42,
|
|
967
967
|
"greys": 9,
|
|
@@ -982,7 +982,7 @@
|
|
|
982
982
|
{
|
|
983
983
|
"repo": "elie222/inbox-zero",
|
|
984
984
|
"designSystem": "custom",
|
|
985
|
-
"codeFiles":
|
|
985
|
+
"codeFiles": 1822,
|
|
986
986
|
"metrics": {
|
|
987
987
|
"colors": 154,
|
|
988
988
|
"greys": 24,
|
|
@@ -1045,28 +1045,28 @@
|
|
|
1045
1045
|
{
|
|
1046
1046
|
"repo": "twentyhq/twenty",
|
|
1047
1047
|
"designSystem": "library",
|
|
1048
|
-
"codeFiles":
|
|
1048
|
+
"codeFiles": 17131,
|
|
1049
1049
|
"metrics": {
|
|
1050
|
-
"colors":
|
|
1050
|
+
"colors": 1649,
|
|
1051
1051
|
"greys": 100,
|
|
1052
1052
|
"spacing": 24,
|
|
1053
1053
|
"typefaces": 7,
|
|
1054
1054
|
"fontSizes": 20,
|
|
1055
1055
|
"radii": 26,
|
|
1056
1056
|
"shadows": 19,
|
|
1057
|
-
"exactDuplicates":
|
|
1058
|
-
"inlineStyles":
|
|
1057
|
+
"exactDuplicates": 30,
|
|
1058
|
+
"inlineStyles": 168,
|
|
1059
1059
|
"arbitrary": 0,
|
|
1060
|
-
"nearPairs":
|
|
1060
|
+
"nearPairs": 152,
|
|
1061
1061
|
"important": 9,
|
|
1062
1062
|
"neverImported": 0,
|
|
1063
|
-
"components":
|
|
1063
|
+
"components": 2530
|
|
1064
1064
|
}
|
|
1065
1065
|
},
|
|
1066
1066
|
{
|
|
1067
1067
|
"repo": "langfuse/langfuse",
|
|
1068
1068
|
"designSystem": "custom",
|
|
1069
|
-
"codeFiles":
|
|
1069
|
+
"codeFiles": 2780,
|
|
1070
1070
|
"metrics": {
|
|
1071
1071
|
"colors": 170,
|
|
1072
1072
|
"greys": 4,
|
|
@@ -1087,28 +1087,28 @@
|
|
|
1087
1087
|
{
|
|
1088
1088
|
"repo": "teableio/teable",
|
|
1089
1089
|
"designSystem": "custom",
|
|
1090
|
-
"codeFiles":
|
|
1090
|
+
"codeFiles": 5100,
|
|
1091
1091
|
"metrics": {
|
|
1092
1092
|
"colors": 246,
|
|
1093
1093
|
"greys": 34,
|
|
1094
|
-
"spacing":
|
|
1094
|
+
"spacing": 70,
|
|
1095
1095
|
"typefaces": 3,
|
|
1096
1096
|
"fontSizes": 35,
|
|
1097
|
-
"radii":
|
|
1097
|
+
"radii": 25,
|
|
1098
1098
|
"shadows": 10,
|
|
1099
|
-
"exactDuplicates":
|
|
1100
|
-
"inlineStyles":
|
|
1101
|
-
"arbitrary":
|
|
1099
|
+
"exactDuplicates": 65,
|
|
1100
|
+
"inlineStyles": 57,
|
|
1101
|
+
"arbitrary": 642,
|
|
1102
1102
|
"nearPairs": 70,
|
|
1103
1103
|
"important": 42,
|
|
1104
1104
|
"neverImported": 0,
|
|
1105
|
-
"components":
|
|
1105
|
+
"components": 1456
|
|
1106
1106
|
}
|
|
1107
1107
|
},
|
|
1108
1108
|
{
|
|
1109
1109
|
"repo": "makeplane/plane",
|
|
1110
1110
|
"designSystem": "custom",
|
|
1111
|
-
"codeFiles":
|
|
1111
|
+
"codeFiles": 3271,
|
|
1112
1112
|
"metrics": {
|
|
1113
1113
|
"colors": 403,
|
|
1114
1114
|
"greys": 32,
|
|
@@ -1117,13 +1117,13 @@
|
|
|
1117
1117
|
"fontSizes": 24,
|
|
1118
1118
|
"radii": 21,
|
|
1119
1119
|
"shadows": 4,
|
|
1120
|
-
"exactDuplicates":
|
|
1121
|
-
"inlineStyles":
|
|
1122
|
-
"arbitrary":
|
|
1120
|
+
"exactDuplicates": 99,
|
|
1121
|
+
"inlineStyles": 26,
|
|
1122
|
+
"arbitrary": 574,
|
|
1123
1123
|
"nearPairs": 16,
|
|
1124
1124
|
"important": 74,
|
|
1125
1125
|
"neverImported": 7,
|
|
1126
|
-
"components":
|
|
1126
|
+
"components": 1708
|
|
1127
1127
|
}
|
|
1128
1128
|
},
|
|
1129
1129
|
{
|
|
@@ -1150,7 +1150,7 @@
|
|
|
1150
1150
|
{
|
|
1151
1151
|
"repo": "lobehub/lobe-chat",
|
|
1152
1152
|
"designSystem": "library",
|
|
1153
|
-
"codeFiles":
|
|
1153
|
+
"codeFiles": 8458,
|
|
1154
1154
|
"metrics": {
|
|
1155
1155
|
"colors": 303,
|
|
1156
1156
|
"greys": 37,
|
|
@@ -1159,13 +1159,13 @@
|
|
|
1159
1159
|
"fontSizes": 2,
|
|
1160
1160
|
"radii": 1,
|
|
1161
1161
|
"shadows": 0,
|
|
1162
|
-
"exactDuplicates":
|
|
1163
|
-
"inlineStyles":
|
|
1162
|
+
"exactDuplicates": 208,
|
|
1163
|
+
"inlineStyles": 3033,
|
|
1164
1164
|
"arbitrary": 0,
|
|
1165
1165
|
"nearPairs": 9,
|
|
1166
1166
|
"important": 0,
|
|
1167
1167
|
"neverImported": 0,
|
|
1168
|
-
"components":
|
|
1168
|
+
"components": 2669
|
|
1169
1169
|
}
|
|
1170
1170
|
},
|
|
1171
1171
|
{
|
|
@@ -1192,7 +1192,7 @@
|
|
|
1192
1192
|
{
|
|
1193
1193
|
"repo": "midday-ai/midday",
|
|
1194
1194
|
"designSystem": "custom",
|
|
1195
|
-
"codeFiles":
|
|
1195
|
+
"codeFiles": 1775,
|
|
1196
1196
|
"metrics": {
|
|
1197
1197
|
"colors": 169,
|
|
1198
1198
|
"greys": 31,
|
|
@@ -1203,7 +1203,7 @@
|
|
|
1203
1203
|
"shadows": 2,
|
|
1204
1204
|
"exactDuplicates": 103,
|
|
1205
1205
|
"inlineStyles": 117,
|
|
1206
|
-
"arbitrary":
|
|
1206
|
+
"arbitrary": 1753,
|
|
1207
1207
|
"nearPairs": 12,
|
|
1208
1208
|
"important": 0,
|
|
1209
1209
|
"neverImported": 26,
|
|
@@ -1213,7 +1213,7 @@
|
|
|
1213
1213
|
{
|
|
1214
1214
|
"repo": "triggerdotdev/trigger.dev",
|
|
1215
1215
|
"designSystem": "custom",
|
|
1216
|
-
"codeFiles":
|
|
1216
|
+
"codeFiles": 2369,
|
|
1217
1217
|
"metrics": {
|
|
1218
1218
|
"colors": 137,
|
|
1219
1219
|
"greys": 18,
|
|
@@ -1254,7 +1254,7 @@
|
|
|
1254
1254
|
}
|
|
1255
1255
|
],
|
|
1256
1256
|
"referenceSystems": {
|
|
1257
|
-
"builtAt": "2026-08-
|
|
1257
|
+
"builtAt": "2026-08-03T22:23:19.377Z",
|
|
1258
1258
|
"count": 10,
|
|
1259
1259
|
"note": "Curated scoped scans of reputable public design systems. Not comparable head-to-head with product repos: see per-system notes.",
|
|
1260
1260
|
"stats": {
|
|
@@ -36,7 +36,7 @@ const GK_MASK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqa
|
|
|
36
36
|
const GK_MARK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAAAAAAAAQCEeRdzAAACPklEQVR4nOVWTYh5URR/PlJYEKV8LKwkZalsmI2dZmMnK8pKmaZ87JSanexEkayUhSxsZyfJNBQ7UYqVhSShfM+v/6mXmtU81+p/Frfze+/d3++ce88993Hcf2cikehZ1GazWafTPUVDLBZjLBQKnU6HMTVvcrl8Op3ebrdsNgsokUiYUVP4Pp/v9s96vd79cwZGK95sNkkgGAwC2u12lhrY3u12C/b1ei2TyV5eXjabjV6vZ6BBa51MJin8arUKWKlU4H99fSkUCo5JUQ2HQxJwuVzIYLVawcdIVSs8CQoNpMQ+Go0Aw+EwwXw+D+h2u4Vr0LRSqUSMqVQKsN1uE3Q4HEql8ng8BgIBTnDhqlSqxWIBuvP5bDAYLBbL5XIBHAwGeBuJRODvdjun0/nnPOjraDRK8TYaDcBMJkMwFosBfn9/E0wkEn9OgjYgnU6fTidQwAGcTCbw9/u9VqvFUYB/vV5RskajkRNcTiaTKR6PI9j5fE7xlstlPM/lcgTr9ToneJ/5oOB4PB70O8Tb7/f9fv9sNqPkXl9fhQsQ9f1ktVqNvUVCxA6ZRxsf5pMAxnsuVBSOwvv7+6Phk0PsBNn0OOLC9haLReqdvBL/wUNKNPnt7Q0LjeVutVqhUEij0TwU9W8BVA4JUEUul8tarcZGhpbIarWiSeA0HQ4Hkvn4+GB56VMvov6DA+z1eplR89btdsE+Ho9tNhv3jOv+8/MTFz06M3ypVMqMnTfcwPhn4djG/tue+Mf4RGom9gMt6lAx16huIwAAAABJRU5ErkJggg==';
|
|
37
37
|
|
|
38
38
|
// Shown in the report footer; keep in step with plugin.json when releasing.
|
|
39
|
-
const VERSION = '3.
|
|
39
|
+
const VERSION = '3.10.0';
|
|
40
40
|
|
|
41
41
|
// Report identity. The scan id is a stable digest of this scan's shape, salted
|
|
42
42
|
// with the report namespace, so the same repo scanned twice reads the same and
|
|
@@ -29,8 +29,17 @@ const TEST_FILE_RE = /\.(test|spec|stories|story|cy)\.[cm]?[jt]sx?$/;
|
|
|
29
29
|
const CODE_EXTS = new Set(['.tsx', '.jsx', '.ts', '.js', '.mjs', '.cjs']);
|
|
30
30
|
const STYLE_EXTS = new Set(['.css', '.scss', '.sass', '.less']);
|
|
31
31
|
|
|
32
|
-
/**
|
|
33
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Walk the repo, returning relative paths bucketed by role.
|
|
34
|
+
*
|
|
35
|
+
* Depth-capped as a guard against pathological trees, not as a scoping choice.
|
|
36
|
+
* The cap has to clear a monorepo's own overhead: two levels are spent reaching
|
|
37
|
+
* apps/web before the app's routes even begin, and a Next.js route can nest six
|
|
38
|
+
* deep on its own. At 8 that silently dropped 11-12% of the files in dub,
|
|
39
|
+
* twenty and formbricks. Measured across the fleet, file counts stop growing at
|
|
40
|
+
* 12; 14 leaves headroom. Single-package repos are unaffected either way.
|
|
41
|
+
*/
|
|
42
|
+
export function walkRepo(root, maxDepth = 14) {
|
|
34
43
|
const files = { code: [], styles: [], other: [] };
|
|
35
44
|
const recurse = (dir, depth) => {
|
|
36
45
|
if (depth > maxDepth) return;
|