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 55 to 72. One more pays once it is done in full.

01
Unwind the 26 !important declarations
+11
Each one is a selector losing an argument with another selector; data-grid.css alone carries 8. Fix the specificity at the source and they stop being necessary.
paste it into your agent ·
02
Crown the canonical <TelekomNavItem>
+6
3 component names have competing implementations. Start with <TelekomNavItem>: packages/components/src/components/telekom/telekom-nav-item/telekom-nav-item.tsx vs packages/components/src/components/telekom/telekom-nav-flyout/telekom-nav-flyout.tsx. Decide which one is canonical, re-export it from one home, and rename or fold in the other.
paste it into your agent ·
03
Define a spacing scale, then fold 66 values into it
under 18 · +6
66 distinct spacing values and no named scale to hold them. Define ~8 steps in packages/design-tokens/src/telekom/tokens.js, next to the tokens you already keep there, then migrate values as you touch each file. No mass rounding.
paste it into your agent ·

What your AI agent sees today

No CLAUDE.md, no AGENTS.md, no .cursorrules. Every time your AI builds UI here, it guesses, from everything below. This is why its output looks almost-but-not-quite right.

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. <TelekomNavItem> alone has 2 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. -1px appears 22 times. An agent looking for how this repo does spacing reads a repeated value as the rule, so it will write use number 23. The most copied value here is the one you least want copied.
Agent trap. 26 !important declarations, and each one forces a style through instead of fixing the rule that blocked it. An agent whose style will not apply does what the repo taught it and adds another. The count only goes up.
149
distinct colours
Ideal Design System~24 ▲
Avg web-component repo218 · cleaner than 71% ▼
Reputable systems14 ▲
15
shades of grey
Ideal Design System~13 ▲
Avg web-component repo21 ▼
Reputable systems4 ▲
66
off-scale spacing values
Ideal Design System~12 ▲
Avg web-component repo24 · messier than 86% ▲
Reputable systems5 ▲
3
duplicated components
Ideal Design System0 ▲
Avg web-component repo1 · messier than 71% ▲
Reputable systems9 ▼
7
inline style blocks
Ideal Design System0 ▲
Avg web-component repo13 · messier than 71% ▼
Reputable systems12 ▼
2
near-identical colour pairs
Ideal Design System0 ▲
Avg web-component repo3 ▼
Reputable systems1 ▲
26
!important declarations
Ideal Design System0 ▲
Avg web-component repo27 ▼
Reputable systems3 ▲
0
components never imported
Ideal Design System0 =
Avg web-component repo8 ▼
Reputable systems0 =
library: internal use only, downstream consumers invisible
0
arbitrary bracket values
Ideal Design System~20 ▼
Reputable systems0 =

Package by package

1 package with enough UI to judge · the repo score above is the whole thing blended, and 5 packages were too small or too backend to score

packagescoreworst findingsize
packages/components 60 26 !important declarations 162 files

A repo scores below its own packages by arithmetic, not by accident: distinct values add up across packages, so the whole always carries more than any part. Read the package scores for where each team stands, and the repo score for what your agent sees when it looks at everything at once.

Palette
149colours

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.

144 tokens5 strays
Colour usage
Sized by how often the code uses each colour
token named, colour not shown stray
+232
+7

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

Grey ramp · sorted dark → light · how many can you tell apart?
2 nearly identical pairs · each pair is 1 colour recorded twice
#1b1b1b ×4 ≈ #191919 ×4#eeeeee ×2 ≈ #f2f2f2 ×2

66 off-scale spacing values

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

-1px
22
0px
21
12px
15
8px
14
1px
13
-2px
9
1rem
8
4px
8
-10px
8
48px
8
-4px
7
6px
7
5px
7
10px
7
17px
6
2px
5
-5px
5
14px
5

Typography & shape

1
typefaces
Ideal Design System~3 ▼
Avg web-component repo1 =
Reputable systems1 =
3
font sizes
Ideal Design System~10 ▼
Avg web-component repo10 · cleaner than 86% ▼
Reputable systems5 ▼
18
border radii
Ideal Design System~10 ▲
Avg web-component repo11 ▲
34
shadow styles
Ideal Design System~6 ▲
Avg web-component repo27 ▲
Reputable systems1 ▲
the font sizes, by use
1rem ×212px ×116px ×1
the corners, drawn · 18 radii in one interface
50% ×7
20% ×3
2px ×2
100% ×1
1rem ×1
3px ×1
0 0 3px 3px ×1

