Portfolio · design exploration · 2026-04-12

Accent palette
explorer — v1

Royal Tonal gives cohesion but no way for hero moments, data-viz, or diagram highlights to spike above the tonal register. This doc compares two candidate directions — Approach 2 (monochromatic + functional accent) and Approach 4 (analogous family) — against the locked Royal Tonal baseline.

Each scheme is shown on four surfaces: hero, case study card, build log ticker, and a diagram spot. Usage rules per scheme sit in the dark box underneath.

Royal Tonal as it stands today

Single-hue 12-step scale. Everything derives from #3B5BDB. This is the control.

#3B5BDB
royal-8 · brand
#6C85FF
royal-10 · link
#A5B4FF
royal-11 · kicker
#D5DCFA
royal-12 · on-brand
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
CLOUDFLARE TYPESCRIPT D1
Read case study →
Build log · live
2026-04-12portfolio — chunk 4a.3 imagery standards committed
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · causal loop (baseline)
signal capture artefact

Baseline observation

  • Every surface reads at the same volume — nothing cues the eye where to look first.
  • Case card metric, live ticker dot, and diagram critical-path all blend into the royal register.
  • This is the problem each option below is trying to solve.

One hue for identity, one hue for attention

Royal Tonal stays at ~90% of every surface. A single accent hue takes ~10%, scoped to exactly one job. The accent earns attention because it's rare.

2A
Royal + Amber
#F5B942 — complementary (blue+gold, editorial classic)

The classic editorial pairing. Blue + gold reads as assured and considered — think Vanity Fair, Monocle, The Economist. Warm complementary creates the strongest possible contrast without feeling electric. Risk: leans traditional, can skew "finance" or "law firm" if overused.

#3B5BDB
royal-8 · identity
#F5B942
amber · accent
#FFD47A
amber hover
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
CLOUDFLARE TYPESCRIPT D1
Read case study →
Build log · live
2026-04-12portfolio — chunk 4a.3 imagery standards committed
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · critical path highlighted
signal capture artefact

Amber usage rules

  • One job: outcome metrics + diagram critical path + live-data dot. That's it.
  • Hero one-word highlight only as rare "signature" move (case study openers, about page).
  • Never on buttons, links, or body UI — those stay royal. Breaks the identity.
  • Never as a background fill larger than a tag. Amber flood = warning aesthetic.
2B
Royal + Chartreuse
#D4F25C — near-complementary, electric/modern

Tech-editorial, confident, awake. Chartreuse reads as "developer tools that know what they're doing" — Linear, Vercel, early GitHub. Sharper and more contemporary than amber. Risk: strongly signals "tech" — less versatile if you ever want the portfolio to read as strategic/product rather than engineering.

#3B5BDB
royal-8 · identity
#D4F25C
chartreuse · accent
#E6FF8A
chartreuse hover
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
CLOUDFLARE TYPESCRIPT D1
Read case study →
Build log · live
2026-04-12portfolio — chunk 4a.3 imagery standards committed
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · critical path highlighted
signal capture artefact

Chartreuse usage rules

  • One job: outcome metrics + diagram critical path + live-data dot.
  • Works well for code highlighting (inline code spans in case study body — rare use).
  • Never on buttons, links, or body UI.
  • Avoid pairing with warm tones in the same frame — chartreuse + amber reads as "Lime Cordial".
2C
Royal + Coral
#FF7E5F — warm split-complement, human/friendly

Softer than amber, warmer than chartreuse. Coral reads as personable and approachable — more "product thinker with a human voice" than "serious engineer". Split-complementary (not pure opposite) which is why it feels easier on the eye. Risk: less distinct from designer portfolios — coral-on-dark is common.

#3B5BDB
royal-8 · identity
#FF7E5F
coral · accent
#FFA488
coral hover
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
CLOUDFLARE TYPESCRIPT D1
Read case study →
Build log · live
2026-04-12portfolio — chunk 4a.3 imagery standards committed
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · critical path highlighted
signal capture artefact

Coral usage rules

  • One job: outcome metrics + diagram critical path + live-data dot.
  • Warmer temperature makes it good for "human voice" callouts — quotes, transcript highlights.
  • Never on buttons, links, or body UI.
  • Coral flood on large surfaces reads as "error state" — keep it to small accents only.

A family of adjacent hues, all part of identity

Not "base + accent" but "base + siblings". Adjacent hues on the wheel share royal blue's assurance while giving illustrations, data viz, and category differentiation more range. Each hue earns a functional role — not just "pop".

4A
Royal + Cyan
#3B5BDB + #3BC3DB — cool-shift, data-editorial

Shift one step along the wheel toward cyan. Same saturation band, same value range — they read as a family. Cyan gives diagrams a second stroke colour and data-viz a second series colour, without introducing temperature conflict. Editorial and modern, slightly "Stripe/Bloomberg" in feel.

