0024 — Each organisation chooses its look; looks are defined in code
- Status: accepted
- Date: 2026-10-26
- Deciders: Derek
Context
Until now every organisation on ark saw the same member app. They could add a logo, pick one accent colour and pick a font pairing (branding, workstream D), but the overall look — colours, shapes, shadows, how buttons feel — was the same for everyone. An earlier principle said exactly that: the member app stays consistent across organisations; the public website is where each organisation customises.
The first organisation migrating onto ark — the community currently using internalize — has a member app its people already know. Moving them onto ark should not feel like moving house. They should arrive and recognise the place.
Decision
- Each organisation chooses a theme. A theme is a complete look: colours for light and dark mode, fonts, corner rounding, shadows, button feel, motion timing. Today there is one theme (
ark (default)); the next will reproduce internalize’s look. - Themes are defined in code, not built in a screen. A theme is a typed definition in the
@ark/themepackage that must supply every setting — if one is missing, the software won’t build. This keeps every theme complete and lets us learn how fine-grained theming needs to be before designing any tuning screen. - Branding still applies on top. An organisation’s own accent colour and font always win over the theme’s.
- Who picks: for now a platform administrator picks an organisation’s theme from the tenant page. The database already allows an organisation’s own admins to change it; the screen for them comes later. This is a choice of preset, not a design tool.
- This supersedes “the member app stays consistent” for the member app. The public website keeps using the default theme for now; letting it follow the organisation’s theme is a separate, later decision.
What it means for you
- Your members see your organisation’s chosen look on every page of the member app, including sign-in on a returning visit.
- Nothing about your data changes. A theme is purely presentation; switching it is instant and reversible.
- If you set a brand colour, it recolours highlights in any theme; under the default theme it also colours buttons and links, as it always has.
Guardrails
- A theme can only supply values for a fixed, named list of settings, plus (later) a small set of named layout switches. It cannot add arbitrary styling aimed at particular screens. This is what keeps themes maintainable and what will make tuning controls possible later.
- An automated check fails the build if any screen uses a colour or setting outside that list, so no part of the app can be left out of a theme.
Addendum — 2026-10-30: the internalize theme and layout switches
The second theme, internalize, now exists: internalize’s colours, fonts and rounded shapes in light and dark. Some differences between the two apps are about arrangement rather than colour: a list shown as separate cards or as one box with dividers, the “New thread” button floating at the bottom of a phone screen, tiny filled labels instead of outlined ones. These are named layout switches: a short, fixed list a theme picks from, just like its colours. They can’t be used to restyle a particular screen, which keeps the guardrail above intact. Two small changes apply to everyone: the notification bell now shows on phones, and “View site” moves into the phone menu.
References
- Design:
docs/superpowers/specs/2026-10-26-theme-system-umbrella-and-engine-design.md - ADR 0013 — design system and app shell
- ADR 0008 — transparency as a product feature