Rams MCP · The full engine, now in your coding agent
react-native-elements on GitHub

react-native-elements/react-native-elements

Reviewed against Rams quality heuristics: accessibility, color, typography, spacing, components, motion, UX, and craft.

30 files reviewed·July 29, 2026

View on GitHub

Low

Design risk in this codebase.

3issues
Serious · top 2 shown below

Top fix

Give 'Error' its own distinct color, not shared blue

See the fix

Verdict

Clean structural instincts undone by two silence choices: one color, one suppressed error, both hiding signal that should be loud. The blue-on-blue status labels are the bigger design failure since they defeat the whole point of a status system.

Files Rams reviewed

website/src/pages/help.tsx

website/src/pages/team.tsx

website/src/pages/versions.tsx

example/src/components/header.tsx

example/src/views/Divider.tsx

example/src/views/avatars.tsx

example/src/views/badge.tsx

example/src/views/bottomsheet.tsx

example/src/views/buttons.tsx

example/src/views/cards.tsx

example/src/views/checkbox.tsx

example/src/views/chips.tsx

example/src/views/dialogs.tsx

example/src/views/fab.tsx

example/src/views/fonts.tsx

example/src/views/image.tsx

example/src/views/linearProgress.tsx

example/src/views/lists/content.tsx

example/src/views/lists2.tsx

example/src/views/login/screen2.tsx

example/src/views/login/screen3.tsx

example/src/views/overlay.tsx

example/src/views/pricing.tsx

example/src/views/profile.tsx

example/src/views/ratings.tsx

example/src/views/settings.tsx

example/src/views/skeleton.tsx

example/src/views/sliders.tsx

example/src/views/social_icons.tsx

example/src/views/speedDial.tsx

98/100

Color

1 serious
ColorSerious

example/src/views/badge.tsx:45

"Error" label renders in the same blue as "Success", erasing status meaning

In the Mini Badge text row, all four labels ('Success', 'Error', 'Primary', 'Warning') are styled with the identical color: '#397af8'. The Badge components above them (lines 36-39) presumably shift color per status, but this plain-text row directly under it uses one flat blue for every state, including the one meant to read as failure.

Why it matters

When a status label carries no color distinction, a user scanning the row can't tell 'Error' from 'Success' without reading every word individually, which defeats the purpose of a status system and slows down error recognition.

Fix

Map each status label's text color to its corresponding semantic token so 'Error' reads visually distinct from 'Success'.

<Text style={{ color: '#397af8', paddingVertical: 10 }}>Success</Text>
<Text style={{ color: '#397af8', paddingVertical: 10 }}>Error</Text>
<Text style={{ color: '#397af8', paddingVertical: 10 }}>Primary</Text>
<Text style={{ color: '#397af8', paddingVertical: 10 }}>Warning</Text>
<Text style={{ color: theme.colors.success, paddingVertical: 10 }}>Success</Text>
<Text style={{ color: theme.colors.error, paddingVertical: 10 }}>Error</Text>
<Text style={{ color: theme.colors.primary, paddingVertical: 10 }}>Primary</Text>
<Text style={{ color: theme.colors.warning, paddingVertical: 10 }}>Warning</Text>
98/100

Craft

1 serious
CraftSerious

example/src/views/badge.tsx:63

@ts-ignore hides a real prop mismatch on 'BadgedIcon' from the compiler

The BadgedIcon usage at line 75 is preceded by {/* @ts-ignore */}, suppressing whatever type error TypeScript is raising on its props instead of fixing the prop signature or type definition.

Why it matters

Suppressing the error means the compiler can no longer catch a real breakage here; a future prop rename or type change on BadgedIcon ships silently broken until it fails at runtime.

Fix

Fix the underlying type mismatch on BadgedIcon's prop definition instead of suppressing the compiler check.

{/* @ts-ignore */}
<BadgedIcon type="ionicon" name="chatbubble-ellipses" />
<BadgedIcon type="ionicon" name="chatbubble-ellipses" />

Accessibility

No issues found

Typography

No issues found

Spacing

No issues found

Components

No issues found

Motion

No issues found

UX

No issues found

Working well

  • The Badge components in the Mini Badge row (status="success", "error", "primary", "warning") differentiate by the Badge component's own status-driven color, which is the right pattern even though the plain text labels beneath them don't follow suit.
  • The demo cleanly isolates one variant per section (horizontal, inset, vertical, subheader), which is exactly what a component showcase should do: one concept per screen region, no mixed concerns.
  • Grouping avatars into labeled sections ('Photo Avatars', 'Icon Avatars', 'Letter Avatars', 'Badged Avatars') via SubHeader gives the showcase clear scan order without needing extra chrome.

Scored July 29, 2026 with Rams Engine v0.0.3 · Engine changelog

This page is an automated design review of react-native-elements/react-native-elements’s UI code: 30 files read against 291 versioned rules covering accessibility, color, typography, spacing, components, UX, motion, and craft. The score is out of 100; confirmed criticals cap it — one at 59, two at 49, three or more at 39.

More design scores

Score your own repo.

Free on public repos, no account. The same engine that scored this page reads your UI code and mints a score page like this one.

Public repos only. The full engine reviews the UI code and mints a public score page — we email you the link too. Already-scored repos open instantly.

Or get a design review on every pull requestInstall Rams