#3B5BDB
royal · base
#3BC3DB
cyan · sibling
#A5B4FF
royal-11 · tint
#86E4F0
cyan · tint
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
CLOUDFLARE TYPESCRIPT D1
Read case study →
Build log · live
2026-04-12portfolio — chunk 4a.3 imagery standards committed
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · two-series flow
input process output cache

Cyan sibling rules

  • Role split: royal = primary/UI. Cyan = secondary series + category 2 tags + "live" indicators.
  • Enables two-series data viz and dual-category diagrams without borrowing a hot accent.
  • Cyan kicker works as the "live/now" register, royal kicker as the "brand" register.
  • Don't use cyan for CTAs — royal is the primary action colour. Cyan is always the second voice.
4B
Royal + Violet
#3B5BDB + #8C3BDB — warm-shift, luxury-editorial

Shift one step the other way — toward violet. Reads richer and more "premium" than the cyan version. Closer to fashion/luxury magazine colour language. Works particularly well because the existing periwinkle (`royal-11` #A5B4FF) already bridges the two hues, making the family feel natural. Risk: edges toward "designer" aesthetic; slightly less tech-forward.

#3B5BDB
royal · base
#8C3BDB
violet · sibling
#A5B4FF
periwinkle · bridge
#C89BFF
violet · tint
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
CLOUDFLARE TYPESCRIPT D1
Read case study →
Build log · live
2026-04-12portfolio — chunk 4a.3 imagery standards committed
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · two-series flow
input process output cache

Violet sibling rules

  • Role split: royal = work/craft. Violet = thinking/writing (could split the portfolio's two modes — build log = royal, writing posts = violet).
  • Periwinkle `royal-11` already bridges royal and violet — the family feels cohesive, not grafted.
  • Good for category differentiation: project case studies (royal) vs essays (violet) vs transcripts (a shared tint).
  • Don't use violet for CTAs or primary navigation — royal stays primary.
4C
Violet + Royal + Cyan (triadic-analogous)
#8C3BDB · #3B5BDB · #3BC3DB — full family

The most ambitious option. Three hues spanning violet → royal → cyan give diagrams and data-viz a real colour vocabulary — enough to differentiate 3+ series without borrowing a fourth colour. Highest ceiling for illustration, lowest margin for error: if the three aren't used with discipline, the page can read as "3 brands fighting". Best if case studies lean heavily on diagrams and flow illustrations.

#8C3BDB
violet · writing
#3B5BDB
royal · primary
#3BC3DB
cyan · live/data
#C89BFF
violet tint
#86E4F0
cyan tint
— Product thinker · shipping with AI

I design product decisions, then ship them with Claude Code.

SYDNEY · AVAILABLE FOR WORK · Q2 2026
Get in touch →
Selected work · 01

Planner App

GTD planner with persistent SMS reminders. Migrated from Python/Railway to TypeScript/Cloudflare with single-choke-point spend protection.

+4 architecture principles extracted → workspace
WRITING TYPESCRIPT LIVE
Read case study →
Build log · live
2026-04-12writing — essay on transcripts-as-artefacts drafted
2026-04-11design-system — chunk 3 emitter shipped
2026-04-10planner-app — phase F scheduler, 111 tests
Diagram · three-series flow
thinking data shipping artefact

Triadic family rules

  • Role-per-hue: violet = thinking/writing · royal = work/craft/CTAs · cyan = live/data.
  • This gives the portfolio a colour language for its three content types (case studies, writing, build log) without ever feeling decorative.
  • Diagrams and flow illustrations can legitimately use all three — each hue carries a meaning, not just a colour slot.
  • Don't let the gradient hero move bleed into case study bodies — the gradient is a signature, not a pattern.
  • Don't introduce a fourth hue later. Three is the whole commitment.

Leaning towards 4B (Royal + Violet), with 2A (Amber) as the backup

Why 4B: the portfolio has three distinct content types (case studies, writing posts, build log + transcripts) and the style guide work in chunk 4a is explicitly trying to give them distinct voices. An analogous family lets you assign meaning per hue — royal for work, violet for thinking — in a way that a single accent can't. Periwinkle (royal-11) already sits between royal and violet, so the family will feel native rather than grafted on.

Why not 4C (triadic): three hues is the richest but most disciplined option. Unless diagrams dominate case study bodies (chunk 4d will tell us), the third hue adds complexity without proportional return. Promote 4B to 4C later if chunk 4d illustrations demand it.

Why 2A as backup: if the "two modes" framing doesn't hold up once case studies are written, amber + royal is the safer, more traditional choice — strong contrast, editorial legibility, and zero risk of category confusion. The accent is doing one thing and doing it loudly.

Against 2B (chartreuse) and 2C (coral): chartreuse is too "developer tools" for a product-thinking positioning; coral competes with a lot of designer portfolios and weakens the Royal Tonal identity rather than extending it.

Next step: pick between 4B and 2A, then extend the chosen option into a full token block (add `--violet-*` or `--amber-*` to `design.tokens.ts`) and rebuild the existing design explorer on it before committing to anything in `globals.css`.