Where will your agent have to guess?
No gaps found.
Your repo gives the agent a clear answer for every check in this scan.

Fixes you can make right now to increase the health score

Three fixes could raise the design system health score from 51 to 75.

01
Unwind the 1,012 !important declarations
+8
Each one is a selector losing an argument with another selector; InviteTeamMembers.styles.scss alone carries 54. Fix the specificity at the source and they stop being necessary.
paste it into your agent ·
02
Fold 252 inline style blocks back into the system
+8
These are static values written as style attributes; start with frontend/src/container/BillingContainer/BillingContainer.tsx (12 blocks). Dynamic positioning was already excluded, so all of these could be classes or tokens today.
paste it into your agent ·
03
Collapse the 26 near-identical colours
+8
#f0f0f0 and #eeeeee are the same colour to any eye, and they are used 12 times between them. Nobody chose to have both. Pick the one that is already a token, point the other at it, and the pair stops multiplying.
paste it into your agent ·

What your AI agent sees today

Your agent reads frontend/.cursor/rules, frontend/AGENTS.md, frontend/CLAUDE.md. But none of it points at a single source of truth for components and tokens, because there isn't one yet. The numbers below are what your agent actually works from.

+3 nested in subfolders

Readable by: Claude Code ✓ · Codex ✓ · Cursor ✓

Give the agent the answers

the rules file generated from this scan, wrapped as a present. Agents do not always ask before inventing, so the plugin also checks every file they edit, and guard-my-design-system checks the pull request.

Agent trap. <QuerySection> alone has 4 implementations. An agent asked for one can not tell which is the real one, so it picks 1 at random or writes another. Every wrong pick becomes the example the next agent copies.
Agent trap. 8px appears 1183 times. An agent looking for how this repo does spacing reads a repeated value as the rule, so it will write use number 1184. The most copied value here is the one you least want copied.
Agent trap. This palette holds 26 pairs of colours a screen can barely tell apart. An agent asked for the brand grey can not see the difference either, so it copies whichever twin is nearest, and when unsure it writes a third between them. 2 becomes 3.
408
distinct colours
Ideal Design System~24 ▲
Avg antd repo317 · messier than 63% ▲
Reputable systems14 ▲
44
shades of grey
Ideal Design System~13 ▲
Avg antd repo44 =
Reputable systems2 ▲
121
off-scale spacing values
Ideal Design System~12 ▲
Avg antd repo75 · messier than 75% ▲
Reputable systems5 ▲
37
duplicated components
Ideal Design System0 ▲
Avg antd repo21 ▲
Reputable systems9 ▲
252
inline style blocks
Ideal Design System0 ▲
Avg antd repo210 · messier than 63% ▲
Reputable systems12 ▲
26
near-identical colour pairs
Ideal Design System0 ▲
Avg antd repo26 =
Reputable systems1 ▲
1,012
!important declarations
Ideal Design System0 ▲
Avg antd repo64 · messier than 100% ▲
Reputable systems3 ▲
0
components never imported
Ideal Design System0 =
Reputable systems0 =
0
arbitrary bracket values
Ideal Design System~20 ▼
Avg antd repo145 ▼
Reputable systems0 =
2
colours written on components per 100 kit files
Ideal Design System~6 ▼
Avg antd repo13 · cleaner than 88% ▼
7
pixel sizes written on components per 100 kit files
Ideal Design System~7 =
Avg antd repo22 · cleaner than 69% ▼
Palette
408colours

A healthy product palette is up to ~24 colours: one brand hue with a few tints, one accent, up to 13 greys, and status colours.

300 tokens108 strays
Colour usage
Sized by how often each is used
token stray
+348
Grey ramp · sorted dark → light · how many can you tell apart?
26 nearly identical pairs · each pair is 1 colour recorded twice
#f0f0f0 ×11 ≈ #eeeeee ×1#f0f0f0 ×11 ≈ #f5f0f0 ×1#1890ff ×9 ≈ #1e90ff ×2rgb(136, 136, 136) ×8 ≈ #828282 ×1rgb(136, 136, 136) ×8 ≈ #8c8c8c ×1#ead8fd ×6 ≈ #e8defb ×1#f5f5f5 ×4 ≈ #f6f6f6 ×2#e9e9e9 ×3 ≈ #e8e8e8 ×3+18 more

