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

Two of these three fixes could raise the design system health score from 60 to 78. One more pays once it is done in full.

01
Fold 101 inline style blocks back into the system
+9
These are static values written as style attributes; start with frontend/src/component/admin/auth/OidcAuth/OidcAuth.tsx (9 blocks). Dynamic positioning was already excluded, so all of these could be classes or tokens today.
paste it into your agent ·
02
Collapse the 3 near-identical colours
+9
#635dc5 and #615bc2 are the same colour to any eye. 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 ·
03
Crown the canonical <DeleteUser>
under 2 · +5
25 component names have competing implementations. Start with <DeleteUser>: frontend/src/component/admin/users/InactiveUsersList/DeleteUser/DeleteUser.tsx vs frontend/src/component/admin/users/UsersList/DeleteUser/DeleteUser.tsx. Decide which one is canonical, re-export it from one home, and rename or fold in the other.
paste it into your agent ·

What your AI agent sees today

Your agent reads CLAUDE.md, AGENTS.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.

CLAUDE.md · Claude CodeAGENTS.md · generic (AGENTS.md standard)

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

4 rule references gone stale · a rule your agent obeys is worse than no rule when the repo has moved on
unleash-enterprise/src/index.ts named in CLAUDE.md, but the path no longer exists
enterprise/src/util/setup-stores.ts named in CLAUDE.md, but the path no longer exists
enterprise/src/util/setup-services.ts named in CLAUDE.md, but the path no longer exists
enterprise/src/create-enterprise-routes.ts named in CLAUDE.md, but the path no longer exists

Rules rot quietly: nobody edits them when a component is renamed or a file moves. Regenerate them from a fresh scan, or fix the lines by hand.

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. <StyledSuccessIcon> alone has 6 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. 101 inline styles live where the system should. An agent learns a codebase by example, and every inline style is an example that says the system is optional. Each one it copies becomes the example for the next.
203
distinct colours
Ideal Design System~24 ▲
Avg MUI repo141 ▲
Reputable systems14 ▲
19
shades of grey
Ideal Design System~13 ▲
Avg MUI repo25 · cleaner than 63% ▼
Reputable systems4 ▲
17
off-scale spacing values
Ideal Design System~12 ▲
Avg MUI repo15 ▲
Reputable systems5 ▲
25
duplicated components
Ideal Design System0 ▲
Avg MUI repo11 · messier than 79% ▲
Reputable systems9 ▲
101
inline style blocks
Ideal Design System0 ▲
Avg MUI repo29 · messier than 63% ▲
Reputable systems12 ▲
3
near-identical colour pairs
Ideal Design System0 ▲
Avg MUI repo3 =
Reputable systems1 ▲
1
!important declarations
Ideal Design System0 ▲
Avg MUI repo1 =
Reputable systems3 ▼
0
components never imported
Ideal Design System0 =
Reputable systems0 =
library: internal use only, downstream consumers invisible
0
arbitrary bracket values
Ideal Design System~20 ▼
Reputable systems0 =
4
colours written on components per 100 kit files
Ideal Design System~4 =
Avg MUI repo9 · cleaner than 63% ▼
2
pixel sizes written on components per 100 kit files
Ideal Design System~4 ▼
Avg MUI repo10 · cleaner than 79% ▼
Palette
203colours

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.

193 tokens10 strays
Colour usage
Sized by how often the code uses each colour
named, colour not shown stray
+32
+26

Of every 100 colour uses, 98 use a theme colour by name and 2 are strays. A stray is a value written by hand.

Grey ramp · sorted dark → light · how many can you tell apart?
3 nearly identical pairs · each pair is 1 colour recorded twice
#635dc5 ×1 ≈ #615bc2 ×1#757575 ×1 ≈ #78787a ×1#201e42 ×1 ≈ #1a2641 ×1

Your MUI 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/themes/dark-theme.ts and 1 more · read 6,162 times from components

Components reach the theme 556 times per 100 kit files, through text.secondary and theme.spacing(). That is the system working.

43 colours written on components · 4 per 100 kit files
#6c65e5 ×4#f1f0fc ×3#302e42 ×3#fff ×3#607b81 ×3rgba(0,0,0,0.5) ×3#201e42 ×2#546c71 ×2
ProjectActivity.tsx ×6SnakeGame.tsx ×6IntroShowcase.tsx ×5AdminListItem.tsx ×4AuthPageLayout.tsx ×4
17 pixel sizes written on components · 2 per 100 kit files
padding: 20px ×7paddingBlock: 7px ×2marginBottom: 4px ×2marginBottom: 2px ×2marginRight: 5px ×2gap: 8px ×1gap: 12px ×1
OidcAuth.tsx ×3SsoGroupSettings.tsx ×2PasswordMatcher.tsx ×2AutoCreateForm.tsx ×1PasswordAuth.tsx ×1

