Skip to content

Dashboard

The dashboard is a widget-based customizable interface that adapts to the user’s selected goal (buyer, seller, referrer, PM). Users can add, remove, rearrange, and configure widgets.

Module path: src/lib/modules/dashboard/ Route: /dashboard

12 widgets organized by category:

WidgetCategoryDescription
sales_summarySalesRevenue and sales overview
ordersSalesRecent and active orders
payoutsSalesEarnings and payout history
messagesChatChat inbox and conversations
inboxChatMessages and notifications
team_chatChatTeam conversations
active_projectsProjectsCurrent projects
project_boardProjectsTask and milestone board
milestonesProjectsProject progress tracking
recommended_sellersGeneralDiscover sellers
referral_statsReferralsReferral performance
campaign_linksReferralsReferral links and campaigns
interface WidgetInstance {
instanceId: string;
widgetDefinitionId: string;
position: { x: number; y: number; w: number; h: number };
config: Record<string, unknown>;
visibility: 'pinned' | 'hidden' | 'collapsed';
}

4 pre-configured layouts matching onboarding goals:

TemplateWidgets
seller_defaultSales Summary, Orders, Messages, Payouts
buyer_defaultInbox, Active Projects, Recommended Sellers
pm_defaultProject Board, Milestones, Team Chat
referral_defaultReferral Stats, Campaign Links, Payouts

File: src/lib/modules/dashboard/stores/dashboard-manager.svelte.ts

dashboardManager.dashboard; // Current dashboard data
dashboardManager.grid; // Widget instances
dashboardManager.isEditMode; // Edit mode toggle
dashboardManager.selectedInstanceId; // Selected widget
dashboardManager.ensureDashboard(templateId);
dashboardManager.addWidget(widgetDefinitionId);
dashboardManager.removeWidget(instanceId);
dashboardManager.updateLayout(grid);
dashboardManager.updateWidgetConfig(instanceId, config);
dashboardManager.resetToTemplate(templateId);

Persistence: Firestore at users/{uid}/dashboards/{dashboardId} with 600ms debounced saves.

ComponentPurpose
DashboardShell4-column grid layout rendering widgets
WidgetContainerWidget wrapper with lock/unavailable handling
WidgetPickerDialog for adding widgets
WidgetSettingsPanelDynamic form for widget configuration
WidgetUnavailableFallback for removed widget definitions

The main dashboard page (/dashboard) also includes:

  • Welcome message with user name
  • OnboardingTracker - 4-step progress (Profile, Hub, Referrals, Academy)
  • Profile completion card - Progress percentage with clickable items
  • Hub completion card - Marketplace readiness checklist
  • WhatsNew - Tabbed content (Blogs, Promotions, Updates, Videos)
  • InviteTeamForm - Team invitation
  • VideoIntroDialog - Welcome video modal
  • QuickLinks - Navigation shortcuts

Widgets check the user’s subscription plan via subscriptionManager:

  • Free: Limited widget access
  • Standard: Extended access
  • Elite: Full access to all widgets

Locked widgets show an upgrade prompt in the WidgetContainer.