1 typeface, declared 2 different ways

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

'TeleNeoWeb'×24
'TeleNeoWeb', sans-serif×2

Where it hurts most

the 5 files carrying the most off-system styling

01 packages/components/src/components/dropdown/dropdown.css 4 stray colours
02 packages/components/src/components/alert/alert.css 2 stray colours
03 packages/components/src/components/data-grid/cell-handlers/number-cell.tsx 2 inline
04 packages/components/src/components/data-grid/data-grid.tsx 2 inline
05 packages/components/src/components/carousel/carousel.css 1 stray colour

Duplicated components

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

<TelekomNavItem> · 2 implementations
packages/components/src/components/telekom/telekom-nav-item/telekom-nav-item.tsx
packages/components/src/components/telekom/telekom-nav-flyout/telekom-nav-flyout.tsx
<Logo> · 2 implementations
packages/components/src/components/telekom/logo/logo.tsx
packages/components/src/components/telekom/app-logo/app-logo.tsx
<Shell> · 2 implementations
packages/components/src/components/telekom/app-shell/app-shell.tsx
packages/components/src/components/telekom/telekom-app-shell/telekom-app-shell.tsx
footer family · 6 variants
<TelekomFooter>
packages/components/src/components/telekom/telekom-footer/telekom-footer.tsx
used 1×
<TelekomFooterContent>
packages/components/src/components/telekom/telekom-footer/telekom-footer-content.tsx
used 1×
<AppFooter>
packages/components/src/components/telekom/app-footer/app-footer.tsx
<TelekomFooterDataBackCompat>
packages/components/src/components/telekom/telekom-footer-data-back-compat/telekom-footer-data-back-compat.tsx
<TelekomFooterExtendedNavigation>
packages/components/src/components/telekom/telekom-footer-extended-navigation/telekom-footer-extended-navigation.tsx
<TelekomFooterExtendedNavigationColumn>
packages/components/src/components/telekom/telekom-footer-extended-navigation/telekom-footer-extended-navigation-column.tsx
button family · 5 variants
<Button>
packages/components/src/components/button/button.tsx
used 10×
<RadioButton>
packages/components/src/components/radio-button/radio-button.tsx
used 1×
<RadioButtonGroup>
packages/components/src/components/radio-button-group/radio-button-group.tsx
<SegmentedButton>
packages/components/src/components/segmented-button/segmented-button.tsx
<ToggleButton>
packages/components/src/components/toggle-button/toggle-button.tsx
toast family · 5 variants
<Toast>
packages/components/src/components/toast/toast.tsx
used 1×
<Notification>
packages/components/src/components/notification/notification.tsx
<NotificationBanner>
packages/components/src/components/notification-banner/notification-banner.tsx
<NotificationMessage>
packages/components/src/components/notification-message/notification-message.tsx
<NotificationToast>
packages/components/src/components/notification-toast/notification-toast.tsx
list family · 4 variants
<MenuFlyoutList>
packages/components/src/components/menu-flyout-list/menu-flyout-list.tsx
used 6×
<TelekomNavList>
packages/components/src/components/telekom/telekom-nav-list/telekom-nav-list.tsx
used 6×
<List>
packages/components/src/components/list/list.tsx
used 1×
<ListItem>
packages/components/src/components/list-item/list-item.tsx
used 1×
header family · 4 variants
<TabHeader>
packages/components/src/components/tab-header/tab-header.tsx
used 2×
<Header>
packages/components/src/components/telekom/app-header/app-header.tsx
used 1×
<TelekomHeader>
packages/components/src/components/telekom/telekom-header/telekom-header.tsx
used 1×
<TelekomHeaderDataBackCompat>
packages/components/src/components/telekom/telekom-header-data-back-compat/telekom-header-data-back-compat.tsx
select family · 2 variants
<DropdownSelectItem>
packages/components/src/components/dropdown-select-item/dropdown-select-item.tsx
used 21×
<DropdownSelect>
packages/components/src/components/dropdown-select/dropdown-select.tsx
used 5×

7 inline style blocks

styling no system can see

packages/components/src/components/data-grid/cell-handlers/number-cell.tsx×2
packages/components/src/components/data-grid/data-grid.tsx×2
packages/components/src/components/data-grid/cell-handlers/select-cell.tsx×1
packages/components/src/components/data-grid/cell-handlers/text-cell.tsx×1
packages/components/src/components/telekom/telekom-footer/telekom-footer-content.tsx×1
26 !important declarations · each one forces a style through
data-grid.css ×8tag.css ×4switch.css ×3tab-header.css ×3segment.css ×2table.css ×2

