4.9 KiB
4.9 KiB
Task EP.1.7 My Day Workspace Foundation - 2026-07-13
Scope Delivered
- added My Day feature module under
src/features/crm/my-day/** - added
/api/crm/my-dayroute handler with organization access and CRM Activity read permission - added
/dashboard/crm/my-dayworkspace route with server prefetch, React Query hydration, loading states, and widget layout - added My Day Widget Registry with widget id, title, priority, icon, permission, visibility, refresh strategy, and empty state
- added My Day service composition over existing foundations:
- Calendar Projection for today's schedule and due-today work
- Activity service for overdue Activity queue
- CRM Dashboard service for Hot Projects and pending approvals
- Timeline Projection for recent user-authored updates
- added priority queue ordering for overdue, due today, approvals, hot projects, and schedule items
- added CRM nav entry for My Day before CRM Dashboard
- preserved Activity, Calendar, Timeline, Opportunity, Quotation, Approval, Dashboard, Report, Notification behavior
Review Summary
Reviewed before/during implementation:
AGENTS.mdplans/task-ep.1.7.mdLAYOUT.mddocs/standards/engineering-constitution.mddocs/standards/project-foundations.mddocs/standards/architecture-rules.mddocs/standards/ui-ux-rules.mddocs/standards/task-review-checklist.mddocs/security/crm-authorization-boundaries.mddocs/business/relationship-sales-workspace-blueprint-v1.mddocs/implementation/task-ar.2-workspace-ui-ux-design-note-2026-07-07.mddocs/implementation/task-ep1.5-timeline-projection-foundation-2026-07-13.mddocs/implementation/task-ep1.6-calendar-projection-workspace-big-calendar-foundation-2026-07-13.md- existing Activity, Calendar, Timeline, Dashboard, CRM security, and dashboard UI patterns
Architecture Notes
My Day is read-oriented and does not own business data. It composes existing source-domain and projection services instead of introducing duplicate Activity, Calendar, Timeline, Approval, Opportunity, or Quotation logic.
Primary service:
src/features/crm/my-day/server/service.ts
Public contracts:
src/features/crm/my-day/api/types.tssrc/features/crm/my-day/api/service.tssrc/features/crm/my-day/api/queries.ts
Widget registry:
src/features/crm/my-day/server/widget-registry.ts
Widget Delivery
Implemented foundation widgets:
- Overdue Activities
- Today's Schedule
- Due Today priority items
- Hot Projects
- Pending Approvals
- Recently Updated
- My Statistics
Quotation Attention is represented in the registry and response contract, but no bespoke quotation-risk query was added in this slice to avoid duplicating Quotation/Dashboard logic before a governed urgency adapter exists.
Security Notes
- Route requires active organization access and
crm.activity.read. - Activity visibility is enforced by existing Activity service.
- Calendar visibility is enforced by existing Calendar projection query service.
- Hot Projects and approvals reuse Dashboard service visibility rules.
- Recent Timeline is limited to the current actor to avoid organization-wide timeline leakage until team-scoped Timeline access is formalized.
- Manager mode is contract-ready but intentionally conservative while team graph scope remains a known governance limitation.
UI/UX Review
- Follows AR.2 My Day design note: high-priority queue first, summary stats, active schedule, hot projects, approvals, recent updates.
- Uses
PageContainer, shadcn cards, badges, buttons, and skeletons. - Adds Add Activity entry point via existing Activity workspace instead of creating a duplicate form.
- Uses deterministic date/time display through
src/lib/date-format.ts. - Empty states exist per rendered widget.
- Status is not color-only: priority, source type, refresh strategy, and action labels are visible text.
Known Follow-ups
- Wire Add Activity to an Activity form sheet with context-aware prefills once reusable Activity form entry is exposed outside the Activity listing.
- Implement source-owned Quotation Attention adapter for expiring soon, pending approval, and returned revision.
- Add manager team filter UI after team hierarchy/scope behavior is formalized.
- Add independent per-widget query endpoints if operational telemetry shows full workspace refetch is too coarse.
- Add workspace analytics for widget usage, quick action usage, Add Activity usage, and completion rate with sanitized payloads.
- Decide rollout for making My Day the post-login/default CRM landing without disrupting the existing dashboard route.
Verification
npm run typechecknpx oxlint src/features/crm/my-day src/app/api/crm/my-day src/app/dashboard/crm/my-day src/config/nav-config.ts
Outcome
EP.1.7 now has a governed My Day Workspace foundation that lets users start from a prioritized operational queue while preserving source-domain ownership and existing CRM workflows.