Explorer: calendar page #137

Closed
opened 2026-07-27 20:08:13 +00:00 by claude-bot · 1 comment
Contributor

Parent: #22. First of the Explorer's three views.

A calendar of days marked by alert/outlook activity and highest severity, across all locations the user can see.

Constraints from the existing codebase

  • No calendar, date-picker, or date-range UI exists anywhere in the app, and no such JS library is vendored. static/vendor/ currently holds only htmx 2.0.3, htmx-ext-sse 2.2.2, and leaflet 1.9.4, each manually pinned with a comment noting they are deliberately not Renovate-managed. A server-rendered month grid fits these conventions better than introducing the app's first client-side calendar dependency.
  • Follow base.html's nav pattern (base.html:33-47) for the new entry, including deciding its visibility for the readonly role.
  • The established filter convention is a plain GET form with query params and a Reset link (public_links.html:10-32), not HTMX-partial filtering.
  • Visibility: apply visible_location_filter(user) exactly as app/services/dashboard.py:62-64 does.

Tasks

  • Month grid with per-day activity and highest severity; previous/next month navigation.
  • Aggregate query bounded to the displayed month. Do not repeat the mistake in /stats, which loads the entire retained history unbounded (app/main.py:333-341).
  • Empty and partial states, including days that fall before the retention horizon — "no activity" and "beyond retained history" must look different.
  • Nav entry plus role visibility.
Parent: #22. First of the Explorer's three views. A calendar of days marked by alert/outlook activity and highest severity, across all locations the user can see. ## Constraints from the existing codebase - **No calendar, date-picker, or date-range UI exists anywhere in the app**, and no such JS library is vendored. `static/vendor/` currently holds only htmx 2.0.3, htmx-ext-sse 2.2.2, and leaflet 1.9.4, each manually pinned with a comment noting they are deliberately not Renovate-managed. A **server-rendered month grid** fits these conventions better than introducing the app's first client-side calendar dependency. - Follow `base.html`'s nav pattern (`base.html:33-47`) for the new entry, including deciding its visibility for the `readonly` role. - The established filter convention is a plain GET form with query params and a Reset link (`public_links.html:10-32`), not HTMX-partial filtering. - Visibility: apply `visible_location_filter(user)` exactly as `app/services/dashboard.py:62-64` does. ## Tasks - [ ] Month grid with per-day activity and highest severity; previous/next month navigation. - [ ] Aggregate query **bounded to the displayed month**. Do not repeat the mistake in `/stats`, which loads the entire retained history unbounded (`app/main.py:333-341`). - [ ] Empty and partial states, including days that fall before the retention horizon — "no activity" and "beyond retained history" must look different. - [ ] Nav entry plus role visibility.
Author
Contributor

Picking this up — first of the Explorer views, building on the merged correlation layer (#135) and soft-delete (#134). Per the issue's constraints: server-rendered month grid (no new JS deps), plain-GET navigation, visible_location_filter for visibility, month-bounded aggregate query, and distinct "no activity" vs. "beyond retained history" states (13-month horizon, #133). Events bucket to days by each location's own timezone; day cells link through to the day view (#138, next). PR to follow.

Picking this up — first of the Explorer views, building on the merged correlation layer (#135) and soft-delete (#134). Per the issue's constraints: server-rendered month grid (no new JS deps), plain-GET navigation, `visible_location_filter` for visibility, month-bounded aggregate query, and distinct "no activity" vs. "beyond retained history" states (13-month horizon, #133). Events bucket to days by each location's own timezone; day cells link through to the day view (#138, next). PR to follow.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#137
No description provided.