Commit Graph

12 Commits

Author SHA1 Message Date
Brian Fertig a849293bd0 Add account linking and per-account theme persistence
- Profile page gains a Request Account Link form, plus sections for pending requests (create / deny / deny-and-block), confirmed linked accounts (toggle / remove), and blocked requesters (allow requests)
- Toggle signs the browser in as the linked account using a single-use 60-second switch token minted server-side after link verification, so the target's password is never needed; a new "account-switch" Credentials provider in auth.ts consumes the token atomically to prevent replay
- Theme preference now stored on the User profile row (new `theme` column) and applied from the root layout's no-FOUC script before first paint, so each account keeps its own look across toggles and devices; anonymous visitors keep the old localStorage behavior
- New Prisma models: AccountLinkRequest, AccountLink, AccountLinkBlock, AccountSwitchToken with composite uniques, self-link check constraint, and cascade deletes
2026-08-30 13:28:55 -06:00
Brian Fertig f21b12182c Add responsive mobile layout for the app shell and board
- 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
2026-08-29 22:42:33 -06:00
Brian Fertig f66c7731d1 Add per-project theme assignment with scoped theming
- Extract theme constants (THEMES, THEME_CLASSES, DARK_SURFACES) into a new
  framework-free lib/themes.ts so server and client code share one source of
  truth; re-export from theme-provider for backward compatibility.
- Add nullable `theme` column to Project (Prisma migration + schema), plus
  ProjectThemeSchema validation and a setProjectTheme server action.
- Introduce a ThemeScope context in the provider: a subtree can temporarily
  override the global preference via useThemeScope().setScope(name); the
  scoped theme wins for resolvedTheme/DOM while active, then lifts on cleanup.
- Render an inline no-FOUC script (themeSwitchScript) on project pages that
  applies the theme class before first paint and leaves a data-project-theme
  marker the provider reads at hydration.
- Add ProjectThemeScope component that sets/clears the scope from live
  ProjectsContext state, so picking a new theme updates instantly without
  waiting for the server re-render.
- Add ProjectThemePicker dropdown (Default + light/dark options) rendered
  beside the project title in the kanban board header.
- Wire optimistic setProjectTheme into ProjectsContext with rollback and
  error toast on failure.
- Update use-dark-theme hooks to read resolvedTheme from context instead of
  resolving locally, so they reflect scoped themes correctly.
2026-08-29 22:07:10 -06:00
Brian Fertig bb4e8b5558 Updated Theme Colors 2026-08-28 14:50:06 -06:00
Brian Fertig 15bfcfa064 Additional changes to the Cyberpunk theme, to make it even more cyberpunk. 2026-08-28 13:34:08 -06:00
Brian Fertig 80176636b7 New themes 2026-08-28 12:24:52 -06:00
Brian Fertig be6926c027 Two new extra-detailed themes: Cybperpunk and Blueprint 2026-08-28 11:33:57 -06:00
Brian Fertig 5e23a984e1 Added more themes 2026-08-28 09:00:31 -06:00
Brian Fertig 70838b121d Add debugging tools and dark-theme surface detection for theme QA
- Add .cdp/*.cjs scripts for CDP-driven headless Edge testing of theme
  switching, console errors, and login flows, plus a vendored
  next-themes beta package used during investigation
- Add components/theme/use-dark-theme.ts to treat "ocean" as a dark
  surface alongside "dark" for card colors and markdown color-mode
- Add shots/ screenshots captured while verifying theme behavior across
  pages and breakpoints
2026-08-25 13:36:47 -06:00
Brian Fertig b6b1690fdd Redesign UI theming, typography, and board polish
- 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
2026-08-25 13:06:53 -06:00
Brian Fertig 0d7336858c Adjustments to Drag and Drop features, as well as theme features 2026-08-11 13:26:10 -06:00
Brian Fertig 9a1aad6ed0 first commit 2026-08-11 13:10:00 -06:00