Skip to content

Notifications

Notifications tell you what happened while your attention was elsewhere: someone mentioned you, assigned you work, wrote to you or applied for a job. New ones arrive as cards at the top right, and all of them wait in the notification center under the bell.

Notification center

When to use it

Send a notification when something happens that the reader did not do, such as a candidate who applied or a colleague who assigned them a job. Send one per event. A later event on the same item updates it.

Do not notify about what the reader is looking at: a new application on the open job appears in the list. The result of the reader's own action is a toast, and a condition of the current page is an inline message.

Anatomy

Each row names the person, what they did and the item, with the time on the right and the lane under it. A notification that cannot wait carries the word Urgent after the name. Rows are grouped under Today, Yesterday and Earlier, and the list scrolls inside the center.

Width
404 px, on a phone the screen less 24 px
Corner radius
24 px
--radius-3xl
Background
Raised glass, opaque on a phone
--glass-fill-raised
Shadow
Raised
--elevation-3
List height
460 px, then it scrolls
Title
Title 3, 17 px, bold
--type-product-title-3
Lanes
A round gray chip, the unread count beside it
--glass-fill-hover
Row corner radius
16 px
--radius-2xl
Avatar
32 px
Name
Dense, 13 px, bold
--type-product-dense
Urgent
Bold, on the solid alert fill, corner radius 6 px
--badge-alert
Sentence
Regular, the verb in muted ink
--text-muted
Time and lane
Caption small, 11 px, tabular digits
--type-product-caption-small
Dismiss
28 px, 44 px on touch

Cards that arrive

A card appears at the top right when a notification arrives while you work. Its first line holds the kind of event, the person and the time, and the next says what arrived. Pressing it opens the item. Cards stack, and the stack scrolls before a card would be cut in half.

  • Welders for Split30 Sep
  • Visa appointments2 Oct
  • Housing for the team3 Oct
  • Contracts to sign6 Oct
  • Medical checks8 Oct
  • Flights to Zagreb14 Oct
Position
Top right, 72 px from the top of the window
Width
376 px, or the screen less 24 px
Gap
8 px
--space-2
Corner radius
28 px
Padding
14 px, 40 px at the end for Dismiss
Material
Thin frosted glass with a bright rim
Kind of event
Caption small, 11 px, on its color at 15 percent, fully round
--type-product-caption-small

States

Unread
6 px blue dot and a faint blue fill
--brand-blue
Read
No dot, no fill
Dismissed
Kept under All, name in muted ink at weight 500
--text-muted
Loading
Four skeleton rows
Empty
“Nothing unread” or “You are all caught up”, and one line on what arrives here
Failed
“Your notifications did not load.” with Try again
Partly failed
A warning band above the rows that loaded
--warning-ink

Behavior

Opening a notification marks it read and takes you to the item. Dismissing a row takes it out of Unread and keeps it under All, which holds your history.

Read and dismissed are saved to your account, so a notification you read on your phone is read on your laptop too.

The center opens in 160 ms, moving 8 px down into place as it fades in. With reduced motion it only fades.

Content

A row reads as a sentence: person, verb, item. “Ana Horvat assigned you to Welders for Split.” Keep private detail out of the row. The item holds it.

The filter has five lanes: Email, Work, Companies, Candidates and Chat. A card names the kind of event instead, in its color: Email in blue, Candidate lead in green, a message that did not send in red. It carries no icon.

Accessibility

The bell's name includes the count, “Notifications, 3 unread”, and the number drawn on it is hidden from screen readers. The lane filter and the tabs are tab lists: Left and Right move, Home and End jump to the ends.

Escape closes the center and returns focus to the bell. A card that arrives is announced once, politely, and does not take focus.

NextProgress

Notifications

Tells the reader about events they did not cause: cards that arrive at the top right while they work, and the notification center under the bell that keeps every notification.

  • Kind: component
  • Page: https://design.werklist.com/components/notifications
  • Version: 2.1.2

