- 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
3D scene:
- Build a procedural world from seeded waypoint segments (per-segment
step/turn/altitude params) joined into kink-free Catmull-Rom curves,
using ghost points so boundaries stay smooth; world and textures are
derived from the session seed for consistency.
- Carve the flight corridor out of the terrain (gaussian dip plus a
height floor 32u below the path) and add city districts with instanced
buildings driven by seeded glowing-window textures, plus tunnel
segments rendered as textured tubes with light strips.
Board UI:
- Add a ViewSwitcher to the kanban header and a board view provider.
- Compact group cards place an inline "+" on the last visible to-do row
(shrink-0, so it sits at the row's right edge) that opens the new
TodoCreateDialog, alongside the existing AI-assisted creation flow.
Scheduled panel:
- Collapsed rail replaces the corner overdue dot with badges stacked
below the calendar icon: overdue (destructive, ping ring) and
due-today (neutral, calmer pulse). Today's count is a separate filter
that excludes already-completed occurrences, unlike the overdue count.
- Scheduled to-dos: new ScheduledTodo + ScheduledTodoCompletion models
(owner-XOR-project ownership like Category, per-occurrence completion
so a recurring to-do tracks done state per calendar date), recurrence
built server-side from validated parts via rrule-utils, CRUD +
occurrence-toggle server actions, add/edit dialog, and a collapsible
Scheduled side panel (overdue / today / upcoming) with UTC-safe
date-key formatting.
- AI to-dos: group-level AI dialog (lib/actions/todo-ai.ts) that chats
then proposes a finalize list of to-dos; editable proposals and bulk
add via BoardProvider.addTodos; speech recognition gains better error
handling (network/firewall message, error logging).
- Building upgrades: new `upgradesFrom` rule — Nuclear Power Plant can
replace a friendly Energy Generator and Advanced Metal Generator a
Mass Generator (same tile + footprint, per TALogic.findUpgradeTarget),
crediting a 50% refund of the replaced building's OWN cost;
compileRules validates the references, topperFrame gets a generic
spinning-glyph fallback in TAArt.
- Movement rework: pushOutOfObstacles replaces the hard tile-snap with a
damped circle-vs-tile overlap push, and pathfinding routes at exact-fit
clearance instead of +1 padding (fixes corner grinding/stalling).
- New map m06 "Annihilation" (medium, snowfields, Klaxon skill 5, seed
90123 — pre-vetted for early-economy balance).
- Tests: upgrade placement (ownership, type match, exact footprint,
refund, army-less fallback), obstacle routing/settling, corridor
moves; sprites.md updated for upgradesFrom and toppers.