Not counted: 4 files of colour data or artwork (bar-chart-options.ts, PlausibleChart.tsx, LineChart.tsx).

17 off-scale spacing values

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

1rem
13
16px
8
20px
8
0.5rem
6
8px
4
10px
4
24px
3
0.6rem
3
4px
2
56px
1
2rem
1
0.25rem
1
0.8rem
1
1.5rem
1
2px
1
32px
1
0px
1

Typography & shape

1
typefaces
Ideal Design System~3 ▼
Avg MUI repo1 =
Reputable systems1 =
4
font sizes
Ideal Design System~10 ▼
Avg MUI repo3 ▲
Reputable systems5 ▼
2
border radii
Ideal Design System~10 ▼
Avg MUI repo2 =
2
shadow styles
Ideal Design System~6 ▼
Avg MUI repo1 ▲
Reputable systems1 ▲
the type scale, at its real sizes · how many of these are the same decision?
20px ×1 Almost but not quite
1.1rem ×1 Almost but not quite
16px ×1 Almost but not quite
12px ×1 Almost but not quite
the radii, by use
2px ×225px ×1

Where it hurts most

the 5 files carrying the most off-system styling

01 frontend/src/component/admin/auth/OidcAuth/OidcAuth.tsx 9 inline
02 frontend/src/component/admin/auth/SamlAuth/SamlAuth.tsx 6 inline
03 frontend/src/component/admin/invoice/InvoiceList.tsx 5 inline
04 frontend/src/component/strategies/strategies.module.scss 4 stray colours
05 frontend/src/component/feedbackNew/FeedbackComponent.tsx 4 inline

Duplicated components

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

