Skip to main content

Qontak | CRM | Workspace Homepage — Phase 1: SDR Workspace

PRD Type: PHASE — Phase 1 of the Reimagine CRM Workspace initiative


HEADER BLOCK

FieldValue
PMPM Qontak Group
PRD Version1.0
StatusDRAFT
PRD TypePHASE
EpicQON-16894
SquadQontak CRM Squad
RFC LinkN/A — no RFC required
Figma MasterWorkspace Prototype
AnchorDashboard Workspace ANCHOR PRD
Labelsepic:[Reimagine CRM Workspace 1st delivery] | module:[workspace] | feature:[qontak]
Last Updated2026-07-01

Table of Contents


CONDITIONAL BLOCK: PHASE CONTEXT

FieldDetail
Anchor PRDDashboard Workspace ANCHOR PRD
Phase NumberPhase 1 of 3
Phase GoalDeliver the Workspace platform and SDR Workspace (Today's Priorities, Today's Progress, Quick Actions) as the default post-login landing page for SDR users, enabling role-based priority surfacing and activity tracking without multi-module navigation.
Prior phasesN/A — this is Phase 1, no prior phases.
This phaseWorkspace platform foundation (Section framework, Widget rendering framework, Role visibility model, Data integration layer, AI capability framework, Widget personalization) + SDR Workspace committed widget set (Today's Priorities, Today's Progress, Quick Actions).
Deferred to nextPhase 2 (August): BD Workspace onboarded onto the same platform. Phase 3 (September): AM Workspace onboarded. Knowledge Base widgets: timeline TBD (outside Q3 scope).
Cross-phase depsWidget framework architecture (Section framework, role visibility model, Widget Data Service API contracts) established in this phase MUST remain stable and extensible for Phase 2/3 BD and AM onboarding — no breaking changes to core platform contracts.

1. One-liner + Problem

One-liner: Enable SDR users to identify and act on the highest-priority work items of the day from a single, role-personalized Workspace homepage within Qontak, without switching modules.

Problem: SDR users currently spend 10–15 minutes each morning manually navigating 4–5 separate modules (Inbox, Deals, Activities, Tasks, Contacts) to understand what requires attention, with no built-in prioritization signal and no shared surface for daily execution. High-priority leads can sit uncontacted for hours because no single view aggregates "interested lead waiting response" or "conversation idle" signals, increasing time-to-action and suppressing CRM adoption.

For full initiative context, see the Dashboard Workspace ANCHOR PRD.


2. What Happens If We Don't Ship This Phase

  • SDR users continue the 10–15 min daily context-switching routine across modules with no improvement through Q3 — compounding user frustration and slowing CRM habit formation during the critical post-onboarding window.
  • High-priority leads remain uncontacted for hours due to the absence of any aggregated priority signal, directly reducing pipeline velocity.
  • BD Workspace (Phase 2, August) and AM Workspace (Phase 3, September) cannot be onboarded without the platform foundation this phase delivers — a slip on Phase 1 delays the entire Q3 roadmap.
  • The "Make the Intelligence Promise Real" OKR (Theme 1) loses its primary Q3 vehicle.

3. Target Users + Persona Context

PersonaRoleGoalPainWorkaround
Primary — SDR StaffSales Development Representative (Individual Contributor) responsible for daily pipeline execution: responding to interested leads, following up on idle conversations, and completing scheduled activities.Start the workday knowing exactly which leads and conversations need immediate action, and process them consecutively without navigating away.Opens Inbox, Contact list, Task list, and Activities separately each morning — 10–15 min of navigation with no built-in prioritization. High-priority leads sit uncontacted for hours.Manually reviews each module; builds personal mental model of today's priorities. No system support.
Primary — SDR LeadSales Development Representative (Team Lead) responsible for both personal execution and monitoring team health and performance.Execute daily tasks while maintaining visibility into team pipeline, activities, and performance without switching to separate reporting tools.No unified view combining personal execution priorities and team-level health signals — must switch between modules and pull reports manually.Same module-switching as SDR Staff, plus manual report pulls for team status. Reactive rather than proactive.
Out of scope (Phase 1)BD (Business Development): Phase 2, August. AM (Account Manager): Phase 3, September.

Full persona background: see Dashboard Workspace ANCHOR PRD. See Constraints section for feature flag scope and plan availability.


4. Non-Goals

Scoped to Phase 1 only. Items marked "Phase N" are deferred to the specified phase, not ruled out.

  1. Mobile / native app Workspace — Phase 1 is web only. Mobile support deferred.
  2. BD persona widget set — Deferred to Phase 2 (August). BD users are onboarded onto the same platform after Phase 1 validation.
  3. AM persona widget set — Deferred to Phase 3 (September).
  4. Knowledge Base widgets — Timeline TBD; outside Q3 scope.
  5. Drag-and-drop widget reordering — Phase 1 uses a predefined fixed layout. User-initiated reordering deferred to Phase 2 based on user feedback.
  6. Tenant-admin Workspace configuration — No admin UI to configure widget sets per tenant. Widget sets remain Product-defined in Phase 1. Tenant-admin capability may be explored in future phases.
  7. Inline / modal Quick Actions — Quick Actions in Phase 1 are navigation shortcuts only. Inline form or modal flows within the Workspace frame are out of scope.
  8. Real-time data via WebSocket — Qontak CRM does not have WebSocket support. Data freshness is handled via scheduled auto-refresh per section TTL (see Constraints).
  9. Per-widget scalability optimization — Intentionally deferred. Phase 1 validates widget value; optimization follows.
  10. Zoho → Qontak migration data mapping — Deferred to Phase 3 (AM persona).

5. Constraints