The composition map

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

<DropdownSelectItem> · used 21× · packages/components/src/components/dropdown-select-item/dropdown-select-item.tsx DropdownSelectItem 21× <Combobox> · used 15× · packages/components/src/components/combobox/combobox.tsx Combobox 15× <Tag> · used 11× · packages/components/src/components/tag/tag.tsx Tag 11× <TelekomNavItem> · used 11× · packages/components/src/components/telekom/telekom-nav-item/telekom-nav-item.tsx TelekomNavItem 11× <Button> · used 10× · packages/components/src/components/button/button.tsx Button 10× <Link> · used 10× · packages/components/src/components/link/link.tsx Link 10× <HelperText> · used 9× · packages/components/src/components/helper-text/helper-text.tsx HelperText 9× <AppNavigationUserMenu> · used 8× · packages/components/src/components/telekom/app-navigation-user-menu/app-navigation-user-menu.tsx AppNavigationUserMenu 8× <Checkbox> · used 8× · packages/components/src/components/checkbox/checkbox.tsx Checkbox 8× <Breadcrumb> · used 6× · packages/components/src/components/breadcrumb/breadcrumb.tsx Breadcrumb 6× <Icon> · used 6× · packages/components/src/components/icon/icon.tsx Icon 6× <Logo> · used 6× · packages/components/src/components/telekom/logo/logo.tsx Logo 6× <MenuFlyoutList> · used 6× · packages/components/src/components/menu-flyout-list/menu-flyout-list.tsx MenuFlyoutList 6× <TelekomNavList> · used 6× · packages/components/src/components/telekom/telekom-nav-list/telekom-nav-list.tsx TelekomNavList 6× <Badge> · used 5× · packages/components/src/components/badge/badge.tsx Badge 5× <DropdownSelect> · used 5× · packages/components/src/components/dropdown-select/dropdown-select.tsx DropdownSelect 5× <MenuFlyoutItem> · used 5× · packages/components/src/components/menu-flyout-item/menu-flyout-item.tsx MenuFlyoutItem 5× <MenuFlyout> · used 4× · packages/components/src/components/menu-flyout/menu-flyout.tsx MenuFlyout 4× <NavIcon> · used 4× · packages/components/src/components/telekom/nav-icon/nav-icon.tsx NavIcon 4× <TelekomNavItem> · used 4× · packages/components/src/components/telekom/telekom-nav-flyout/telekom-nav-flyout.tsx TelekomNavIt… 4× <ProgressBar> · used 3× · packages/components/src/components/progress-bar/progress-bar.tsx ProgressBar 3× <SidebarNav> · used 3× · packages/components/src/components/sidebar-nav/sidebar-nav.tsx SidebarNav 3× <TelekomMobileFlyoutCanvas> · used 3× · packages/components/src/components/telekom/telekom-mobile-flyout-canvas/telekom-mobile-flyout-canvas.tsx TelekomMobileFly… 3× <TelekomMobileMenuItem> · used 3× · packages/components/src/components/telekom/telekom-mobile-menu-item/telekom-mobile-menu-item.tsx TelekomMobileMen… 3×

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

30 components are imported exactly once: <Accordion>, <Carousel>, <ChartStackCard>, <Collapsible>, <Divider>, <Dropdown> and 24 more. Quiet corners, not yet a system.

componentuseddefined inprops
<DropdownSelectItem> 21× packages/components/src/components/dropdown-select-item/dropdown-select-item.tsx none
<Combobox> 15× packages/components/src/components/combobox/combobox.tsx none
<Tag> 11× packages/components/src/components/tag/tag.tsx none
<TelekomNavItem> 11× packages/components/src/components/telekom/telekom-nav-item/telekom-nav-item.tsx none
<Button> 10× packages/components/src/components/button/button.tsx none
<Link> 10× packages/components/src/components/link/link.tsx none
<HelperText> 9× packages/components/src/components/helper-text/helper-text.tsx none
<AppNavigationUserMenu> 8× packages/components/src/components/telekom/app-navigation-user-menu/app-navigation-user-menu.tsx none
<Checkbox> 8× packages/components/src/components/checkbox/checkbox.tsx none
<Breadcrumb> 6× packages/components/src/components/breadcrumb/breadcrumb.tsx none
Generated by roast-my-design-system ver. 10.2.1 · 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 · 67939eeb686a · Think it got something wrong?
Non-destructive scanRead-onlyPaths are real