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

Component · Form elements

Textarea

View .md

Stable

Textareas take several lines of free text: a note to a tenant, a description of a repair. They look and behave like a text input, but are taller and can be resized up and down.


Specifications

Anatomy

The tenant sees this in their reminder email.

1) Label
font-size: var(--at-text-sm) /* 14px */
font-weight: var(--at-weight-bold)
2) Hint (optional)
font-size: var(--at-text-sm)
color: var(--at-text-subtle)
3) Field
min-height: 5rem /* 80px */
resize: vertical
padding: var(--at-space-3) /* 8px */
border: 1px solid var(--at-border)
border-radius: var(--at-radius-1) /* 6px */

Size and spacing

Field
min-height: 5rem /* 80px */
width: 100% of its container
set rows="4" or more for longer text
Type
font-size: var(--at-text-md) /* 16px */
stops phones zooming in on focus

Textarea

Set rows to roughly how much text you expect, so the box hints at the answer length.

Example

States

Default

border: 1px solid var(--at-border)

Hover

border-color: var(--at-text-subtle)

Focus

outline: 3px solid var(--at-border-focus)
outline-offset: 2px

Error

border: 2px solid var(--at-border-danger)
plus an .at-error message

Disabled

opacity: 0.5
cursor: not-allowed

Usage

When to use

  • Free text that may run to more than one line.

When not to use

  • A name, reference or amount: use a text input.
  • A fixed set of answers: use radios or a select.

Content

  • If there is a length limit, say so in the hint: "Up to 500 characters".
  • Do not use placeholder text as the label.

Do and don't

Up to 500 characters.

DoA visible label, and the limit in the hint.
Don'tOne row high, with a placeholder instead of a label.

Do

  • Size it to the expected length with rows.

Don't

  • Turn off resizing.

Implementation

HTML

<div class="at-field">
  <label class="at-label" for="note">Note to tenant</label>
  <textarea class="at-textarea" id="note" rows="4"></textarea>
</div>

Classes

ClassWhat it does
at-textareaMulti-line input, resizes vertically

Tokens used

--at-border, --at-surface, --at-text, --at-border-bold


Accessibility

  • Same labelling as a text input.

Related