Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
4.4 KiB
4.4 KiB
MSP Dashboard Onboarding Checklist Plan (2025-11-17)
Goal
Implement a persistent onboarding checklist within the MSP dashboard that reflects real-time completion for critical setup areas (identity/SSO, client portal domain, data import, calendar sync, managed email) and nudges admins to finish configuration.
Scope
- Dashboard UI additions (cards, drawer, quick-start replacements).
- Shared onboarding progress data hook/services.
- Lightweight analytics wiring for interactions.
- No new backend features beyond surfacing existing state via actions/services.
Out of Scope
- New onboarding steps beyond the five defined areas.
- Automated testing, QA, or production rollout tasks.
- Client portal visualization; MSP dashboard only.
Phase 1 – Progress Data Layer
- Inventory signals: Document which existing actions/services expose status for each area and whether additional metadata is needed (e.g.,
portalDomainActions,importActions,calendarActions,managedDomainActions, SSO connection state fromoauthAccountLinks). - Create shared hook: Add
server/src/components/dashboard/hooks/useOnboardingProgress.tsexporting a hook that aggregatesuseSWR(or existing React Query) calls to the relevant endpoints and normalizes intoOnboardingStepobjects{ id, title, status, lastUpdated, ctaHref, blocker }. - Add lightweight API if needed: If any status requires combining multiple action responses, expose a server action (e.g.,
server/src/lib/actions/onboarding-progress.ts) that fetches state server-side to reduce client round-trips. - Emit analytics state: Within the hook, when statuses transition to
complete, dispatchposthog.capture('onboarding_step_completed', { step_id })to preserve historical completion timing.
Phase 2 – Checklist Drawer Component
- Component scaffold: Create
server/src/components/dashboard/OnboardingChecklist.tsxrendering a sticky/right-rail drawer. Accept hook data as props to keep it presentational. - Step rendering: For each
OnboardingStep, show title, description, progress indicator (icon or progress bar for multi-subtask steps like data import). Include CTA buttons linking to the corresponding settings path (provided in step metadata). - Blocker messaging: If
step.blockerexists, show inline alert so admins understand prerequisites (e.g., “Add an MSP admin user before enabling SSO”). - Completion affordance: When all steps complete, show celebratory state plus a button to “Invite clients” (deep-link to
/msp/clients?create=true).
Phase 3 – Dashboard Integration
- Integrate hook: Import
useOnboardingProgressinserver/src/components/dashboard/Dashboard.tsx, call it once, and pass data into both existing quick-start cards and the new checklist component. - Quick Start refresh: Replace static
QuickStartCardlist with onboarding-aware cards that showstatus(e.g., badge forComplete, progress spinner otherwise) and disable navigation when prerequisites unmet. - Layout adjustments: Update the grid to accommodate the checklist drawer on desktop while keeping a collapsible drawer trigger on mobile (use CSS utility classes that already exist in the project’s design system).
- Event wiring: Ensure clicks on CTA buttons fire
posthogevents with{ step_id, action: 'cta_click' }for future funnel insights.
Phase 4 – Visual Refinement & Content
- Iconography + copy: Select consistent icons for each step using lucide-react imports already used in the dashboard. Update copy to explicitly mention in-app features (e.g., “Verify client portal domain via DNS challenge”).
- Status badges: Introduce a small badge component (reuse existing
BadgeorStatusPill) to showBlocked,In Progress,Completestates. - Empty states: Define design for when data is loading or when no steps remain. Use existing skeleton loaders to maintain visual consistency.
- Documentation stub: Add a short README snippet (e.g.,
docs/configuration_guide.mdappendix) describing how the checklist derives its state so future contributors can extend it.
Implementation Notes
- Stick to existing action patterns; don’t introduce new database tables.
- All new UI components should live under
server/src/components/dashboardto keep dashboard concerns localized. - Use centralized route constants if available; otherwise, define CTA hrefs near the hook to avoid hard-coded strings scattered across components.