<StyledSuccessIcon> · 6 implementations
frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestReviewers/ChangeRequestReviewer.tsx
frontend/src/component/changeRequest/ChangeRequestSidebar/ChangeRequestSidebar.tsx
frontend/src/component/integrations/IntegrationEvents/IntegrationEventsStateIcon.tsx
frontend/src/component/project/Project/ProjectSettings/ProjectActions/ProjectActionsTable/ProjectActionsActionsCell/ProjectActionsLastEvent.tsx
frontend/src/component/project/Project/ProjectSettings/ProjectActions/ProjectActionsTable/ProjectActionsEventsModal/ProjectActionsEventsDetails/ProjectActionsEventsDetailsAction.tsx
frontend/src/component/project/Project/ProjectSettings/ProjectActions/ProjectActionsTable/ProjectActionsEventsModal/ProjectActionsEventsStateCell.tsx
<StyledContainer> · 4 implementations
frontend/src/component/changeRequest/ChangeRequests/ChangeRequestFilters/ChangeRequestFilters.styles.tsx
frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx
frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestHeader/ChangeRequestHeader.styles.tsx
frontend/src/component/feedbackNew/FeedbackComponent.tsx
<StyledFailedIcon> · 4 implementations
frontend/src/component/integrations/IntegrationEvents/IntegrationEventsStateIcon.tsx
frontend/src/component/project/Project/ProjectSettings/ProjectActions/ProjectActionsTable/ProjectActionsActionsCell/ProjectActionsLastEvent.tsx
frontend/src/component/project/Project/ProjectSettings/ProjectActions/ProjectActionsTable/ProjectActionsEventsModal/ProjectActionsEventsDetails/ProjectActionsEventsDetailsAction.tsx
frontend/src/component/project/Project/ProjectSettings/ProjectActions/ProjectActionsTable/ProjectActionsEventsModal/ProjectActionsEventsStateCell.tsx
<StyledHeader> · 2 implementations
frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestHeader/ChangeRequestHeader.styles.tsx
frontend/src/component/changeRequest/ChangeRequestSidebar/EnvironmentChangeRequest/ChangeRequestTitle.tsx
<StyledTitle> · defined twice, one wraps the other
frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx
frontend/src/component/feedbackNew/FeedbackComponent.tsx
<StyledForm> · defined twice, one wraps the other
frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx
frontend/src/component/feedbackNew/FeedbackComponent.tsx
<TabPanel> · 2 implementations
frontend/src/component/changeRequest/ChangeRequest/Changes/Change/ChangeTabComponents.tsx
frontend/src/component/common/TabNav/TabPanel/TabPanel.tsx
<StyledSelect> · defined twice, one wraps the other
frontend/src/component/feature/Dependencies/FeatureStatusOptions.tsx
frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/shared/SharedFormComponents.tsx
label family · 8 variants
<StyledLabel>
frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/shared/SharedFormComponents.tsx
used 37×
<StyledMetaDataItemLabel>
frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/FeatureOverviewMetaData.tsx
used 5×
<LegalValueLabel>
frontend/src/component/common/NewConstraintAccordion/LegalValueLabel/LegalValueLabel.tsx
used 4×
<LabelFilterSection>
frontend/src/component/impact-metrics/ImpactMetricModal/LabelFilter/LabelFilterSection/LabelFilterSection.tsx
used 2×
<FeatureStatusLabel>
frontend/src/component/feature/FeatureToggleList/StatusCell/FeatureStatusLabel.tsx
used 1×
<LabelDiscoveryError>
frontend/src/component/impact-metrics/ImpactMetricModal/LabelFilter/LabelDiscoveryStatus.tsx
used 1×
…and 2 more
tag family · 8 variants
<Tag>
frontend/src/component/common/Tag/Tag.tsx
used 3×
<TagRow>
frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/TagRow.tsx
used 1×
<TagTypeColorPicker>
frontend/src/component/tags/TagTypeForm/TagTypeColorPicker.tsx
used 1×
<TagTypeForm>
frontend/src/component/tags/TagTypeForm/TagTypeForm.tsx
used 1×
<CreateTagType>
frontend/src/component/tags/CreateTagType/CreateTagType.tsx
<EditTagType>
frontend/src/component/tags/EditTagType/EditTagType.tsx
…and 2 more
alert family · 8 variants
<FeatureStrategyChangeRequestAlert>
frontend/src/component/feature/FeatureStrategy/FeatureStrategyForm/FeatureStrategyChangeRequestAlert/FeatureStrategyChangeRequestAlert.tsx
used 2×
<StrategyVariantsUpgradeAlert>
frontend/src/component/common/StrategyVariantsUpgradeAlert/StrategyVariantsUpgradeAlert.tsx
used 2×
<CorsHelpAlert>
frontend/src/component/admin/cors/CorsHelpAlert.tsx
used 1×
<DependenciesUpgradeAlert>
frontend/src/component/feature/Dependencies/DependenciesUpgradeAlert.tsx
used 1×
<EnterpriseEdgeDismissibleAlert>
frontend/src/component/admin/enterprise-edge/EnterpriseEdgeDismissibleAlert.tsx
used 1×
<SegmentProjectAlert>
frontend/src/component/segments/SegmentProjectAlert.tsx
used 1×
…and 2 more
switch family · 5 variants
<PermissionSwitch>
frontend/src/component/common/PermissionSwitch/PermissionSwitch.tsx
used 4×
<FeatureToggleSwitch>
frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/FeatureToggleSwitch.tsx
used 3×
<FormSwitch>
frontend/src/component/common/FormSwitch/FormSwitch.tsx
used 3×
<IntegrationStateSwitch>
frontend/src/component/integrations/IntegrationForm/IntegrationStateSwitch/IntegrationStateSwitch.tsx
used 1×
<StrategySwitch>
frontend/src/component/strategies/StrategiesList/StrategySwitch/StrategySwitch.tsx
used 1×
sidebar family · 5 variants
<ChangeRequestSidebar>
frontend/src/component/changeRequest/ChangeRequestSidebar/ChangeRequestSidebar.tsx
used 1×
<LicensedUsersSidebar>
frontend/src/component/admin/users/UsersHeader/LicensedUsersSidebar.tsx
used 1×
<MetricDefinitionSidebar>
frontend/src/component/impact-metrics/RegisterMetricDialog/InfoSidebar.tsx
used 1×
<MobileNavigationSidebar>
frontend/src/component/layout/MainLayout/NavigationSidebar/MobileNavigationSidebar.tsx
used 1×
<NavigationSidebar>
frontend/src/component/layout/MainLayout/NavigationSidebar/NavigationSidebar.tsx
used 1×
dropdown family · 4 variants
<DropdownList>
frontend/src/component/common/DialogFormTemplate/ConfigButtons/DropdownList.tsx
used 1×
<DropdownMenu>
frontend/src/component/common/DropdownMenu/DropdownMenu.tsx
used 1×
<MultiPillDropdown>
frontend/src/component/common/DialogFormTemplate/NewDialogFormTemplate.tsx
<SinglePillDropdown>
frontend/src/component/common/DialogFormTemplate/NewDialogFormTemplate.tsx

101 inline style blocks

styling no system can see