When to use it

  • Someone mentions the reader, assigns them work or writes to them
  • A candidate applies or a company lead arrives
  • A message arrives in an inbox that is not on screen

When not to use it

  • The item is already on screen: it appears in its list
  • The result of the reader's own action: Toast
  • A condition of the current page: Inline message
  • Marketing or announcements

Anatomy

  • center: 404 px wide, on a phone the screen less 24 px; corner radius 24 px; raised glass, opaque on a phone (--radius-3xl, --glass-fill-raised, --elevation-3)
  • title: Title 3, 17 px, bold, with Mark all as read at the end in blue text (--type-product-title-3, --brand-blue)
  • lane filter: round gray chips, each with its unread count; the current lane in full ink at weight 700 (--glass-fill-hover, --radius-full)
  • tabs: All and Unread, Dense, 13 px, medium; the current tab in full ink at weight 700 with a 2 px underline (--type-product-dense, --text, --text-muted)
  • day heading: Today, Yesterday, Earlier; bold, in muted ink (--text-muted)
  • list: 460 px high on a desktop, then it scrolls
  • row: corner radius 16 px; padding 10 px by 12 px; a 32 px avatar; name Dense, 13 px, bold; the sentence regular, with the verb in muted ink; time and lane Caption small, 11 px, tabular digits (--radius-2xl, --type-product-dense, --type-product-caption-small)
  • unread: a 6 px dot and --brand-blue at 6 percent on the row (--brand-blue)
  • urgent: the word Urgent after the name, bold, on the solid alert fill, corner radius 6 px (--badge-alert, --badge-alert-ink)
  • row dismiss: 28 px quiet icon button at the end of the row, shown on hover and focus; 44 px and always shown on touch
  • card stack: top right, 72 px from the top of the window; 376 px wide, or the screen less 24 px; 8 px between cards; scrolls before a card would be cut in half (--space-2)
  • card: thin frosted glass with a bright rim; corner radius 28 px; padding 14 px, 40 px at the end for Dismiss; rises 1 px on hover
  • card lines: first the kind of event (Caption small, 11 px, on its color at 15 percent, fully round), the name (Dense, 13 px, bold) and the time (Caption small, 11 px); then what arrived; then an optional detail in muted ink (--type-product-caption-small, --type-product-dense)

Variants

  • notification center: the history and the live feed, opened from the bell
  • card: an arrival while the reader works

States

  • center opening: moves 8 px down into place as it fades in, over 160 ms (--ease-standard)
  • row unread: 6 px dot and --brand-blue at 6 percent on the row (--brand-blue)
  • row read: no dot, no fill
  • row dismissed: listed under All only; name in --text-muted at weight 500
  • row hover or focus: a faint fill (--glass-fill-hover)
  • loading: four skeleton rows
  • empty: 'Nothing unread' under Unread, 'You are all caught up' under All, and one line on what arrives here
  • failed: 'Your notifications did not load.' with Try again, in place of the list
  • partly failed: a warning band above the rows that loaded: 'Some notifications did not load.' with Try again (--warning-ink)
  • reduced motion: fades only

Keyboard

  • Enter or Space on the bell: opens the center; focus moves to the current lane
  • Left and Right: move between lanes, or between All and Unread, and select
  • Home and End: first and last lane or tab
  • Tab: lanes, tabs, then each row followed by its dismiss button
  • Enter on a row or card: opens the item and marks it read
  • Escape: closes the center and returns focus to the bell

Accessibility

  • the bell's name carries the count ('Notifications, 3 unread'); the number drawn on it is hidden from screen readers
  • the center is a named dialog; the lane filter and the tabs are tab lists
  • a card is announced once, politely, and takes no focus
  • unread is shown by the dot and named in the row's accessible name; the fill is a second cue
  • targets 44 px on touch

