feat: allow full calendar view on small screens #81

Merged
nalum merged 4 commits from feat/calendar-view-toggle into main 2026-08-16 12:38:07 +00:00
Owner

Closes #50. Stacks on #80 (#48) → #79 (#60); merge those first.

The calendar dropped to an agenda list below the breakpoint (700px web / 900dp Android) with no way back to the month grid. This adds a per-member view toggle that pins the grid or the agenda at every width, synced across devices.

What changed

  • proto: CalendarView enum (UNSPECIFIED = responsive default, GRID, AGENDA) and calendar_view on UserSettings. UNSPECIFIED keeps today's behavior for old records.
  • web: a grid/agenda toggle in the month nav. data-cal-view on <html> drives override rules that outrank the width media query, so the pin holds on a phone. auto (default) leaves the responsive CSS untouched, then remembers the last-picked view. Rides the #60 sync.
  • android: the if (isWideScreen()) switch is gated on the pref (GRID/AGENDA pin, UNSPECIFIED follows the breakpoint). A grid/agenda toggle in the shared month nav writes through.
  • docs: frontend-plan.html records the toggle.

Behavior

Default stays responsive. Once a member picks a view it is remembered and follows them across devices (their choice, per the design discussion). Grid and agenda always render from the same data, so the toggle only changes which one shows.

Surface parity (rule 1)

Web and Android both honor it. MCP and CLI render no calendar.

Verification

  • make check green (Go + web build + web/android i18n).
  • Android module compiles.
  • Live deploy: served CSS carries the data-cal-view override rules; calendar_view round-trips through the live settings write.

🤖 Generated with Claude Code

Closes #50. Stacks on #80 (#48) → #79 (#60); merge those first. The calendar dropped to an agenda list below the breakpoint (700px web / 900dp Android) with no way back to the month grid. This adds a per-member view toggle that pins the grid or the agenda at every width, synced across devices. ## What changed - **proto**: `CalendarView` enum (`UNSPECIFIED` = responsive default, `GRID`, `AGENDA`) and `calendar_view` on `UserSettings`. `UNSPECIFIED` keeps today's behavior for old records. - **web**: a grid/agenda toggle in the month nav. `data-cal-view` on `<html>` drives override rules that outrank the width media query, so the pin holds on a phone. `auto` (default) leaves the responsive CSS untouched, then remembers the last-picked view. Rides the #60 sync. - **android**: the `if (isWideScreen())` switch is gated on the pref (`GRID`/`AGENDA` pin, `UNSPECIFIED` follows the breakpoint). A grid/agenda toggle in the shared month nav writes through. - **docs**: `frontend-plan.html` records the toggle. ## Behavior Default stays responsive. Once a member picks a view it is remembered and follows them across devices (their choice, per the design discussion). Grid and agenda always render from the same data, so the toggle only changes which one shows. ## Surface parity (rule 1) Web and Android both honor it. MCP and CLI render no calendar. ## Verification - `make check` green (Go + web build + web/android i18n). - Android module compiles. - Live deploy: served CSS carries the `data-cal-view` override rules; `calendar_view` round-trips through the live settings write. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The calendar forced an agenda list on small screens with no way back to the
month grid. Add a CalendarView enum (UNSPECIFIED keeps today's responsive
default, GRID/AGENDA pin one layout at every width) and a calendar_view field
on UserSettings so a member's choice syncs across devices (#50). UNSPECIFIED
default means an old record keeps the responsive behavior.
The calendar dropped to an agenda list below 700px with no way back to the
month grid. Add a view toggle to the month nav — grid or agenda — that pins
one layout at every width through the synced calendar_view preference (#50).
A data-cal-view attribute on <html> drives override rules that outrank the
width media query, so the choice holds on a phone. 'auto' (the default)
leaves the responsive behavior untouched; the toggle then remembers whichever
view the member last picked, across their devices.
Android hard-switched to the agenda below 900dp with no way to the month
grid. Gate that switch on the synced calendar_view preference: GRID/AGENDA
pin one layout, UNSPECIFIED keeps the wide-screen breakpoint (#50). A
grid/agenda toggle in the month nav — shared by both views — writes the
choice through, so it follows the member across devices like theme and tilt.
calView gains a home in ThemePref and rides pullTheme/pushTheme.
docs(frontend): record the calendar view toggle
All checks were successful
check / commits (pull_request) Successful in 6s
check / web (pull_request) Successful in 1m32s
check / go (pull_request) Successful in 2m39s
check / report (pull_request) Successful in 2s
android / build (pull_request) Successful in 5m8s
android / report (pull_request) Successful in 4s
518654348a
The Calendar spec stated month grid (wide) / agenda (narrow) as CSS-decided.
#50 adds a per-member override, so record it: the view toggle in the month
nav, the synced calendar_view preference, and that the default stays
responsive with the last pick remembered (rule 5).

Test report

Suite Tests Result Skipped
Unit 1330 ✅ pass 1
Integration 83 ✅ pass —

Coverage: 27.6%

Updated by the check workflow · commit ea8ae4aabe

<!-- ci-test-report --> ## Test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit | 1330 | ✅ pass | 1 | | Integration | 83 | ✅ pass | — | **Coverage:** 27.6% <sub>Updated by the check workflow · commit ea8ae4aabeed74836c2cb3ba290190bdd90db83e</sub>

Android test report

Suite Tests Result Skipped
Unit (debug) 31 ✅ pass 0

Updated by the android workflow · commit ea8ae4aabe

<!-- android-test-report --> ## Android test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit (debug) | 31 | ✅ pass | 0 | <sub>Updated by the android workflow · commit ea8ae4aabeed74836c2cb3ba290190bdd90db83e</sub>
nalum force-pushed feat/calendar-view-toggle from 518654348a
All checks were successful
check / commits (pull_request) Successful in 6s
check / web (pull_request) Successful in 1m32s
check / go (pull_request) Successful in 2m39s
check / report (pull_request) Successful in 2s
android / build (pull_request) Successful in 5m8s
android / report (pull_request) Successful in 4s
to ea8ae4aabe
Some checks failed
check / commits (pull_request) Successful in 7s
check / web (pull_request) Successful in 1m29s
check / go (pull_request) Successful in 2m36s
android / build (pull_request) Successful in 6m21s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 3s
android / build (push) Has been cancelled
android / report (push) Has been cancelled
check / commits (push) Has been cancelled
check / go (push) Has been cancelled
check / report (push) Has been cancelled
check / web (push) Has been cancelled
tag / tag (push) Has been cancelled
2026-08-14 23:12:47 +00:00
Compare
nalum changed target branch from feat/card-tilt-toggle to main 2026-08-16 12:38:02 +00:00
nalum merged commit ea8ae4aabe into main 2026-08-16 12:38:07 +00:00
nalum deleted branch feat/calendar-view-toggle 2026-08-16 12:38:07 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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
eagraiclainne/app!81
No description provided.