Skip to content

Availability and Announcements

a9x edited this page Aug 25, 2026 · 2 revisions

StarryBio can show a status badge on the profile image and a schedule dialog, plus a separate dismissible announcement bar. Both features are optional and completely static-configured; they do not query a calendar, chat service, presence API, or account.

Availability status

Enable status with a default state, named status types, and a schedule:

status: {
  enabled: true,
  ownerTimeZone: 'America/New_York',
  showOwnerTime: true,
  showVisitorTime: false,
  showNextAvailable: true,
  responseText: 'Usually replies within a few hours',
  default: {
    text: 'Offline',
    color: '#6B7280',
    icon: 'M20 12h-2v2h2v-2z',
  },
  types: {
    available: {
      text: 'Available',
      color: '#10B981',
      icon: 'assets/images/online.webp',
      message: 'Online and ready to chat!',
    },
    busy: {
      text: 'Deep work',
      color: '#EF4444',
      message: 'Replies may take longer today.',
    },
  },
  schedule: [
    { status: 'busy', days: 'weekdays', start: '09:00', end: '17:00' },
    { status: 'available', days: 'weekdays', start: '18:00', end: '21:00' },
  ],
},

enabled, default, types, and schedule are required when a status object is present. Every scheduled status must name a key in types. The default definition is used whenever no schedule item matches.

Each status definition has:

  • text — required badge/tooltip label.
  • color — required hex color.
  • icon — optional local/remote asset, inline path, or Simple Icon configuration. It is masked and colorized with the status color.
  • message — optional tooltip text. It overrides responseText for that status.

The generated badge opens a schedule dialog. The dialog categorizes daily entries under both weekdays and weekends.

The important timezone rule

Schedule matching uses the visitor’s local date and clock, not ownerTimeZone and not UTC. The owner timezone exists only to display an optional “Owner:” clock in the tooltip.

The allowed days values are:

  • daily
  • weekdays (Monday through Friday in the visitor’s calendar)
  • weekends (Saturday and Sunday in the visitor’s calendar)

Times must use 24-hour HH:MM, and the end time is exclusive. start and end must be different.

{ status: 'available', days: 'weekdays', start: '21:00', end: '05:00' }

This is an overnight interval. It is active from 21:00 through 04:59 the next day and belongs to its start day. A Friday weekday interval continues early Saturday; a weekday interval does not continue early Monday because Sunday is not a weekday.

If more than one matching entry overlaps, the first matching item in the schedule array wins. Keep entries non-overlapping unless you deliberately want that ordering behavior.

Optional clock and next-availability details

  • ownerTimeZone must be a valid IANA zone such as America/New_York if showOwnerTime: true. It is optional otherwise.
  • showOwnerTime defaults to true when an owner timezone is configured, otherwise false.
  • showVisitorTime defaults to false.
  • showNextAvailable defaults to false. When enabled and the current state is not named available, the tooltip finds the next transition into a schedule entry whose key is exactly available.
  • responseText is fallback explanatory text for non-available statuses, and is also displayed after “Available now” if the active type has no message.

The runtime updates status display on the next minute boundary, then every minute. It does not use a server or persist a current state.

Announcements

Use an announcement for a short release note, schedule interruption, or time-sensitive link:

announcement: {
  enabled: true,
  text: 'New bookings open on Friday.',
  url: 'https://example.com/book',
},

enabled and text are required. url is optional and accepts the same supported destinations as a normal link, including hash links. Without a URL, the text is informational only.

Visitors can dismiss the banner. The dismissal is stored in a starrybioAnnouncement browser cookie for seven days, with SameSite=Lax and path /. The dismissal key is derived from the configured text and URL, so changing either value makes the changed announcement visible again.

Announcements have no start/end scheduling setting. To publish or retire one on a schedule, change enabled and redeploy a build at the desired time.

Common mistakes

  • Do not configure a status schedule as if it were your own timezone; visitors in other zones will see their local-time interpretation.
  • Do not use ownerTimeZone to influence availability—it only displays a clock.
  • Do not use the available key for an unrelated status if you expect “Next available” to be meaningful.
  • Do not treat announcement dismissal as durable consent or a cross-device preference; it is one browser cookie.

See Troubleshooting if a status does not change when expected, and Security and Privacy for the privacy implications of clocks, schedules, and cookies.

Clone this wiki locally