Content

  • a row reads as a sentence: person, verb, item ('Ana Horvat assigned you to Welders for Split')
  • the filter has five lanes: Email, Work, Companies, Candidates and Chat
  • a card names the kind of event instead, in its color: Email in blue, Candidate lead in green, a message that did not send in red
  • no private detail beyond what the item shows
  • one notification per event; a later event on the same item updates it
  • a card carries no icon

Tokens

  • --glass-fill-raised
  • --type-product-title-3
  • --type-product-dense
  • --type-product-caption-small
  • --surface-1
  • --elevation-3
  • --radius-3xl
  • --radius-2xl
  • --radius-full
  • --space-2
  • --text
  • --text-muted
  • --brand-blue
  • --warning-ink
  • --badge-alert
  • --badge-alert-ink
  • --glass-fill-hover
  • --ease-standard
  • --focus-ring

JSON

{
  "title": "Notifications",
  "path": "/components/notifications",
  "url": "https://design.werklist.com/components/notifications",
  "text": "https://design.werklist.com/agent/components/notifications",
  "summary": "The bell, the notification center and the cards that arrive while you work, for events you did not cause.",
  "version": "2.1.2",
  "kind": "component",
  "name": "Notifications",
  "purpose": "Tells the reader about events they did not cause: cards that arrive at the top right while they work, and the notification center under the bell that keeps every notification.",
  "use": [
    "Someone mentions the reader, assigns them work or writes to them",
    "A candidate applies or a company lead arrives",
    "A message arrives in an inbox that is not on screen"
  ],
  "avoid": [
    "The item is already on screen: it appears in its list",
    "The result of the reader's own action: Toast",
    "A condition of the current page: Inline message",
    "Marketing or announcements"
  ],
  "anatomy": [
    {
      "part": "center",
      "measure": "404 px wide, on a phone the screen less 24 px; corner radius 24 px; raised glass, opaque on a phone",
      "token": "--radius-3xl, --glass-fill-raised, --elevation-3"
    },
    {
      "part": "title",
      "measure": "Title 3, 17 px, bold, with Mark all as read at the end in blue text",
      "token": "--type-product-title-3, --brand-blue"
    },
    {
      "part": "lane filter",
      "measure": "round gray chips, each with its unread count; the current lane in full ink at weight 700",
      "token": "--glass-fill-hover, --radius-full"
    },
    {
      "part": "tabs",
      "measure": "All and Unread, Dense, 13 px, medium; the current tab in full ink at weight 700 with a 2 px underline",
      "token": "--type-product-dense, --text, --text-muted"
    },
    {
      "part": "day heading",
      "measure": "Today, Yesterday, Earlier; bold, in muted ink",
      "token": "--text-muted"
    },
    {
      "part": "list",
      "measure": "460 px high on a desktop, then it scrolls"
    },
    {
      "part": "row",
      "measure": "corner radius 16 px; padding 10 px by 12 px; a 32 px avatar; name Dense, 13 px, bold; the sentence regular, with the verb in muted ink; time and lane Caption small, 11 px, tabular digits",
      "token": "--radius-2xl, --type-product-dense, --type-product-caption-small"
    },
    {
      "part": "unread",
      "measure": "a 6 px dot and --brand-blue at 6 percent on the row",
      "token": "--brand-blue"
    },
    {
      "part": "urgent",
      "measure": "the word Urgent after the name, bold, on the solid alert fill, corner radius 6 px",
      "token": "--badge-alert, --badge-alert-ink"
    },
    {
      "part": "row dismiss",
      "measure": "28 px quiet icon button at the end of the row, shown on hover and focus; 44 px and always shown on touch"
    },
    {
      "part": "card stack",
      "measure": "top right, 72 px from the top of the window; 376 px wide, or the screen less 24 px; 8 px between cards; scrolls before a card would be cut in half",
      "token": "--space-2"
    },
    {
      "part": "card",
      "measure": "thin frosted glass with a bright rim; corner radius 28 px; padding 14 px, 40 px at the end for Dismiss; rises 1 px on hover"
    },
    {
      "part": "card lines",
      "measure": "first the kind of event (Caption small, 11 px, on its color at 15 percent, fully round), the name (Dense, 13 px, bold) and the time (Caption small, 11 px); then what arrived; then an optional detail in muted ink",
      "token": "--type-product-caption-small, --type-product-dense"
    }
  ],
  "variants": [
    {
      "name": "notification center",
      "use": "the history and the live feed, opened from the bell"
    },
    {
      "name": "card",
      "use": "an arrival while the reader works"
    }
  ],
  "states": [
    {
      "name": "center opening",
      "change": "moves 8 px down into place as it fades in, over 160 ms",
      "tokens": [
        "--ease-standard"
      ]
    },
    {
      "name": "row unread",
      "change": "6 px dot and --brand-blue at 6 percent on the row",
      "tokens": [
        "--brand-blue"
      ]
    },
    {
      "name": "row read",
      "change": "no dot, no fill"
    },
    {
      "name": "row dismissed",
      "change": "listed under All only; name in --text-muted at weight 500"
    },
    {
      "name": "row hover or focus",
      "change": "a faint fill",
      "tokens": [
        "--glass-fill-hover"
      ]
    },
    {
      "name": "loading",
      "change": "four skeleton rows"
    },
    {
      "name": "empty",
      "change": "'Nothing unread' under Unread, 'You are all caught up' under All, and one line on what arrives here"
    },
    {
      "name": "failed",
      "change": "'Your notifications did not load.' with Try again, in place of the list"
    },
    {
      "name": "partly failed",
      "change": "a warning band above the rows that loaded: 'Some notifications did not load.' with Try again",
      "tokens": [
        "--warning-ink"
      ]
    },
    {
      "name": "reduced motion",
      "change": "fades only"
    }
  ],
  "keys": [
    {
      "key": "Enter or Space on the bell",
      "action": "opens the center; focus moves to the current lane"
    },
    {
      "key": "Left and Right",
      "action": "move between lanes, or between All and Unread, and select"
    },
    {
      "key": "Home and End",
      "action": "first and last lane or tab"
    },
    {
      "key": "Tab",
      "action": "lanes, tabs, then each row followed by its dismiss button"
    },
    {
      "key": "Enter on a row or card",
      "action": "opens the item and marks it read"
    },
    {
      "key": "Escape",
      "action": "closes the center and returns focus to the bell"
    }
  ],
  "accessibility": [
    "the bell's name carries the count ('Notifications, 3 unread'); the number drawn on it is hidden from screen readers",
    "the center is a named dialog; the lane filter and the tabs are tab lists",
    "a card is announced once, politely, and takes no focus",
    "unread is shown by the dot and named in the row's accessible name; the fill is a second cue",
    "targets 44 px on touch"
  ],
  "content": [
    "a row reads as a sentence: person, verb, item ('Ana Horvat assigned you to Welders for Split')",
    "the filter has five lanes: Email, Work, Companies, Candidates and Chat",
    "a card names the kind of event instead, in its color: Email in blue, Candidate lead in green, a message that did not send in red",
    "no private detail beyond what the item shows",
    "one notification per event; a later event on the same item updates it",
    "a card carries no icon"
  ],
  "tokens": [
    "--glass-fill-raised",
    "--type-product-title-3",
    "--type-product-dense",
    "--type-product-caption-small",
    "--surface-1",
    "--elevation-3",
    "--radius-3xl",
    "--radius-2xl",
    "--radius-full",
    "--space-2",
    "--text",
    "--text-muted",
    "--brand-blue",
    "--warning-ink",
    "--badge-alert",
    "--badge-alert-ink",
    "--glass-fill-hover",
    "--ease-standard",
    "--focus-ring"
  ]
}

Raw file: https://design.werklist.com/agent/components/notifications