Skip to content
TraceItX Docs
Documentation

Branding & theming

Eight colours. The reporter should look like part of your product, not a bolted-on widget.

Updated

<TraceItXProvider
  config={{
    apiKey: 'txx_live_…',
    theme: {
      accent: '#3b82f6',
      accentForeground: '#ffffff',
      surface: '#0b0f14',
    },
  }}
>

The eight roles

RolePaints
backgroundThe reporter window behind everything.
surfaceCards, fields and raised areas.
borderHairlines between them.
textPrimary copy.
textMutedSecondary copy, hints, counters.
accentButtons, focus rings, the active tool.
accentForegroundText ON the accent — set it whenever you set accent.
destructiveDelete and discard actions.

Values are #rrggbb strings only — no named colours, no rgb(), no CSS variables. Every value is checked against that shape before it reaches the page; anything else is ignored rather than passed through.

Plan gating

Theming applies only once the server confirms a paid plan. On a free plan GET /api/config returns { "watermark": true }, the theme is suppressed entirely, and the reporter renders in default colours with a TraceItX mark.

That is a 200, not an error. An inline theme on a free plan is silently ignored rather than failing your build — so upgrading a plan themes the reporter with no code change and no redeploy.

Precedence

Per field, highest wins:

  1. Server theme — set in the dashboard, applies to every client
  2. Inline theme — this config object
  3. Default

Per field, not per object: setting only accent in the dashboard and only surface here gives you both. That is what lets a design team own brand colour centrally while an app overrides one value locally.

Dark mode

The reporter does not follow prefers-color-scheme. Its default palette is dark, and it looks the same on a light page and a dark one unless you theme it — which means a light-mode product gets a dark reporter until you set the background, surface and text roles yourself.

Set them together: a surface with default text on it is the same dark-on-dark hazard any partial palette override has.