# Flash DS vs Asking ChatGPT for a Palette > A chatbot can produce a palette in seconds. What it cannot do is produce the same palette twice, or hand those values to the agent writing your components. - Source: https://flashdsm.com/compare/chatgpt - Site: Flash DS (https://flashdsm.com) - Updated: 2026-08-06 --- ## The short answer A general assistant will happily generate a colour palette or a type scale, and for a one-off exploration that is often enough. It breaks down as a design system because nothing persists: the next conversation produces different values, there is no artifact your codebase or Figma can consume, and the agent writing your components has no way to read what was decided. ## What ChatGPT does well It is free, instant, already open in a tab, and genuinely good at the creative part. For exploring directions, sanity-checking a palette or naming a scale, a general assistant is a fine tool and you should use it. ## At a glance | Capability | Flash DS | ChatGPT | | --- | --- | --- | | Producing a palette | Yes, plus type, spacing, radius, shadow, motion and component specs | Yes, usually just the palette | | Same answer next time | Stored system with version history | Different values every conversation | | Light and dark modes | Generated together as one system | Ad hoc, if you remember to ask | | Machine-readable output | CSS variables, Tailwind config, Tokens Studio JSON, Figma variables | Text in a chat window | | Your coding agent can read it | Live over MCP, on every generation | Only if you paste it in again | | Catching off-brand code | Lint tool returns hardcoded values and their token replacements | No | ## The first prompt works fine Ask any capable assistant for "a colour palette for a fintech dashboard, serious and modern" and you will get something reasonable. This is not a weakness of the model, and a page arguing that chatbots are bad at colour would be wrong. The trouble starts at prompt two. ## Why the second prompt is the problem A design system's value is not that the values are good. It is that they are the *same* values, everywhere, every time. A conversation has no memory of what your product's primary blue is. Ask again tomorrow, in a new chat, and you get a different blue. Ask a colleague to ask, and they get a third. Nothing enforces that the spacing scale you agreed on is the one used in the component someone generates next week. So teams do what you would expect: they paste the palette into a message, then paste it again, then keep a scratch file of values to paste, and eventually that scratch file is the design system, except nobody maintains it and it is out of date. ## What actually goes wrong in the codebase The concrete failure looks like this. An engineer asks Cursor or Claude Code to build a settings page. The model has no access to your tokens, so it does what models do: it invents plausible values. `#3B82F6` instead of your primary. `16px` instead of `var(--space-4)`. A shadow that is close to yours but not yours. None of it is obviously wrong in review. All of it is drift. Three months of that and the codebase has several parallel design systems that nobody decided to create. ## What Flash DS does differently **It produces an artifact, not a message.** A stored design system with tokens for colour, typography, spacing, radius, shadow and motion, plus component specifications mapped to them, with version history. **It exports to things that consume tokens.** CSS custom properties, Tailwind configuration, Tokens Studio JSON, Figma variables, or a pull request on your repository. **It hands the values to the agent.** An MCP server exposes the live tokens to Cursor, Claude Code and any MCP client. The model writing your component reads your actual primary rather than guessing at one. **It catches the drift that already happened.** Paste off-brand code into the `check_violations` tool and it returns every hardcoded value with the token that replaces it. This takes about thirty seconds and needs no setup, which makes it the fastest way to see whether this is a real problem in your codebase or a theoretical one. ## Use both The honest recommendation: keep using a general assistant for exploration and judgement calls. Use a design system for the values that have to be stable. They are not competing for the same job, and the argument that they are is what causes teams to end up with neither. ## Common questions ### Can ChatGPT generate a design system? It can generate the content of one, such as a colour palette or a type scale, but not a design system in the useful sense. There is no persistent artifact, the values differ between conversations, and nothing exports to CSS, Tailwind, Figma or an AI coding agent. Consistency across time and surfaces is what makes a set of values a system. ### Why does AI-generated UI code come out off-brand? Because the model has no access to the project's design tokens and fills the gap with plausible values it has seen elsewhere. It writes a hardcoded hex colour instead of a token reference. The fix is to give the agent the real tokens, which is what a Model Context Protocol server does, and to check generated code against them. ### How do I stop Cursor or Claude Code from inventing colours? Give the agent the design system. Flash DS runs an MCP server that serves live tokens to any MCP client, and exports Cursor rules that tell the agent which values to use. It also provides a check_violations tool that scans generated code and returns each hardcoded value with the token that should replace it.