Skip to content
AI Building

Build an Atrium app with AI

One minimised file with everything an AI tool needs: how to work, the hard rules, the full app contract and the design system. Upload it to any LLM, then describe your app.

ATRIUM-AI-BUILD.mdMarkdown
  1. Upload the file to ChatGPT, Claude, Cursor or any AI tool (or paste its contents).
  2. Describe the app you want in plain English.
  3. Let the AI ask you for the API key when it needs one.
View the file
Auto

Foundation

Colour

View .md

Colours are named by their job. Pick the role that matches what you mean, and the right colour follows, in light and dark mode.

Mostly warm greys, one deep blue for actions, and a small set of colours that each mean one thing. The blue is deliberately not COHO's brand pink, so an app never looks like part of COHO's own navigation.

Why not use my brand colours?

Inside COHO, managers rely on colour to mean the same thing everywhere: blue is an action, red is a problem. Your brand can appear in your logo and illustrations, but not in buttons, links or status.


How tokens are named

Every colour token follows one pattern: property, then role, then emphasis. --at-bg-danger-subtle is a background, for danger, in the subtle strength. Once you know the pattern you can guess any token, and so can an AI tool.

Part Options Example
Property text, bg, border, surface, shadow --at-text-...
Role primary, neutral, info, success, warning, danger, discovery, inverse, accent-<hue> --at-text-danger
Emphasis subtle or bold (left out for the usual strength) --at-bg-danger-subtle

Roles

Role Use for Never for
primary The main action: primary buttons, links, the selected tab Status or decoration
neutral Everything without a meaning: text, borders, secondary buttons, table headers
info Neutral news, or something in progress Errors or success
success Done and fine: paid, saved, connected Anything still to do
warning Needs attention soon, nothing has failed Errors
danger Errors, overdue, and actions that delete or disconnect Emphasis or branding
discovery Something new: onboarding, a new feature, AI-drafted content Status
inverse Text on bold backgrounds and primary buttons Text on the page
accent Categories with no meaning, such as property types or charts Anything with a meaning: use a status role

The accent test

If you could swap one accent colour for another and the screen would mean exactly the same, use an accent. If the colour says something (good, bad, new), use a role instead.


Text

Text

--at-text

Body text and headings

light: #1c1917
dark: #f5f5f4
on white: 17.5:1

--at-text-subtle

Hints, secondary text, table headers

light: #57534e
dark: #a8a29e
on white: 7.6:1

--at-text-primary

Links and link buttons

light: #3d4ed8
dark: #8e9bfa
on white: 6.4:1

--at-text-info

Information text

light: #2f5fd0
dark: #7aa2f7
on white: 5.7:1

--at-text-success

Paid, done, connected

light: #067647
dark: #47cd89
on white: 5.7:1

--at-text-warning

Due soon, needs attention

light: #b54708
dark: #fdb022
on white: 5.4:1

--at-text-danger

Errors, overdue, destructive actions

light: #b42318
dark: #f97066
on white: 6.6:1

--at-text-discovery

New things, onboarding, AI

light: #6941c6
dark: #b692f6
on white: 6.6:1

Backgrounds

Neutral and primary

--at-bg-primary

Primary buttons

light: #3d4ed8
dark: #8e9bfa
on white: 6.4:1

--at-bg-neutral

Table headers, skeletons, muted cards

light: #f6f5f3
dark: #262421
text on it: 16.1:1

--at-bg-neutral-pressed

Secondary button pressed

light: #d6d3d1
dark: #44403c
text on it: 11.7:1

Subtle: alerts, tags, highlights

--at-bg-info-subtle

Information alert and tag

light: #eff4ff
dark: #18233d
text on it: 15.9:1

--at-bg-success-subtle

Success alert and tag

light: #ecfdf3
dark: #10291d
text on it: 16.6:1

--at-bg-warning-subtle

Warning alert and tag

light: #fffaeb
dark: #332410
text on it: 16.8:1

--at-bg-danger-subtle

Error alert and tag, danger button hover

light: #fef3f2
dark: #3a1a17
text on it: 16.1:1

--at-bg-discovery-subtle

Discovery alert and tag, AI content

light: #f4f3ff
dark: #22183d
text on it: 15.9:1

Bold: the one thing that most needs attention (pair with --at-text-inverse)

--at-bg-info-bold

Bold information tag

light: #2f5fd0
dark: #7aa2f7
on white: 5.7:1

--at-bg-success-bold

Bold success tag

light: #067647
dark: #47cd89
on white: 5.7:1

--at-bg-warning-bold

Bold warning tag

light: #b54708
dark: #fdb022
on white: 5.4:1

--at-bg-danger-bold

Bold danger tag (Overdue, Failed)

light: #b42318
dark: #f97066
on white: 6.6:1

--at-bg-discovery-bold

Bold discovery tag (New)

light: #6941c6
dark: #b692f6
on white: 6.6:1

Borders

Borders

--at-border

Borders and dividers

light: #d6d3d1
dark: #44403c
text on it: 11.7:1

--at-border-bold

Hovered inputs

light: #57534e
dark: #a8a29e
on white: 7.6:1

--at-border-focus

Focus outline

light: #3d4ed8
dark: #8e9bfa
on white: 6.4:1

--at-border-danger

Error fields, danger buttons, error alert edge

light: #b42318
dark: #f97066
on white: 6.6:1

Accent hues

Six hues with no meaning, each with a background and a text token: --at-bg-accent-<hue> and --at-text-accent-<hue>. Use them through the accent tags or for chart series.

Example

HMOStudioHouseFlatStudentCommercial

Rules

  • Pick tokens by meaning, never by the colour you want. A green you like is not a reason to use success.
  • Use bold for one thing per view at most, such as an Overdue tag in a list of otherwise subtle tags.
  • Every text and background pair here passes WCAG AA (4.5:1) in light and dark mode. Mixing roles (danger text on a success background) is not checked: do not do it.

Dark mode

Every colour token has a dark value, applied inside [data-color-mode="dark"]. If your app only uses the tokens, dark mode works with no changes. Use the Light / Dark switch on any example to see it.