Skip to content

← Back to list

Identity: spectrum R/G/B/W

The name took longer to surface than the architecture. When it did, everything fell into place — even the brand colors.

3 min read

The name took longer to surface than the architecture. When it did, everything fell into place — even the brand colors. I didn’t design the palette: I found it in the hardware itself.

Lumware identity grid: wordmark, spectrum R/G/B/W palette, and type samples (Geist + Geist Mono).

The context

A single-script project doesn’t need a name. A product does. A family, even more so. While the repo was called python2arduino_neopixel, the only way I could refer to it was “the project”. Every time I wrote a README, I ran out of vocabulary.

There was a practical reason to fix it: I already knew I wanted to ship two sibling products (sensor→host, unity↔strip), and if all three carried unrelated names, they would never be a family — just three repos that happened to know each other.

The decision

Lumware. Lum (Latin for light) + ware (software). Short, registrable, describes what it is without overselling it. Light is saturated in the market; neon is aesthetic rather than functional; photon is pretentious. Lumware is what’s actually there: software for light.

Three products, one family name:

  • Lumware — flagship, this repo. host → strip. Images and video to the strip.
  • Lumware Capturesensor → host. Camera, mic, MIDI feeding a host that decides.
  • Lumware Stageunity ↔ strip. Unity sends frames and receives strip events bidirectionally.

Each lives in its own repo. They share vocabulary (frames, transport, host, codec) and they share brand. They do not share code: no cross-imports. The family is cultural, not technical.

The palette comes from the hardware

An RGB strip can make white by mixing R+G+B. An RGBW strip carries a fourth channel dedicated to white — typically warm, always cleaner. That fourth letter is the brand:

  • spectrum.r — red of the R channel
  • spectrum.g — green of the G channel
  • spectrum.b — blue of the B channel
  • spectrum.w — warm white, #FFF5E0

The flagship’s canonical accent is spectrum.w. Not just any white — the specific white a well-calibrated W LED produces when it does its job. If you’re coming from the code, it’s literally the byte the host injects into the W channel of an RGBW frame.

Beyond spectrum, three more roles:

  • glow — secondary accent, for active states.
  • pulse — positive feedback (frame sent, settings saved).
  • code.* — syntax-highlighting palette for documentation snippets.

Typography

Geist for UI. Geist Mono for code, numbers, IDs. One family, two clear roles. No serifs. No decoration. No italics by default.

Geist Mono isn’t cosmetic: in the web UI, when you see measured_fps: 29.97, you read it column-aligned without effort. The difference between 0 and O, between 1 and l, is unambiguous. In a live-metrics table that saves reading errors.

Why the brand lives outside this repo. The canonical brand book is at arlaf-design-systems/packages/tokens-lumware/BRAND_BOOK.md, in a separate repo. Only references live here. When Lumware Capture or Lumware Stage want to claim the family, they import from the same tokens package — no duplication, no risk of drift between repos. The cost: a tokens repo to maintain as the source of truth. The reward: three products with literally identical identity.

What comes next

We have software, hardware, protocol, host, process, brand. What’s missing is the place where all of it meets a human: the local web UI. Next post: why it lives in the browser and not as a native app.