Skip to content

Commit bfd6188

Browse files
committed
Rename project hcc → halo
The "Hue control center" working title was always meant to be a placeholder — settling on halo now and propagating it everywhere: - Cargo crate hcc-backend → halo-backend. - Env vars HCC_* / VITE_HCC_* → HALO_* / VITE_HALO_*. Hard rename with no fallback; the deployed Pi env files need to be updated in lockstep with the next image pull. - SQLite default path hcc.db → halo.db. The Pi's existing volume file must be renamed (or HALO_DB_PATH set to the old name). - Docker image / container / volume names hcc → halo. First push to main creates ghcr.io/eetu/halo; the old ghcr.io/eetu/hcc package becomes orphaned and can be deleted after the Pi has successfully pulled the new image. - Hue pairing devicetype string hcc#server → halo#server. Existing whitelisted user is unaffected (devicetype is metadata at creation time only); no re-pair required. - README, docs, and the halo_design skill scrubbed of HCC mentions and --hcc-* token names.
1 parent ad083a4 commit bfd6188

21 files changed

Lines changed: 216 additions & 216 deletions

File tree

‎.claude/skills/halo_design/HALO_DESIGN_README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# HCC — Hue Control Center Design System
1+
# halo — Home Dashboard Design System
22

33
A small, single‑purpose **home‑automation dashboard** that pairs with a Philips Hue bridge and surfaces the data you actually look at every day: room temperatures from Hue motion sensors, weather (FMI / Tomorrow.io), solar production (Solis inverter + FMI PV forecast), motion activity, and Hue light groups.
44

@@ -8,7 +8,7 @@ It's a wall‑mounted / always‑on dashboard first — Finnish, monochrome with
88

99
This design system was reverse‑engineered from a single source:
1010

11-
- **Code:** `eetu/hcc` (branch `develop`) — `frontend/` directory. Vite + React 19 + Emotion. Theme defined in `frontend/src/themes.ts`. UI in `frontend/src/components/`. Reference screenshot: `frontend/documentation/screenshot.png` (also copied to `assets/screenshot.png`).
11+
- **Code:** `eetu/halo` (branch `develop`) — `frontend/` directory. Vite + React 19 + Emotion. Theme defined in `frontend/src/themes.ts`. UI in `frontend/src/components/`. Reference screenshot: `frontend/documentation/screenshot.png` (also copied to `assets/screenshot.png`).
1212
- **Stack signals:** Open Sans (Google Fonts, weights 300 / 400 / 700), Material Icons + Material Icons Outlined (Google Fonts), Chart.js for time‑series, `@floating-ui/react` for tooltips, Finnish locale via `date-fns/locale/fi`.
1313

