Rebuild the calendar around the current moment

Featurekamo-internal
Shipped
August 10, 2026 at 6:05 PM UTC
Author
kamo
Commit
94b3e8a

The page was a functional grid with the chrome doing the talking: a 3px rainbow rule under the toolbar, a second one over the content, gradient buttons, and four loose icon buttons for the view switch. Loud where it did not matter and quiet where it did — nothing on screen answered the question a calendar is actually opened to answer. The organising idea is now: what is next, and how much of the day is left. - NextUpBar sits above the grid with the time, the next event and a live countdown, over a hairline showing how far through the working day it is. - NowSpine draws the current moment across the week grid with its time in the gutter, and PastVeil desaturates the hours already gone so what is left of today reads at a glance. The colour is reserved for these: they are the only live thing on the page, so they are the only thing allowed the tenant's colour at full strength. - ViewSwitcher replaces the four icon buttons. Four icons read as four unrelated actions; a segmented control reads as one setting with four positions, which is what it is. The selected pill slides between them via a shared layoutId rather than crossfading. Time is set in Geist Mono with tabular figures throughout — hour rail, clock, countdown, date numerals — so columns of time are a straight edge and digits do not jitter as they tick. CalendarThemeScope mirrors the contacts console: MUI's alpha() cannot parse var(), so painted properties are overridden and color-mix supplies the shades. Every token derives from --color-primary, so this reads as designed under any tenant's brand rather than assuming one. Month event chips become a tinted ground with a solid leading edge instead of white text on saturated fill, which was illegible at 11px. Week rows are a fixed height because the spine converts time to pixels — a row that grew would leave it pointing at the wrong time; a crowded hour scrolls instead. Reduced motion is respected: the pulse and the slide stop, the clock does not. Its position is information, and a stopped clock would be wrong rather than calm. Also fixes two real bugs found while working here: the calendar picker ran UUID ids through Number(), so every value was NaN, and it offered calendars the member cannot write to. It now lists only writable ones, which is how the organisation calendar stays read-only without the publishing right.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing