Send Time Check

Shows the recipient's local time next to Send and offers to schedule for their next working morning when it's night, weekend or a holiday there.

StopsMessage landed at 2 AM their time

Installation

pnpm dlx shadcn@latest add https://bollard-ui.vercel.app/r/send-time-check.json

The files land in your project. They're yours to edit.

What it catches

  • Night hours in the recipient's zone (default 22:00–07:00)
  • Outside working hours (default 9–18)
  • Their weekend, by zone (Friday–Saturday in Riyadh, Saturday in Kathmandu, otherwise Saturday–Sunday)
  • Holidays you supply
  • Next working-day start, DST-safe, as a one-tap schedule

Props

SendTimeCheck props
PropTypeDefault
workHours

Working hours in the recipient's zone, [start, end) in 24h hours.

[number, number]—
nightHours

Hours counted as night, [from, until), e.g. [22, 7].

[number, number]—
weekendnumber[]—
holidaysHoliday[]—
recipient* (required)

Recipient's name, e.g. "Priya".

string—
timeZone* (required)

Recipient's IANA zone, e.g. "Europe/London".

string—
place

Where they are. Defaults to the zone's city.

stringtimeZone.split("/").pop()?.replace(/_/g, " ")
now

Fixed "now" for previews and tests. Defaults to a live clock.

Date | number—
senderTimeZone

Your zone, used to show the suggestion in your time too. Defaults to the browser's.

string—
onSchedule

Called with the suggested instant when the user picks "Schedule for …".

(at: Date) => void—
children

The Send / Schedule buttons this check sits next to.

React.ReactNode—
okText

Templates: `{name}`, `{place}`, `{time}`, `{day}` and `{holiday}` are filled in.

string"It's {time} for {name} in {place}."
nightText

Shown when it's night where the recipient is.

string"It's {time} for {name} in {place}."
afterHoursText

Shown outside their working hours.

string"It's {time} for {name} in {place}, after their working h…
weekendText

Shown on their weekend.

string"It's {day} {time} for {name} in {place}, their weekend."
holidayText

Shown on a holiday you passed.

string"It's {holiday} for {name} in {place}."
scheduleLabel

Template for the fix button: `{when}`.

string"Schedule for {when}"
yourTimeText

Template for your-time hint: `{time}`.

string"{time} your time"
showDay

Show the recipient's day as a 24-hour strip with their working hours and where the message would land.

booleantrue

* required. Also accepts the native props of <div> (className, aria-*, data-*…), passed through to it.

Accessibility

  • Status message in a polite live region; the day strip is aria-hidden
  • Marker glide respects reduced motion (useReducedMotion)
  • Schedule is a labelled button; icons are aria-hidden

Only what the source does. Test with your own screen reader and content before shipping.

Limitations

  • Weekend table is built in and coarse (by IANA zone, not by person or employer)
  • Holidays are not built in; pass them
  • Needs the recipient's real time zone; guessing it from a country can be wrong

Rules

Rules not yet verified against an official source.

Weekend-by-zone table (Fri–Sat in much of the Gulf, Sat-only in Nepal, Fri–Sun in Brunei) not re-verified against official sources this round. Check local rules before relying on it. Copied components don't update themselves, so re-check after rule changes (see updating a component).

What it stops

Message landed at 2 AM their time

Also known as

schedule send · time zone · local time · working hours · slack · email · weekend · send later

Field type

Dependencies

Pairs well with