Release v0.4.1 #28

Merged
Mike Bros merged 17 commits from release/v0.4.1 into main 2026-02-19 02:03:36 +00:00
Contributor

Release v0.4.1 — Deferred Polish

Features

  • Mobile responsiveness: Responsive sidebars (admin/settings drawers), mobile navbar with hamburger collapse, responsive grid layouts for all form sections (OP#1059)
  • Keyboard shortcuts: Global keyboard shortcuts (? help overlay, / search focus, n new dashboard) (OP#1064)
  • Browser favicon support: Per-dashboard and server-default favicon URLs with DB migration, admin settings UI, and fallback resolution chain (OP#334)

Security Fixes

  • Require POST for logout to prevent CSRF forced-logout (OP#1073)
  • Use constant-time comparison for CSRF and OAuth state tokens (OP#1074)
  • Add Secure flag to all cookies missing it (OP#1075)
  • Add PATCH to CSRF method check (OP#1076)

Tests

  • Unit tests for mobile responsiveness across admin, settings, and header layouts
  • Unit tests for favicon resolution fallback chain
  • Unit tests for base.templ faviconOrDefault helper
## Release v0.4.1 — Deferred Polish ### Features - **Mobile responsiveness**: Responsive sidebars (admin/settings drawers), mobile navbar with hamburger collapse, responsive grid layouts for all form sections (OP#1059) - **Keyboard shortcuts**: Global keyboard shortcuts (`?` help overlay, `/` search focus, `n` new dashboard) (OP#1064) - **Browser favicon support**: Per-dashboard and server-default favicon URLs with DB migration, admin settings UI, and fallback resolution chain (OP#334) ### Security Fixes - Require POST for logout to prevent CSRF forced-logout (OP#1073) - Use constant-time comparison for CSRF and OAuth state tokens (OP#1074) - Add `Secure` flag to all cookies missing it (OP#1075) - Add PATCH to CSRF method check (OP#1076) ### Tests - Unit tests for mobile responsiveness across admin, settings, and header layouts - Unit tests for favicon resolution fallback chain - Unit tests for base.templ `faviconOrDefault` helper
Add mobile drawer pattern with Alpine.js toggle, backdrop overlay, and
slide-in animation to both admin and settings sidebar layouts. Sidebars
collapse to off-canvas drawers on screens < 768px with a floating
hamburger button. Desktop layout unchanged.

Closes GP#1060

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add responsive hamburger menu to the header component. On mobile (<md):
- Search, user dropdown, and admin links collapse into a slide-down panel
- Hamburger button toggles the mobile menu via Alpine.js
- Notification bell stays always visible
- Dashboard name truncates with max-width
- Search panel uses full-width input instead of dropdown popover
- Header padding reduced (px-4 on mobile, px-6 on desktop)

Desktop behavior is unchanged - search popover, user dropdown, and all
nav items remain in the top bar.

Closes GP#1061

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change all grid-cols-3 grids to grid-cols-1 sm:grid-cols-3 so form
fields stack vertically on mobile. Affects section form (name/icon/
icon-type) and item form (icon/icon-type/target) in both modal and
standalone variants.

Closes GP#1062

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change all bare grid-cols-2 to grid-cols-1 sm:grid-cols-2 across all
form templates so paired fields stack vertically on mobile (<640px).

Files updated:
- admin/smtp.templ (4 instances: server, security, credentials, sender)
- admin/auth.templ (1 instance: admin group/role)
- admin/themes.templ (1 instance: name/display name)
- partials/edit_forms.templ (9 instances: page, item, status display)
- partials/setup.templ (1 instance: admin group/role)
- partials/user_settings.templ (3 instances: theme grid, toast, comparison)
- partials/user_dashboards.templ (1 instance: diff current/new values)

Closes GP#1063

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Change px-6 to px-4 sm:px-6 on main content containers:
  dashboard_page.templ, user_dashboards.templ (7 instances),
  edit_forms.templ FormPage wrapper
- Reduce toast min-width from 280px to 240px on mobile to prevent
  overflow on 320px screens (min-w-[240px] sm:min-w-[280px])

Closes GP#1064

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 13 template render tests verifying responsive CSS classes:

Header (7 tests):
- Mobile hamburger renders for logged-in users with md:hidden
- Mobile menu panel contains user links and sign-out
- Desktop dropdown uses hidden md:block
- Header has responsive padding (px-4 md:px-6)
- Dashboard name truncates on mobile (max-w-[150px])
- No mobile menu panel for unauthenticated users
- Mobile search panel renders in hamburger menu

Edit forms (4 tests):
- Section form uses grid-cols-1 sm:grid-cols-3
- Item form uses grid-cols-1 sm:grid-cols-3 and sm:grid-cols-2
- Standalone section form responsive grid

Layout drawers (2 tests):
- Admin layout has responsive drawer (sidebarOpen, FAB, overlay)
- Settings layout has responsive drawer

Also fix mobile menu panel to respect NavbarConfig.HasElement("user_menu")
so the panel doesn't render when user_menu is hidden.

Closes GP#1072

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds `/` (search focus), `?` (help overlay), `Esc` (close), and chord
navigation `g h`/`g a`/`g s`. Replaces the inline `/` handler with a
dedicated JS module and an Alpine.js help overlay modal.

Closes GP#149

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migration 00018 adds default_favicon_url to app_settings and
favicon_url to dashboards. Updates all SELECT/Scan sites, model
structs, UpdateSettings, and test mocks for the new columns.

Closes GP#1068

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds favicon URL input to admin General Settings form. Updates BaseData
with FaviconURL field and renders it in the <link rel="icon"> tag with
fallback to /static/favicon.svg. Populates favicon in all baseData()
helpers with resolution: dashboard-specific → server default → built-in.

Closes GP#1069

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add per-dashboard favicon_url to the create form and update the
CreateDashboard service/interface to accept and persist the value.

Closes GP#1070

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Table-driven tests for faviconOrDefault helper and handler-level tests
verifying the three-tier resolution: dashboard → server default → built-in.

Closes GP#1071

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change /auth/logout from GET to POST-only across OIDC provider, manager,
and dev auth. Update header template to use form+button instead of links.

Closes GP#1073

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace == with subtle.ConstantTimeCompare for CSRF token validation
and OAuth state cookie verification to prevent timing side-channels.

Closes GP#1074

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Secure: true to impersonate_admin, dev_user, flash_toast cookies
and the OAuth state cookie clearing. Mirror HttpOnly/SameSite flags
on deletion cookies for consistency.

Closes GP#1075

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CSRF middleware now validates tokens on PATCH requests in addition to
POST, PUT, and DELETE.

Closes GP#1076

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chore(release): bump version to 0.4.1
Some checks failed
CI / test (pull_request) Blocked by required conditions
CI / validate-branch (pull_request) Successful in 1s
CI / validate-release-pr (pull_request) Failing after 6s
CI / build (pull_request) Successful in 2m17s
CI / security (pull_request) Successful in 53s
CI / lint (pull_request) Has been cancelled
8a759faac9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ci: retrigger CI after creating draft release
All checks were successful
CI / validate-branch (pull_request) Successful in 6s
CI / validate-release-pr (pull_request) Successful in 9s
CI / lint (pull_request) Successful in 1m16s
CI / security (pull_request) Successful in 2m8s
CI / test (pull_request) Successful in 2m25s
CI / build (pull_request) Successful in 2m12s
86ecf63ae5
Refs GP#1067

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mike Bros approved these changes 2026-02-19 01:59:34 +00:00
Mike Bros deleted branch release/v0.4.1 2026-02-19 02:03:36 +00:00
Sign in to join this conversation.
No reviewers
No labels
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
mike/gashy!28
No description provided.