Thermograph monorepo: graded-climate API + SSR frontend + infra, domain-specific containerized deploys
Compare gains a time-of-year filter it never had; the calendar's flat 4-season filter is upgraded to the same model so both pages filter time identically. - Shared season/month model in shared.js: seasons are the primary, color-coded selector, the 12 months a nested suboption, backed by one Set of month indices. seasonFilterDropdown/syncSeasonChecks/applySeasonMonthChange/seasonSummaryText plus month<->bitmask helpers, reused by both pages. - Compare: filter gates r.date's month into computeStats and the distribution; instant re-rank, no refetch. Persisted (cmpMonths bitmask) and carried in the URL hash (m=, omitted when all 12). Empty-selection hint when a filter excludes every day. - Calendar: checkedSeasons -> checkedMonths, applied in the render loop; persisted as calMonths. Season checkbox is checked/indeterminate by how many of its months are on. - Mobile filter sheet (filtersheet.js): a subtle floating pill slides the page's filter panel up as a bottom sheet, reachable from anywhere on the page, on both compare and calendar. Desktop keeps the inline panel unchanged. Respects reduced-motion and the home-indicator inset. Frontend-only; no backend or payload change. |
||
|---|---|---|
| static | ||