FieldValue
PlatformWeb only. No mobile or native app support in Phase 1.
PerformanceSkeleton renders ≤ 1s from page load. Widget data p95 ≤ 2s. Workspace fully interactive p95 ≤ 3s.
Refresh cadenceToday's Priorities (Action widgets): ≤ 1 min auto-refresh. Today's Progress (Progress widgets): ≤ 5 min auto-refresh. Quick Actions: static (no data fetch). Insight (SDR Lead): refresh cadence TBD per widget data source.
Data refresh mechanismOpen for Engineering to propose. FE auto-polling preferred; refresh button per-section acceptable as last resort. Final approach confirmed during implementation.
Widget isolationWidgets must fail independently — one widget error cannot block or crash other widgets on the page.
Widget personalizationPersisted per user account (cross-session, cross-browser). Not per-device session.
Feature flagworkspace_homepage_enabled — per CID, default OFF. Enabled per CID during Internal Alpha.
Role visibilityDetermined by Team × Staff Level (SDR / BD / AM × Staff / Lead). Resolved server-side from user profile at page load. Mid-session permission sync is out of scope — changes reflect on next page load.
State restoreWorkspace must restore user's previous scroll, expanded section, and filter state on same-session return from another module. Cross-session state restore is out of scope (handled by personalization).
ExtensibilityWidget framework (Section framework, Widget registry, role visibility model, Widget Data Service API contracts) must be extensible for Phase 2/3 BD and AM onboarding without re-engineering the platform core.
Nice to haveEmbed enrich page data (Phase 1, if capacity allows).

6. New Features

6.1 Workspace Homepage — Page

FieldDetail
URL/workspace (or embedded iframe path — final URL TBD with Engineering)
AccessAny CRM user whose CID has workspace_homepage_enabled = ON AND has a valid Team assignment. Default post-login landing page when flag is ON.

Component Tree:

ComponentParentPurpose
WorkspacePageTop-level page container; handles routing, feature flag check, role resolution
WorkspaceHeaderWorkspacePagePage header: user greeting, date, global refresh indicator
SectionContainerWorkspacePageReusable section wrapper; accepts widget registry response per section type
TodaysPrioritiesSectionSectionContainerToday's Priorities section: renders Action widget set for SDR role
TodaysProgressSectionSectionContainerToday's Progress section: renders Progress widget set for SDR role
QuickActionsSectionSectionContainerQuick Actions section: renders static navigation shortcuts
InsightSectionSectionContainerInsight section: rendered for SDR Lead only; renders Team-level Insight widgets
WidgetCardSectionContainerReusable widget wrapper: skeleton, data, error, empty states; independent load/fail
WidgetErrorStateWidgetCardPer-widget error + Retry CTA; isolated — does not affect sibling widgets
EmptyStateCardWidgetCardPer-widget empty state with contextual copy
PersonalizationControlWidgetCardPer-widget hide/show toggle; triggers preference persistence

UI States:

