PageSourceSearch

https://businessinsights.lovable.app/assets/PlatformFoundationsGuide-rNviEAQN.js

js businessinsights.lovable.app collected 2026-10-03 03:25:29 UTC 28,953 bytes, 3 lines download raw bytes

1import{j as e}from"./vendor-ui-D7X1860i.js";import{e as o,r as h}from"./vendor-react-BchadoZV.js";import{a2 as x,r as j,aM as m,aO as g,$ as s,af as a,d as u,f as p,g as b,e as f,ap as v,aA as y,a7 as N,ai as w,T as S,Y as A,aI as C,B as I,a3 as R}from"./index-BNuU0U7e.js";import{P as k}from"./PageBreadcrumb-CTcl419Q.js";import{u as P}from"./vendor-i18n-rFxkqqo2.js";import{S as T}from"./server-C0IgFmvc.js";import{L}from"./lock-Bn_RUrLz.js";import"./vendor-utils-Dgo5sBm9.js";import"./vendor-supabase-DBq2mNUo.js";import"./vendor-charts-DLW0tl0w.js";const l=[{id:"overview",icon:e.jsx(v,{className:"w-5 h-5"}),title:e.jsx(s,{children:"System Overview"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{children:[e.jsx(s,{children:"The platform is an enterprise-grade CX, Risk, and Operations management suite built on a modern cloud-native architecture. It provides end-to-end capabilities across six lifecycle stages:"})," ",e.jsx("strong",{children:"Onboard → Listen → Understand → Act → Engage → Govern"}),"."]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Core Modules"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"CX Intelligence:"})," ",e.jsx(s,{children:"Journey mapping, VoC, NPS/CSAT/CES, MoX framework, closed-loop recovery"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Risk Management:"})," ",e.jsx(s,{children:"ISO 31000 lifecycle — cycles, registers, assessments, treatments, KRIs, bow-tie"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"CaseDesk:"})," ",e.jsx(s,{children:"ITSM-aligned case management — SLA, escalation, CMDB, change management, KB"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Mission Control:"})," ",e.jsx(s,{children:"Action plans, WBS, Gantt, Kanban, Agile, resource management, baselines"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Instruments & Surveys:"})," ",e.jsx(s,{children:"Survey builder, distribution, response analytics, recommendation engine"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Company Intelligence:"})," ",e.jsx(s,{children:"AI profiling, SWOT, Business Model Canvas, CCC analysis"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"SalesOS:"})," ",e.jsx(s,{children:"Pipeline management, ABM, deal rooms, buyer personas, revenue intelligence"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"NorthStar:"})," ",e.jsx(s,{children:"OKR/KPI strategic alignment with cascading objectives and real-time scoring"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Employee Experience:"})," ",e.jsx(s,{children:"eNPS, engagement surveys, pulse checks, sentiment tracking"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"AI Capabilities (Platform-Wide)"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Copilot:"})," ",e.jsx(s,{children:"Conversational AI assistant with module-aware context"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Auto-Fill:"})," ",e.jsx(s,{children:"AI-powered field population across 22+ entity types"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Inline AI Toolbar:"})," ",e.jsx(s,{children:"Rewrite, shorten, expand, translate any text field"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"LUMUS:"})," ",e.jsx(s,{children:"Open-text analytics for thematic extraction and sentiment analysis"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Smart Recommendations:"})," ",e.jsx(s,{children:"Context-aware suggestions for next-best actions"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Daily Briefings:"})," ",e.jsx(s,{children:"AI-generated executive summaries delivered per module"})]})]})]})]})},{id:"architecture",icon:e.jsx(T,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Architecture & Components"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"The platform follows a modern React SPA + Serverless Backend architecture with real-time capabilities and edge computing for AI workloads."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Frontend Stack"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"React 18"})," ",e.jsx(s,{children:"with TypeScript 5, Vite 5 bundler"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Tailwind CSS v3"})," ",e.jsx(s,{children:"with semantic design tokens (HSL-based)"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"shadcn/ui"})," ",e.jsx(s,{children:"component library with custom variants"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"React Query (TanStack)"})," ",e.jsx(s,{children:"for server state management with optimistic mutations"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Framer Motion"})," ",e.jsx(s,{children:"for animations and page transitions"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"i18next"})," ",e.jsx(s,{children:"for internationalization (EN, ES, PT, AR + RTL)"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Backend Infrastru
1cture"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"PostgreSQL"})," ",e.jsx(s,{children:"with Row-Level Security (RLS) for multi-tenant isolation"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Edge Functions (Deno)"})," ",e.jsx(s,{children:"for AI processing, webhooks, and integrations"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Realtime Subscriptions"})," ",e.jsx(s,{children:"for live collaboration and presence"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"File Storage"})," ",e.jsx(s,{children:"with signed URLs and access control"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Auth"})," ",e.jsx(s,{children:"with email/password, MFA (TOTP), and session management"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Cross-Cutting Patterns"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Lazy Loading:"})})," ",e.jsx(s,{children:"All routes are code-split for optimal initial load"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Error Boundaries:"})})," ",e.jsx(s,{children:"App-level, route-level, and widget-level error catching"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Skeleton Loading:"})})," ",e.jsx(s,{children:"5 variants (table, cards, list, detail, kanban) with ARIA busy states"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Offline Sync:"})})," ",e.jsx(s,{children:"Queue mutations when offline, replay on reconnection"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Undo/Redo:"})})," ",e.jsx(s,{children:"Visual timeline with toast-based quick undo for destructive operations"})]})]})]})]})},{id:"configuration",icon:e.jsx(y,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Configuration Options"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"Platform-wide configuration is managed through the Setup module, accessible to administrators."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Global Settings"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Theme:"})})," ",e.jsx(s,{children:"Light/Dark mode, live theme customizer with HSL color pickers"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Language:"})})," ",e.jsx(s,{children:"English, Spanish, Portuguese, Arabic (with RTL support)"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Accessibility:"})})," ",e.jsx(s,{children:"Font scaling, reduced motion, high contrast, focus indicators"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Notifications:"})})," ",e.jsx(s,{children:"In-app, email, and webhook notification preferences"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Feature Flags:"})})," ",e.jsx(s,{children:"Module-level and feature-level toggles for progressive rollout"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Module Configuration"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Cases:"})})," ",e.jsx(s,{children:"SLA policies, routing rules, escalation rules, closure codes, case natures"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Risk:"})})," ",e.jsx(s,{children:"ISO standards, scoring matrices, risk appetite thresholds"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Plans:"})})," ",e.jsx(s,{children:"Methodologies (Waterfall/Agile/Hybrid), WIP limits, resource pools"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Surveys:"})})," ",e.jsx(s,{children:"Rating scales, distribution channels, anonymity settings"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Integrations:"})})," ",e.jsx(s,{children:"Webhooks, API keys, external service connections"})]})]})]})]})},{id:"roles",icon:e.jsx(N,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Roles & Permissions"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"The platform uses Role-Based Access Control (RBAC) with row-level security enforced at the database level. Roles are stored in a separate user_roles table to prevent privilege escalation."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Standard Roles"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Admin:"})," ",e.jsx(s,{children:"Full access to all modules, settings, user management, and audit trails"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Manager:"})," ",e.jsx(s,{children:"Module-level management, reporting, team oversight, approval authority"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"User:"})," ",e.jsx(s,{children:"Standard operational access — create, edit, and view within assigned scope"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Viewer:"})," ",e.jsx(s,{children:"Read-only access to dashboards, reports, and assigned data"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Permission Model"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Module Access:"})})," ",e.jsx(s,{children:"Controlled via app_modules + module_permissions"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Data Isolation:"})})," ",e.jsx(s,{children:"RLS policies filter data by user_id or tenant scope"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Admin Verification:"})})," ",e.jsx(s,{children:"Server-side has_role() security definer function"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Impersonation:"})})," ",e.jsx(s,{children:"Admins can view-as-user for debugging (logged in audit trail)"})]})]})]}),e.jsxs("div",{className:"bg-amber-500/5 border border-amber-500/20 rounded-lg p-3",children:[e.jsxs("h4",{className:"font-semibold text-amber-600 text-sm mb-1",children:["⚠️ ",e.jsx(s,{children:"Security Note"})]}),e.jsx("p",{className:"text-sm",children:e.jsx(s,{children:"Admin status is never checked via client-side storage. All permission checks use server-side validation through PostgreSQL security definer functions."})})]})]})},{id:"data-models",icon:e.jsx(w,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Data Models"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"The platform uses a relational PostgreSQL schema with 150+ tables organized by module. All tables follow consistent patterns for timestamps, soft-delete, and audit trails."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Common Patterns"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Timestamps:"})})," ",e.jsx(s,{children:"All tables include created_at and updated_at"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Ownership:"})})," ",e.jsx(s,{children:"user_id or created_by for RLS filtering"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Soft Delete:"})})," ",e.jsx(s,{children:"deleted_at with 30-day auto-purge cycle"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Audit Trail:"})})," ",e.jsx(s,{children:"Field-level changelog via data_changelog trigger"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"UUIDs:"})," ",e.jsx(s,{children:"All primary keys use gen_random_uuid()"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"JSON Columns:"})})," ",e.jsx(s,{children:"Used for flexible metadata, configuration, and AI outputs"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Key Entity Relationships"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Profiles → User Roles:"})," ",e.jsx(s,{children:"Separate table for RBAC (prevents privilege escalation)"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"CX Programs → Journeys → Touchpoints → MoX:"})," ",e.jsx(s,{children:"Hierarchical CX structure"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Risk Cycles → Risks → Controls/Treatments/KRIs:"})," ",e.jsx(s,{children:"ISO 31000 hierarchy"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Action Plans → Tasks → Dependencies:"})," ",e.jsx(s,{children:"WBS-based project structure"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Instruments → Questions → Responses:"})," ",e.jsx(s,{children:"Survey data model"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Cases → Comments/Attachments/Audit Trail:"})," ",e.jsx(s,{children:"ITSM case lifecycle"})]})]})]})]})},{id:"security",icon:e.jsx(L,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Security & Compliance"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"Security is enforced at every layer: database (RLS), API (JWT + rate limiting), and application (CSP headers, input validation, CSRF protection)."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Authentication & Access"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Authentication:"})})," ",e.jsx(s,{children:"Email/password with email verification (no anonymous signups)"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"MFA:"})," ",e.jsx(s,{children:"TOTP-based two-factor authentication (optional, admin-enforceable)"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Session Management:"})})," ",e.jsx(s,{children:"Remote session revocation, device detection, timeout policies"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"API Keys:"})})," ",e.jsx(s,{children:"Scoped keys with rate limiting, expiration, and usage logging"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Data Protection"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Encryption:"})})," ",e.jsx(s,{children:"TLS 1.3 in transit, AES-256 at rest"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"RLS Policies:"})})," ",e.jsx(s,{children:"Every table has row-level security enforcing data isolation"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Data Sensitivity:"})})," ",e.jsx(s,{children:"Field-level sensitivity labels with auto-detection"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Retention:"})})," ",e.jsx(s,{children:"Configurable retention policies with automated disposition"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Legal Hold:"})})," ",e.jsx(s,{children:"Prevents deletion of documents under legal review"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Compliance Frameworks"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"SOC 2 Type II:"})," ",e.jsx(s,{children:"In-platform control checklist with evidence tracking"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"ISO 27001:"})," ",e.jsx(s,{children:"Information security management aligned controls"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"GDPR:"})," ",e.jsx(s,{children:"Data subject rights, consent management, DPO assignment"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Audit Trail:"})})," ",e.jsx(s,{children:"Immutable platform_audit_log for all state changes"})]})]})]})]})},{id:"error-handling",icon:e.jsx(S,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Error Handling"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"The platform uses a three-tier error boundary strategy to ensure graceful degradation without losing the user's work."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Error Boundary Hierarchy"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"App-Level:"})})," ",e.jsx(s,{children:"Catches catastrophic errors, offers reload with state preservation"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Route-Level:"})})," ",e.jsx(s,{children:"Isolates page-level crashes, allows navigation to other pages"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Widget-Level:"})})," ",e.jsx(s,{children:"Individual dashboard cards fail independently"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Common Error Patterns"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Network Errors:"})})," ",e.jsx(s,{children:"Automatic retry with exponential backoff (React Query)"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Validation Errors:"})})," ",e.jsx(s,{children:"Inline field-level messages with Zod schema validation"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Permission Errors:"})})," ",e.jsx(s,{children:'Friendly "access denied" with role context'})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Offline Mode:"})})," ",e.jsx(s,{children:"Mutations queued locally, replayed on reconnection"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Rate Limiting:"})})," ",e.jsx(s,{children:"429 responses show cooldown timer"})]})]})]}),e.jsxs("div",{className:"bg-amber-500/5 border border-amber-500/20 rounded-lg p-3",children:[e.jsxs("h4",{className:"font-semibold text-amber-600 text-sm mb-1",children:["💡 ",e.jsx(s,{children:"If Something Goes Wrong"})]}),e.jsxs("ul",{className:"text-sm space-y-0.5",children:[e.jsxs("li",{children:["• ",e.jsx("strong",{children:e.jsx(s,{children:"White screen:"})})," ",e.jsx(s,{children:"Refresh the page — error boundaries preserve navigation"})]}),e.jsxs("li",{children:["• ",e.jsx("strong",{children:e.jsx(s,{children:"Data not loading:"})})," ",e.jsx(s,{children:"Check your network connection; data auto-retries 3 times"})]}),e.jsxs("li",{children:["• ",e.jsx("strong",{children:e.jsx(s,{children:"Permission denied:"})})," ",e.jsx(s,{children:"Contact your administrator for role assignment"})]}),e.jsxs("li",{children:["• ",e.jsx("strong",{children:e.jsx(s,{children:'"Save failed":'})})," ",e.jsx(s,{children:"Your changes are cached locally; try again in a moment"})]})]})]})]})},{id:"maintenance",icon:e.jsx(A,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Maintenance & Updates"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"The platform follows continuous deployment with zero-downtime updates. Database migrations are versioned and applied automatically."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Update Process"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Frontend:"})," ",e.jsx(s,
1{children:"Vite hot-module replacement for instant updates during development"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Database:"})})," ",e.jsx(s,{children:"Versioned migrations with rollback capability"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Edge Functions:"})," ",e.jsx(s,{children:"Atomic deployments with instant propagation"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"What's New:"})})," ",e.jsx(s,{children:"In-app changelog dialog surfaces new features after each release"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Health Monitoring"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Security Dashboard:"})})," ",e.jsx(s,{children:"Real-time posture score tracking 8 security controls"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"AI Usage:"})})," ",e.jsx(s,{children:"Token consumption, latency, and error rate monitoring"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"API Health:"})})," ",e.jsx(s,{children:"Endpoint response times and error rates"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Audit Logs:"})})," ",e.jsx(s,{children:"Immutable log of all system and user actions"})]})]})]})]})},{id:"version-history",icon:e.jsx(C,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Version History"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"Major platform releases and architectural milestones."})}),e.jsx("div",{className:"space-y-3",children:[{version:"4.0",date:"Q1 2026",changes:["Platform Foundations guide","Wave-based Learning Hub","Progressive documentation model","QRG + User Guide + Manual taxonomy"]},{version:"3.5",date:"Q4 2025",changes:["WCAG 2.2 AA accessibility","RTL/Arabic support","Offline sync engine","Command palette (Cmd+K)"]},{version:"3.0",date:"Q3 2025",changes:["AI Copilot & Auto-Fill","Real-time collaboration","LUMUS text analytics","Daily AI briefings"]},{version:"2.5",date:"Q2 2025",changes:["SalesOS module","NorthStar OKRs","Employee Experience","Journey Orchestration Engine"]},{version:"2.0",date:"Q1 2025",changes:["CaseDesk ITSM","Mission Control PM","DMS document control","Multi-tenant isolation"]},{version:"1.0",date:"Q4 2024",changes:["CX Intelligence","Risk Management","Instruments & Surveys","Company Intelligence"]}].map(n=>e.jsxs("div",{className:"bg-muted/30 rounded-lg p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxs(I,{variant:"default",className:"text-xs",children:["v",n.version]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n.date})]}),e.jsx("ul",{className:"text-sm space-y-0.5",children:n.changes.map((t,r)=>e.jsxs("li",{children:["• ",e.jsx(s,{children:t})]},r))})]},n.version))})]})},{id:"i18n",icon:e.jsx(R,{className:"w-5 h-5"}),title:e.jsx(s,{children:"Internationalization"}),content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{children:e.jsx(s,{children:"The platform supports 4 languages with full RTL support and locale-aware formatting."})}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Supported Languages"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"English (en):"})})," ",e.jsx(s,{children:"Default language"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Spanish (es):"})})," ",e.jsx(s,{children:"Full translation coverage"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Portuguese (pt):"})})," ",e.jsx(s,{children:"Brazilian Portuguese variant"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Arabic (ar):"})})," ",e.jsx(s,{children:"Full RTL layout support"})]})]})]}),e.jsxs("div",{className:"bg-muted/50 p-4 rounded-lg",children:[e.jsx("h4",{className:"font-semibold mb-2",children:e.jsx(s,{children:"Locale Features"})}),e.jsxs("ul",{className:"space-y-1 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Date/Time:"})})," ",e.jsx(s,{children:"Locale-aware formatting with timezone support"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Numbers:"})})," ",e.jsx(s,{children:"Locale-specific decimal separators and grouping"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"Currency:"})}
1)," ",e.jsx(s,{children:"Multi-currency support across financial modules"})]}),e.jsxs("li",{children:[e.jsx("strong",{children:e.jsx(s,{children:"AI Content:"})})," ",e.jsx(s,{children:"AI-generated content respects the user's language preference"})]})]})]})]})}];function W(){const n=o(),{t}=P(),[r,d]=h.useState(l[0].id),c=l.find(i=>i.id===r)||l[0];return e.jsx(x,{children:e.jsxs("div",{className:"space-y-6",children:[e.jsx(k,{items:[{label:"Dashboard",href:"/"},{label:"Learning Hub",href:"/learning-hub"},{label:t("training.foundationsTitle","Platform Foundations")}]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(j,{variant:"ghost",size:"icon",onClick:()=>n("/learning-hub"),children:e.jsx(m,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(g,{className:"h-6 w-6 text-primary"}),e.jsx(s,{children:"Platform Foundations"})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-0.5",children:e.jsx(s,{children:"Cross-cutting topics: architecture, security, roles, data models, and governance"})})]})]}),e.jsxs("div",{className:"grid grid-cols-12 gap-4",children:[e.jsx("div",{className:"col-span-3",children:e.jsx(a,{className:"h-[calc(100vh-240px)]",children:e.jsx("div",{className:"space-y-1 pr-2",children:l.map(i=>e.jsx("button",{onClick:()=>d(i.id),className:`w-full text-left p-3 rounded-lg border transition-all
2                      ${r===i.id?"ring-2 ring-primary/30 border-primary/30 bg-primary/5":"border-border hover:border-primary/20 hover:bg-muted/50"}`,children:e.jsxs("div",{className:"flex items-center gap-2.5",children:[e.jsx("div",{className:`shrink-0 w-8 h-8 rounded-lg flex items-center justify-center
3                        ${r===i.id?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"}`,children:i.icon}),e.jsx("span",{className:"text-sm font-medium",children:i.title})]})},i.id))})})}),e.jsx("div",{className:"col-span-9",children:e.jsxs(u,{children:[e.jsx(p,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center text-primary",children:c.icon}),e.jsx(b,{className:"text-lg",children:c.title})]})}),e.jsx(f,{children:e.jsx(a,{className:"h-[calc(100vh-360px)]",children:e.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none pr-4",children:c.content})})})]})})]})]})})}export{W as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.