{"slug":"strategy/business-strategy/GTM_SIMPLE","title":"GTM Motion: Simple Implementation","section":"strategy","sectionLabel":"Strategy","status":"unclassified","type":"document","path":"strategy/business-strategy/GTM_SIMPLE.mdx","bytes":4679,"description":null,"updated":null,"source":"integratewise/Integratewise-docs-wiki","content":"\n\n> **Tier C — Historical.** This document is a point-in-time snapshot preserved for reference. For current architecture, see [CANONICAL_PLATFORM_ARCHITECTURE.md](../architecture/CANONICAL_PLATFORM_ARCHITECTURE.md).\n\n## The Motion\n\n**Marketplace App + One OAuth Redirect = Connected**\n\nUser clicks IntegrateWise in marketplace → Redirects to IntegrateWise OAuth → Authorized → Features available.\n\nThat's it. No steps. No complexity.\n\n\n## Flow Diagram\n\n```\nMarketplace App (Claude/ChatGPT/Perplexity)\n    ↓\nUser clicks \"Connect IntegrateWise\"\n    ↓\nRedirect to: https://integratewise.com/auth?app=claude&redirect_uri=...\n    ↓\nIntegrateWise OAuth (tenant creation + user auth)\n    ↓\nRedirect back to: https://claude.extension/connected?token=JWT\n    ↓\nFeature surface fully available\n```\n\n\n## Implementation (Simple)\n\n### 1. OAuth Endpoint\n\n**Location:** `services/continuity-bridge/src/routes/oauth.ts`\n\n```typescript\n// GET /oauth\nexport async function handleOAuth(request: Request) {\n  const url = new URL(request.url);\n  const app = url.searchParams.get('app'); // 'claude', 'chatgpt', 'perplexity'\n  const redirectUri = url.searchParams.get('redirect_uri');\n  \n  // Store state\n  const state = crypto.randomUUID();\n  await KV.put(`oauth:${state}`, JSON.stringify({\n    app,\n    redirectUri,\n    createdAt: Date.now()\n  }), { expirationTtl: 600 }); // 10 min expiry\n  \n  // Show OAuth form (email + org)\n  return showOAuthForm(state, app);\n}\n\n// POST /oauth/authorize\nexport async function handleAuthorize(request: Request) {\n  const { state, email, orgName } = await request.json();\n  \n  // Get stored state\n  const stateData = await KV.get(`oauth:${state}`);\n  if (!stateData) throw new Error('Invalid state');\n  \n  const { app, redirectUri } = JSON.parse(stateData);\n  \n  // Create tenant + user + JWT\n  const tenant = await createTenant(orgName);\n  const user = await createUser(email, tenant.id);\n  const token = createJWT({ userId: user.id, tenantId: tenant.id });\n  \n  // Redirect back to app with token\n  return redirect(`${redirectUri}?token=${token}&app=${app}`);\n}\n```\n\n### 2. Feature Gate\n\n**Location:** `services/frontend/src/hooks/useIntegrateWise.ts`\n\n```typescript\n  const token = getTokenFromURL();\n  \n  if (!token) {\n    return {\n      connected: false,\n      features: []\n    };\n  }\n  \n  // Token present = everything available\n  return {\n    connected: true,\n    features: [\n      'read_spine',\n      'write_decision',\n      'query_memory',\n      'invoke_agent_lee',\n      'create_task'\n    ]\n  };\n}\n```\n\n### 3. Feature Surface\n\n**Location:** `services/frontend/src/components/IntegrateWisePanel.tsx`\n\n```typescript\n  const { connected, features } = useIntegrateWise();\n  \n  if (!connected) {\n    return (\n      <div>\n        <button onClick={() => startOAuth()}>\n          Connect IntegrateWise\n        </button>\n      </div>\n    );\n  }\n  \n  // Connected = show everything\n  return (\n    <div>\n      <SpineQueryBuilder />\n      <AgentLeeRecommendations />\n      <MemorySearch />\n      <DecisionLog />\n      <TaskSync />\n    </div>\n  );\n}\n```\n\n### 4. Multi-Frontend Support\n\n**Each marketplace app points to same OAuth endpoint:**\n\n```\nClaude Desktop:\n  URL: https://integratewise.com/auth?app=claude&redirect_uri=claude-extension://callback\n\nChatGPT Action:\n  URL: https://integratewise.com/auth?app=chatgpt&redirect_uri=https://chatgpt.com/integratewise/callback\n\nPerplexity:\n  URL: https://integratewise.com/auth?app=perplexity&redirect_uri=https://perplexity.com/integratewise/callback\n\nReplit:\n  URL: https://integratewise.com/auth?app=replit&redirect_uri=https://replit.com/integratewise/callback\n\nLovable:\n  URL: https://integratewise.com/auth?app=lovable&redirect_uri=https://lovable.dev/integratewise/callback\n```\n\nAll redirect back with JWT. All show full feature surface.\n\n\n## Key Points\n\n1. **One OAuth endpoint** - All apps use same endpoint\n2. **Simple state machine** - Not connected → Connected (binary)\n3. **Full features on connection** - No progressive activation\n4. **Multiple frontends** - Same logic, different redirect URIs\n5. **JWT token** - Tenant + user scoped\n\n## Deployment Checklist\n\n- [ ] OAuth endpoint deployed\n- [ ] State management (KV) working\n- [ ] JWT generation verified\n- [ ] All 5 marketplace apps redirect configured\n- [ ] Feature gate logic verified\n- [ ] First test: manual OAuth flow\n- [ ] Second test: verify all marketplace apps redirect correctly\n\n\n## Success = Click → OAuth → Features\n\nThat's the entire motion. Simple. Repeatable. Scales to infinite marketplace apps.\n\n"}