frontend/src/component/admin/auth/OidcAuth/OidcAuth.tsx×9
frontend/src/component/admin/auth/SamlAuth/SamlAuth.tsx×6
frontend/src/component/admin/invoice/InvoiceList.tsx×5
frontend/src/component/feedbackNew/FeedbackComponent.tsx×4
frontend/src/component/admin/auth/AutoCreateForm/AutoCreateForm.tsx×3
frontend/src/component/admin/auth/SsoGroupSettings.tsx×3
1 !important declaration · each one forces a style through
common.module.scss ×1

The composition map

1,424 components defined · tile area is internal use: how the system builds from itself, downstream consumers invisible from here · the real system, drawn to scale

<StyledContainer> · used 110× · frontend/src/component/changeRequest/ChangeRequests/ChangeRequestFilters/ChangeRequestFilters.styles.tsx StyledContainer 110× <StyledContainer> · used 109× · frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx StyledContainer 109× <StyledContainer> · used 108× · frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestHeader/ChangeRequestHeader.styles.tsx StyledContainer 108× <StyledContainer> · used 108× · frontend/src/component/feedbackNew/FeedbackComponent.tsx StyledContainer 108× <Dialogue> · used 97× · frontend/src/component/common/Dialogue/Dialogue.tsx Dialogue 97× <TextCell> · used 96× · frontend/src/component/common/Table/cells/TextCell/TextCell.tsx TextCell 96× <PageContent> · used 84× · frontend/src/component/common/PageContent/PageContent.tsx PageContent 84× <PageHeader> · used 76× · frontend/src/component/common/PageHeader/PageHeader.tsx PageHeader 76× <Badge> · used 67× · frontend/src/component/common/Badge/Badge.tsx Badge 67× <StyledHeader> · used 67× · frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestHeader/ChangeRequestHeader.styles.tsx StyledHeader 67× <StyledTitle> · used 67× · frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx StyledTitle 67× <StyledHeader> · used 66× · frontend/src/component/changeRequest/ChangeRequestSidebar/EnvironmentChangeRequest/ChangeRequestTitle.tsx StyledHeader 66× <StyledTitle> · used 64× · frontend/src/component/feedbackNew/FeedbackComponent.tsx StyledTitle 64× <TablePlaceholder> · used 61× · frontend/src/component/common/Table/TablePlaceholder/TablePlaceholder.tsx TablePlaceholder 61× <Search> · used 56× · frontend/src/component/common/Search/Search.tsx Search 56× <PermissionButton> · used 55× · frontend/src/component/common/PermissionButton/PermissionButton.tsx PermissionButton 55× <StyledBox> · used 53× · frontend/src/component/admin/users/InviteLinkBar/InviteLinkBarContent.tsx StyledBox 53× <StyledInput> · used 53× · frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx StyledInput 53× <FormTemplate> · used 49× · frontend/src/component/common/FormTemplate/FormTemplate.tsx FormTemplate 49× <Input> · used 48× · frontend/src/component/common/Input/Input.tsx Input 48× <HelpIcon> · used 47× · frontend/src/component/common/HelpIcon/HelpIcon.tsx HelpIcon 47× <StyledForm> · used 46× · frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx StyledForm 46× <PermissionIconButton> · used 45× · frontend/src/component/common/PermissionIconButton/PermissionIconButton.tsx PermissionIconBu… 45× <StyledForm> · used 45× · frontend/src/component/feedbackNew/FeedbackComponent.tsx StyledForm 45×

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

791 components are imported exactly once: <AccessOverviewAccordion>, <AccessProvider>, <AccessProviderMock>, <AccessRequestsNotifications>, <AccordionContent>, <ActionsCell> and 785 more. Quiet corners, not yet a system.

componentuseddefined inprops
<StyledContainer> 110× frontend/src/component/changeRequest/ChangeRequests/ChangeRequestFilters/ChangeRequestFilters.styles.tsx none
<StyledContainer> 109× frontend/src/component/integrations/IntegrationForm/IntegrationForm.styles.tsx theme
<StyledContainer> 108× frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestHeader/ChangeRequestHeader.styles.tsx theme
<StyledContainer> 108× frontend/src/component/feedbackNew/FeedbackComponent.tsx theme
<Dialogue> 97× frontend/src/component/common/Dialogue/Dialogue.tsx none
<TextCell> 96× frontend/src/component/common/Table/cells/TextCell/TextCell.tsx none
<PageContent> 84× frontend/src/component/common/PageContent/PageContent.tsx none
<PageHeader> 76× frontend/src/component/common/PageHeader/PageHeader.tsx none
<Badge> 67× frontend/src/component/common/Badge/Badge.tsx none
<StyledHeader> 67× frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestHeader/ChangeRequestHeader.styles.tsx theme
Generated by roast-my-design-system ver. 10.1.5 · 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 · 3a233bf636b6 · Think it got something wrong?
Non-destructive scanRead-onlyPaths are real