Meeting Time Spread

Shows every attendee's local day under a meeting-time slider and suggests the kindest slot, so the same person doesn't always take the 3 AM call.

StopsSame colleague always gets 3 AM calls

Installation

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

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

Usage

meeting-time-spread-usage.tsx
import { MeetingTimeSpread, type Attendee } from "@/components/ui/meeting-time-spread"

<MeetingTimeSpread attendees={attendees} date="2026-10-27" history={history} value={start} onValueChange={setStart} />

What it catches

  • Slots in someone's night or outside their working hours
  • Weekend or a different calendar day for some attendees
  • DST weeks when the time gap shifts
  • The same person repeatedly taking bad slots (from history)

Props

MeetingTimeSpread props
PropTypeDefault
attendees* (required)

Everyone invited. The first is treated as you unless `timeZone` says otherwise.

Attendee[]—
date* (required)

The calendar day being planned, "YYYY-MM-DD", in `timeZone`.

string—
timeZone

Your zone: the slider's axis. Defaults to the first attendee's.

string—
duration

Meeting length in minutes. Default 30.

number30
step

Slider step in minutes. Default 30.

number30
value

Controlled start instant (epoch ms).

number—
defaultValue

Initial start instant when uncontrolled. Defaults to 09:00 in `timeZone`.

number—
onValueChange

Called with the chosen start instant (epoch ms).

(start: number) => void—
history

Earlier meetings of this series; out-of-hours turns are rotated away from whoever took the last ones.

PastMeeting[]—
locale

BCP 47 locale for times and dates. Default "en-GB".

string"en-GB"
messages

Override any visible string, including day-part names.

Partial<Omit<Messages, "parts">> & { parts?: Partial<Record<DayPart, string>> }—

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

Accessibility

  • Slider has a visible label and aria-valuetext describing who is at night
  • Status uses role=status; icons are aria-hidden
  • Focus returns to the slider after applying a suggestion
  • Animations are reduced under reduced motion

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

Limitations

  • Working hours default to 9–17.5 local and weekends to Sat/Sun; pass real ones
  • History-based fairness only knows the past meetings you pass
  • Plans one day at a time

What it stops

Same colleague always gets 3 AM calls

Also known as

world clock · time zone · scheduler · meeting planner · calendar · remote team · standup · recurring meeting

Field type

Dependencies

Pairs well with