Skip to content

Planner

github-actions[bot] edited this page Aug 27, 2026 · 3 revisions

Planner

A week-at-a-glance timeline rendering every event on every connected calendar, color-coded by category, with hour totals strip across the top.

Reading it

  • Top strip: total hours per category for the visible week.
  • Day headers: weekday + date. Today is highlighted.
  • All-day strip: the thin row above the timeline; multi-day events span the days they cover.
  • Timeline: 6am-10pm by default. Anything outside the visible window isn't rendered, so widen it from the prefs form (Day starts / Day ends, below the view selector) if you routinely have 5am or 11pm events. Both are whole hours in 24-hour time; end must be after start, and 0-24 gives you the full day. Clear both fields to go back to 6-22. Narrowing the window makes each block taller, which is worth doing if your day genuinely runs 9-5.
  • Events: positioned absolutely within their day column. Concurrent events are laid out in side-by-side lanes rather than stacked, so an overlapping block is legible rather than hidden behind its neighbour. Background is a tint of the category color; left bar is the full saturation. Title and start time + duration shown on hover.

Navigation

Four view modes: day, 3-day, week and month. Day, 3-day and week share the timeline; month renders as a 6×7 grid with leading and trailing spillover days dimmed. Pick one with the view selector; the choice persists as your default.

Prev / Today / Next step by whatever the current view spans. The URL carries the state as:

Parameter Meaning
?view= day, 3day, week or month
?at=YYYY-MM-DD the anchor date the view is built around
?w=YYYY-MM-DD legacy week anchor; honoured only when the view is week

Time zone

The planner renders in the timezone declared on the first connected account's Working hours (falls back to UTC). To change it, edit the hours of that account at Settings → Hours.

What it doesn't do (yet)

  • Drag-and-drop rescheduling. Move events in Google Calendar; the next sync brings them back here. Tracked as SKUL-13.
  • Inline event creation. Use the AI assistant or /tasks/new.

Performance

The handler issues one Events.list per connected calendar per page load — typically <20 calls. They run concurrently, up to 8 at a time, so first paint costs roughly one round trip rather than one per calendar. Subsequent loads are faster still as Google's HTTP cache warms.

Each calendar's fetch carries its own 15-second deadline. A calendar that is slow, rate-limited or unreachable drops out of that render and the rest of the page still paints — you will see the other calendars' events and a gap where that one's would have been. Reload once the underlying problem clears; nothing is cached in skulid, so the next render picks it up.

Clone this wiki locally