ComponentStateDescription
WorkspacePageLoadingAll section skeletons render within ≤ 1s; page chrome (header, nav) renders immediately.
WorkspacePageEmpty (No Team)No widgets rendered. Message: "Your Workspace hasn't been configured yet. Please contact your administrator to assign your Team and Staff Level."
WorkspacePageErrorWidget-level only — no page-level error. Each widget handles its own error state independently.
WorkspacePageSuccessAll applicable sections rendered and interactive within p95 ≤ 3s.
WidgetCardLoadingSkeleton loader per widget, renders within ≤ 1s.
WidgetCardEmptyContextual empty message per widget (e.g., "You're all caught up!" for Today's Priorities).
WidgetCardError"Unable to load data. Please try again." + Retry CTA. Sibling widgets unaffected.
WidgetCardSuccessWidget data rendered within p95 ≤ 2s.

Prototype: Workspace Homepage

📊 UI State Diagram — WorkspacePage

stateDiagram-v2
[*] --> Loading: User completes login (flag ON)
Loading --> NoTeam: Role resolution — no Team assigned
Loading --> Success: Role resolved; all widgets load
Loading --> PartialLoad: ≥1 widget error (others succeed)
NoTeam --> [*]: User contacts admin; re-login triggers re-resolution
Success --> StateRestored: User navigates away and returns (same session)
StateRestored --> Success: Background refresh completes
PartialLoad --> Success: User retries failed widget; load succeeds
PartialLoad --> PartialLoad: Retry fails; error state persists per widget

6.2 Today's Priorities Section

Purpose: Surfaces the highest-priority action items for the SDR's day, aggregated across data sources (Interested Lead Waiting Response, Conversation Idle, Scheduled Activities).

Priority Item Card — Required fields (all must be present on each card):

FieldDescription
Company / Lead NameThe lead or company associated with the priority item
Priority TitleThe widget category title (e.g., "Interested Lead Waiting Response")
Reason for appearingWhy this item surfaces (e.g., "Interested — waiting for response") — exact enum TBD with Engineering
Time indicatorHow long the item has been in this state (e.g., "Last replied 3 hours ago")

Priority Item Card — Optional fields (shown when data is available):

FieldDescription
Last message previewSnippet of the most recent message in the conversation
Lead sourceBroadcast / Manual Chat / API / etc.
Conversation ownerThe assigned agent
Deal stageCurrent deal stage if associated
Assigned campaignCampaign name if applicable

Phase 1 committed widgets (Today's Priorities):

  • 1.1 Interested Lead Waiting Response
  • 1.2 Conversation Idle
  • 1.3 Scheduled Activities

📊 UI State Diagram — Today's Priorities Widget

stateDiagram-v2
[*] --> Loading: Workspace loads; section renders
Loading --> Success: Widget Data Service returns ≥1 priority item
Loading --> Empty: Widget Data Service returns 0 items
Loading --> Error: Widget Data Service request fails or times out
Success --> Refreshing: Auto-refresh interval triggers (≤1 min)
Refreshing --> Success: Refresh returns updated data
Refreshing --> Error: Refresh request fails
Empty --> Refreshing: Auto-refresh interval triggers
Error --> Loading: User clicks Retry
Success --> ItemRemoved: SDR acts on item; item resolved/completed
ItemRemoved --> Empty: Last item removed
ItemRemoved --> Success: Remaining items still present

6.3 Today's Progress Section

Purpose: Shows the SDR's daily activity progress, automatically aggregated from existing CRM activity data. No manual trigger required.

Phase 1 committed widgets (Today's Progress):

WidgetData SourceDescription
Conversations HandledCRM conversation activity logCount of conversations the SDR has responded to today
Opportunities AdvancedCRM deal activity logCount of deals moved forward today
Activities CompletedCRM activity logCount of tasks/activities marked complete today
Work SummaryCRM activity aggregateDaily roll-up of completed actions (Uploaded Leads, Broadcasts Sent, etc.) with links to relevant activity log

Auto-aggregation note: All Today's Progress widgets pull from existing CRM activity data — no new data storage introduced. Metric boundaries (exact definition of "Conversations Handled", data ownership per metric) must be finalized with Corporate Strategy Team / Data Analytics before Widget Data Service API schema is locked (see Dependencies).


6.4 Quick Actions Section

Purpose: Provides SDR with one-click navigation shortcuts to common CRM module entry points. Static section — no data fetch, no auto-refresh.

Phase 1 committed widgets (Quick Actions):

ActionDestinationBehavior
Upload LeadsUpload Leads page in CRM moduleFull navigation to target page (not inline/modal)
Create BroadcastCreate Broadcast flowFull navigation to target page
Create TaskCreate Task flowFull navigation to target page

6.5 Insight Section (SDR Lead only)

Purpose: Team-level visibility widgets surfaced exclusively for SDR Lead (Staff Level = Lead). Allows SDR Lead to monitor team pipeline, activities, and performance alongside personal execution widgets.

Phase 1 committed widgets (Insight — SDR Lead):

WidgetDescription
Team PipelineTeam-level pipeline status and deal health overview
Team ActivitiesAggregate view of team activity completion and schedule
Team PerformanceTeam performance summary against daily/weekly targets

Note: Specific widget content, data sources, and exact metric definitions for Insight widgets are Product-defined and will be specified as incremental Content Items through ongoing Phase 1 discovery. These do not require platform re-engineering.


7. API & Webhook Behavior

#BehaviorEntity AffectedTriggered ByExpected BehaviorFailure Behavior
1Widget set resolutionUser profile + Widget registryUser login with workspace_homepage_enabled = ONSystem reads Team × Staff Level from user profile → queries widget registry → returns applicable Section + Widget set for role. Response scopes: SDR Staff (Priorities, Progress, Quick Actions); SDR Lead (+ Insight).If registry unavailable: Workspace loads with empty state and config message. No widgets shown until role resolved.
2Widget Data Service fetchWidget data per sectionWorkspace page load; auto-refresh intervalEach widget queries Widget Data Service independently with TTL per section type. Returns data or error per widget — no batch blocking.Per-widget: error state with Retry CTA. Other widgets unaffected. If all fail: each shows error independently; page-level fallback not triggered.
3Widget Data Service auto-refreshToday's Priorities section widgets≤ 1 min interval (Action widgets)Background re-fetch for Today's Priorities. State restore: previous data shown until fresh data arrives; no blank/zero transitional state. Completed/resolved items removed smoothly on refresh.Refresh failure: previous data remains; per-widget error + Retry shown. No full page reload triggered.
4Widget Data Service auto-refreshToday's Progress section widgets≤ 5 min interval (Progress widgets)Background re-fetch for Today's Progress only. Metrics update in place.Same as behavior #3 failure mode.
5Widget personalization saveUser personalization recordSDR clicks hide/show on a widgetPreference (widget ID + hidden=true/false) saved per user account. Applied on next Workspace render (and persisted cross-session). Optimistic UI: widget hidden immediately; reverted on save failure.Save failure: optimistic UI reverted; widget reappears; inline error: "Couldn't save your preference. Please try again."
6Workspace state restoreIn-session UI state (scroll, expanded sections)User navigates back to Workspace within same sessionSystem restores previous scroll position, expanded section states, and filters. Background refresh begins immediately on return. Session state is not persisted cross-session.Session expired: redirect to login. No stale state shown.

Engineering to confirm: HTTP method, path, request/response schema, error codes, caching strategy, and TTL feasibility per widget data source during RFC/technical design.


8. System Flow + User Stories + ACs

8.1 System Flow

Flow: SDR Daily Workspace Session · Type: User Journey

sequenceDiagram
participant SDR as SDR User
participant CRM as CRM Frontend
participant Auth as Auth Service
participant WS as Workspace Service
participant Registry as Widget Registry
participant WDS as Widget Data Service
participant CDP as Qontak CDP

SDR->>Auth: Login
Auth->>CRM: Login success → check workspace_homepage_enabled (per CID)
alt Flag = ON
CRM->>WS: Route to /workspace
WS->>Registry: Resolve widget set (Team=SDR, StaffLevel=Staff|Lead)
Registry-->>WS: Widget set: [Priorities, Progress, Quick Actions] (+Insight if Lead)
WS->>CRM: Render Workspace page with section skeleton (≤1s)
par Independent widget fetches
WS->>WDS: Fetch Today's Priorities data
WDS->>CDP: Query interested leads, idle conversations, scheduled activities
CDP-->>WDS: Priority items
WDS-->>WS: Widget data → render priority cards
and
WS->>WDS: Fetch Today's Progress data
WDS-->>WS: Activity aggregates → render progress counters
end
SDR->>CRM: Views Today's Priorities → clicks priority item card
CRM-->>SDR: Navigate to conversation/contact detail page
SDR->>CRM: Takes action (replies, logs call) → navigates back to Workspace
CRM->>WS: Restore previous scroll + expanded state
WS->>WDS: Background refresh (Today's Priorities ≤1 min elapsed)
WDS-->>WS: Updated priority list → smooth removal of completed item
else Flag = OFF
CRM-->>SDR: Redirect to existing default CRM landing page
end

alt Widget Data Service error (any widget)
WDS-->>WS: Error response
WS-->>CRM: Per-widget error state + Retry CTA
Note over CRM: Other widgets continue loading normally
end

alt No Team assigned
Registry-->>WS: No widget set for user
WS-->>CRM: Empty state — "Your Workspace hasn't been configured yet..."
end

8.2 User Stories

User StoryImportanceMockup / Technical NotesAcceptance Criteria
WS-S01 — Workspace as Default Post-Login Landing

As an SDR (Staff or Lead) with Workspace enabled for my org, I want to land on the Workspace homepage after login, so that I can immediately see my daily priorities without navigating separate modules.
Must HavePrototype: Workspace Prototype

Data Fields:
workspace_homepage_enabled (boolean) — CID-level feature flag
team (enum: SDR/BD/AM) — from user profile
staff_level (enum: Staff/Lead) — from user profile
Happy Path
• AC-1: Given a user whose CID has workspace_homepage_enabled = ON and whose profile has Team = SDR and Staff Level = Staff, when the user completes login, then the system redirects to the Workspace homepage and renders Today's Priorities, Today's Progress, and Quick Actions sections with skeleton loading states within ≤ 1s.
• AC-2: Given the sections are rendered in skeleton, when Widget Data Service responses arrive independently per widget, then each widget renders its data and the Workspace is fully interactive within p95 ≤ 3s.

Error
• ERR-1: Given a user whose CID has workspace_homepage_enabled = OFF, when the user completes login, then the system redirects to the existing default CRM landing page — Workspace is not shown.
• ERR-2: Given a user whose CID has workspace_homepage_enabled = ON but whose profile has no assigned Team, when the Workspace loads, then the system displays an empty state: "Your Workspace hasn't been configured yet. Please contact your administrator to assign your Team and Staff Level." No widgets are rendered.

Permission Model
• CAN: Any user with flag = ON AND a valid Team assignment can access the Workspace.
• CANNOT: Users with flag = OFF cannot access the Workspace regardless of Team assignment.
• CANNOT: Users with no Team assignment see no widget content even when the flag is ON.

UI States
• Loading: All sections render skeleton loaders within ≤ 1s of login redirect.
• Empty: No Team assigned → empty config message shown; no widgets rendered.
• Error: No page-level error state — widget-level errors handled by WS-S02.
• Success: All role-appropriate sections rendered and interactive within p95 ≤ 3s.
🧪 WS-S01 — Test CoverageBoundary values ⚠️ TBD — QA: test user with flag = ON but no Team; flag = OFF with valid Team; flag = ON + Team = SDR with Staff Level = Lead (Insight section).
State transitions ✅ defined — ERR-2 covers no-Team empty state; AC-1 covers flag ON → routing; ERR-1 covers flag OFF → legacy redirect.
Data validation ⚠️ TBD — QA: test malformed user profile (Team set but Staff Level missing); registry returns empty widget set.
Concurrency ⚠️ TBD — QA: two users from same CID log in simultaneously — verify per-CID flag resolution is consistent.
Network/timeout ⚠️ partial — ERR-2 covers no-Team; registry unavailability covered by WS-S02 failure isolation.
WS-S02 — Widget Independent Load, Failure Isolation & Auto-Refresh

As an SDR using the Workspace, I want each widget to load and refresh independently, so that a slow or failed widget doesn't block the rest of my view.
Must HaveRefresh cadence:
• Action widgets (Today's Priorities): ≤ 1 min auto-refresh
• Progress widgets (Today's Progress): ≤ 5 min auto-refresh
• Quick Actions: static — no data fetch

Performance SLA: Skeleton ≤ 1s; data p95 ≤ 2s; fully interactive p95 ≤ 3s.

Technical Note: Refresh mechanism open for Engineering to propose. Auto-polling preferred; refresh button per-section acceptable as last resort.
Happy Path
• AC-1: Given the Workspace is loading Today's Priorities, when Widget Data Service returns data for Widget A before Widget B, then Widget A renders immediately without waiting for Widget B — each widget resolves independently.
• AC-2: Given Today's Priorities widgets have been rendered, when the ≤ 1 min auto-refresh interval triggers, then only Today's Priorities section re-fetches and updates in place — no full page reload, other sections unaffected.
• AC-3: Given Today's Progress widgets are rendered, when the ≤ 5 min auto-refresh triggers, then only Today's Progress section re-fetches. Quick Actions section is not re-fetched (static).

Error
• ERR-1: Given a widget's data source returns an error or times out, when the widget attempts to load, then the affected widget displays: "Unable to load data. Please try again." with a Retry CTA. All other widgets on the page continue loading normally — zero impact on sibling widgets.
• ERR-2: Given an SDR clicks Retry on a failed widget, when the retry request succeeds, then the widget replaces the error state with its data. When the retry fails again, the error state persists with the Retry CTA still visible.

Permission Model
• CAN: Any widget can independently retry its data load without affecting other widgets.
• CANNOT: A single widget failure cannot block, error-out, or trigger a reload of any other widget on the page.

UI States
• Loading: Each widget renders a skeleton loader within ≤ 1s independently.
• Empty: 0 data items for a widget → per-widget empty state.
• Error: Inline error state + Retry CTA per widget; section layout and surrounding widgets preserved.
• Success: Widget data rendered within p95 ≤ 2s; Workspace fully interactive within p95 ≤ 3s.
🧪 WS-S02 — Test CoverageBoundary values ⚠️ TBD — QA: test exactly at 1 min refresh boundary for Action widgets; test 5 min boundary for Progress widgets.
State transitions ✅ defined — AC-1–3 cover independent load; ERR-1–2 cover failure → retry → success/persist.
Data validation ⚠️ TBD — QA: test widget receiving malformed/unexpected data shape from Widget Data Service.
Concurrency ⚠️ TBD — QA: auto-refresh fires while SDR is mid-interaction with an expanded priority card — verify no UI disruption.
Network/timeout ✅ defined — ERR-1 covers timeout; ERR-2 covers retry success and retry failure.
WS-S03 — Today's Priorities: Priority Item Card Preview & Action

As an SDR, I want to see key context about each priority item directly on the Workspace, so that I can decide which items need attention without opening each conversation.
Must HavePrototype: Workspace Prototype

Required fields per card: company_lead_name, priority_title, reason (enum TBD), time_indicator
Optional fields: last_message_preview, lead_source, conversation_owner, deal_stage, assigned_campaign
Happy Path
• AC-1: Given Today's Priorities is loaded and the Interested Lead Waiting Response widget has ≥ 1 item, when the SDR views the widget, then each item card displays: Company/Lead Name, Priority Title, Reason for appearing, and Time indicator. Optional fields are shown only when data is available.
• AC-2: Given the SDR is viewing a priority item card, when the SDR clicks on the card or its CTA, then the system navigates to the relevant conversation or contact detail page.
• AC-3: Given Today's Priorities loads and the Interested Lead Waiting Response widget has 0 items, when the widget renders, then an empty state is shown: "You're all caught up! No interested leads waiting for a response." — the text "0 Priorities" is never shown as an empty or transitional state.

Error
• ERR-1: Given a priority item is displayed on the Workspace, when the SDR clicks on it but the underlying lead or conversation no longer exists (resolved, deleted, or reassigned), then the system shows an inline message "This item is no longer available" and smoothly removes the item from the list without reloading other items or the section.

Permission Model
• CAN: SDR can view priority items assigned to them or to their Team per Team assignment from user profile.
• CANNOT: SDR cannot see priority items belonging to a different Team's widget set.
• CANNOT: SDR cannot modify priority item content from the Workspace card — cards are read-only with navigate-to-action only.

UI States
• Loading: Today's Priorities section renders skeleton cards while Widget Data Service responds (≤ 1s).
• Empty: 0 priority items → "You're all caught up! No interested leads waiting for a response." shown inside the widget area.
• Error: Widget data fetch fails → individual widget error state with Retry CTA (WS-S02); other widgets unaffected.
• Success: All required card fields rendered per item; optional fields shown only when data is available.
🧪 WS-S03 — Test CoverageBoundary values ⚠️ TBD — QA: test card with all optional fields present vs. none present; test priority item with very long lead name or reason string.
State transitions ✅ defined — AC-3 covers 0-item empty state; ERR-1 covers item-no-longer-exists removal.
Data validation ⚠️ TBD — QA: reason enum — test unrecognized reason value from Widget Data Service (should gracefully degrade or show default copy).
Concurrency ⚠️ TBD — QA: two agents simultaneously acting on the same priority lead — verify item removal is consistent for both.
Network/timeout ⚠️ partial — Widget load failure handled by WS-S02. ERR-1 covers item-level navigation failure.
WS-S04 — Workspace State Restore on Return

As an SDR processing multiple priority items consecutively, I want the Workspace to restore my previous scroll and expanded state when I return from taking action in another module, so that I can continue without losing my place.
Must HaveNever display: Stale "0 Priorities" or empty Today's Progress as a transitional state before fresh data loads — previous data remains visible until fresh data is ready.

Technical Note: State persistence mechanism open for Engineering to propose. Must survive same-session navigation only — cross-session persistence handled by WS-S05.

⚠️ Engineering to confirm what constitutes "return to Workspace" vs. fresh navigation (browser back button vs. sidebar nav link click).
Happy Path
• AC-1: Given an SDR has the Workspace open with Today's Priorities expanded showing 5 priority items, when the SDR clicks a priority item card → navigates to the conversation page → takes action → navigates back to the Workspace, then the Workspace immediately restores: the previous scroll position, the expanded state of Today's Priorities, and the previously visible priority items (using last-fetched data until refresh completes).
• AC-2: Given the Workspace has restored previous state on return, when the background refresh completes for Today's Priorities, then the widget updates in place — completed or resolved items are removed smoothly, with no blank, zero, or flash transitional state shown at any point.
• AC-3: Given the SDR has returned to the Workspace and background refresh is in progress, when the SDR views Today's Priorities, then the previous data remains fully visible with a subtle section-level loading indicator until fresh data arrives.

Error
• ERR-1: Given the SDR navigated away from the Workspace and their session has expired, when the SDR attempts to return to the Workspace URL, then the system redirects to the login page and does not attempt to restore stale Workspace state.

Permission Model
• CAN: State restore applies to any Workspace section the SDR had open during the current browser session.
• CANNOT: State restore does not persist across login sessions — a fresh login always loads the Workspace from the default state with a fresh data fetch.

UI States
• Loading: Previous data displayed immediately on return; section-level loading indicator shown during background refresh.
• Empty: N/A — previous data always displayed during restore; empty state shown only if fresh data confirms 0 items after refresh completes.
• Error: Background refresh failure → previous data remains visible; per-widget error + Retry CTA shown (WS-S02).
• Success: Background refresh completes; fresh data overlays previous state; completed items removed smoothly.
🧪 WS-S04 — Test CoverageBoundary values ⚠️ TBD — QA: test restore after navigating away for exactly session timeout duration minus 1 second; test restore with 0 items remaining after all completed.
State transitions ✅ defined — AC-1–3 cover restore → refresh → data overlay; ERR-1 covers expired session redirect.
Data validation ⚠️ TBD — QA: test restore when all 5 previously visible items have been resolved (fresh data returns 0) — verify no stale items shown and empty state renders correctly.
Concurrency ⚠️ TBD — QA: SDR has Workspace open in two tabs — tab A acts on an item; tab B restores state — verify tab B reflects fresh data without stale duplicate.
Network/timeout ⚠️ partial — ERR-1 covers session expiry. Background refresh failure handled by WS-S02.
WS-S05 — Widget Personalization: Hide/Show

As an SDR, I want to hide widgets I don't find useful, so that my Workspace shows only what's relevant to my workflow.
Should HaveData Fields:
widget_id (string) — widget identifier
hidden (boolean) — per-user, per-widget preference
• Stored per user account (cross-session, cross-browser).

Reversibility: Any hidden widget can always be restored by the SDR at any time — no permanent widget deletion exists in the system.
Happy Path
• AC-1: Given an SDR has at least one widget visible, when the SDR activates the hide option on a widget, then the widget is immediately removed from the visible layout and a brief undo/confirmation prompt is shown.
• AC-2: Given an SDR has hidden a widget and logs out, when the SDR logs back in on any browser, then the previously hidden widget remains hidden — preference is persisted per user account.
• AC-3: Given an SDR has one or more hidden widgets, when the SDR accesses personalization or restore settings, then all hidden widgets can be made visible again individually.

Error
• ERR-1: Given an SDR clicks the hide option on a widget, when the preference save request to the backend fails, then the widget reappears immediately (optimistic UI reverted) and an inline error message is shown: "Couldn't save your preference. Please try again."

Permission Model
• CAN: Each SDR can independently hide and show widgets for their own account.
• CANNOT: One SDR's personalization preference cannot affect any other SDR's Workspace view.
• CANNOT: Per-user widget preferences cannot override CID-level feature flag settings.
• Reversibility: Any hidden widget can always be restored by the SDR — there is no permanent widget deletion at the system level.

UI States
• Loading: Personalization preferences fetched at Workspace load; widget visibility applied before render (no flash of hidden widgets).
• Empty: All widgets hidden → "No widgets are currently displayed. Restore widgets from your settings."
• Error: Preference save failure → optimistic UI revert + inline error notification.
• Success: Widget hidden or restored immediately; preference persisted to backend.
WS-S06 — SDR Lead: Team Insight Widgets

As an SDR Lead, I want to see Team-level Insight widgets (Team Pipeline, Team Activities, Team Performance) in addition to my individual execution widgets, so that I can monitor team health alongside my own daily work.
Must HaveRole resolution: System reads Staff Level = Lead → widget registry adds Insight section to response. SDR Staff receives no Insight section.

Technical Note: Widget registry must differentiate Staff Level within the same Team (SDR Staff ≠ SDR Lead widget set). Specific Insight widget content and data sources defined as incremental Content Items through Phase 1 discovery.
Happy Path
• AC-1: Given a user with Team = SDR and Staff Level = Lead, when the Workspace loads, then the system renders Today's Priorities, Today's Progress, and Quick Actions (same as SDR Staff) PLUS an Insight section containing Team Pipeline, Team Activities, and Team Performance widgets.
• AC-2: Given a user with Team = SDR and Staff Level = Staff, when the Workspace loads, then the Insight section is NOT rendered — SDR Staff sees execution widgets only.

Error
• ERR-1: Given Staff Level = Lead and the Insight section's data source is unavailable, when the Workspace loads, then Insight widgets each display their individual error state with Retry CTA (WS-S02 failure isolation applies) — the SDR Lead still sees all execution widgets loading normally.

Permission Model
• CAN: SDR Lead sees both execution and Team-level Insight widgets.
• CANNOT: SDR Staff cannot access the Team Insight section even if they share the same CID as an SDR Lead.
• CANNOT: SDR Lead cannot see BD or AM Insight widgets — role resolution is Team-scoped.

UI States
• Loading: Insight section renders skeleton alongside other sections within ≤ 1s of page load.
• Empty: No team data for a specific Insight widget → per-widget empty state (copy TBD per Insight widget during discovery).
• Error: Each Insight widget failure is isolated — does not affect execution widgets.
• Success: All sections rendered; Insight section populated with team-level data within p95 ≤ 3s.
WS-S07 — Quick Actions: Navigation Shortcuts

As an SDR, I want Quick Actions on my Workspace to navigate me directly to the relevant CRM module, so that I can start common tasks without going through the main navigation.
Should HaveScope: Navigation shortcuts only. No inline form, no modal, no CRM operation performed within the Workspace frame.

Section type: Static — no data fetch, no auto-refresh. Renders on page load.
Happy Path
• AC-1: Given an SDR is on the Workspace, when the SDR clicks the "Upload Leads" Quick Action, then the system navigates the SDR to the Upload Leads page in the CRM module.
• AC-2: Given an SDR is on the Workspace, when the SDR clicks the "Create Broadcast" Quick Action, then the system navigates the SDR to the Create Broadcast flow.
• AC-3: Given an SDR is on the Workspace, when the SDR clicks the "Create Task" Quick Action, then the system navigates the SDR to the Create Task flow.

Error
• ERR-1: Given the Quick Actions section encounters a widget framework rendering error, when the Workspace loads, then the Quick Actions section displays an error state with Retry CTA — failure is isolated and does not affect Today's Priorities, Today's Progress, or Insight sections.

Permission Model
• CAN: Any SDR with Workspace enabled can use all Quick Actions.
• CANNOT: Quick Actions cannot perform any CRM operation inline within the Workspace — navigation to the target module is always required.

UI States
• Loading: N/A — static section, action buttons render immediately on page load with no data fetch.
• Empty: N/A — always 3 defined action shortcuts; no data-dependent empty state.
• Error: Widget framework rendering failure → section-level error state with Retry CTA; other sections unaffected.
• Success: Three Quick Action shortcuts (Upload Leads, Create Broadcast, Create Task) visible and clickable.
WS-NEG-01 — No Workspace on Mobile / Native App
(Guard Rail — Non-Goal #1: Mobile/native app, Phase 1 web only)
Guard Rail• NEG-1: Given any CRM user accessing Qontak via a mobile or native app, when workspace_homepage_enabled is ON for their CID, then the Workspace is not surfaced on mobile — the user sees the existing default mobile experience unchanged.
WS-NEG-02 — No Drag-and-Drop Widget Reordering
(Guard Rail — Non-Goal #5: Drag-and-drop deferred to Phase 2)
Guard Rail• NEG-2: Given an SDR is on the Workspace homepage, when the user attempts to drag a widget card to a different position, then no drag interaction is triggered — widget positions remain fixed in the predefined layout order.

9. Rollout

FieldDetail
Feature flagworkspace_homepage_enabled (per CID, default OFF — see Section 5)
RolloutStage 1 → Internal Alpha: internal SDR users only (Qontak internal CIDs, flag enabled per CID manually). Stage 2 → Closed Beta: select external SDR pilot CIDs (scope TBD — PM + CSM to identify). Stage 3 → Open Beta: broader SDR-enabled CIDs pending Internal Alpha validation. GA → all eligible CIDs with SDR Team assignments.
Backward compatYes — existing CRM routing and default landing page unchanged for all CIDs with flag = OFF. No data model changes for non-Workspace users.
MigrationNone required. Workspace is a new surface; no existing data or config is migrated. Widget personalization starts empty per user on first access.

10. Observability

Key Events:

Event NameTriggerProperties
workspace_loadedWorkspace page fully interactiveuser_id, cid, team, staff_level, load_time_ms, sections_rendered[]
section_renderedEach section finishes renderingsection_id, widget_count, render_time_ms, has_error
content_item_clickedSDR clicks a priority item card or its CTAwidget_id, section_id, item_type, lead_id, position_in_list
content_item_completedPriority item removed after SDR action (smooth removal)widget_id, item_id, completion_type
ai_action_clickedSDR clicks an AI-powered actionwidget_id, ai_action_type, lead_id
section_load_failedWidget Data Service returns error for a sectionsection_id, widget_id, error_type, retry_count
widget_hiddenSDR hides a widgetuser_id, widget_id, section_id
widget_shownSDR restores a hidden widgetuser_id, widget_id, section_id
quick_action_clickedSDR clicks a Quick Actionaction_id (upload_leads / create_broadcast / create_task), user_id

Dashboard owner: Mixpanel — Product team (PM Qontak Group / Qontak CRM Squad)

Alerts:

  • section_load_failed rate > 2% of workspace_loaded events in any 15-min window → PagerDuty: Qontak CRM Squad on-call
  • Workspace p95 load time > 3s for > 5% of workspace_loaded events in any 30-min window → PagerDuty: Engineering Lead

10.1 Post-Launch Monitoring Cadence

FieldDetail
Review cadenceWeekly for the first 4 weeks post-Internal Alpha launch, then bi-weekly through GA.
OwnerPM Qontak Group (Qontak CRM Squad)
Review scopeDAR (Workspace Daily Active Ratio), module-switch reduction, widget CTR, widget error rate, section load time p95
Trigger thresholds• DAR drops below 40% for 2 consecutive weeks → PM review within 48 hours; consider scope adjustment.
section_load_failed rate > 2% sustained for > 24 hours → Engineering escalation + rollback consideration.
• Widget CTR < 20% after 2 weeks of Internal Alpha → PM review; reassess priority card content and design.
Rollback considerationIf widget error rate exceeds 5% and is unresolved within 24 hours, PM and Engineering Lead to assess partial rollback (disable affected widgets per CID via flag). Full Workspace rollback via workspace_homepage_enabled = OFF per CID.

11. Success Metrics

Adoption & Engagement:

MetricDefinitionBaselineTarget
⭐ Workspace Daily Active Ratio (DAR)% of enabled SDR users who load the Workspace at least once per dayN/A — new feature≥ 60% within 30 days of Internal Alpha launch
Widget CTR — Today's Priorities% of workspace_loaded sessions with at least one content_item_clicked from Today's PrioritiesN/A — new feature≥ 40% within 30 days of Internal Alpha
Priority item expansion rate% of Today's Priorities card clicks that result in navigation to the conversation/contact detailN/A — new feature≥ 30% within 30 days of Internal Alpha

Efficiency Impact:

MetricDefinitionBaselineTarget
Module-switch reductionAverage daily module-switch navigation actions per SDR vs. pre-Workspace baselinePre-Workspace baseline TBD (measure during Internal Alpha prep)≥ 20% reduction vs. baseline within 30 days of GA

Quality & Reliability:

MetricDefinitionBaselineTarget
Widget error rate% of widget renders that result in section_load_failedN/A — new feature≤ 2% sustained throughout Internal Alpha and beyond
Workspace p95 load time95th percentile of workspace_loaded → fully interactive timeN/A — new feature≤ 3s throughout Internal Alpha

Extensibility Gate:

MetricDefinitionBaselineTarget
Widget framework BD-readinessWidget framework supports BD persona onboarding (Phase 2, August) without re-engineering the platform coreN/A — binaryConfirmed by Engineering Lead before Phase 2 grooming begins

All metrics tracked via Mixpanel. Dashboard owner: Product team.


12. Launch Plan & Stage Gates

StageAudienceDurationSuccess Gate to AdvanceOwner
Internal AlphaQontak internal SDR users (flag ON per internal CID)2 weeksDAR ≥ 60% sustained for 2 weeks; widget error rate ≤ 2%; no critical production issues; positive pilot feedback from internal SDR usersPM + QA
Closed BetaSelect external SDR pilot CIDs (scope: PM + CSM to identify, target 3–5 CIDs)2–3 weeksDAR ≥ 60% in pilot cohort; module-switch reduction trend visible; widget error rate ≤ 2%; no P1 production issuesPM + CSM
Open BetaBroader SDR-enabled CIDs (Engineering + PM to scope)2–3 weeksAll Closed Beta gates sustained; widget CTR ≥ 40%; PMM sign-offEng Lead + PM
GAAll eligible CIDs with SDR Team assignmentsOngoingAll Open Beta gates sustained for 2 additional weeks; workspace_homepage_enabled default remains OFF — GA flag strategy TBDPM + PMM

13. Dependencies

DependencyOwning TeamDeliverable NeededBlocking?
Corporate Strategy Team — Workspace Data DefinitionsCross-team (Data / Analytics)Finalized metric boundaries for Today's Progress counters (exact definition of "Conversations Handled", "Opportunities Advanced", "Activities Completed"; data ownership per metric) — must be confirmed before Widget Data Service API schema is locked.YES — Blocking for July milestone
Widget Data Service API contractQontak CRM EngineeringWidget Data Service API schema (endpoints, request/response shape, TTL feasibility per widget data source, error codes) — must be finalized before widget development begins.YES
Qontak CDP — Lead & Conversation DataCDP TeamRead access to lead status, conversation idle signals, and activity data for Today's Priorities widget population.YES
Widget framework extensibility reviewQontak CRM EngineeringEngineering Lead sign-off that the Phase 1 platform architecture (Section framework, widget registry, role visibility model) is extensible for Phase 2 BD onboarding without re-engineering.YES — Gate for Phase 2 start

14. Key Decisions + Alternatives Rejected

Decisions Made:

DateDecisionRationale
2026-07-01Workspace structured as ANCHOR + Phase PRDs (Phase 1: SDR, Phase 2: BD, Phase 3: AM)Multi-phase initiative with distinct persona rollouts — ANCHOR + Phase structure keeps phase-specific scope isolated and avoids a single monolithic PRD.
2026-07-01Workspace implemented as embeddable iframe page (candidate approach)Enables faster iteration and independent deployment while integrating into existing CRM shell. Engineering to confirm final architecture.
2026-07-01State restore on return (vs. reset on return)SDR primary workflow involves consecutive priority item processing — resetting state after every navigation would force re-location of next item, creating friction. Restore + background refresh keeps data current while minimising context loss.
2026-07-01Admin-level widget configuration: out of scope for Phase 1Phase 1 focuses on validating Workspace value with Product-defined widget sets. Admin config complexity would slow Phase 1 delivery and reduce ability to iterate quickly during discovery.
2026-07-01Data refresh via auto-polling (preferred) or refresh button per-section (last resort)No WebSocket support in Qontak CRM. Auto-polling is preferred for freshness; refresh button is acceptable fallback. Final mechanism open for Engineering to confirm.
2026-07-01Widget personalization: hide/show per user account (cross-session) — drag-and-drop deferredPhase 1 validates widget utility before investing in reordering complexity. Hide/show enables minimal customization without significant engineering overhead.

Alternatives Rejected:

AlternativeWhy RejectedDate
Single PRD for entire Workspace initiative (no ANCHOR structure)Initiative spans 3 distinct phases and 3 persona rollouts across Q3. A single document would become unmanageable — ANCHOR + Phase structure is cleaner for PM handoffs and Engineering per-Epic scoping.2026-07-01
Full page reset on return from action (vs. state restore)Resets force SDRs to manually re-locate their position after each consecutive action — unacceptable UX for a workflow involving 5–15 priority items processed back-to-back.2026-07-01
Tenant-admin widget configuration in Phase 1Adds significant Engineering and Product complexity; reduces ability to iterate and validate widget value quickly in the Internal Alpha window. Deferred to future phase.2026-07-01
Inline / modal Quick Actions (vs. navigation shortcuts)Inline flows within the Workspace frame require significant Engineering work per action type and add scope risk to the July milestone. Phase 1 validates navigation shortcuts as sufficient for SDR workflow entry.2026-07-01

15. Open Questions

#TypeQuestionOwnerDeadline
1Open QuestionData refresh mechanism: Engineering to propose final approach — FE auto-polling (preferred) vs. refresh button per-section (last resort). Final decision needed before Widget Data Service API schema is locked.Engineering LeadBefore Widget Data Service design begins
2Open QuestionState restore trigger logic: what constitutes "return to Workspace" vs. fresh navigation? (Browser back button vs. sidebar nav link click.) Impacts implementation of WS-S04 state restore.Engineering LeadBefore WS-S04 implementation
3Open Question"Reason for appearing" enum: exact reason string values per priority signal source (e.g., "Interested — waiting for response", "Conversation idle for 3h"). Needed to complete WS-S03 AC data validation.Engineering + PMBefore WS-S03 development begins
4Open QuestionWorkspace URL path and iframe architecture: final URL (/workspace or other), and whether embeddable iframe approach is confirmed. Engineering to propose.Engineering LeadBefore Phase 1 development kickoff
5Open QuestionInsight widget data sources and content specs (Team Pipeline, Team Activities, Team Performance): exact definitions and data ownership for SDR Lead Insight widgets. To be defined through Phase 1 product discovery.PM Qontak GroupBefore Insight widget development begins
6Open QuestionWidget Data Service API schema: endpoints, request/response shape, error codes, caching strategy, TTL feasibility per widget data source. Engineering to finalize and confirm before widget development starts.Engineering LeadBlocking for July milestone
7AssumptionToday's Progress metrics (Conversations Handled, Opportunities Advanced, Activities Completed, Work Summary) are derivable from existing CRM activity data without new data pipelines. Corporate Strategy / Data team to confirm exact metric boundaries and data ownership.Corporate Strategy / Data AnalyticsBlocking for July milestone
8RiskPhase 1 July milestone includes Platform [A] + all Phase 1 committed widgets [B]. Any Content Items added after the initial Engineering estimate are incremental scope and must not require platform re-engineering. Risk: scope creep from discovery adding widget requirements that inadvertently require platform changes. Mitigation: clear separation of Platform [A] (Engineering estimates once) and Content Items [B] (Product-defined, incremental).PM + Engineering LeadOngoing throughout Phase 1
9RiskWidget framework extensibility for BD/AM (Phase 2/3): if Phase 1 platform decisions create hidden coupling that blocks BD onboarding in August, the Q3 roadmap is at risk. Mitigation: Engineering Lead sign-off on extensibility before Phase 2 grooming begins (see Dependencies).Engineering LeadBefore Phase 2 grooming
10AssumptionWidget personalization (hide/show) is stored per user account server-side. Engineering to confirm storage approach (user preferences table vs. existing profile extension).Engineering LeadBefore WS-S05 development

PRD CHANGELOG

VersionDateBySectionTypeSummary
1.02026-07-01Claude (groom-prd skill)AllCREATEDPhase 1 PRD created from pre-grooming form + grooming session (PM Qontak Group). Includes 7 user stories (WS-S01–S07), 2 guard rails (WS-NEG-01–02), full system flow diagram, API behavior table, and test coverage matrices for all Must Have stories.