1414
There is one product surface: the **dashboard** (`ui_kits/dashboard/`). No marketing site, no mobile app, no separate admin tool.
@@ -85,7 +85,7 @@ Two themes, swapped by `prefers-color-scheme`. The accent (`activity.on = #f78f0
8585
| **Inter** | Body, labels, controls, **all numeric values** (clock, temperatures, kW), and the **wordmark**. The neutral workhorse, with a heavy 600 used for the brand mark. | 300 / 400 / 500 / 600 / 700 |
8686
| **Space Grotesk** | Section labels, nav, the date sub under the clock, the seconds counter. Geometric with a touch of character. | 400 / 500 / 600 |
8787

88-
Two variables expose them: `--hcc-font` (Inter), `--hcc-font-heading` (Space Grotesk). Numeric values — clock, temperature digits, kW readouts — share the same Inter treatment with `font-variant-numeric: tabular-nums` so they read as one family of measurements. The wordmark uses Inter at weight 600 with tight (−0.04em) tracking and a warm accent dot — it sits in the same family as the numerals so brand and data feel of‑a‑piece.
88+
Two variables expose them: `--halo-font` (Inter), `--halo-font-heading` (Space Grotesk). Numeric values — clock, temperature digits, kW readouts — share the same Inter treatment with `font-variant-numeric: tabular-nums` so they read as one family of measurements. The wordmark uses Inter at weight 600 with tight (−0.04em) tracking and a warm accent dot — it sits in the same family as the numerals so brand and data feel of‑a‑piece.
8989

9090
| Token | Size | Family / weight |
9191
|---|---|---|

‎.claude/skills/halo_design/README.md‎

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
It's designed to be **glanceable from across the room** — Finnish UI, monochrome with a single warm orange accent, generous whitespace, no chrome, no marketing voice. Touch-first; this device lives on a wall.
1414

15-
This bundle is the design handoff for a redesign / rebuild of the Halo dashboard. It supersedes the original `eetu/hcc` frontend — same product surface, refined visual language, expanded Energy view.
15+
This bundle is the design handoff for a redesign / rebuild of the Halo dashboard. It supersedes the original `eetu/halo` frontend — same product surface, refined visual language, expanded Energy view.
1616

1717
## About the design files
1818

@@ -58,7 +58,7 @@ SVG, viewBox `0 0 800 420`. Four primary nodes at r=36: PV (180,110), Battery (1
5858
All labels (node name in Space Grotesk 14, sub-label in 12 muted, big kW number in Inter 20 tabular-nums) sit **outside** the circles — never inside. Header: `energiavirta` left, timestamp `02.05.2026 09.41 · ±1 min` right, `whiteSpace: nowrap`.
5959

6060
**b) `SummaryPanel` — daily summary donut + metrics.**
61-
Header: `päivän yhteenveto` + range pills (`päivä` / `kk` / `vuosi` / `kaikki`). Active pill: 1px `#f78f08` border, `rgba(247,143,8,0.10)` background, accent text. Inactive: 1px `--hcc-border` border, transparent.
61+
Header: `päivän yhteenveto` + range pills (`päivä` / `kk` / `vuosi` / `kaikki`). Active pill: 1px `#f78f08` border, `rgba(247,143,8,0.10)` background, accent text. Inactive: 1px `--halo-border` border, transparent.
6262

6363
180px-wide donut on the left (SVG, viewBox 100×100, rotated -90°, two arcs via `stroke-dasharray`):
6464
- Arc 1: PV → consumption, `#f78f08`
@@ -79,7 +79,7 @@ X-axis ticks at 00.00 / 06.00 / 12.00 / 18.00 / 24.00. Below: wrap-flex legend w
7979

8080
### 3. Lights view
8181

82-
Full-width grid of `LightGroup` chunky toggle buttons. Each: 6px radius, **3px border** (the only thick border in the system) — accent `#f78f08` when on, `--hcc-text-main` when off. Lit state fills with the cream gradient `--hcc-accent-bg` (`linear-gradient(153deg, rgba(255,237,207,1) 0%, rgba(255,239,171,1) 56%)`). Inside: a fully round (`borderRadius: 100%`) chip holding a filled Material `lightbulb` icon, with `rgba(247,143,8,0.15)` (light) or `rgba(0,0,0,0.15)` (dark) background to feel set into the parent. Lit bulbs get a soft animated drop-shadow glow.
82+
Full-width grid of `LightGroup` chunky toggle buttons. Each: 6px radius, **3px border** (the only thick border in the system) — accent `#f78f08` when on, `--halo-text-main` when off. Lit state fills with the cream gradient `--halo-accent-bg` (`linear-gradient(153deg, rgba(255,237,207,1) 0%, rgba(255,239,171,1) 56%)`). Inside: a fully round (`borderRadius: 100%`) chip holding a filled Material `lightbulb` icon, with `rgba(247,143,8,0.15)` (light) or `rgba(0,0,0,0.15)` (dark) background to feel set into the parent. Lit bulbs get a soft animated drop-shadow glow.
8383

8484
### 4. Motion view
8585

@@ -99,7 +99,7 @@ Full-width card. Single text input for location (`kaupunki tai osoite`, default
9999

100100
### Brand mark (top-left, absolute)
101101
- 22×22 SVG: thin ring (`stroke-width: 3`, currentColor) + 6r filled circle accent center. The ring is the "halo".
102-
- Wordmark: Inter 600, lowercase, `letter-spacing: -0.04em`, 22px, `--hcc-text-main`. Trailing period in `--hcc-accent`.
102+
- Wordmark: Inter 600, lowercase, `letter-spacing: -0.04em`, 22px, `--halo-text-main`. Trailing period in `--halo-accent`.
103103
- The wordmark is the brand. Use the same Inter 600 treatment everywhere — never substitute a display font.
104104

105105
### Clock (centered, below brand)
@@ -110,7 +110,7 @@ Full-width card. Single text input for location (`kaupunki tai osoite`, default
110110
### Nav rail (left, 48px wide)
111111
- 6 buttons, vertical stack, 4px gap. Material Icons Outlined at 26px.
112112
- Active: accent color + 3×18px accent pill at `left: -2; top: 50%`.
113-
- Inactive: `--hcc-text-muted`. No hover state — this is a touch device.
113+
- Inactive: `--halo-text-muted`. No hover state — this is a touch device.
114114
- Icons: `thermostat / bolt / lightbulb / directions_run / timeline / settings`
115115

116116
### Fullscreen toggle (top-right, absolute)
@@ -167,34 +167,34 @@ All times in Europe/Helsinki. All copy in Finnish via `date-fns/locale/fi`.
167167

168168
## Design tokens
169169

170-
All tokens live in `design_files/colors_and_type.css` as CSS custom properties. The codebase exposes the same tokens via `frontend/src/themes.ts` (Emotion theme). Token names use the legacy `--hcc-*` prefix for backwards compatibility — keep them.
170+
All tokens live in `design_files/colors_and_type.css` as CSS custom properties. The codebase exposes the same tokens via `frontend/src/themes.ts` (Emotion theme). Token names use the `--halo-*` prefix.
171171

172172
### Colors — light theme
173173

174174
| Token | Value | Use |
175175
|---|---|---|
176-
| `--hcc-body` | `#f0f0f0` | Page background |
177-
| `--hcc-bg-main` | `#ffffff` | Card surface |
178-
| `--hcc-bg-light` | `#fbfbfb` | Drawer / nested surface |
179-
| `--hcc-text-main` | `#525252` | Primary text (never pure black) |
180-
| `--hcc-text-muted` | `#a0a0a0` | Inactive nav, secondary labels |
181-
| `--hcc-text-light` | `#e9e9e9` | Footer chrome |
182-
| `--hcc-border` | `lightgray` | 1px hairlines |
183-
| `--hcc-accent` | `#f78f08` | The only saturated brand color |
184-
| `--hcc-accent-bg` | `linear-gradient(153deg, rgba(255,237,207,1) 0%, rgba(255,239,171,1) 56%)` | Behind a lit bulb |
185-
| `--hcc-accent-soft` | `rgba(247,143,8,0.15)` | Subtle accent fills |
186-
| `--hcc-off-bg` | `#d9d9d9` | Behind an unlit bulb |
187-
| `--hcc-error` | `tomato` | Low battery, alarm |
188-
| `--hcc-connected` | `#4caf50` | Sensor pill connected |
189-
| `--hcc-disconnected` | `#f44336` | Sensor pill disconnected |
190-
| `--hcc-warm` | `#e65100` | Weather chart warm trend |
191-
| `--hcc-cool` | `#1565c0` | Weather chart cool trend |
192-
| `--hcc-rain` | `#94daf7` | Rain bars, battery flow |
193-
| `--hcc-pv` | `#f5a524` | Grid line in energy chart |
176+
| `--halo-body` | `#f0f0f0` | Page background |
177+
| `--halo-bg-main` | `#ffffff` | Card surface |
178+
| `--halo-bg-light` | `#fbfbfb` | Drawer / nested surface |
179+
| `--halo-text-main` | `#525252` | Primary text (never pure black) |
180+
| `--halo-text-muted` | `#a0a0a0` | Inactive nav, secondary labels |
181+
| `--halo-text-light` | `#e9e9e9` | Footer chrome |
182+
| `--halo-border` | `lightgray` | 1px hairlines |
183+
| `--halo-accent` | `#f78f08` | The only saturated brand color |
184+
| `--halo-accent-bg` | `linear-gradient(153deg, rgba(255,237,207,1) 0%, rgba(255,239,171,1) 56%)` | Behind a lit bulb |
185+
| `--halo-accent-soft` | `rgba(247,143,8,0.15)` | Subtle accent fills |
186+
| `--halo-off-bg` | `#d9d9d9` | Behind an unlit bulb |
187+
| `--halo-error` | `tomato` | Low battery, alarm |
188+
| `--halo-connected` | `#4caf50` | Sensor pill connected |
189+
| `--halo-disconnected` | `#f44336` | Sensor pill disconnected |
190+
| `--halo-warm` | `#e65100` | Weather chart warm trend |
191+
| `--halo-cool` | `#1565c0` | Weather chart cool trend |
192+
| `--halo-rain` | `#94daf7` | Rain bars, battery flow |
193+
| `--halo-pv` | `#f5a524` | Grid line in energy chart |
194194

195195
### Colors — dark theme
196196

197-
Body `#0f0f0f`, surface `#252525`, drawer `#1c1c1c`. Text main `#d6d6d6` / muted `#8a8a8a` / light `#646464`. Same accent `#f78f08`. `--hcc-accent-bg` becomes `rgba(247,143,8,0.2)`. `--hcc-shadow: none`. Border becomes a 1px hairline `#1f1f1f`.
197+
Body `#0f0f0f`, surface `#252525`, drawer `#1c1c1c`. Text main `#d6d6d6` / muted `#8a8a8a` / light `#646464`. Same accent `#f78f08`. `--halo-accent-bg` becomes `rgba(247,143,8,0.2)`. `--halo-shadow: none`. Border becomes a 1px hairline `#1f1f1f`.
198198

199199
### Typography
200200

@@ -225,8 +225,8 @@ Pragmatic, not a strict scale. Recurring values: `4, 5, 8, 10, 16, 20, 24` px an
225225

226226
| Token | Value |
227227
|---|---|
228-
| `--hcc-radius` | `6px` (every card, drawer, range pill, light button) |
229-
| `--hcc-radius-pill` | `4px` |
228+
| `--halo-radius` | `6px` (every card, drawer, range pill, light button) |
229+
| `--halo-radius-pill` | `4px` |
230230
| Light group chip | `border-radius: 100%` (only fully-round element) |
231231
| Light group border | `3px` (only thick border in the system) |
232232
| Card padding | `1.5em` |
@@ -248,9 +248,9 @@ Dark theme — `none`. Surface vs body contrast carries the elevation.
248248

249249
| Token | Value |
250250
|---|---|
251-
| `--hcc-ease` | `ease` (browser default — no custom curves) |
252-
| `--hcc-d-fast` | `0.15s` (color transitions, range pill swaps) |
253-
| `--hcc-d-med` | `0.5s` (tooltip fade) |
251+
| `--halo-ease` | `ease` (browser default — no custom curves) |
252+
| `--halo-d-fast` | `0.15s` (color transitions, range pill swaps) |
253+
| `--halo-d-med` | `0.5s` (tooltip fade) |
254254
| Drawer | 150ms ease, `grid-template-rows: 0fr → 1fr` |
255255
| Energy flow scroll | 1.4s linear infinite |
256256
| Energy node pulse | 2.4s ease-in-out infinite |
@@ -360,7 +360,7 @@ To view the prototype: open `design_files/ui_kits/dashboard/index.html` in a bro
360360
To make this design system available to Claude Code inside the Halo repo:
361361

362362
```
363-
eetu/hcc/.claude/skills/halo-design/
363+
eetu/halo/.claude/skills/halo-design/
364364
├── SKILL.md ← from this bundle
365365
├── README.md ← rename HALO_DESIGN_README.md back to README.md
366366
├── colors_and_type.css
@@ -372,7 +372,7 @@ Copy `SKILL.md`, `HALO_DESIGN_README.md` (rename to `README.md`), `colors_and_ty
372372

373373
## Implementation checklist
374374

375-
- [ ] Confirm or import design tokens into `frontend/src/themes.ts` — light + dark, all `--hcc-*` keys above.
375+
- [ ] Confirm or import design tokens into `frontend/src/themes.ts` — light + dark, all `--halo-*` keys above.
376376
- [ ] Wire Inter + Space Grotesk + Material Icons Outlined + Material Icons via Google Fonts (or self-host for offline).
377377
- [ ] `App.tsx` — fixed 720px column, clock + nav rail + view router. Six views routed by local state.
378378
- [ ] `Clock.tsx` — 1s interval; HH + accent dot + MM + seconds + date sub.

‎.claude/skills/halo_design/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Key things to keep in mind for Halo:
2121
- **Finnish, lowercase, terse.** No marketing voice. Numbers do the talking.
2222
- **Monochrome + one warm accent.** Greys, with `#f78f08` as the only saturated color (lit lights, active motion, warm trends, energy flow). Optional warm/cool weather hues.
2323
- **Two families.** Inter (body + numerals + wordmark, 300–700) and Space Grotesk (section labels, nav, date sub, seconds counter, 400–600). The wordmark is Inter 600 with tight (−0.04em) tracking and a warm accent dot.
24-
- **Brand mark:** thin ring + warm centre. The wordmark "halo." is set in Inter 600 lowercase — same family as the numerals on the dashboard, so brand and data read as one. Tokens still read `--hcc-*` for backwards compatibility with the source repo.
24+
- **Brand mark:** thin ring + warm centre. The wordmark "halo." is set in Inter 600 lowercase — same family as the numerals on the dashboard, so brand and data read as one. Tokens use the `--halo-*` prefix.
2525
- **Cards: 6px radius, soft shadow** in light theme; shadow turns off in dark.
2626
- **No emoji, no hero imagery.** Material Icons (Outlined default; Filled only for the lit-bulb, which softly glows).
2727
- **Calm motion with small wow moments.** Drawer unfolds (150ms), clock colon pulses on every second, lit bulbs breathe, active motion dot pulses outward, energy-flow strokes scroll along their paths, temperature counters ease to new values.

0 commit comments

Comments
 (0)