crispmeasured from Attio

Settings page

A two-column settings layout — the form side of crisp, composed from Input, Select, RadioGroup, Switch, and Avatar.

The other half of an app: not a record view but a settings surface — a grouped left nav beside a scrolling form pane. Where the Companies page shows the data primitives, this shows the form ones. Click through Profile / Appearance / Notifications / Members; every control is live.

Composition

ProfileHelp

Profile

Manage your personal details.

Changes to your profile apply to all of your workspaces.
M
Profile picture
PNG, JPEG or GIF under 10MB

Time preferences

Manage your time preferences.

Each section is a plain form composed from shipped primitives:

  • ProfileAvatar + Button for the picture, Input for name and email, and a searchable Select for timezone.
  • Appearance — the Radio Group card variant for the Light / Dark / System theme picker, plus an accent-colour swatch row.
  • Notifications — a stack of labelled Switch rows.
  • Members — an Avatar + role Select per member.

The settings layout

The pattern is the same every time: a fixed-width nav (grouped by Personal / Workspace, 32px rows) that swaps the right pane, and a right pane with a bordered header (section name + Help) over a scrolling, max-width form column. Sections are just components keyed off the active nav id:

const SECTIONS = {
  profile: ProfileSection,
  appearance: AppearanceSection,
  notifications: NotificationsSection,
  members: MembersSection,
};

const Section = SECTIONS[active];
// …nav on the left sets `active`; <Section /> renders on the right.

On this page