← All posts

How to choose brand colors SaaS teams keep

A practical method for picking SaaS brand colors: roles, contrast, dark mode, and how to stop defaulting to purple.

Founders search how to choose brand colors SaaS after staring at a color wheel and picking the same indigo as every AI starter kit. Color is a system of roles, not a favorite hex.

Start with roles, not vibes

Assign jobs before aesthetics:

  1. Background — page and app canvas
  2. Text — primary reading color
  3. Muted text — secondary copy
  4. Accent — primary CTA and focus
  5. Accent on — text/icon on accent fills
  6. Border — dividers and inputs
  7. Muted surface — cards/panels if you use them

You can add success/warning later. Seven roles cover launch.

Constraints that beat inspiration boards

  • Contrast: Body text on background must pass readability. Fancy pastels that fail WCAG waste conversion.
  • Accent scarcity: Accent is for actions. If everything is accent, nothing is.
  • Category tell: Pure purple-to-indigo gradients signal "AI template" in 2026. Differentiate on purpose — warm, cool, neutral — as long as contrast holds.
  • Dark mode: Define dark tokens as a second set, not inverted guesses.

A simple selection process

  1. Pick accent from a shortlist of three. Place it on a real CTA screenshot.
  2. Choose neutral bg/text that make the accent feel intentional, not loud.
  3. Derive border and muted from the neutrals — do not invent unrelated grays.
  4. Test favicon + button + link in one frame.
  5. Write tokens into CSS variables; delete one-off hex in components.

Common SaaS mistakes

  • Copying a competitor accent "so we look enterprise"
  • Using pure black (#000) on pure white forever — harsh and generic
  • Five accent colors because the palette generator offered them
  • Marketing site colors that never reach the app

Tie color to story

If the brand is calm and technical, avoid neon. If it is urgent and operator-focused, a sharp accent beats soft pastels. The brief adjectives should veto colors. Use define brand voice alongside palette work.

Ship tokens with design tokens for Next.js and export and code. Generate a starting palette in brand flow, then edit — do not accept the first AI suggestion uncritically.

Worked example (roles, not hex worship)

Suppose your product is a calm operator tool for freelancers. Accent might be a controlled orange or teal — not neon. Background stays near-neutral so long reading sessions do not fatigue. Text stays near-black or near-white depending on theme. Border is a quiet step from the background. Muted text is clearly secondary but still readable.

Now stress-test: place the accent on primary buttons, links, and focus rings only. If the marketing site paints full-bleed accent sections everywhere, pull back. Accent scarcity creates hierarchy.

Document the roles in the same names your CSS uses. "Primary coral" in a PDF and --app-accent in code is how drift starts. When you teach a teammate how to choose brand colors SaaS teams actually keep, teach roles first.

Run a five-minute hallway test: show a button and a paragraph with no logo. Ask "what category is this?" If everyone says "another AI wrapper," change the accent or the neutrals until the guess shifts. Color alone will not position you, but it should not actively erase you.

Keep a forbidden list: colors that collide with error states, or that fail contrast on your chosen background. Write the failures down so future you does not "try crimson again" six months later.

Dark mode without a second brand

Dark mode is not "invert everything." Recast roles: backgrounds go near-black, text goes near-white, accent often stays similar but may need a slightly brighter step for contrast on dark surfaces. Borders get subtler. If light and dark feel like two products, you skipped role mapping.

Test both themes on the same screen: sidebar, button, input, error text. Fix the worst failure before shipping either theme publicly.

When people ask how to choose brand colors SaaS products can sustain, include theme pairs in the answer — not only the light marketing site.

Finally, sleep on the final accent overnight. Fresh eyes catch "this is still indigo template" better than a 2am tweak session. If morning-you still likes it on a real button, commit the tokens and delete the unused palette experiments from the branch.

Share the chosen roles in Slack once with hex values and CSS variable names side by side. That message becomes tribal knowledge until the guidelines page exists. Then delete the Slack message so the repo stays canonical. Consistency beats clever palettes. Re-read the roles aloud before you merge — if you cannot explain why accent exists, simplify the palette until you can say it in one sentence.

Sources

  1. SaaS brand identity guide (dp.vision) — light/dark color systems for product UI.
  2. Design System vs Brand Guidelines (Digital Polo) — why tokens belong with implementation.