{"slug":"business/USER_FLOW_AND_VIEWS","title":"USER FLOW AND VIEW ARCHITECTURE","section":"business","sectionLabel":"Business","status":"unclassified","type":"document","path":"business/USER_FLOW_AND_VIEWS.mdx","bytes":27518,"description":null,"updated":null,"source":"integratewise/Integratewise-docs-wiki","content":"\n**IntegrateWise Complete User Journey**  \n_From Login → Workspace → Entity 360 → AI Actions_\n\n---\n\n## 🎯 COMPLETE USER JOURNEY\n\n```\n┌─────────────────────────────────────────────────────────────────────┐\n│ STAGE 0: AUTHENTICATION                                             │\n│ Entry: app.integratewise.ai                                         │\n└─────────────────────────────────────────────────────────────────────┘\n                              ↓\n┌─────────────────────────────────────────────────────────────────────┐\n│ LOGIN / SIGNUP                                                      │\n│ Location: /app (redirects to login if not authenticated)           │\n│                                                                     │\n│ Options:                                                            │\n│   • Email/Password                                                  │\n│   • Google SSO (OAuth)                                              │\n│   • GitHub SSO (OAuth)                                              │\n│                                                                     │\n│ Auth Provider: Spine DB PKCE                                        │\n│ Session: JWT stored in browser, refreshed automatically            │\n└─────────────────────────────────────────────────────────────────────┘\n                              ↓\n┌─────────────────────────────────────────────────────────────────────┐\n│ STAGE 1: ONBOARDING (New Users Only)                                │\n│ Component: OnboardingFlow.tsx                                       │\n│ 4 Steps → ~2 minutes                                                │\n└─────────────────────────────────────────────────────────────────────┘\n                              ↓\n        ┌─────────────────────┼─────────────────────┐\n        ↓                     ↓                     ↓\n┌───────────────┐   ┌──────────────────┐   ┌──────────────────┐\n│ STEP 1        │   │ STEP 2           │   │ STEP 3           │\n│ Welcome       │   │ Profile          │   │ Goals            │\n│ (~15s)        │   │ (~30s)           │   │ (~25s)           │\n│               │   │                  │   │                  │\n│ Choose:       │   │ Select:          │   │ Define:          │\n│ • Personal    │   │ • Industry       │   │ • Goal           │\n│ • Work        │   │ • Department     │   │ • Workspace Name │\n│ • Business    │   │ • Company Size   │   │ • Workspace Type │\n│               │   │                  │   │                  │\n│ → Determines  │   │ → Triggers       │   │ → Creates        │\n│   workspace   │   │   Spine schema   │   │   workspace      │\n│   type        │   │   initialization │   │   context        │\n└───────────────┘   └──────────────────┘   └──────────────────┘\n                              ↓\n┌─────────────────────────────────────────────────────────────────────┐\n│ STEP 4: CONNECTORS (~45s)                                           │\n│                                                                     │\n│ Connect Data Sources:                                               │\n│   • CRM (HubSpot, Salesforce)                                       │\n│   • Task Management (Asana, Jira)                                   │\n│   • Workspace (Slack, Teams)                                        │\n│   • Email (Gmail, Outlook)                                          │\n│   • Analytics (Google Analytics)                                    │\n│                                                                     │\n│ Flow Types:                                                         │\n│   Flow A: OAuth → Loader → Normalizer → Spine (structured data)    │\n│   Flow B: Upload → Knowledge → Embeddings (documents)               │\n│   Flow C: AI Chat → Triage Bot → Memory (conversations)            │\n│                                                                     │\n│ → Triggers:                                                         │\n│   1. OAuth authorization (redirect to provider)                     │\n│   2. Callback → Store encrypted tokens                              │\n│   3. Creamy Layer sync (100 records, schema-driven)                 │\n│   4. Background sync (full data, queued)                            │\n└─────────────────────────────────────────────────────────────────────┘\n                              ↓\n┌─────────────────────────────────────────────────────────────────────┐\n│ STAGE 2: WORKSPACE (Authenticated Users)                            │\n│ Component: WorkspaceShellNew.tsx                                    │\n│ Layout: Sidebar + Header + Content + L2 Drawer (hidden)            │\n└─────────────────────────────────────────────────────────────────────┘\n\n---\n\n## 🏗️ WORKSPACE ARCHITECTURE\n\n### **Layout Structure**\n\n```\n\n┌────────────────────────────────────────────────────────────────────┐\n│ HEADER (Fixed Top) │\n│ ┌──────────────┬─────────────────────────────────┬──────────────┐ │\n│ │ Logo │ Search (⌘K) │ Notifications│ │\n│ │ IntegrateWise│ │ User Menu │ │\n│ └──────────────┴─────────────────────────────────┴──────────────┘ │\n├────────────────────────────────────────────────────────────────────┤\n│ ┌──────────┬─────────────────────────────────────────────────────┐│\n│ │ │ CONTENT AREA (Dynamic) ││\n│ │ SIDEBAR │ ││\n│ │ (260px) │ Rendered by ContentRouter based on: ││\n│ │ │ • Active View (Personal / Work) ││\n│ │ ┌──────┐ │ • Active Domain (CS / Sales / RevOps / etc.) ││\n│ │ │Domain│ │ • Module ID (dashboard / accounts / tasks) ││\n│ │ │Select│ │ ││\n│ │ └──────┘ │ Lazy-loaded modules with: ││\n│ │ │ • Error boundaries ││\n│ │ Nav: │ • Loading skeletons ││\n│ │ • Home │ • Density gating (hide if no data) ││\n│ │ • Accts │ • Projection-based entitlement ││\n│ │ • Tasks │ ││\n│ │ • Docs │ ││\n│ │ • ... │ ││\n│ │ │ ││\n│ │ System: │ ││\n│ │ • Integr │ ││\n│ │ • AI │ ││\n│ │ • Settings ││\n│ └──────────┴─────────────────────────────────────────────────────┘│\n└────────────────────────────────────────────────────────────────────┘\n│ L2 COGNITIVE DRAWER (Hidden by default, opens on ⌘J or event) │\n│ ┌──────────────────────────────────────────────────────────────┐ │\n│ │ Think | Triage | Signals | Approvals | Twin | Policies │ │\n│ └──────────────────────────────────────────────────────────────┘ │\n└────────────────────────────────────────────────────────────────────┘\n\n```\n\n---\n\n## 📂 VIEW HIERARCHY\n\n### **Two Primary Views**\n\n```\n\nWORKSPACE\n├── PERSONAL VIEW (Same for everyone)\n│ ├── Dashboard (hub-home)\n│ ├── Today (hub-today)\n│ ├── Calendar\n│ ├── Tasks\n│ ├── Notes\n│ ├── Documents\n│ ├── Knowledge Hub\n│ └── Settings\n│\n└── WORK VIEW (Domain-specific)\n├── CUSTOMER SUCCESS (Account Success)\n│ ├── Dashboard\n│ ├── Accounts\n│ ├── Contacts\n│ ├── Health Scores\n│ ├── Meetings\n│ ├── Tasks\n│ ├── Touchpoints\n│ ├── Expansion\n│ ├── Renewals\n│ ├── Risks\n│ ├── At-Risk\n│ ├── Decision Log\n│ ├── Docs\n│ ├── Analytics\n│ ├── Workflows\n│ └── Integrations\n│\n├── SALES\n│ ├── Dashboard\n│ ├── Pipeline\n│ ├── Deals\n│ ├── Contacts\n│ ├── Activities\n│ ├── Forecasting\n│ ├── Quotes\n│ └── Analytics\n│\n├── MARKETING\n│ ├── Dashboard\n│ ├── Campaigns\n│ ├── Leads\n│ ├── Email Studio\n│ ├── Social\n│ ├── Attribution\n│ ├── Forms\n│ └── Analytics\n│\n├── REVOPS\n│ ├── Dashboard\n│ ├── Pipeline\n│ ├── Forecasting\n│ ├── Quotas\n│ ├── Analytics\n│ ├── Cohorts\n│ └── Team\n│\n├── PRODUCT_ENGINEERING\n│ ├── Dashboard\n│ ├── Roadmap\n│ ├── Features\n│ ├── Bugs\n│ ├── Sprints\n│ ├── Tasks\n│ └── Releases\n│\n├── FINANCE\n│ ├── Dashboard\n│ ├── Revenue\n│ ├── Expenses\n│ ├── Reports\n│ ├── Forecasting\n│ ├── Budget\n│ └── Invoice Approvals\n│\n├── SERVICE\n│ ├── Dashboard\n│ ├── SLA Dashboard\n│ ├── Tickets\n│ ├── Customers\n│ ├── Knowledge\n│ └── Analytics\n│\n├── PROCUREMENT\n│ ├── Dashboard\n│ ├── Renewals\n│ ├── Vendors\n│ ├── Orders\n│ ├── Contracts\n│ └── Spend\n│\n├── IT_ADMIN\n│ ├── Dashboard\n│ ├── Systems\n│ ├── Incidents\n│ ├── Vulnerabilities\n│ └── Licenses\n│\n└── BIZOPS (Super-domain with cross-department access)\n├── Dashboard\n├── Ops Command Center\n├── Strategic Hub\n├── Metrics\n├── CRM\n├── Sales Hub\n├── Clients\n├── Projects\n├── Workflows\n├── Analytics\n├── Accounts\n├── Tasks\n├── Docs\n├── Calendar\n├── Integrations\n├── Workflow Canvas\n├── CEO Dashboard\n├── COO Dashboard\n├── CIO/CTO Dashboard\n├── Strategy & Leadership\n├── Operations Center\n├── Human Resources\n├── Legal & Compliance\n├── Business Intelligence\n├── Partnerships\n├── Knowledge Management\n└── Cross-Department Views (sales--, cs--, marketing--, etc.)\n\n````\n\n---\n\n## 🎨 CONTENT ROUTING\n\n### **ContentRouter.tsx**\n\n**Purpose**: Lazy-load domain-specific modules based on active view + module ID\n\n**Flow**:\n```typescript\n1. User clicks \"Accounts\" in sidebar\n   ↓\n2. handleNavigate(\"/work/accounts\")\n   ↓\n3. setActivePath(\"/work/accounts\")\n   ↓\n4. Extract moduleId: \"accounts\"\n   ↓\n5. ContentRouter receives:\n   - domain: \"CUSTOMER_SUCCESS\"\n   - moduleId: \"accounts\"\n   ↓\n6. Lookup in DOMAIN_CONTENT_MAP:\n   CS_MAP[\"accounts\"] → () => import(\"...modules/accounts\")\n   ↓\n7. Lazy load component with:\n   - Error boundary (catches load failures)\n   - Suspense (shows loading skeleton)\n   - Density gating (hide if no data)\n   - Projection entitlement (hide if not allowed)\n   ↓\n8. Render <AccountsView />\n````\n\n**Module Registry** (from content-router.tsx):\n\n```typescript\nconst CS_MAP: Record<string, () => Promise<any>> = {\n  dashboard: csModules.dashboard,\n  accounts: csModules.accounts,\n  contacts: csModules.contacts,\n  \"health-scores\": csModules.healthScores,\n  meetings: csModules.meetings,\n  tasks: csModules.tasks,\n  // ... 40+ modules\n};\n\nconst DOMAIN_CONTENT_MAP: Record<Domain, Record<string, () => Promise<any>>> = {\n  CUSTOMER_SUCCESS: CS_MAP,\n  SALES: SALES_MAP,\n  MARKETING: MARKETING_MAP,\n  REVOPS: REVOPS_MAP,\n  PRODUCT_ENGINEERING: PE_MAP,\n  FINANCE: FINANCE_MAP,\n  SERVICE: SERVICE_MAP,\n  PROCUREMENT: PROCUREMENT_MAP,\n  IT_ADMIN: IT_ADMIN_MAP,\n  STUDENT_TEACHER: STUDENT_TEACHER_MAP,\n  BIZOPS: buildBizOpsMap(), // 100+ modules (own + cross-dept)\n  PERSONAL: PERSONAL_MAP,\n};\n```\n\n---\n\n## 🔍 COMMAND PALETTE (⌘K)\n\n**Component**: `CommandPalette.tsx`\n\n**Features**:\n\n- **Live Entity Search**: Type 3+ chars → searches Spine entities\n- **Quick Actions**: Create Account, Add Integration, Create Deal\n- **Deep Dives**: Jump to any domain workspace\n- **Module Navigation**: Jump to any view\n- **Recent Items**: Accounts, Contacts, Documents\n\n**Categories**:\n\n1. **Quick Actions** (Create, Add, Open)\n2. **Deep Dives** (RevOps, CS, Sales, Marketing, Product, BizOps, Finance, Personal)\n3. **Account Success** (Health, Team, Tasks)\n4. **Core Modules** (Home, Accounts, Contacts, Tasks, Calendar, Docs, Meetings, Projects, Team, Analytics, Workflows)\n5. **Sales** (Pipeline, Deals, Forecasting, Activities, Quotes)\n6. **Marketing** (Campaigns, Email Studio, Social, Attribution, Forms)\n7. **Website & CMS** (Website, Blog, SEO, Pages, Media, Theme)\n8. **Admin & Governance** (User Management, RBAC, Approvals)\n9. **System** (Integrations, AI Chat, Settings, Subscriptions, Profile)\n10. **Entities** (Live search results from Spine)\n11. **Accounts** (Quick access to recent accounts)\n12. **Contacts** (Quick access to recent contacts)\n13. **Documents** (Quick access to recent docs)\n\n**Keyboard Shortcuts**:\n\n- `⌘K` / `Ctrl+K`: Open palette\n- `↑↓`: Navigate\n- `Enter`: Select\n- `Esc`: Close\n\n---\n\n## 🧠 L2 COGNITIVE LAYER\n\n**Component**: `L2DrawerProvider` + Cognitive Panels\n\n**Trigger Events**:\n\n- `⌘J`: Open AI Chat\n- `iw:evidence:open`: Open evidence panel\n- `iw:cognitive:open`: Open specific cognitive surface\n- `open-cognitive-layer`: Generic open (defaults to signals)\n\n**Panels** (6 surfaces):\n\n### **1. Think Panel** (`think-panel.tsx`)\n\n**Purpose**: Reasoning surface that generates proposals\n\n**Features**:\n\n- **Think Types**: Summary, Plan, Strategy, Risk Analysis, Prediction\n- **Input**: Natural language prompt\n- **Output**: Proposal + Evidence + Confidence Score\n- **Actions**: Stage Action, View Evidence\n\n**Flow**:\n\n```\nUser: \"Summarize Q1 performance for Acme Corp\"\n  ↓\nPOST /api/v1/cognitive/think\n  {\n    type: \"summary\",\n    prompt: \"Summarize Q1 performance for Acme Corp\",\n    entityId: \"acc_123\",\n    entityType: \"account\"\n  }\n  ↓\nIntelligence Service:\n  1. Fetch entity from Spine\n  2. Fetch related signals\n  3. Call OpenRouter with context\n  4. Stream response chunks via SSE\n  5. Write session summary to memory\n  ↓\nFrontend: Display proposal with confidence + evidence count\n```\n\n### **2. Triage Inbox Panel** (`triage-inbox-panel.tsx`)\n\n**Purpose**: Flow C customer review surface\n\n**Features**:\n\n- **Pending Items**: AI-extracted knowledge from conversations\n- **Actions**: Approve (→ memory), Discard (→ gone), Defer (→ review later)\n- **Metadata**: Priority, Category, Confidence, Sentiment, Reasoning\n\n**Flow**:\n\n```\nExternal AI (ChatGPT/Claude) → Triage Bot API\n  ↓\nPOST /v1/triage/session\n  {\n    session_id, summary, memories: [...]\n  }\n  ↓\nTriage Bot:\n  1. Validate API key\n  2. Classify session (auto-approve / HITL / discard)\n  3. Write to conversational_memory (Spine DB)\n  4. If approved → promote to org_memory\n  5. Return: { approval_status, confidence }\n  ↓\nFrontend: Display in Triage Inbox\n  ↓\nUser: Approve / Discard / Defer\n  ↓\nPATCH /api/v1/knowledge/triage/:id\n  { action: \"approve\", reason: \"...\" }\n```\n\n### **3. Signals Panel**\n\n**Purpose**: Real-time alerts and insights\n\n**Features**:\n\n- **Signal Types**: Risk, Opportunity, Anomaly, Trend\n- **Severity**: High, Medium, Low\n- **Actions**: Investigate, Dismiss, Create Task\n\n### **4. Approvals Panel** (HITL)\n\n**Purpose**: Human-in-the-loop approval queue\n\n**Features**:\n\n- **Proposal Types**: Action, Decision, Change\n- **Actions**: Approve, Deny, Request Changes\n- **Metadata**: Confidence, Evidence, Reasoning\n\n### **5. Digital Twin Panel**\n\n**Purpose**: Proactive AI assistant\n\n**Features**:\n\n- **Proactive Suggestions**: Based on context\n- **Conversational Chat**: Entity 360 context\n- **Action Proposals**: Draft-only or execute\n\n### **6. Policies Panel**\n\n**Purpose**: Governance rules management\n\n**Features**:\n\n- **Policy Types**: Approval, Validation, Notification\n- **Actions**: Create, Edit, Delete, Enable/Disable\n\n---\n\n## 📊 DEPARTMENT WORKBENCH\n\n**Component**: `DepartmentWorkbench.tsx`\n\n**Purpose**: Generic configuration-driven workbench for all departments\n\n**Architecture**:\n\n```typescript\n<DepartmentWorkbench\n  department=\"CUSTOMER_SUCCESS\"\n  title=\"Account Success\"\n  entityTypes={[\"account\", \"contact\", \"success_plan\", \"risk\"]}\n  metrics={[\n    { id: \"arr\", label: \"ARR\", entityType: \"account\", field: \"arr\", type: \"currency\" },\n    { id: \"accounts\", label: \"Active Accounts\", entityType: \"account\", field: \"id\", type: \"number\" },\n    { id: \"at-risk\", label: \"At Risk\", entityType: \"risk\", field: \"id\", type: \"number\" },\n    { id: \"health\", label: \"Avg Health\", entityType: \"account\", field: \"health_score\", type: \"percentage\" },\n  ]}\n/>\n```\n\n**Three Tabs**:\n\n1. **My Department**: Department-specific entities + metrics\n2. **Organization**: Cross-department collaboration\n3. **Personal**: Individual tasks + calendar\n\n**Primitives** (Reusable UI components):\n\n- `MetricTile`: KPI display\n- `EntityCard`: Entity preview with actions\n- `InsightBlock`: AI-generated insight\n- `TimelineStream`: Activity feed\n- `GovernancePanel`: Approval queue\n- `OperationalCanvas`: Configurable dashboard\n- `HealthRing`: Health score visualization\n\n---\n\n## 🔄 DATA FLOW (User Action → Backend → UI Update)\n\n### **Example: User Views Account Health**\n\n```\n1. USER ACTION\n   User clicks \"Accounts\" in sidebar\n   ↓\n\n2. NAVIGATION\n   handleNavigate(\"/work/accounts\")\n   setActivePath(\"/work/accounts\")\n   navigate(\"/app/work/accounts\")\n   ↓\n\n3. CONTENT ROUTING\n   ContentRouter receives:\n     - domain: \"CUSTOMER_SUCCESS\"\n     - moduleId: \"accounts\"\n   ↓\n   Lazy load: csModules.accounts()\n   ↓\n\n4. COMPONENT MOUNT\n   <AccountsView /> mounts\n   ↓\n   useSpine DBEntities([\"account\"])\n   ↓\n\n5. API CALL\n   apiFetch(\"/api/v1/workspace/entities?type=account\")\n   Headers:\n     - Authorization: Bearer <jwt>\n     - x-tenant-id: <tenant-uuid>\n     - x-view-context: CTX_CS\n   ↓\n\n6. GATEWAY ROUTING\n   gateway.integratewise.ai receives request\n   ↓\n   Validates JWT → extracts tenant_id\n   ↓\n   Routes to BFF service binding\n   ↓\n\n7. BFF (NOT IMPLEMENTED YET)\n   Would aggregate:\n     - Spine entities (accounts)\n     - Signals (at-risk alerts)\n     - Knowledge (recent docs)\n     - Goals (account goals)\n   ↓\n   Falls through to Pipeline service\n   ↓\n\n8. PIPELINE SERVICE\n   GET /api/entities?type=account\n   ↓\n   Reads from Spine (Spine DB):\n     - account_success.accounts table\n     - Filters by tenant_id\n     - Returns canonical entities\n   ↓\n\n9. RESPONSE\n   {\n     entities: [\n       {\n         id: \"acc_123\",\n         name: \"Acme Corp\",\n         health_score: 85,\n         arr: 500000,\n         status: \"active\",\n         ...\n       },\n       ...\n     ],\n     total: 42\n   }\n   ↓\n\n10. UI UPDATE\n    React Query caches response\n    ↓\n    <AccountsView /> renders:\n      - Metric tiles (Total ARR, Active Accounts, At-Risk)\n      - Entity cards (Account list with health rings)\n      - Filters (Status, Health, ARR range)\n    ↓\n\n11. USER CLICKS ACCOUNT\n    onClick={() => navigate(`/work/entity-360?id=acc_123`)}\n    ↓\n\n12. ENTITY 360 VIEW\n    Fetches:\n      - Entity details (Spine)\n      - Related entities (Contacts, Opportunities)\n      - Signals (At-risk alerts)\n      - Evidence (Source data from HubSpot, Salesforce)\n      - Timeline (Activity history)\n      - AI Insights (Think panel suggestions)\n    ↓\n\n13. L2 COGNITIVE LAYER\n    User presses ⌘J\n    ↓\n    Opens Think Panel\n    ↓\n    User: \"What's the churn risk for Acme Corp?\"\n    ↓\n    POST /api/v1/cognitive/think\n    ↓\n    Intelligence Service:\n      - Fetches account + signals\n      - Calls OpenRouter\n      - Streams response\n    ↓\n    Displays: \"Churn risk: 35% (Medium). Evidence: 3 missed meetings, declining usage, contract expires in 60 days.\"\n```\n\n---\n\n## 🎯 KEY USER FLOWS\n\n### **Flow 1: New User Onboarding**\n\n```\n1. Visit app.integratewise.ai\n2. Click \"Sign Up\"\n3. Enter email/password OR Google/GitHub SSO\n4. Onboarding Step 1: Choose use case (Personal/Work/Business)\n5. Onboarding Step 2: Select industry + department + company size\n   → Triggers Spine schema initialization\n6. Onboarding Step 3: Define goal + workspace name\n7. Onboarding Step 4: Connect data sources (OAuth)\n   → Triggers Creamy Layer sync (100 records)\n8. AI Loader: Watch sync progress\n9. Workplace Loading: Finalize setup\n10. Land in Workspace: Dashboard view\n```\n\n### **Flow 2: Daily Workflow (CS Manager)**\n\n```\n1. Login → Land on Dashboard\n2. See metrics: Total ARR, Active Accounts, At-Risk, Avg Health\n3. Click \"At-Risk\" → Filter to at-risk accounts\n4. Click account \"Acme Corp\" → Entity 360 view\n5. See:\n   - Health score: 65 (declining)\n   - Signals: 3 missed meetings, declining usage\n   - Evidence: HubSpot activity log, Slack messages\n   - Timeline: Last 30 days of activity\n6. Press ⌘J → Open Think Panel\n7. Ask: \"What's the churn risk?\"\n8. AI responds: \"35% risk. Recommend: Schedule executive check-in, review contract terms.\"\n9. Click \"Stage Action\" → Creates proposal\n10. Proposal goes to Approvals Panel (HITL)\n11. Manager approves → Action executes (creates HubSpot task)\n12. Signal dismissed → Dashboard updates\n```\n\n### **Flow 3: Cross-Department Collaboration (BizOps)**\n\n```\n1. Login as BizOps user\n2. Dashboard shows: All departments + cross-dept metrics\n3. Click \"Sales Hub\" → See sales pipeline\n4. Click \"CS Hub\" → See account health\n5. Click \"Marketing Hub\" → See campaign performance\n6. Use Command Palette (⌘K) → Search \"Acme Corp\"\n7. Entity 360 shows:\n   - Sales: 3 open opportunities\n   - CS: Health score 65\n   - Marketing: 5 campaign touches\n   - Finance: $500K ARR, renewal in 60 days\n8. Press ⌘J → Ask: \"What's our strategy for Acme renewal?\"\n9. AI generates: \"Multi-touch strategy: Sales (upsell), CS (health recovery), Marketing (case study)\"\n10. Stage action → Creates tasks across all 3 departments\n11. Approvals → Each dept manager approves their task\n12. Execution → Tasks created in HubSpot, Asana, Slack\n```\n\n---\n\n## 🔐 SECURITY & ENTITLEMENT\n\n### **Authentication**\n\n- **Provider**: Spine DB PKCE\n- **Methods**: Email/Password, Google SSO, GitHub SSO\n- **Session**: JWT stored in browser, auto-refreshed\n- **Headers**: `Authorization: Bearer <token>`\n\n### **Tenant Isolation**\n\n- **Header**: `x-tenant-id` (extracted from JWT)\n- **Database**: Row-level security (RLS) on all Spine DB tables\n- **Spine**: All queries filtered by `tenant_id`\n\n### **Role-Based Access Control (RBAC)**\n\n- **Roles**: Owner, Admin, Manager, Member, Viewer\n- **Projection**: `useProjection()` hook determines:\n  - `canAct`: Can execute actions\n  - `canApprove`: Can approve proposals\n  - `canView`: Can view entities\n- **Entitlement**: Modules hidden if not in user's projection\n\n### **Data Gating**\n\n- **Density Gating**: Hide modules with no data\n- **Schema Gating**: Only show entity types in tenant schema\n- **Projection Gating**: Only show modules user is entitled to\n\n---\n\n## 📱 RESPONSIVE DESIGN\n\n- **Desktop**: Full sidebar + content + L2 drawer\n- **Tablet**: Collapsible sidebar + content\n- **Mobile**: Bottom nav + full-screen content\n\n---\n\n## ⚡ PERFORMANCE OPTIMIZATIONS\n\n1. **Lazy Loading**: All modules loaded on-demand\n2. **Code Splitting**: Separate bundles per domain\n3. **React Query**: Automatic caching + background refetch\n4. **Suspense**: Loading skeletons during fetch\n5. **Error Boundaries**: Graceful failure handling\n6. **Density Gating**: Skip rendering empty modules\n7. **Projection Caching**: Cache entitlement checks\n\n---\n\n## 🎨 DESIGN SYSTEM\n\n**Colors**:\n\n- Background: `#F5F6FA`\n- Card: `#FFFFFF`\n- Border: `#E8ECF2`\n- Text Primary: `#1B2544`\n- Text Secondary: `#7B8AAD`\n- Accent: Domain-specific (CS: `#4154A3`, Sales: `#10B981`, etc.)\n\n**Typography**:\n\n- Font: `system-ui, sans-serif`\n- Sizes: 10px (labels), 12px (body), 14px (headings), 16px (titles)\n\n**Spacing**:\n\n- Base unit: 4px\n- Common: 8px, 12px, 16px, 24px, 32px\n\n**Shadows**:\n\n- Card: `0 1px 3px rgba(0,0,0,0.1)`\n- Elevated: `0 4px 12px rgba(0,0,0,0.15)`\n\n---\n\n## 🚀 DEPLOYMENT\n\n**Frontend**:\n\n- **Platform**: Cloudflare Pages\n- **Preview**: `https://fa598630.integratewise.pages.dev`\n- **Production**: `app.integratewise.ai` (manual promotion)\n- **Build**: Vite + React + TypeScript\n- **Deploy**: GitHub Actions → Cloudflare Pages\n\n**Backend**:\n\n- **Platform**: Cloudflare Workers (22 services)\n- **Gateway**: `gateway.integratewise.ai`\n- **Services**: Connector, Pipeline, Intelligence, Knowledge, BFF, L2\n- **Database**: Spine DB (Neon Postgres)\n- **Cache**: Cloudflare KV + D1\n\n---\n\n**END OF USER FLOW AND VIEW ARCHITECTURE**\n"}