ab15c17ffb
- Users can pin/unpin any available service on their home page via a Customize mode; preferences persisted via PATCH /api/users/me/preferences - Time-aware greeting renders the user's display name through React JSX (HTML-escaped by design — no dangerouslySetInnerHTML used) - Added dashboard_app_ids JSON column to users table (migration c7e8f9a0b1d2) - /settings now routes to a placeholder page Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.6 KiB
1.6 KiB
2026-04-17 — Customizable home dashboard and settings placeholder
Timestamp: 2026-04-17T14:00:00+00:00
Summary
Replaced the static dashboard page with a per-user customizable home screen. Each user can pin and unpin apps from the available services list. A time-aware greeting shows the user's display name (XSS-safe via React JSX text rendering). The Settings navigation item now routes to a placeholder page.
Files Added / Modified / Deleted
Added
backend/alembic/versions/c7e8f9a0b1d2_add_dashboard_app_ids_to_users.py— Migration addingdashboard_app_idsJSON column touserstable (default[]; non-nullable)frontend/src/pages/SettingsPage.tsx— Placeholder settings page at/settings
Modified
backend/app/models/user.py— Addeddashboard_app_ids: Mapped[list]JSON columnbackend/app/schemas/user.py— AddedDashboardPrefsOutandDashboardPrefsUpdateschemas;app_idsvalidated as safe slugs (regex, max 50, max 64 chars each)backend/app/routers/users.py— AddedGET /api/users/me/preferencesandPATCH /api/users/me/preferencesendpointsfrontend/src/api/client.ts— AddedDashboardPrefsinterface,getDashboardPrefs(),updateDashboardPrefs()frontend/src/pages/DashboardPage.tsx— Full rewrite: greeting, pinned app cards grid, customize/edit mode with add/remove toggles, save via TanStack Query mutationfrontend/src/App.tsx— ImportedSettingsPage, registered/settingsroutebackend/STATUS.md— Updated Users endpoints table and models tablefrontend/STATUS.md— Added home dashboard section, added/settingsto routes table