From 47f3fbaf7613a76f1a462c84cb148d0795df8b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Fri, 21 Aug 2026 05:58:42 +0000 Subject: [PATCH] todo: centralise custom components, with per-theme overrides Co-Authored-By: Claude Fable 5 --- TODO.md | 5 ++-- todo/components/_index.md | 7 +++++ ...very-custom-component-and-centralise-it.md | 29 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 todo/components/_index.md create mode 100644 todo/components/map-every-custom-component-and-centralise-it.md diff --git a/TODO.md b/TODO.md index 705f61d2..e08e432b 100644 --- a/TODO.md +++ b/TODO.md @@ -16,7 +16,7 @@ the owner's OS user and can never be granted. Indirection there really is accide ## Themes -**76 open, 18 closed**, across 27 themes. +**77 open, 18 closed**, across 28 themes. | Theme | Open | Closed | | ------------------------------------------------------------------------------------------ | ---- | ------ | @@ -26,6 +26,7 @@ the owner's OS user and can never be granted. Indirection there really is accide | [Background jobs](todo/background-jobs/) | 1 | 0 | | [Chat interface](todo/chat/) | 1 | 0 | | [Code editor](todo/code-editor/) | 1 | 0 | +| [Components — the shared UI layer](todo/components/) | 1 | 0 | | [File watchers](todo/file-watchers/) | 1 | 0 | | [Files app — routing](todo/files-app/) | 3 | 0 | | [Fleet — one command across every server](todo/fleet/) | 2 | 0 | @@ -61,9 +62,9 @@ the owner's OS user and can never be granted. Indirection there really is accide - `2026-08-21` **Generalise it: deliver a turn to a named session, from anywhere in the backend** — [agent-delivery/generalise-it-deliver-a-turn-to-a-named](todo/agent-delivery/generalise-it-deliver-a-turn-to-a-named.md) - `2026-08-21` **The cost of resuming grows with the transcript** — [agent-delivery/the-cost-of-resuming-grows-with-the-transcript](todo/agent-delivery/the-cost-of-resuming-grows-with-the-transcript.md) - `2026-08-21` **Show how long a turn took, beside its cost and tokens** — [chat/show-how-long-a-turn-took-beside-its-cost](todo/chat/show-how-long-a-turn-took-beside-its-cost.md) +- `2026-08-21` **Map every custom component, centralise it, and let a theme override it** — [components/map-every-custom-component-and-centralise-it](todo/components/map-every-custom-component-and-centralise-it.md) - `2026-08-21` **Watch a directory, and attach actions to what lands in it** — [file-watchers/watch-a-directory-and-attach-actions-to-what](todo/file-watchers/watch-a-directory-and-attach-actions-to-what.md) - `2026-08-21` **A way to mark a commit "this one ships", so a release is not just `master`'s tip** — [fleet/a-way-to-mark-a-commit-this-one-ships-so-a](todo/fleet/a-way-to-mark-a-commit-this-one-ships-so-a.md) - `2026-08-21` **iPhone Action Button → run an Officer task from a locked phone** — [mobile-apps/iphone-action-button-run-an-officer-task-from](todo/mobile-apps/iphone-action-button-run-an-officer-task-from.md) - `2026-08-21` **The mobile recorder app, and the dispatcher agent behind it** — [mobile-apps/the-mobile-recorder-app-and-the-dispatcher](todo/mobile-apps/the-mobile-recorder-app-and-the-dispatcher.md) - `2026-08-21` **A plugin's settings routes are reachable by anyone the plugin is granted to** — [multi-user/a-plugin-s-settings-routes-are-reachable-by](todo/multi-user/a-plugin-s-settings-routes-are-reachable-by.md) -- `2026-08-21` **A plugin cannot claim a WebSocket provider** — [plugin-infrastructure/a-plugin-cannot-claim-a-websocket-provider](todo/plugin-infrastructure/a-plugin-cannot-claim-a-websocket-provider.md) diff --git a/todo/components/_index.md b/todo/components/_index.md new file mode 100644 index 00000000..836f5199 --- /dev/null +++ b/todo/components/_index.md @@ -0,0 +1,7 @@ +--- +theme: components +heading: "Components — the shared UI layer" +kind: theme +--- + +Where reusable UI lives, and what a theme is allowed to change about it. diff --git a/todo/components/map-every-custom-component-and-centralise-it.md b/todo/components/map-every-custom-component-and-centralise-it.md new file mode 100644 index 00000000..2de33486 --- /dev/null +++ b/todo/components/map-every-custom-component-and-centralise-it.md @@ -0,0 +1,29 @@ +--- +id: components/map-every-custom-component-and-centralise-it +title: "Map every custom component, centralise it, and let a theme override it" +theme: components +status: open +created: 2026-08-21 +date_source: stated +order: 1 +--- + +**Map every custom component, centralise it, and let a theme override it.** Wanted 2026-08-21. Two +halves, in order: first the survey — every custom component used around the app that ought to live in +the `officerdev` workspace instead of where it sits now — then a mechanism for a **theme** to override +a centralised component rather than being limited to recolouring it. + +**The owner knows the design he wants and recorded this only so it is not forgotten.** Do not invent an +approach here; ask him for it when the item comes up. + +Scale of the survey, counted 2026-08-21: `src/workspaces/components/` holds 26 entries including 51 `ui` +primitives, while `src/apps/officer-web` has 105 `.tsx` files and `src/workspaces/officerdev/src` has +118. Most of those are screens and panels rather than reusable pieces, so the map is the work — the +number is only the haystack. + +One fact the override half runs into: **a theme is CSS today, and nothing else.** The 25 files under +`src/workspaces/theme/css/themes/` are generated variable blocks (`[data-theme='…'] { --background: … }`) +built from Omarchy palettes by `scripts/generate-themes.ts`, and they carry no component information at +all. Their header says not to edit them by hand, because the previous port drifted exactly that way — +so a per-theme component override needs somewhere new to live, and it cannot be a hand-edit in a +generated file.