Zedule.
CALENDAR

Zoom levels and sub-hour ticks

Three zoom levels — 56, 112, or 224 px per hour. Sub-hour gridlines and gutter labels scale together: 30-min at 1×, 15-min at 2×, 5-min at 4×. Snap granularity tightens to 5 min at the highest zoom.

Updated

A 60-minute hour is 56 pixels tall by default. That’s enough to see the day at a glance but tight if you’re trying to squeeze a 15-minute follow-up between two existing bookings. The zoom control in the toolbar — [−] [1× / 2× / 4×] [+] — switches between three hour-heights, with sub-hour gridlines that scale to match.

Three levels

ZoomHeight per hourSub-hour gridlinesGutter labelsSnap
56 px30 min (subtle)hour only15 min
112 px30 + 15 min+ :3015 min
224 px30 + 15 + 5 min+ :15 :30 :455 min

Each tier of gridline is rendered at slightly different opacity (stronger at :30, fainter at :15 / :45, even fainter at the 5-min ticks) so the half-hour reads first when you scan the column.

When to use each

  • — typical day. You want a 9-to-6 day visible without scrolling.
  • — when several appointments are within 15-minute boundaries of each other and you want to read the gaps.
  • — when you’re booking back-to-back into 5-minute gaps (chiropractic adjustments, sales calls). The snap also tightens to 5 minutes here so the cursor lines up with the visible ticks.

Keyboard

  • + or = — zoom in
  • — zoom out

Either toolbar button or keyboard shortcut writes the zoom to your calendar prefs (per-tenant localStorage).

What scales, what doesn’t

Scales with zoom:

  • Row height (56 / 112 / 224 px)
  • Gridline density
  • Gutter label density
  • Hover preview block height (matches snap granularity)
  • Snap granularity

Stays the same:

  • Card paddings + font sizes — the card content doesn’t get bigger with zoom; you just have more vertical space
  • Status pill, resize handle, accent stripe widths
  • Toolbar, toolbar fonts

Tip

If you spend most of your day at 2× zoom and want the calendar to boot at that level, the zoom preference is per-tenant — set it once and it sticks across reloads + devices that share your browser profile.