- New `/profile` page lets users set first/last name and upload a
profile photo (resized to 256x256 JPEG server-side via sharp, stored
as a data URL in Postgres since the container FS is ephemeral)
- Sidebar user block now shows the profile photo (or initial-letter
fallback) and display name, and links to `/profile`
- Migration adds `firstName`, `lastName`, `avatar` columns to User and
backfills them from the legacy `name` field; seed updated to match
- Bump Next.js server-action body limit to 11 MB so avatar uploads up
to the 10 MB cap aren't silently rejected with a 413
- Expose Postgres port on the host in docker-compose for local tooling
- Replace the fixed min-width horizontal-scroll shell with a stacked
mobile layout (h-dvh) that keeps the desktop three-column layout at md+
- Add MobileTopBar with hamburger menu, brand, and theme toggle reachable
without opening the drawer
- Convert SideNav into shared content plus a left-sheet hamburger drawer;
close on navigation link tap, backdrop, or Escape
- Make the board swipeable on mobile: one lane per screen via snap paging,
with a CategoryChips rail that tracks the active lane (IntersectionObserver)
and glides to it on tap; lanes go full-width below md
- Turn the Scheduled panel into a bottom dock bar + bottom sheet on mobile
(keeps overdue/today urgency badges), desktop aside unchanged at md+
- Compact board chrome for phones: icon-only Summary/View buttons, smaller
title/padding, full-width AddCategoryLane as a snap page under empty state
- Allow tall dialogs to scroll within dvh so edit forms and the AI summary
stay usable on small screens; make admin user table horizontally scrollable
- Support configurable ThemeToggle menu side/align so it opens downward in
the mobile top bar instead of off-screen
- Add CDP-based screenshot script and reference shots for mobile/tablet/desktop
- Replace next-themes with a custom ThemeProvider supporting four
themes (Default, Sunset, Dark, Ocean) since next-themes' no-FOUC
script tag breaks under React 19 dev warnings
- Swap Geist fonts for Inter/Figtree/JetBrains Mono for a friendlier
display face and add a shared isDarkTheme/colorModeFromTheme helper
so components stop reading next-themes directly
- Add per-color "soft"/"softDark" tints in lib/colors.ts so group
cards carry a calm hue-tinted fill instead of a generic gray
- Restyle nav, board lanes, group cards, empty states, and page
headers with heading font, tighter spacing, and rounded-2xl surfaces
- Add lane "open to-dos" counts, board summary stats, and a quick
"+ To-do" action targeting the first available group
- Hide the Scheduled panel below sm and give the app shell a minimum
width with horizontal scroll instead of crushing the board
- Fix DropdownMenuLabel to self-wrap in a Menu.Group (Base UI requires
the context) and wrap the admin role Badge trigger in a native button
- Add Project model with owner-based access and cascade delete
- Restructure Category to belong to either Home (userId) or a Project (projectId), enforced by DB constraints and access filters
- Scope all board operations (create, update, delete, reorder) to the correct board context using `categoryAccessFilter` and `projectAccessFilter`
- Replace hardcoded `revalidatePath("/")` with dynamic `boardPath()` for proper cache invalidation
- Add `ProjectsProvider` and `ProjectsNavSection` for project sidebar navigation
- Make KanbanBoard accept `projectId` and `title` props to render Home or Project boards
- Extract `getBoard()` utility to centralize board data fetching
- Refactor group/todo/notes actions to derive board context from category membership rather than trusting caller input