Colour Scales

Building a colour scale generator website with AI

AI chatbox titled "Create a colour scale"
2026
AI chatbox titled "Create a colour scale"
2026

Responsibilities

Prompt-Driven Development

Timeline

2 Weeks

Platform

Web

After coming across the uicolors.app website I was really impressed with how well this tool solved the problem of selecting great colour scales for a new UI project. However, it got me thinking — what if you could use natural language to generate and fine-tune colour scales? I decided to give it a try.

Video walkthrough of Colour Scales

As part of my exploration of AI tooling, I wanted to experiment with skipping Figma entirely and jumping straight into code. In another passion project called TakeFive — a microbreak reminder and tracking app — I had used AI to build the prototype, but created all the designs as I normally would in Figma Design. This time I skipped Design altogether and went straight into Make.

I started by building a "Create a colour scale" page — a simple text input with pill button suggestions to spark ideas, covering four different input types to show users they could start from anything.

Once the basics were in place, I connected it to Supabase and configured the AI instructions. I tested across GPT-4o Mini, GPT-4.1 Mini, and GPT-4.1, refining the prompt several times. Two things took the most iteration. First, the saturation curve — in HSL, high lightness naturally kills vibrancy, so lighter shades need boosted saturation just to read as coloured, while darker shades need it pulled back to avoid feeling overwhelming. Second, hue rotation — subtly shifting the hue toward brighter values in lighter shades and darker values in darker shades enhances perceived depth across the scale. The two Mini models struggled with both, consistently producing flat results. GPT-4.1 produced the most consistent results.

Shade 500 is the BASE COLOR — the truest representation of the requested colour

- Use HSL colour space for precise lightness control

SATURATION CURVE
Increase saturation at the light end, taper at the dark end:
Light end: high saturation compensates for HSL's reduced vibrancy
Dark end: low saturation prevents backgrounds feeling overwhelming
Shade 50: 75–100% (near-white — needs high saturation to read as coloured at all)
Shade 500: 60–85% (peak vibrancy — the base colour)
Shade 950: 3–10% (near-pure dark neutral with a faint colour undertone only)

HUE ROTATION
Shift hue subtly to enhance perceived lightness and depth (max ±10–15° from base):
Lighter shades: rotate toward nearest bright hue (60°, 180°, or 300°)
Darker shades: rotate toward nearest dark hue (0°, 120°, or 240°)

- Maintain consistent hue across all shades (±5° variation acceptable)

- Return only a valid JSON object — no markdown, no explanation

- Use HSL colour space for precise lightness control…

Shade 500 is the BASE COLOR — the truest representation of the requested colour

- Use HSL colour space for precise lightness control

Abridged code snippet

My favourite interaction was adding a colour scale to a palette

Curosr hovering over colour swatch with copy icon
Colour palette page

Finally, I tidied up the UI and published the experiment. It was a fun way to test out a concept I wouldn't have been able to explore before, but it wasn't without frustration. Simple UI tweaks, like getting the right cursor on hover states, often took two or three prompts to land correctly.

For now, my preference is to start in Figma design rather than jumping straight into prompting — having design decisions locked in beforehand means less time wrestling with small details and fewer wasted credits. Though I suspect that could change if the AI had a design system to work with from the start.