onyx-dot-app on GitHub

onyx-dot-app/onyx

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

30 files reviewed·July 25, 2026

View on GitHub

Elevated

Design risk in this codebase.

3issues
Critical & Serious · top 2 shown below

Top fix

Add a confirmation dialog before the Reset action executes

See the fix

Verdict

Calm, token-consistent surfaces hide two accessibility and safety gaps: a reset button with no guardrail and a focus ring that might vanish on its own background. The form styling is disciplined; the moments that actually need extra care get the least design attention.

Files Rams reviewed

web/src/app/admin/connectors/[connector]/pages/gdrive/GoogleDrivePage.tsx

web/src/app/admin/connectors/[connector]/pages/gmail/GmailPage.tsx

web/src/app/admin/connectors/[connector]/pages/Advanced.tsx

web/src/app/admin/connectors/[connector]/pages/ConnectorInput/FileInput.tsx

web/src/app/admin/connectors/[connector]/pages/ConnectorInput/NumberInput.tsx

web/src/app/admin/connectors/[connector]/pages/ConnectorInput/SelectInput.tsx

web/src/app/admin/connectors/[connector]/pages/DynamicConnectorCreationForm.tsx

web/src/app/admin/connectors/[connector]/pages/FieldRendering.tsx

web/src/app/admin/connectors/[connector]/pages/gdrive/Credential.tsx

web/src/app/admin/connectors/[connector]/pages/gmail/Credential.tsx

web/src/app/app/components/AppPopup.tsx

web/src/app/app/components/WelcomeMessage.tsx

web/src/app/app/components/files/images/FullImageModal.tsx

web/src/app/app/components/files/images/InMessageImage.tsx

web/src/app/app/components/tools/GeneratingImageDisplay.tsx

web/src/app/components/nrf/SettingsPanel.tsx

web/src/app/craft/components/AgentSwitcher.tsx

web/src/app/craft/components/BigButton.tsx

web/src/app/craft/components/BuildLLMPopover.tsx

web/src/app/craft/components/BuildMessageList.tsx

web/src/app/craft/components/BuildWelcome.tsx

web/src/app/craft/components/CometEdge.tsx

web/src/app/craft/components/CompactionMarker.tsx

web/src/app/craft/components/ConnectDataBanner.tsx

web/src/app/craft/components/ContextRing.tsx

web/src/app/craft/components/CraftInputBar.tsx

web/src/app/craft/components/CraftingLoader.tsx

web/src/app/craft/components/IntroBackground.tsx

web/src/app/craft/components/IntroContent.tsx

web/src/app/craft/components/ModelPickerButton.tsx

97/100

UX

1 critical
UXCritical

web/src/app/admin/connectors/[connector]/pages/Advanced.tsx:42

Reset button deletes indexing config with zero confirmation step

In Advanced.tsx, the "Reset" button uses variant="danger" with a trash icon and type="submit", so clicking it fires the destructive action immediately. There is no confirmation dialog, modal, or intermediate step between the click and the reset taking effect.

Why it matters

A misclick or accidental Enter-triggered submit permanently wipes the connector's prune frequency, refresh frequency, and indexing start date configuration with no recovery path, forcing the admin to reconstruct settings from memory.

Fix

Gate destructive submit actions behind a confirmation dialog before the mutation runs.

<Button variant="danger" icon={SvgTrash} type="submit">
  Reset
</Button>
<Button
  variant="danger"
  icon={SvgTrash}
  type="button"
  onClick={() => setShowResetConfirmModal(true)}
>
  Reset
</Button>
{showResetConfirmModal && (
  <ConfirmModal
    title="Reset advanced settings?"
    onConfirm={submitForm}
    onClose={() => setShowResetConfirmModal(false)}
  />
)}
98/100

Accessibility

1 serious
AccessibilitySerious

web/src/app/admin/connectors/[connector]/pages/ConnectorInput/SelectInput.tsx:32

Select field strips native focus ring with only a color token replacing it

The select in SelectInput.tsx (line 32) applies focus:outline-hidden alongside focus:ring-2 focus:ring-lighter-agent, removing the browser's default focus outline in favor of a single ring color with no visible fallback verified against the field's own bg-transparent background.

Why it matters

If lighter-agent renders as a low-contrast tint against the page background behind this transparent select, keyboard users lose all visual indication of which control has focus while tabbing through the form.

Fix

Keep a visible focus indicator by pairing the ring with an offset or retaining the outline rather than hiding it outright.

className="w-full p-2 border border-border-03 rounded-08 bg-transparent text-text-04 focus:ring-2 focus:ring-lighter-agent focus:border-lighter-agent focus:outline-hidden"
className="w-full p-2 border border-border-03 rounded-08 bg-transparent text-text-04 focus:ring-2 focus:ring-offset-2 focus:ring-lighter-agent focus:border-lighter-agent"

Typography

No issues found

Color

No issues found

Spacing

No issues found

Components

No issues found

Motion

No issues found

Craft

No issues found

Working well

  • NumberInput's description text for Refresh Frequency spells out the unit (minutes), the default behavior, and what entering 0 does, which removes guesswork for admins configuring pruning without needing to check docs.
  • The label in SelectInput uses text-text-700 and text-text-500 design tokens instead of raw gray hex values, keeping this field visually consistent with the rest of the token-driven form system.
  • SelectInput correctly pairs the label's htmlFor with the Field's name prop, giving the select an accessible name for screen readers without extra ARIA plumbing.

Scored July 25, 2026 with Rams Engine v0.0.3 · Engine changelog
First scored July 9, 2026: 59/100. This rescore on v0.0.3: 59/100.

This page is an automated design review of onyx-dot-app/onyx’s UI code: 30 files read against 309 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