# Feature Flags Documentation ## Overview Alga PSA uses PostHog for feature flag management, allowing tenant-based feature control. Features can be enabled/disabled for specific tenants while showing an "Under Construction" placeholder for restricted users. ## Current Feature Flags ### 1. `billing-enabled` Controls access to billing-related features across the application. **Affected Areas:** - **MSP Portal:** - Billing menu section in sidebar (shows construction icon when disabled) - Billing page at `/msp/billing` - Company Details - Billing, Billing Dashboard, and Tax Settings tabs - Settings - Tax tab - Settings - Invoice Settings tab (within Billing tab) - **Client Portal:** - Billing menu item and page at `/client-portal/billing` **Behavior:** - When disabled: Shows construction placeholder image - Navigation items remain visible but display placeholder content when accessed ### 2. `advanced-features-enabled` Controls access to advanced/experimental features. **Affected Areas:** - **Automation Hub** - Menu section and all sub-items - Template Library - Workflows - Events Catalog - Logs & History - **System Monitoring** - Menu section (redirects to `/msp/jobs`) - Job Monitoring - **Settings - Integrations tab** - **User Activities Dashboard - Workflow Tasks section** (hidden, no placeholder) **Behavior:** - Menu items show construction icon when disabled - Pages/tabs show construction placeholder when accessed - Workflow Tasks in User Activities are completely hidden ### 3. `email-configuration` Controls access to email configuration settings. **Affected Areas:** - **Settings - General - Email tab** - Email provider configuration - Domain settings - Email settings management **Behavior:** - When disabled: Shows construction placeholder image - Tab remains visible but displays placeholder content when accessed ### 4. `delegated-time-entry` Controls access to the delegated time-entry UI (editing/viewing time sheets for other users) in the MSP portal. **Affected Areas:** - **MSP Portal:** - Time Entry page at `/msp/time-entry` (subject user selector) - Time Sheet pages at `/msp/time-entry/timesheet/:id` (delegation UI + ability to edit delegated sheets) **Behavior:** - When disabled: The UI only allows working with the current user’s own time periods/time sheets (delegated sheets are shown as read-only if accessed directly). - When enabled: Authorized users can select a subject user and edit/view that user’s time sheets via the UI. ### 5. `email-logs` Controls access to email log UI surfaces for outbound email auditing/debugging. **Affected Areas:** - **MSP Portal:** - System Monitor → Email Logs menu link - Email Logs page at `/msp/email-logs` - Ticket Details → Email Notifications section (per-ticket) **Behavior:** - When disabled: Email Logs page shows construction placeholder; navigation link and ticket section are hidden. ### 6. `tactical-rmm-integration` Controls access to the Tactical RMM integration configuration UI. **Affected Areas:** - **MSP Portal:** - Settings → Integrations → RMM **Behavior:** - When disabled (default): Tactical RMM configuration is hidden from the RMM setup screen. - When enabled: Tactical RMM appears as a selectable RMM provider (and its configuration UI is shown). ### 7. `knowledge-base` Controls access to the Knowledge Base feature on both MSP and Client Portal. **Affected Areas:** - **MSP Portal:** - Documents → Knowledge Base sub-item in sidebar (hidden when disabled, Documents becomes a direct link) - Knowledge Base page at `/msp/knowledge-base` - Knowledge Base Review page at `/msp/knowledge-base/review` - **Client Portal:** - Knowledge Base navigation link (hidden when disabled) - Knowledge Base page at `/client-portal/knowledge-base` **Behavior:** - When disabled: Navigation links are hidden; pages show construction placeholder if accessed directly. ### 8. `document-folder-templates` Controls access to new document features: client portal documents, folder structure configuration, and share links. **Affected Areas:** - **Client Portal:** - Documents navigation link (hidden when disabled) - Documents page at `/client-portal/documents` - **MSP Portal:** - Settings gear button on Documents page (hidden when disabled) - Document Templates Settings panel - Share button on document storage cards (hidden when disabled) - Share controls in document list view (hidden when disabled) **Behavior:** - When disabled: Client portal documents nav link is hidden (page shows construction placeholder if accessed directly). Folder templates config and share link UI are completely hidden. ### 9. `ai-assistant-activation` Controls which tenants are allowed to enable the AI Assistant from Settings → Experimental Features. **Affected Areas:** - **MSP Portal:** - Settings → Experimental Features → AI Assistant toggle **Behavior:** - When disabled: The AI Assistant toggle is disabled and cannot be saved on for that tenant, even if the tenant previously had the experimental setting stored. - When enabled: The tenant may turn on the existing `experimentalFeatures.aiAssistant` setting, which continues to gate Quick Ask, chat sidebar access, and AI chat APIs. ### 10. `quoting-enabled` Controls access to the quoting functionality in the billing area. **Affected Areas:** - **MSP Portal:** - Billing sidebar: Quotes and Quote Layouts navigation items (hidden when disabled) - Billing dashboard: Quotes and Quote Layouts tabs (hidden when disabled) - Quote Approvals page at `/msp/quote-approvals` (shows construction placeholder when disabled) - Quote Layouts page at `/msp/quote-document-templates` (shows construction placeholder when disabled) - Billing Settings: Quoting tab with Quote Numbering settings (hidden when disabled) **Behavior:** - When disabled (default): Quote-related sidebar items and billing tabs are hidden. Standalone quote pages show construction placeholder if accessed directly. - When enabled: Full quoting UI is accessible. Backend (models, actions, migrations) is always available regardless of flag state. ### 11. `service-requests` Controls access to the new service request definition and client portal request-services UI. **Affected Areas:** - **MSP Portal:** - Service Requests sidebar navigation item (hidden when disabled) - Service Requests management page at `/msp/service-requests` - Service Request definition editor at `/msp/service-requests/:definitionId` - **Client Portal:** - Request Services navigation link (hidden when disabled) - Request Services catalog page at `/client-portal/request-services` - Request Service detail/submit page at `/client-portal/request-services/:definitionId` - My Requests page at `/client-portal/request-services/my-requests` - Submission detail page at `/client-portal/request-services/my-requests/:submissionId` **Behavior:** - When disabled (default): MSP and client-portal navigation links are hidden. Direct page access shows the standard feature placeholder. - When enabled: The full service request UI is accessible. - Backend (tables, actions, provider execution, portal submission processing) remains active regardless of flag state. ### 12. `mcp-server` Dark-release gate for the remote (governed) MCP server admin UI. Enterprise-only and off by default; used to roll the feature out per-tenant before general availability. **Affected Areas:** - **MSP Portal:** - Settings → MCP Server tab (the IdP-provider / agent / audit admin surface). Hidden when disabled; the tab only appears when the tenant is Enterprise **and** the flag is on. Direct access via `?tab=mcp-server` falls back to the default tab. **Behavior:** - When disabled (default): The MCP Server settings tab is hidden. Because no flag exists in PostHog by default — and the flag resolves `false` when PostHog is unavailable — the tab is dark on every instance until explicitly enabled for a tenant. - When enabled: The MCP Server admin tab is shown (Enterprise builds only). - **UI-only gate.** The server endpoints (`POST /api/mcp`, `/.well-known/oauth-protected-resource`, and the `/api/v1/mcp/*` admin APIs) remain live regardless of flag state — they are already Enterprise-gated and harmless without agents/IdPs configured. The flag only hides the admin entry point in the UI. ## Implementation Details ### User Identification Users are identified in PostHog with tenant information via `PostHogUserIdentifier` component: ```typescript posthog.identify(anonymousId, { tenant: user.tenant, user_type: user.user_type }); ``` ### Key Components 1. **FeaturePlaceholder** (`/src/components/FeaturePlaceholder.tsx`) - Displays the "Under Construction" image - Responsive sizing with max height of 90vh 2. **SidebarWithFeatureFlags** (`/src/components/layout/SidebarWithFeatureFlags.tsx`) - Wraps the main sidebar to handle feature flags - Adds `underConstruction` property to disabled menu items 3. **FeatureFlagWrapper** (`/src/components/FeatureFlagWrapper.tsx`) - Generic wrapper component for feature flag conditional rendering 4. **FeatureFlagPageWrapper** (`/src/components/FeatureFlagPageWrapper.tsx`) - Page-level wrapper for showing placeholder on entire pages ## PostHog Configuration To configure these feature flags in PostHog: 1. **Create Feature Flag:** - Key: `billing-enabled`, `advanced-features-enabled`, `email-configuration`, or `ai-assistant-activation` - Type: Boolean 2. **Set Rollout Conditions:** - Add condition: User property `tenant` equals `[your-tenant-id]` - Set to 100% for matching users - Default to 0% for all others 3. **Test:** - Enable for specific tenant - Verify placeholder appears for other tenants ## Usage Examples ### Checking Feature Flag in Component: ```typescript const featureFlag = useFeatureFlag('billing-enabled'); const isEnabled = typeof featureFlag === 'boolean' ? featureFlag : featureFlag?.enabled; ``` ### Conditional Rendering: ```typescript {isEnabled ? ( ) : ( )} ``` ### Hiding Content Completely: ```typescript {isAdvancedFeaturesEnabled && ( )} ``` ## Notes - Feature flags are checked on the client side - The construction image is located at `/images/under-construction.png` - All text is included in the image itself (no additional text rendering) - Service Types and Service Catalog remain accessible regardless of billing feature flag