Your Ant Design theme, and what is written around it

the theme, and the places a colour or a pixel size was written onto a component instead

Theme in frontend/src/hooks/useDarkMode/index.tsx and 1 more · read 0 times from components

Components reach the theme 0 times per 100 kit files, through token.colorTextSecondary and token.margin from theme.useToken(). That is the system working.

13 colours written on components · 2 per 100 kit files
#1890ff ×5#fdd600 ×2#4096ff ×1#fff ×1#000 ×1rgba(255,99,132,0.2) ×1rgba(255,99,132,1) ×1#3a2a63 ×1
MetricsAggregateSection.tsx ×4styles.ts ×2UsageExplorer.tsx ×2QueryAddOns.tsx ×1QueryAggregation.tsx ×1
48 pixel sizes written on components · 7 per 100 kit files
marginBottom: 8px ×6gap: 4px ×5gap: 8px ×5marginTop: 4px ×3marginTop: 12px ×3marginBottom: 16px ×3marginLeft: 20px ×3padding: 8px ×2
BillingContainer.tsx ×7config.ts ×4UsageExplorer.tsx ×4QueryAddOns.tsx ×3IncidentIo.tsx ×3

Not counted: 3 files of colour data or artwork (QueryAggregationSelect.tsx, QuerySearch.tsx, AnomalyAlertEvaluationView.tsx).

121 off-scale spacing values

a disciplined repo keeps these around a dozen · on-scale Tailwind steps (·) shown for context · off-scale in coral

8px
1,183
16px
636
12px
580
4px
485
6px
364
10px
198
24px
189
0px
181
2px
175
14px
70
20px
67
1rem
57
1px
35
5px
34
32px
29
3px
28
18px
24
15px
20

Typography & shape

