-
Notifications
You must be signed in to change notification settings - Fork 0
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.
- 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.
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
|
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.
- 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.
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.