[Feature] Configurable, View-aware personal dashboards #2

Open
opened 2026-07-29 00:46:26 +02:00 by zemion · 1 comment
Owner

Goal

Make Dashboard layouts configurable and persistent while retaining module ownership of widget content.

Scope

  • Configure mode with drag/drop ordering and explicit keyboard-accessible move controls.
  • Add widgets from a module-contributed catalogue and remove them via an icon action.
  • Allow module-declared sizes and bounded scalar content settings.
  • Persist layouts per tenant, account, and active View with optimistic concurrency.
  • Preserve placements when a module or View temporarily hides a widget.
  • Retain the previous browser layout as a migration/failure fallback.
  • Honor widget refresh intervals and manual refresh.
  • Add at least one configurable built-in widget and one widget from another module.

Acceptance criteria

  • Layouts can be reordered by drag/drop or move buttons.
  • Widgets can be added, removed, resized, and configured where supported.
  • Draft changes use Save/Cancel and participate in the unsaved-change guard.
  • Full-interface and active-View layouts are independent.
  • Server writes reject stale revisions and oversized/malformed payloads.
  • Widget contributions remain optional and do not import sibling modules.
  • Dashboard, Notifications, migration, API, and layout tests pass.

Follow-up boundary

Administrator-published or locked default layouts are intentionally separate from personal layouts and require a product decision about whether they belong to Views definitions or Dashboard templates.

## Goal Make Dashboard layouts configurable and persistent while retaining module ownership of widget content. ## Scope - Configure mode with drag/drop ordering and explicit keyboard-accessible move controls. - Add widgets from a module-contributed catalogue and remove them via an icon action. - Allow module-declared sizes and bounded scalar content settings. - Persist layouts per tenant, account, and active View with optimistic concurrency. - Preserve placements when a module or View temporarily hides a widget. - Retain the previous browser layout as a migration/failure fallback. - Honor widget refresh intervals and manual refresh. - Add at least one configurable built-in widget and one widget from another module. ## Acceptance criteria - [x] Layouts can be reordered by drag/drop or move buttons. - [x] Widgets can be added, removed, resized, and configured where supported. - [x] Draft changes use Save/Cancel and participate in the unsaved-change guard. - [x] Full-interface and active-View layouts are independent. - [x] Server writes reject stale revisions and oversized/malformed payloads. - [x] Widget contributions remain optional and do not import sibling modules. - [x] Dashboard, Notifications, migration, API, and layout tests pass. ## Follow-up boundary Administrator-published or locked default layouts are intentionally separate from personal layouts and require a product decision about whether they belong to Views definitions or Dashboard templates. <!-- codex-dashboard-configurable-v1 -->
Author
Owner

Codex State: progress

Summary

  • Implemented configurable personal Dashboard layouts with drag/drop, add/remove, sizing, provider-defined settings, Save/Cancel, and browser migration fallback.
  • Layouts persist per tenant, account, and active View with optimistic revisions, bounded payloads, migration support, tenant summaries, and guarded retirement.
  • Added automatic widget refresh handling, configurable Installed modules, and a View-aware Notifications summary contribution.

Changed Files

  • govoplan-core/webui/src/types.ts and module capability tests
  • govoplan-dashboard backend layout API/model/migration and configurable WebUI
  • govoplan-notifications widget contribution and View surface
  • govoplan/tools/checks/check-focused.sh

Verification

  • tools/checks/check-focused.sh: passed (all backend suites and WebUI module permutations)
  • python -m govoplan_core.devserver --smoke --no-reload: passed against PostgreSQL
  • govoplan-dashboard unittest suite: 6 passed

Next / Blocked

  • Push the dirty Core, Dashboard, Notifications, and meta repositories, then close this issue.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - Implemented configurable personal Dashboard layouts with drag/drop, add/remove, sizing, provider-defined settings, Save/Cancel, and browser migration fallback. - Layouts persist per tenant, account, and active View with optimistic revisions, bounded payloads, migration support, tenant summaries, and guarded retirement. - Added automatic widget refresh handling, configurable Installed modules, and a View-aware Notifications summary contribution. ### Changed Files - `govoplan-core/webui/src/types.ts and module capability tests` - `govoplan-dashboard backend layout API/model/migration and configurable WebUI` - `govoplan-notifications widget contribution and View surface` - `govoplan/tools/checks/check-focused.sh` ### Verification - `tools/checks/check-focused.sh: passed (all backend suites and WebUI module permutations)` - `python -m govoplan_core.devserver --smoke --no-reload: passed against PostgreSQL` - `govoplan-dashboard unittest suite: 6 passed` ### Next / Blocked - Push the dirty Core, Dashboard, Notifications, and meta repositories, then close this issue. Suggested status label: `status/in-progress`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-dashboard#2
No description provided.