10
typefaces
Ideal Design System~3 ▲
Avg antd repo5 · messier than 75% ▲
Reputable systems1 ▲
34
font sizes
Ideal Design System~10 ▲
Avg antd repo37 ▼
Reputable systems5 ▲
59
border radii
Ideal Design System~10 ▲
Avg antd repo16 · messier than 75% ▲
69
shadow styles
Ideal Design System~6 ▲
Avg antd repo19 · messier than 81% ▲
Reputable systems1 ▲
the type scale, at its real sizes · how many of these are the same decision?
48px ×2 Almost but not quite
2rem ×1 Almost but not quite
24px ×14 Almost but not quite
22px ×1 Almost but not quite
20px ×6 Almost but not quite
1.15em ×1 Almost but not quite
18px ×18 Almost but not quite
1.08em ×1 Almost but not quite
16px ×29 Almost but not quite
1em ×1 Almost but not quite
15.4px ×1 Almost but not quite
0.95em ×1 Almost but not quite
15px ×1 Almost but not quite
14px ×254 Almost but not quite
13px ×238 Almost but not quite
12.5px ×1 Almost but not quite
and 7 more
the corners, drawn · 59 radii in one interface
2px ×247
4px ×245
6px ×81
3px ×58
50% ×51
50px ×38
20px ×23
8px ×16
0px 2px 2px 0px ×14
2px 0px 0px 2px ×10
1px ×10
5px ×7
10px ×7
0.625rem ×7
the elevations, cast, 10 of 69 · on the light surface they were drawn for
4px 10px 16px 2px r… ×25
0px 0px 8px 0px rgb… ×19
0px -4px 16px 2px r… ×18
0 0 0 2px rgba(255,… ×9
0 4px 8px rgba(58, … ×5
0px 103px 12px 0px … ×4
0px 4px 12px 0px rg… ×4
-4px 10px 16px 2px … ×3
0 4px 8px rgba(0, 0… ×3
0px 4px 16px 0px rg… ×3

10 typefaces, declared 28 different ways

every distinct declaration is a chance for the next one to be wrong

Inter×338
'Geist Mono'×48
Inter, sans-serif×27
'Space Mono'×24
'Space Mono', monospace×19
'Space Mono', monospace !important×16
'Inter'×14
'Geist Mono', monospace×11

Where it hurts most

the 5 files carrying the most off-system styling

01 frontend/src/components/NewSelect/styles.scss 53 stray colours
02 frontend/src/container/Integrations/IntegrationDetailPage/IntegrationDetailPage.styles.scss 20 stray colours
03 frontend/src/styles.scss 20 stray colours
04 frontend/src/container/OnboardingV2Container/OnboardingV2.styles.scss 15 stray colours
05 frontend/src/container/CreateAlertChannels/defaults.ts 14 stray colours

Duplicated components

an agent asking which one is canonical gets several plausible answers. Paths open in VS Code

<QuerySection> · 4 implementations
frontend/src/container/CreateAlertV2/QuerySection/QuerySection.tsx
frontend/src/container/FormAlertRules/QuerySection.tsx
frontend/src/container/LLMObservability/Explorer/QuerySection/QuerySection.tsx
frontend/src/container/TracesExplorer/QuerySection/index.tsx
<TableView> · 4 implementations
frontend/src/container/LLMObservability/Explorer/TableView/TableView.tsx
frontend/src/container/LogDetailedView/TableView.tsx
frontend/src/container/MetricsExplorer/Inspect/TableView.tsx
frontend/src/container/TracesExplorer/TableView/index.tsx
<Explorer> · 4 implementations
frontend/src/container/LLMObservability/Explorer/Explorer.tsx
frontend/src/container/ApiMonitoring/Explorer/Explorer.tsx
frontend/src/container/MeterExplorer/Explorer/Explorer.tsx
frontend/src/container/MetricsExplorer/Explorer/Explorer.tsx
<TimeSeries> · 3 implementations
frontend/src/container/MeterExplorer/Explorer/TimeSeries.tsx
frontend/src/container/MetricsExplorer/Explorer/TimeSeries.tsx
frontend/src/lib/visualization/charts/TimeSeries/TimeSeries.tsx
<Overview> · 3 implementations
frontend/src/container/Integrations/IntegrationDetailPage/IntegrationDetailContentTabs/Overview.tsx
frontend/src/container/LLMObservability/Overview/Overview.tsx
frontend/src/container/LogDetailedView/Overview.tsx
<HavingFilter> · 3 implementations
frontend/src/components/QueryBuilderV2/QueryV2/QueryAddOns/HavingFilter/HavingFilter.tsx
frontend/src/container/QueryBuilder/filters/Formula/Having/HavingFilter.tsx
frontend/src/container/QueryBuilder/filters/HavingFilter/HavingFilter.tsx
<Services> · 3 implementations
frontend/src/container/Home/Services/Services.tsx
frontend/src/container/ServiceApplication/index.tsx
frontend/src/container/ServiceTable/index.tsx
<Spinner> · 2 implementations
frontend/src/container/CreateAlertV2/utils.tsx
frontend/src/components/Spinner/index.tsx
label family · 8 variants
<KeyValueLabel>
frontend/src/periscope/components/KeyValueLabel/KeyValueLabel.tsx
used 10×
<FieldLabel>
frontend/src/container/Integrations/CloudIntegration/GoogleCloudPlatform/AddNewAccount/FieldLabel.tsx
used 6×
<FilterLabel>
frontend/src/container/QueryBuilder/components/FilterLabel/FilterLabel.tsx
used 3×
<LabelColumn>
frontend/src/components/Alerts/LabelColumn/LabelColumn.tsx
used 2×
<LabelColumn>
frontend/src/components/TableRenderer/LabelColumn.tsx
used 2×
<LabelSelector>
frontend/src/container/MetricsExplorer/VolumeControl/components/VolumeControlConfigDrawer/LabelSelector/LabelSelector.tsx
used 1×
…and 2 more
tag family · 7 variants
<TagValue>
frontend/src/container/Trace/Search/AllTags/Tag/TagValue.tsx
used 5×
<PlotTag>
frontend/src/components/PlotTag/PlotTag.tsx
used 3×
<QueryTypeTag>
frontend/src/components/QueryTypeTag/QueryTypeTag.tsx
used 3×
<BetaTag>
frontend/src/periscope/components/BetaTag/BetaTag.tsx
used 2×
<HavingFilterTag>
frontend/src/container/QueryBuilder/components/HavingFilterTag/HavingFilterTag.tsx
used 2×
<AlertStatusTag>
frontend/src/container/TriggeredAlerts/components/AlertStatusTag.tsx
used 1×
…and 1 more
link family · 6 variants
<Link>
frontend/src/components/MarkdownRenderer/MarkdownRenderer.tsx
used 40×
<BlockLink>
frontend/src/container/LLMObservability/Explorer/ListView/utils.tsx
used 8×
<BlockLink>
frontend/src/container/TracesExplorer/ListView/utils.tsx
used 8×
<InfoLinkText>
frontend/src/container/ListAlertRules/AlertsEmptyState/InfoLinkText.tsx
used 2×
<ColumnWithLink>
frontend/src/container/MetricsApplication/Tabs/Overview/TableRenderer/ColumnWithLink.tsx
used 1×
<MarkdownExternalLink>
frontend/src/container/AIAssistant/components/MarkdownExternalLink/MarkdownExternalLink.tsx
badge family · 5 variants
<TagBadge>
frontend/src/components/TagBadge/TagBadge.tsx
used 7×
<HttpStatusBadge>
frontend/src/components/HttpStatusBadge/HttpStatusBadge.tsx
used 3×
<BadgeWithTooltip>
frontend/src/components/TableRenderer/BadgeWithTooltip.tsx
used 1×
<StatusBadge>
frontend/src/components/ServiceAccountsTable/utils.tsx
used 1×
<VolumeControlBadge>
frontend/src/container/MetricsExplorer/VolumeControl/components/VolumeControlBadge.tsx
used 1×
toast family · 5 variants
<NotificationChannelsNotFoundContent>
frontend/src/container/CreateAlertV2/AlertCondition/utils.tsx
used 2×
<NotificationSettings>
frontend/src/container/CreateAlertV2/NotificationSettings/NotificationSettings.tsx
used 2×
<NotificationMessage>
frontend/src/container/CreateAlertV2/NotificationSettings/NotificationMessage.tsx
used 1×
<NotificationProvider>
frontend/src/hooks/useNotifications.tsx
used 1×
<NotificationContext>
frontend/src/hooks/useNotifications.tsx
checkbox family · 5 variants
<CheckboxFilterV2>
frontend/src/components/QuickFilters/FilterRenderers/Checkbox/v2/CheckboxFilterV2.tsx
used 1×
<CheckboxFilterV2Section>
frontend/src/components/QuickFilters/FilterRenderers/Checkbox/v2/CheckboxFilterV2Section.tsx
used 1×
<CheckboxFilterV2ValueRow>
frontend/src/components/QuickFilters/FilterRenderers/Checkbox/v2/CheckboxFilterV2ValueRow.tsx
used 1×
<CheckboxValueRow>
frontend/src/components/QuickFilters/FilterRenderers/Checkbox/CheckboxValueRow.tsx
used 1×
<CheckboxFilter>
frontend/src/components/QuickFilters/FilterRenderers/Checkbox/Checkbox.tsx

252 inline style blocks

styling no system can see

frontend/src/container/BillingContainer/BillingContainer.tsx×12
frontend/src/components/QueryBuilderV2/QueryV2/QueryAddOns/QueryAddOns.tsx×8
frontend/src/container/FormAlertRules/RuleOptions.tsx×8
frontend/src/components/QueryBuilderV2/QueryV2/MerticsAggregateSection/MetricsAggregateSection.tsx×6
frontend/src/container/CreateAlertV2/AlertCondition/ThresholdItem.tsx×6
frontend/src/container/LogsSearchFilter/SearchFields/QueryBuilder/QueryBuilder.tsx×6
1,012 !important declarations · each one forces a style through
InviteTeamMembers.styles.scss ×54QuerySearch.styles.scss ×46OnboardingV2.styles.scss ×46QueryAggregation.styles.scss ×43PrettyView.styles.scss ×41QueryAddOns.styles.scss ×40

The adoption map

952 components defined · tile area is import count · the real system, drawn to scale

<Tooltip> · used 240× · frontend/src/lib/uPlotV2/components/Tooltip/Tooltip.tsx Tooltip 240× <ColumnHeader> · used 108× · frontend/src/container/InfraMonitoringK8sV2/Base/ColumnHeader.tsx ColumnHeader 108× <Card> · used 85× · frontend/src/periscope/components/Card/Card.tsx Card 85× <ValidateColumnValueWrapper> · used 72× · frontend/src/container/InfraMonitoringK8sV2/components/ValidateColumnValueWrapper.tsx ValidateColumnValueWrap… 72× <Search> · used 45× · frontend/src/container/Trace/Search/index.tsx Search 45× <Spinner> · used 45× · frontend/src/container/CreateAlertV2/utils.tsx Spinner 45× <Spinner> · used 43× · frontend/src/components/Spinner/index.tsx Spinner 43× <Link> · used 40× · frontend/src/components/MarkdownRenderer/MarkdownRenderer.tsx Link 40× <AuthZTooltip> · used 31× · frontend/src/lib/authz/components/AuthZTooltip/AuthZTooltip.tsx AuthZTooltip 31× <Container> · used 30× · frontend/src/container/PipelinePage/PipelineListsView/styles.tsx Container 30× <Container> · used 28× · frontend/src/container/PipelinePage/PipelineListsView/AddNewProcessor/styles.tsx Container 28× <EntityProgressBar> · used 27× · frontend/src/container/InfraMonitoringK8sV2/components/EntityProgressBar.tsx EntityProgress… 27× <EntityProgressThresholds> · used 27× · frontend/src/container/InfraMonitoringK8sV2/components/EntityProgressThresholds.tsx EntityProgress… 27× <AuthZButton> · used 26× · frontend/src/lib/authz/components/AuthZButton/AuthZButton.tsx AuthZButton 26× <OverlayScrollbar> · used 25× · frontend/src/components/OverlayScrollbar/OverlayScrollbar.tsx OverlayScrollb… 25× <TextNoData> · used 23× · frontend/src/container/InfraMonitoringK8sV2/components/TextNoData.tsx TextNoData 23× <BarChart> · used 22× · frontend/src/lib/visualization/charts/BarChart/BarChart.tsx BarChart 22× <EntityGroupHeader> · used 22× · frontend/src/container/InfraMonitoringK8sV2/Base/EntityGroupHeader.tsx EntityGroupHeader 22× <ResizeTable> · used 20× · frontend/src/components/ResizeTable/ResizeTable.tsx ResizeTable 20× <ErrorInPlace> · used 19× · frontend/src/components/ErrorInPlace/ErrorInPlace.tsx ErrorInPlace 19× <GroupedStatusCounts> · used 17× · frontend/src/container/InfraMonitoringK8sV2/components/GroupedStatusCounts.tsx GroupedStatusC… 17× <TextToolTip> · used 16× · frontend/src/components/TextToolTip/TextToolTip.tsx TextToolTip 16× <Graph> · used 13× · frontend/src/container/AlertHistory/Timeline/Graph/Graph.tsx Graph 13× <Graph> · used 12× · frontend/src/components/Graph/index.tsx Graph 12×

258 more adopted components below the top 24, not drawn.

540 components are imported exactly once: <AboutSigNozQuestions>, <AccountActions>, <ActionRow>, <ActionsMenu>, <ActionsSection>, <ActionToggle> and 534 more. Quiet corners, not yet a system.

componentuseddefined inprops
<Tooltip> 240× frontend/src/lib/uPlotV2/components/Tooltip/Tooltip.tsx none
<ColumnHeader> 108× frontend/src/container/InfraMonitoringK8sV2/Base/ColumnHeader.tsx docPath tooltip
<Card> 85× frontend/src/periscope/components/Card/Card.tsx none
<ValidateColumnValueWrapper> 72× frontend/src/container/InfraMonitoringK8sV2/components/ValidateColumnValueWrapper.tsx value entity attribute rowId
<Search> 45× frontend/src/container/Trace/Search/index.tsx updateTagVisibility updateTagIsError
<Spinner> 45× frontend/src/container/CreateAlertV2/utils.tsx isCreatingAlertRule isUpdatingAlertRule
<Spinner> 43× frontend/src/components/Spinner/index.tsx none
<Link> 40× frontend/src/components/MarkdownRenderer/MarkdownRenderer.tsx href
<AuthZTooltip> 31× frontend/src/lib/authz/components/AuthZTooltip/AuthZTooltip.tsx checks enabled tooltipMessage disabledTooltip side
<Container> 30× frontend/src/container/PipelinePage/PipelineListsView/styles.tsx none
Generated by roast-my-design-system ver. 9.4.0 · free to run: npx roast-my-design-system@latest · also a Claude Code + Codex skill and a local MCP server
Designed and built by Greg Kozakiewicz · be83327c6ab9 · Think it got something wrong?
Non-destructive scanRead-onlyPaths are real