@sonordev/site-kit 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/analytics/index.js +6 -6
- package/dist/analytics/index.mjs +2 -2
- package/dist/{api-CWtoFJCO.d.mts → api-DTKSHh_w.d.mts} +1 -1
- package/dist/{api-CWtoFJCO.d.ts → api-DTKSHh_w.d.ts} +1 -1
- package/dist/blog/index.js +10 -10
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +10 -10
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/server.js +2 -2
- package/dist/blog/server.js.map +1 -1
- package/dist/blog/server.mjs +2 -2
- package/dist/blog/server.mjs.map +1 -1
- package/dist/{chunk-7RYCHO6D.mjs → chunk-2RHO4KSK.mjs} +9 -9
- package/dist/{chunk-7RYCHO6D.mjs.map → chunk-2RHO4KSK.mjs.map} +1 -1
- package/dist/{chunk-EEZCR6E6.js → chunk-2XOW276O.js} +5 -5
- package/dist/{chunk-EEZCR6E6.js.map → chunk-2XOW276O.js.map} +1 -1
- package/dist/{chunk-JTLOJLWQ.mjs → chunk-36Y7OWES.mjs} +4 -4
- package/dist/chunk-36Y7OWES.mjs.map +1 -0
- package/dist/{chunk-DQYMKR27.mjs → chunk-47Y3YSES.mjs} +10 -10
- package/dist/chunk-47Y3YSES.mjs.map +1 -0
- package/dist/{chunk-MV3QN7PW.mjs → chunk-5F7FFUPJ.mjs} +3 -3
- package/dist/{chunk-MV3QN7PW.mjs.map → chunk-5F7FFUPJ.mjs.map} +1 -1
- package/dist/{chunk-AFAO3TGS.mjs → chunk-5YDPPOUU.mjs} +10 -10
- package/dist/chunk-5YDPPOUU.mjs.map +1 -0
- package/dist/{chunk-D63MUKZ6.mjs → chunk-6YXRLC6W.mjs} +5 -5
- package/dist/chunk-6YXRLC6W.mjs.map +1 -0
- package/dist/{chunk-7RF6PVHA.mjs → chunk-7FKPJQVS.mjs} +33 -68
- package/dist/chunk-7FKPJQVS.mjs.map +1 -0
- package/dist/{chunk-BYLIU6XG.js → chunk-7ROZJDXE.js} +10 -10
- package/dist/chunk-7ROZJDXE.js.map +1 -0
- package/dist/{chunk-UWE5PCYJ.mjs → chunk-APZMXRI3.mjs} +3 -3
- package/dist/chunk-APZMXRI3.mjs.map +1 -0
- package/dist/{chunk-622GAQP5.js → chunk-BBITDUZQ.js} +6 -6
- package/dist/chunk-BBITDUZQ.js.map +1 -0
- package/dist/{chunk-DDKW2FNA.js → chunk-BFJDUTXK.js} +8 -8
- package/dist/chunk-BFJDUTXK.js.map +1 -0
- package/dist/chunk-C3A5HXHX.mjs +78 -0
- package/dist/chunk-C3A5HXHX.mjs.map +1 -0
- package/dist/{chunk-XZJOZJB6.js → chunk-CFEOOJUT.js} +12 -12
- package/dist/{chunk-XZJOZJB6.js.map → chunk-CFEOOJUT.js.map} +1 -1
- package/dist/{chunk-M2T6R7BA.mjs → chunk-DOSSLBNW.mjs} +4 -4
- package/dist/chunk-DOSSLBNW.mjs.map +1 -0
- package/dist/{chunk-OB7E654K.js → chunk-DY4K6X3A.js} +6 -6
- package/dist/chunk-DY4K6X3A.js.map +1 -0
- package/dist/{chunk-7UKPRW25.mjs → chunk-EISQ7LJG.mjs} +6 -6
- package/dist/chunk-EISQ7LJG.mjs.map +1 -0
- package/dist/{chunk-7557OTHW.js → chunk-EUNL6GAL.js} +5 -5
- package/dist/chunk-EUNL6GAL.js.map +1 -0
- package/dist/{chunk-KUGMH4ZF.js → chunk-G6VGUAK2.js} +4 -4
- package/dist/chunk-G6VGUAK2.js.map +1 -0
- package/dist/{chunk-XQQWI6WB.js → chunk-GVXZWXQ7.js} +10 -10
- package/dist/chunk-GVXZWXQ7.js.map +1 -0
- package/dist/{chunk-24277A3Q.mjs → chunk-HF2FWDBJ.mjs} +9 -9
- package/dist/chunk-HF2FWDBJ.mjs.map +1 -0
- package/dist/{chunk-72MQFHYJ.js → chunk-IFAW7JFO.js} +16 -16
- package/dist/chunk-IFAW7JFO.js.map +1 -0
- package/dist/{chunk-P3UWIUJS.mjs → chunk-IKIJEKU3.mjs} +16 -16
- package/dist/chunk-IKIJEKU3.mjs.map +1 -0
- package/dist/{chunk-PKN27UMH.mjs → chunk-JIDOXTX2.mjs} +3 -3
- package/dist/{chunk-PKN27UMH.mjs.map → chunk-JIDOXTX2.mjs.map} +1 -1
- package/dist/{chunk-7FUV73JZ.js → chunk-JM3ZR6LB.js} +9 -9
- package/dist/chunk-JM3ZR6LB.js.map +1 -0
- package/dist/{chunk-OIIKTGRL.mjs → chunk-JMNSED4O.mjs} +8 -8
- package/dist/chunk-JMNSED4O.mjs.map +1 -0
- package/dist/chunk-MG23BS36.js +82 -0
- package/dist/chunk-MG23BS36.js.map +1 -0
- package/dist/{chunk-TFLQX7K7.mjs → chunk-N24BPFF6.mjs} +6 -6
- package/dist/chunk-N24BPFF6.mjs.map +1 -0
- package/dist/{chunk-LIVWLY2P.js → chunk-PPRAW576.js} +3 -3
- package/dist/{chunk-LIVWLY2P.js.map → chunk-PPRAW576.js.map} +1 -1
- package/dist/chunk-QETK4P5G.mjs +142 -0
- package/dist/chunk-QETK4P5G.mjs.map +1 -0
- package/dist/{chunk-W4PALSGM.js → chunk-REMHGWXT.js} +3 -3
- package/dist/chunk-REMHGWXT.js.map +1 -0
- package/dist/{chunk-DW5UJKHH.js → chunk-RMOL4TZ6.js} +8 -8
- package/dist/chunk-RMOL4TZ6.js.map +1 -0
- package/dist/{chunk-KKU3K7RG.js → chunk-SLB5V4RT.js} +33 -67
- package/dist/chunk-SLB5V4RT.js.map +1 -0
- package/dist/{chunk-K23A4G76.mjs → chunk-SQSBAPWA.mjs} +8 -8
- package/dist/chunk-SQSBAPWA.mjs.map +1 -0
- package/dist/{chunk-WECQ6KOB.js → chunk-TG46LJFB.js} +4 -4
- package/dist/chunk-TG46LJFB.js.map +1 -0
- package/dist/{chunk-43GBM4SX.js → chunk-TKQLH33E.js} +3 -3
- package/dist/chunk-TKQLH33E.js.map +1 -0
- package/dist/{chunk-UYFDNX2F.js → chunk-TLHRV3LZ.js} +5 -5
- package/dist/chunk-TLHRV3LZ.js.map +1 -0
- package/dist/{chunk-6ZCISNAB.mjs → chunk-UPR5FEIO.mjs} +3 -3
- package/dist/chunk-UPR5FEIO.mjs.map +1 -0
- package/dist/chunk-VTECURKB.js +144 -0
- package/dist/chunk-VTECURKB.js.map +1 -0
- package/dist/{chunk-GCJXQ4AG.mjs → chunk-VZMDH3R4.mjs} +5 -5
- package/dist/chunk-VZMDH3R4.mjs.map +1 -0
- package/dist/{chunk-LBVWVP72.js → chunk-X4J33XQD.js} +7 -7
- package/dist/chunk-X4J33XQD.js.map +1 -0
- package/dist/{chunk-QXV4667R.mjs → chunk-XFOL6JDF.mjs} +5 -5
- package/dist/chunk-XFOL6JDF.mjs.map +1 -0
- package/dist/cli/index.js +80 -91
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +76 -87
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cms/index.d.mts +139 -0
- package/dist/cms/index.d.ts +139 -0
- package/dist/cms/index.js +409 -0
- package/dist/cms/index.js.map +1 -0
- package/dist/cms/index.mjs +388 -0
- package/dist/cms/index.mjs.map +1 -0
- package/dist/cms/server.d.mts +47 -0
- package/dist/cms/server.d.ts +47 -0
- package/dist/cms/server.js +21 -0
- package/dist/{server-api-GJPNRYUP.js.map → cms/server.js.map} +1 -1
- package/dist/cms/server.mjs +4 -0
- package/dist/{server-api-EWXKOQZA.mjs.map → cms/server.mjs.map} +1 -1
- package/dist/commerce/index.js +42 -42
- package/dist/commerce/index.mjs +1 -1
- package/dist/commerce/server.d.mts +1 -1
- package/dist/commerce/server.d.ts +1 -1
- package/dist/commerce/server.js.map +1 -1
- package/dist/commerce/server.mjs.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +1 -1
- package/dist/config/index.mjs.map +1 -1
- package/dist/engage/index.js +4 -4
- package/dist/engage/index.mjs +1 -1
- package/dist/forms/index.js +5 -5
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +5 -5
- package/dist/forms/index.mjs.map +1 -1
- package/dist/generators-DOFWGRXS.js +37 -0
- package/dist/{generators-DTMO36DV.js.map → generators-DOFWGRXS.js.map} +1 -1
- package/dist/generators-R62APO62.mjs +4 -0
- package/dist/{generators-2XKQMPKH.mjs.map → generators-R62APO62.mjs.map} +1 -1
- package/dist/images/index.d.mts +1 -1
- package/dist/images/index.d.ts +1 -1
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +2 -2
- package/dist/images/server.d.mts +3 -3
- package/dist/images/server.d.ts +3 -3
- package/dist/images/server.js +4 -4
- package/dist/images/server.mjs +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +81 -81
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -28
- package/dist/index.mjs.map +1 -1
- package/dist/layout/client.d.mts +18 -0
- package/dist/layout/client.d.ts +18 -0
- package/dist/layout/client.js +18 -0
- package/dist/layout/client.js.map +1 -0
- package/dist/layout/client.mjs +9 -0
- package/dist/layout/client.mjs.map +1 -0
- package/dist/layout/index.d.mts +4 -27
- package/dist/layout/index.d.ts +4 -27
- package/dist/layout/index.js +15 -145
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/index.mjs +11 -141
- package/dist/layout/index.mjs.map +1 -1
- package/dist/llms/index.js +12 -12
- package/dist/llms/index.mjs +2 -2
- package/dist/manifest/index.js +4 -4
- package/dist/manifest/index.js.map +1 -1
- package/dist/manifest/index.mjs +3 -3
- package/dist/manifest/index.mjs.map +1 -1
- package/dist/middleware/index.js +3 -3
- package/dist/middleware/index.mjs +2 -2
- package/dist/{migrator-2MQHOFDQ.mjs → migrator-3WQB3KQ2.mjs} +3 -3
- package/dist/{migrator-2MQHOFDQ.mjs.map → migrator-3WQB3KQ2.mjs.map} +1 -1
- package/dist/migrator-HFVQYK5R.js +37 -0
- package/dist/{migrator-THJCF6MZ.js.map → migrator-HFVQYK5R.js.map} +1 -1
- package/dist/redirects/index.d.mts +2 -2
- package/dist/redirects/index.d.ts +2 -2
- package/dist/redirects/index.js +6 -6
- package/dist/redirects/index.mjs +2 -2
- package/dist/reputation/index.js +4 -4
- package/dist/reputation/index.mjs +1 -1
- package/dist/robots/index.d.mts +1 -1
- package/dist/robots/index.d.ts +1 -1
- package/dist/robots/index.js +3 -3
- package/dist/robots/index.js.map +1 -1
- package/dist/robots/index.mjs +2 -2
- package/dist/robots/index.mjs.map +1 -1
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.d.ts +1 -1
- package/dist/seo/index.js +43 -43
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +6 -6
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/register-sitemap-cli.js +18 -18
- package/dist/seo/register-sitemap-cli.js.map +1 -1
- package/dist/seo/register-sitemap-cli.mjs +18 -18
- package/dist/seo/register-sitemap-cli.mjs.map +1 -1
- package/dist/seo/server.d.mts +1 -1
- package/dist/seo/server.d.ts +1 -1
- package/dist/seo/server.js +10 -10
- package/dist/seo/server.js.map +1 -1
- package/dist/seo/server.mjs +8 -8
- package/dist/seo/server.mjs.map +1 -1
- package/dist/{server-api-GJPNRYUP.js → server-api-C5JXIROA.js} +21 -21
- package/dist/server-api-C5JXIROA.js.map +1 -0
- package/dist/{server-api-EWXKOQZA.mjs → server-api-HTSLBT6F.mjs} +3 -3
- package/dist/server-api-HTSLBT6F.mjs.map +1 -0
- package/dist/setup/client.js +7 -7
- package/dist/setup/client.mjs +2 -2
- package/dist/setup/index.js +9 -9
- package/dist/setup/index.mjs +3 -3
- package/dist/setup/server.js +2 -2
- package/dist/setup/server.mjs +1 -1
- package/dist/site-config/index.d.mts +1 -1
- package/dist/site-config/index.d.ts +1 -1
- package/dist/site-config/index.js +3 -3
- package/dist/site-config/index.mjs +1 -1
- package/dist/sitemap/index.d.mts +2 -2
- package/dist/sitemap/index.d.ts +2 -2
- package/dist/sitemap/index.js +10 -10
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +8 -8
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/types-5RCOK10v.d.mts +25 -0
- package/dist/types-5RCOK10v.d.ts +25 -0
- package/dist/types-BG-x8yhh.d.mts +106 -0
- package/dist/types-BG-x8yhh.d.ts +106 -0
- package/package.json +13 -1
- package/dist/chunk-24277A3Q.mjs.map +0 -1
- package/dist/chunk-43GBM4SX.js.map +0 -1
- package/dist/chunk-622GAQP5.js.map +0 -1
- package/dist/chunk-6ZCISNAB.mjs.map +0 -1
- package/dist/chunk-72MQFHYJ.js.map +0 -1
- package/dist/chunk-7557OTHW.js.map +0 -1
- package/dist/chunk-7FUV73JZ.js.map +0 -1
- package/dist/chunk-7RF6PVHA.mjs.map +0 -1
- package/dist/chunk-7UKPRW25.mjs.map +0 -1
- package/dist/chunk-AFAO3TGS.mjs.map +0 -1
- package/dist/chunk-BYLIU6XG.js.map +0 -1
- package/dist/chunk-D63MUKZ6.mjs.map +0 -1
- package/dist/chunk-DDKW2FNA.js.map +0 -1
- package/dist/chunk-DQYMKR27.mjs.map +0 -1
- package/dist/chunk-DW5UJKHH.js.map +0 -1
- package/dist/chunk-GCJXQ4AG.mjs.map +0 -1
- package/dist/chunk-JTLOJLWQ.mjs.map +0 -1
- package/dist/chunk-K23A4G76.mjs.map +0 -1
- package/dist/chunk-KKU3K7RG.js.map +0 -1
- package/dist/chunk-KUGMH4ZF.js.map +0 -1
- package/dist/chunk-LBVWVP72.js.map +0 -1
- package/dist/chunk-M2T6R7BA.mjs.map +0 -1
- package/dist/chunk-OB7E654K.js.map +0 -1
- package/dist/chunk-OIIKTGRL.mjs.map +0 -1
- package/dist/chunk-P3UWIUJS.mjs.map +0 -1
- package/dist/chunk-QXV4667R.mjs.map +0 -1
- package/dist/chunk-TFLQX7K7.mjs.map +0 -1
- package/dist/chunk-UWE5PCYJ.mjs.map +0 -1
- package/dist/chunk-UYFDNX2F.js.map +0 -1
- package/dist/chunk-W4PALSGM.js.map +0 -1
- package/dist/chunk-WECQ6KOB.js.map +0 -1
- package/dist/chunk-XQQWI6WB.js.map +0 -1
- package/dist/generators-2XKQMPKH.mjs +0 -4
- package/dist/generators-DTMO36DV.js +0 -33
- package/dist/migrator-THJCF6MZ.js +0 -37
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/setup/SetupWizard.tsx"],"names":["userEmail","step"],"mappings":"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","file":"chunk-IKIJEKU3.mjs","sourcesContent":["'use client'\n\n/**\n * Sonor Setup Wizard\n * \n * Visual setup wizard that runs at /_uptrade/setup during development.\n * Supports THREE flows:\n * \n * 🆕 NEW SITE:\n * Brand new site, nothing exists yet.\n * Define brand manually → Choose modules → Scaffold → Integration → Copilot → Complete\n * \n * 🔧 EXISTING PROJECT:\n * NextJS project already built by us. Adding Portal integration.\n * Scan codebase → Migrate forms/widgets → Integration → Copilot → Complete\n * \n * 🔄 REBUILD:\n * Company has a live site, we're recreating it in NextJS.\n * Enter domain → Scrape live site → Review extracted data → Track redirects → Integration → Copilot → Complete\n */\n\nimport React, { useState, useEffect, useCallback } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\ntype SetupType = 'new' | 'existing' | 'rebuild' | null\n\ntype Step = \n | 'welcome' \n | 'auth' \n | 'project' \n | 'setup-type'\n // NEW flow\n | 'brand'\n | 'modules'\n | 'scaffold'\n // EXISTING flow\n | 'scan'\n | 'migrate'\n // REBUILD flow\n | 'domain'\n | 'scrape'\n | 'review'\n | 'redirects'\n // Common finish\n | 'integration'\n | 'copilot'\n | 'complete'\n\ninterface ScanResults {\n forms: DetectedItem[]\n widgets: DetectedItem[]\n metadata: DetectedItem[]\n analytics: DetectedItem[]\n}\n\ninterface DetectedItem {\n type: string\n file: string\n line: number\n details: Record<string, unknown>\n selected: boolean\n}\n\ninterface Project {\n id: string\n name: string\n domain: string\n}\n\ninterface Organization {\n id: string\n name: string\n projects: Project[]\n}\n\ninterface ScrapeStatus {\n id: string\n status: 'pending' | 'running' | 'completed' | 'failed'\n progress: number\n current_step: string\n pages_found: number\n routes_planned: number\n faqs_imported: number\n brand?: {\n business_name?: string\n primary_colors?: { hex: string }[]\n secondary_colors?: { hex: string }[]\n logo_url?: string\n tagline?: string\n }\n routes?: Array<{ path: string; title: string; type: string }>\n error?: string\n}\n\ninterface BrandConfig {\n businessName: string\n tagline: string\n primaryColor: string\n secondaryColor?: string\n logoUrl: string\n}\n\n// Available Sonor modules\nconst AVAILABLE_MODULES = [\n { id: 'analytics', name: 'Analytics', description: 'Page views, events, sessions, web vitals', icon: '📊', recommended: true },\n { id: 'seo', name: 'SEO', description: 'Managed FAQs, meta tags, schema markup', icon: '🔍', recommended: true },\n { id: 'forms', name: 'Forms', description: 'Managed forms with Portal submissions', icon: '📝', recommended: true },\n { id: 'engage', name: 'Engage', description: 'Live chat, popups, nudges, banners', icon: '💬', recommended: false },\n { id: 'commerce', name: 'Commerce', description: 'Products, services, checkout', icon: '🛒', recommended: false },\n]\n\ninterface SetupWizardProps {\n config?: {\n url?: string\n anonKey?: string\n portalApiUrl?: string\n }\n}\n\n// ============================================\n// Setup Wizard Component\n// ============================================\n\nexport function SetupWizard({ config }: SetupWizardProps = {}) {\n const [step, setStep] = useState<Step>('welcome')\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n \n // Auth state\n const [isAuthenticated, setIsAuthenticated] = useState(false)\n const [userEmail, setUserEmail] = useState<string | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n \n // Organization & Project state\n const [organizations, setOrganizations] = useState<Organization[]>([])\n const [selectedOrg, setSelectedOrg] = useState<Organization | null>(null)\n const [selectedProject, setSelectedProject] = useState<Project | null>(null)\n const [newProjectName, setNewProjectName] = useState('')\n const [newProjectDomain, setNewProjectDomain] = useState('')\n \n // ProjectStep local state (hoisted to avoid re-render issues)\n const [createNewProject, setCreateNewProject] = useState(false)\n const [creatingProject, setCreatingProject] = useState(false)\n const [creatingOrg, setCreatingOrg] = useState(false)\n const [newOrgName, setNewOrgName] = useState('')\n const [showNewOrg, setShowNewOrg] = useState(false)\n \n // Setup type\n const [setupType, setSetupType] = useState<SetupType>(null)\n \n // NEW flow: Brand configuration\n const [brandConfig, setBrandConfig] = useState<BrandConfig>({\n businessName: '',\n tagline: '',\n primaryColor: '#3B82F6',\n secondaryColor: undefined,\n logoUrl: '',\n })\n \n // NEW/EXISTING flow: Module selection\n const [selectedModules, setSelectedModules] = useState<string[]>(['analytics', 'seo', 'forms'])\n \n // EXISTING flow: Scan results\n const [scanResults, setScanResults] = useState<ScanResults | null>(null)\n const [migrationProgress, setMigrationProgress] = useState(0)\n const [migrationLog, setMigrationLog] = useState<string[]>([])\n \n // REBUILD flow: Scrape state\n const [scrapeDomain, setScrapeDomain] = useState('')\n const [scrapeStatus, setScrapeStatus] = useState<ScrapeStatus | null>(null)\n const [redirectMappings, setRedirectMappings] = useState<Array<{ from: string; to: string; enabled: boolean }>>([])\n \n // Copilot instructions\n const [copilotInstructions, setCopilotInstructions] = useState<string>('')\n const [generatingCopilot, setGeneratingCopilot] = useState(false)\n\n // API URL helpers\n const portalApiUrl = config?.portalApiUrl || 'http://localhost:3002'\n \n // Project step handlers (hoisted to prevent re-creation)\n const handleCreateOrg = useCallback(async () => {\n if (!newOrgName.trim()) return\n setCreatingOrg(true)\n try {\n const res = await fetch(`${portalApiUrl}/setup/organizations`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(accessToken ? { 'Authorization': `Bearer ${accessToken}` } : {}) },\n body: JSON.stringify({ name: newOrgName })\n })\n if (!res.ok) throw new Error('Failed to create organization')\n const org = await res.json()\n setOrganizations(prev => [...prev, org])\n setSelectedOrg(org)\n setNewOrgName('')\n setShowNewOrg(false)\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setCreatingOrg(false)\n }\n }, [portalApiUrl, accessToken, newOrgName])\n\n const handleCreateProject = useCallback(async () => {\n if (!selectedOrg || !newProjectName.trim()) return\n setCreatingProject(true)\n try {\n const res = await fetch(`${portalApiUrl}/setup/projects`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(accessToken ? { 'Authorization': `Bearer ${accessToken}` } : {}) },\n body: JSON.stringify({ orgId: selectedOrg.id, name: newProjectName, domain: newProjectDomain || (typeof window !== 'undefined' ? window.location.hostname : 'localhost') })\n })\n if (!res.ok) throw new Error('Failed to create project')\n const project = await res.json()\n setSelectedProject(project)\n setStep('setup-type')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setCreatingProject(false)\n }\n }, [portalApiUrl, accessToken, selectedOrg, newProjectName, newProjectDomain])\n\n const handleSelectProject = useCallback((project: Project) => {\n setSelectedProject(project)\n setStep('setup-type')\n }, [])\n \n // Helper to make Portal API calls\n const callPortalApi = useCallback(async (path: string, options: RequestInit = {}) => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string> || {}),\n }\n if (accessToken) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n return fetch(`${portalApiUrl}${path}`, {\n ...options,\n headers,\n })\n }, [portalApiUrl, accessToken])\n\n // Check if already configured\n useEffect(() => {\n checkExistingConfig()\n }, [])\n\n async function checkExistingConfig() {\n try {\n const localRes = await fetch('/_uptrade/api/status')\n const localData = await localRes.json()\n if (localData.configured) {\n setStep('complete')\n return\n }\n \n const storedToken = localStorage.getItem('uptrade_access_token')\n if (storedToken) {\n setAccessToken(storedToken)\n const res = await fetch(`${portalApiUrl}/setup/session`, {\n headers: { 'Authorization': `Bearer ${storedToken}` }\n })\n const data = await res.json()\n if (data.authenticated) {\n setIsAuthenticated(true)\n setUserEmail(data.email)\n setStep('project')\n }\n }\n } catch {\n // Not configured yet\n }\n }\n\n // ============================================\n // Step: Welcome\n // ============================================\n\n function WelcomeStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-6xl mb-4\">🚀</div>\n <h1 className=\"text-3xl font-bold mb-2\">Welcome to Sonor Site-Kit</h1>\n <p className=\"text-gray-400 text-lg\">\n Let's set up your project in just a few steps\n </p>\n </div>\n\n <div className=\"grid grid-cols-3 gap-4 my-8\">\n <FeatureCard icon=\"📊\" title=\"Analytics\" description=\"Track page views, events, and user sessions\" />\n <FeatureCard icon=\"📝\" title=\"Forms\" description=\"Managed forms with validation and submissions\" />\n <FeatureCard icon=\"💬\" title=\"Engage\" description=\"Popups, nudges, and live chat widgets\" />\n </div>\n\n <div className=\"flex justify-center\">\n <Button onClick={() => setStep('auth')}>Get Started →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Authentication\n // ============================================\n\n function AuthStep() {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [authMode, setAuthMode] = useState<'portal' | 'login' | 'magic'>('portal')\n const [waitingForPopup, setWaitingForPopup] = useState(false)\n\n // Listen for messages from Portal popup\n useEffect(() => {\n function handleMessage(event: MessageEvent) {\n // Only accept messages from Portal\n const portalOrigins = ['https://app.sonor.io', 'http://localhost:5173', 'http://localhost:8888']\n if (!portalOrigins.includes(event.origin)) return\n \n if (event.data?.type === 'uptrade-auth-success') {\n const { accessToken: token, email: userEmail } = event.data\n if (token) {\n localStorage.setItem('uptrade_access_token', token)\n setAccessToken(token)\n setIsAuthenticated(true)\n setUserEmail(userEmail)\n setWaitingForPopup(false)\n loadOrganizations(token).then(() => setStep('project'))\n }\n } else if (event.data?.type === 'uptrade-auth-error') {\n setError(event.data.message || 'Authentication failed')\n setWaitingForPopup(false)\n }\n }\n \n window.addEventListener('message', handleMessage)\n return () => window.removeEventListener('message', handleMessage)\n }, [])\n\n async function handlePortalAuth() {\n setWaitingForPopup(true)\n setError(null)\n \n // Open Portal auth page in popup - use localhost:5173 for dev\n const portalUrl = portalApiUrl.includes('localhost') ? 'http://localhost:5173' : 'https://app.sonor.io'\n const callbackUrl = encodeURIComponent(window.location.origin)\n const popup = window.open(\n `${portalUrl}/auth/site-kit?callback=${callbackUrl}`,\n 'uptrade-auth',\n 'width=500,height=700,left=100,top=100'\n )\n \n // Check if popup was blocked\n if (!popup) {\n setError('Popup was blocked. Please allow popups and try again.')\n setWaitingForPopup(false)\n return\n }\n \n // Poll for popup close (in case user closes without completing)\n const pollInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(pollInterval)\n setWaitingForPopup(false)\n }\n }, 1000)\n }\n\n async function handleLogin() {\n if (!email.trim() || !password.trim()) return\n setIsLoading(true)\n setError(null)\n try {\n const supabaseUrl = config?.url || 'https://mwcjtnoqxolplwpkxnfe.supabase.co'\n const supabaseKey = config?.anonKey || ''\n \n const authRes = await fetch(`${supabaseUrl}/auth/v1/token?grant_type=password`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'apikey': supabaseKey },\n body: JSON.stringify({ email, password })\n })\n \n if (!authRes.ok) {\n const errData = await authRes.json()\n throw new Error(errData.error_description || errData.msg || 'Login failed')\n }\n \n const authData = await authRes.json()\n const token = authData.access_token\n \n localStorage.setItem('uptrade_access_token', token)\n setAccessToken(token)\n \n const sessionRes = await fetch(`${portalApiUrl}/setup/session`, {\n headers: { 'Authorization': `Bearer ${token}` }\n })\n const session = await sessionRes.json()\n \n if (session.authenticated) {\n setIsAuthenticated(true)\n setUserEmail(session.email)\n await loadOrganizations(token)\n setStep('project')\n } else {\n throw new Error('Authentication failed - user not found in Portal')\n }\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }\n\n async function handleMagicLink() {\n if (!email.trim()) return\n setIsLoading(true)\n setError(null)\n try {\n const supabaseUrl = config?.url || 'https://mwcjtnoqxolplwpkxnfe.supabase.co'\n const supabaseKey = config?.anonKey || ''\n \n const res = await fetch(`${supabaseUrl}/auth/v1/magiclink`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'apikey': supabaseKey },\n body: JSON.stringify({ email, options: { redirectTo: window.location.href } })\n })\n \n if (!res.ok) throw new Error('Failed to send magic link')\n alert('Check your email for a login link!')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Connect to Sonor</h2>\n <p className=\"text-gray-400\">Sign in with your Sonor account</p>\n </div>\n\n {/* Primary: Sign in with Portal (uses existing session) */}\n <div className=\"max-w-md mx-auto\">\n <Button onClick={handlePortalAuth} loading={waitingForPopup} disabled={waitingForPopup}>\n {waitingForPopup ? 'Waiting for Sonor...' : '🚀 Sign in with Sonor'}\n </Button>\n <p className=\"text-gray-500 text-xs text-center mt-2\">\n Uses your existing Portal session (Google, email, etc.)\n </p>\n </div>\n\n <div className=\"flex items-center gap-4 max-w-md mx-auto\">\n <div className=\"flex-1 border-t border-gray-700\" />\n <span className=\"text-gray-500 text-sm\">or sign in directly</span>\n <div className=\"flex-1 border-t border-gray-700\" />\n </div>\n\n <div className=\"flex gap-4 justify-center mb-6\">\n <button className={`px-4 py-2 rounded-lg ${authMode === 'login' ? 'bg-blue-600' : 'bg-gray-700'}`} onClick={() => setAuthMode('login')}>\n Email & Password\n </button>\n <button className={`px-4 py-2 rounded-lg ${authMode === 'magic' ? 'bg-blue-600' : 'bg-gray-700'}`} onClick={() => setAuthMode('magic')}>\n Magic Link\n </button>\n </div>\n\n <div className=\"max-w-md mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Email</label>\n <input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} placeholder=\"you@example.com\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\" />\n </div>\n\n {authMode === 'login' && (\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Password</label>\n <input type=\"password\" value={password} onChange={(e) => setPassword(e.target.value)} placeholder=\"••••••••\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\" />\n </div>\n )}\n\n <Button onClick={authMode === 'login' ? handleLogin : handleMagicLink} loading={isLoading} variant=\"secondary\"\n disabled={!email.trim() || (authMode === 'login' && !password.trim())}>\n {authMode === 'login' ? 'Sign In →' : 'Send Magic Link →'}\n </Button>\n\n <p className=\"text-gray-500 text-sm text-center\">\n Don't have an account?{' '}\n <a href=\"https://app.sonor.io/signup\" target=\"_blank\" className=\"text-blue-400 hover:underline\">\n Sign up at Portal\n </a>\n </p>\n </div>\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg text-center\">{error}</div>\n )}\n </div>\n )\n }\n\n // ============================================\n // Step: Project Selection\n // ============================================\n\n async function loadOrganizations(token?: string) {\n try {\n const authToken = token || accessToken\n const res = await fetch(`${portalApiUrl}/setup/organizations`, {\n headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {}\n })\n const data = await res.json()\n setOrganizations(Array.isArray(data) ? data : [])\n } catch {\n setError('Failed to load organizations')\n }\n }\n\n // ============================================\n // Step: Setup Type Selection\n // ============================================\n\n function SetupTypeStep() {\n function handleSelectType(type: SetupType) {\n setSetupType(type)\n if (type === 'new') {\n setBrandConfig(prev => ({ ...prev, businessName: selectedProject?.name || '' }))\n setStep('brand')\n } else if (type === 'existing') {\n // Go to modules first, then scan\n setStep('modules')\n } else {\n setScrapeDomain(selectedProject?.domain || '')\n setStep('domain')\n }\n }\n\n return (\n <div className=\"space-y-8\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">What are we setting up?</h2>\n <p className=\"text-gray-400\">Choose the flow that matches your project</p>\n </div>\n\n <div className=\"grid grid-cols-3 gap-4 max-w-4xl mx-auto\">\n {/* NEW Site */}\n <button onClick={() => handleSelectType('new')}\n className=\"p-6 bg-gray-800/50 rounded-xl border-2 border-gray-700 hover:border-blue-500 transition-all text-left group\">\n <div className=\"text-4xl mb-3\">🆕</div>\n <h3 className=\"text-lg font-bold mb-2 group-hover:text-blue-400 transition-colors\">New Site</h3>\n <p className=\"text-gray-400 text-sm mb-3\">\n Brand new project. Nothing exists yet - we'll define everything from scratch.\n </p>\n <ul className=\"text-xs text-gray-500 space-y-1\">\n <li>✓ Define brand & colors</li>\n <li>✓ Choose modules</li>\n <li>✓ Generate scaffolding</li>\n </ul>\n </button>\n\n {/* EXISTING Project */}\n <button onClick={() => handleSelectType('existing')}\n className=\"p-6 bg-gray-800/50 rounded-xl border-2 border-gray-700 hover:border-green-500 transition-all text-left group\">\n <div className=\"text-4xl mb-3\">🔧</div>\n <h3 className=\"text-lg font-bold mb-2 group-hover:text-green-400 transition-colors\">Existing Project</h3>\n <p className=\"text-gray-400 text-sm mb-3\">\n NextJS project already built. Adding Portal integration to manage content.\n </p>\n <ul className=\"text-xs text-gray-500 space-y-1\">\n <li>✓ Scan for forms & widgets</li>\n <li>✓ Migrate to managed versions</li>\n <li>✓ Keep existing structure</li>\n </ul>\n </button>\n\n {/* REBUILD */}\n <button onClick={() => handleSelectType('rebuild')}\n className=\"p-6 bg-gray-800/50 rounded-xl border-2 border-gray-700 hover:border-purple-500 transition-all text-left group\">\n <div className=\"text-4xl mb-3\">🔄</div>\n <h3 className=\"text-lg font-bold mb-2 group-hover:text-purple-400 transition-colors\">Rebuild</h3>\n <p className=\"text-gray-400 text-sm mb-3\">\n Client has a live site we didn't build. Recreating it in NextJS with Portal.\n </p>\n <ul className=\"text-xs text-gray-500 space-y-1\">\n <li>✓ Scrape existing site</li>\n <li>✓ Extract brand & content</li>\n <li>✓ Track redirects for SEO</li>\n </ul>\n </button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // NEW FLOW: Brand Configuration\n // ============================================\n\n function BrandStep() {\n const [isExtracting, setIsExtracting] = useState(false)\n const [extractUrl, setExtractUrl] = useState('')\n const [showExtract, setShowExtract] = useState(false)\n \n async function handleExtractBrand() {\n if (!extractUrl.trim()) return\n \n setIsExtracting(true)\n setError(null)\n \n try {\n const response = await callPortalApi('/site-scrape/brand-only', {\n method: 'POST',\n body: JSON.stringify({ domain: extractUrl.replace(/^https?:\\/\\//, '').split('/')[0] }),\n }) as { business_name?: string; tagline?: string; primary_color?: string; secondary_color?: string; logo_url?: string }\n \n // Update brand config with extracted values\n setBrandConfig(prev => ({\n ...prev,\n businessName: response.business_name || prev.businessName,\n tagline: response.tagline || prev.tagline,\n primaryColor: response.primary_color || prev.primaryColor,\n logoUrl: response.logo_url || prev.logoUrl,\n }))\n \n setShowExtract(false)\n setExtractUrl('')\n } catch (err) {\n setError(`Failed to extract brand: ${(err as Error).message}`)\n } finally {\n setIsExtracting(false)\n }\n }\n\n function handleContinue() {\n if (!brandConfig.businessName.trim()) return\n setStep('modules')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Define Your Brand</h2>\n <p className=\"text-gray-400\">Set up the basic brand identity for this project</p>\n </div>\n\n {/* Brand Extraction Option */}\n {!showExtract ? (\n <div className=\"max-w-lg mx-auto\">\n <button\n onClick={() => setShowExtract(true)}\n className=\"w-full flex items-center justify-center gap-3 p-4 bg-gradient-to-r from-purple-500/10 to-blue-500/10 border border-purple-500/30 rounded-lg hover:border-purple-500/50 transition-all\"\n >\n <span className=\"text-2xl\">🔍</span>\n <div className=\"text-left\">\n <div className=\"font-medium\">Extract from existing website</div>\n <div className=\"text-sm text-gray-400\">Auto-detect colors, name, and logo from a live site</div>\n </div>\n </button>\n </div>\n ) : (\n <div className=\"max-w-lg mx-auto bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <span className=\"text-xl\">🔍</span>\n <span className=\"font-medium\">Extract Brand from Website</span>\n </div>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={extractUrl}\n onChange={(e) => setExtractUrl(e.target.value)}\n placeholder=\"example.com\"\n className=\"flex-1 px-4 py-2 bg-gray-900 border border-gray-700 rounded-lg\"\n onKeyDown={(e) => e.key === 'Enter' && handleExtractBrand()}\n />\n <Button onClick={handleExtractBrand} disabled={isExtracting || !extractUrl.trim()}>\n {isExtracting ? 'Extracting...' : 'Extract'}\n </Button>\n </div>\n <button\n onClick={() => setShowExtract(false)}\n className=\"text-sm text-gray-500 hover:text-gray-400 mt-2\"\n >\n Cancel\n </button>\n </div>\n )}\n\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Business Name *</label>\n <input type=\"text\" value={brandConfig.businessName} onChange={(e) => setBrandConfig(prev => ({ ...prev, businessName: e.target.value }))}\n placeholder=\"Acme Inc\" className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" />\n </div>\n\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Tagline</label>\n <input type=\"text\" value={brandConfig.tagline} onChange={(e) => setBrandConfig(prev => ({ ...prev, tagline: e.target.value }))}\n placeholder=\"Making the world better\" className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Primary Color</label>\n <div className=\"flex gap-2\">\n <input type=\"color\" value={brandConfig.primaryColor} onChange={(e) => setBrandConfig(prev => ({ ...prev, primaryColor: e.target.value }))}\n className=\"w-12 h-12 rounded border border-gray-700 cursor-pointer\" />\n <input type=\"text\" value={brandConfig.primaryColor} onChange={(e) => setBrandConfig(prev => ({ ...prev, primaryColor: e.target.value }))}\n className=\"flex-1 px-3 py-2 bg-gray-800 border border-gray-700 rounded-lg font-mono text-sm\" />\n </div>\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Logo URL (optional)</label>\n <input type=\"text\" value={brandConfig.logoUrl} onChange={(e) => setBrandConfig(prev => ({ ...prev, logoUrl: e.target.value }))}\n placeholder=\"https://example.com/logo.svg\" className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" />\n <p className=\"text-xs text-gray-500 mt-1\">You can add this later via Portal</p>\n </div>\n\n {/* Preview */}\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <h4 className=\"text-sm text-gray-400 mb-3\">Preview</h4>\n <div className=\"flex items-center gap-4\">\n <div className=\"w-12 h-12 rounded-lg flex items-center justify-center text-white font-bold text-xl\"\n style={{ backgroundColor: brandConfig.primaryColor }}>\n {brandConfig.businessName.charAt(0) || '?'}\n </div>\n <div>\n <div className=\"font-semibold\">{brandConfig.businessName || 'Your Business'}</div>\n <div className=\"text-sm text-gray-400\">{brandConfig.tagline || 'Your tagline here'}</div>\n </div>\n </div>\n <div className=\"flex gap-2 mt-3\">\n <div className=\"w-8 h-8 rounded\" style={{ backgroundColor: brandConfig.primaryColor }} title=\"Primary\" />\n <div className=\"w-8 h-8 rounded\" style={{ backgroundColor: brandConfig.secondaryColor ?? '#6B7280' }} title=\"Secondary\" />\n </div>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('setup-type')}>← Back</Button>\n <Button onClick={handleContinue} disabled={!brandConfig.businessName.trim()}>Continue →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // NEW/EXISTING FLOW: Module Selection\n // ============================================\n\n function ModulesStep() {\n function toggleModule(moduleId: string) {\n setSelectedModules(prev => prev.includes(moduleId) ? prev.filter(m => m !== moduleId) : [...prev, moduleId])\n }\n\n async function handleContinue() {\n try {\n // Save brand config and modules to project\n await callPortalApi(`/setup/projects/${selectedProject?.id}`, {\n method: 'PATCH',\n body: JSON.stringify({\n brand_primary: brandConfig.primaryColor,\n settings: { brand: brandConfig },\n modules_enabled: selectedModules,\n })\n })\n // For existing projects, go to scan; for new projects, go to scaffold\n if (setupType === 'existing') {\n setStep('scan')\n } else {\n setStep('scaffold')\n }\n } catch (err) {\n setError((err as Error).message)\n }\n }\n\n // Back button goes to different places based on setup type\n function handleBack() {\n if (setupType === 'existing') {\n setStep('setup-type')\n } else {\n setStep('brand')\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Select Modules</h2>\n <p className=\"text-gray-400\">Choose which Sonor modules to enable</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto space-y-3\">\n {AVAILABLE_MODULES.map(mod => (\n <button key={mod.id} onClick={() => toggleModule(mod.id)}\n className={`w-full flex items-center gap-4 p-4 rounded-lg border-2 transition-all text-left ${\n selectedModules.includes(mod.id) ? 'bg-blue-500/10 border-blue-500' : 'bg-gray-800/50 border-gray-700 hover:border-gray-600'\n }`}>\n <div className=\"text-3xl\">{mod.icon}</div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold\">{mod.name}</span>\n {mod.recommended && <span className=\"text-xs bg-green-500/20 text-green-400 px-2 py-0.5 rounded\">Recommended</span>}\n </div>\n <p className=\"text-sm text-gray-400\">{mod.description}</p>\n </div>\n <div className={`w-6 h-6 rounded-full border-2 flex items-center justify-center ${\n selectedModules.includes(mod.id) ? 'bg-blue-500 border-blue-500' : 'border-gray-600'\n }`}>\n {selectedModules.includes(mod.id) && <span className=\"text-white text-sm\">✓</span>}\n </div>\n </button>\n ))}\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={handleBack}>← Back</Button>\n <Button onClick={handleContinue} disabled={selectedModules.length === 0}>Continue →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // NEW FLOW: Scaffolding\n // ============================================\n\n function ScaffoldStep() {\n const [scaffolding, setScaffolding] = useState(false)\n const [scaffoldLog, setScaffoldLog] = useState<string[]>([])\n\n async function handleScaffold() {\n setScaffolding(true)\n setScaffoldLog(['Starting scaffolding...'])\n\n const steps = []\n if (selectedModules.includes('analytics')) steps.push('✓ Analytics provider configured')\n if (selectedModules.includes('seo')) {\n steps.push('✓ SEO utilities ready')\n steps.push('✓ ManagedFAQ component available')\n }\n if (selectedModules.includes('forms')) steps.push('✓ Forms integration configured')\n if (selectedModules.includes('engage')) steps.push('✓ Engage widgets ready')\n if (selectedModules.includes('commerce')) steps.push('✓ Commerce hooks available')\n\n for (const step of steps) {\n await new Promise(r => setTimeout(r, 400))\n setScaffoldLog(prev => [...prev, step])\n }\n\n setScaffoldLog(prev => [...prev, '', '🎉 Scaffolding complete!'])\n setScaffolding(false)\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Project Scaffolding</h2>\n <p className=\"text-gray-400\">Setting up your selected modules</p>\n </div>\n\n <div className=\"max-w-lg mx-auto\">\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <h3 className=\"font-semibold mb-2\">Configuration</h3>\n <div className=\"text-sm text-gray-400 space-y-1\">\n <p><strong>Brand:</strong> {brandConfig.businessName}</p>\n <p><strong>Modules:</strong> {selectedModules.join(', ')}</p>\n </div>\n </div>\n\n {scaffoldLog.length > 0 && (\n <div className=\"mt-4 bg-gray-900 rounded-lg p-4 font-mono text-sm max-h-48 overflow-y-auto\">\n {scaffoldLog.map((log, i) => (\n <div key={i} className={log.startsWith('✓') ? 'text-green-400' : log.startsWith('🎉') ? 'text-yellow-400' : 'text-gray-400'}>{log}</div>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"flex justify-center gap-4\">\n {scaffoldLog.length === 0 ? (\n <>\n <Button variant=\"secondary\" onClick={() => setStep('modules')}>← Back</Button>\n <Button onClick={handleScaffold} loading={scaffolding}>Generate Scaffolding →</Button>\n </>\n ) : !scaffolding && (\n <Button onClick={() => setStep('integration')}>Continue to Integration →</Button>\n )}\n </div>\n </div>\n )\n }\n\n // ============================================\n // EXISTING FLOW: Scan Codebase\n // ============================================\n\n const handleScan = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const res = await fetch('/_uptrade/api/scan', { method: 'POST' })\n const data = await res.json()\n setScanResults({\n forms: (data.forms || []).map((f: DetectedItem) => ({ ...f, selected: true })),\n widgets: (data.widgets || []).map((w: DetectedItem) => ({ ...w, selected: true })),\n metadata: (data.metadata || []).map((m: DetectedItem) => ({ ...m, selected: true })),\n analytics: (data.analytics || []).map((a: DetectedItem) => ({ ...a, selected: false })),\n })\n setStep('migrate')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }, [])\n\n function ScanStep() {\n useEffect(() => { handleScan() }, [])\n\n return (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-6xl animate-pulse\">🔍</div>\n <h2 className=\"text-2xl font-bold\">Scanning Your Codebase</h2>\n <p className=\"text-gray-400\">Looking for forms, widgets, and metadata to migrate...</p>\n <div className=\"flex justify-center\">\n <div className=\"w-8 h-8 border-2 border-green-500 border-t-transparent rounded-full animate-spin\" />\n </div>\n </div>\n )\n }\n\n // ============================================\n // EXISTING FLOW: Migration\n // ============================================\n\n function MigrateStep() {\n if (!scanResults) return null\n\n const allItems = [...scanResults.forms, ...scanResults.widgets, ...scanResults.metadata]\n const selectedItems = allItems.filter(i => i.selected)\n\n function toggleItem(type: keyof ScanResults, index: number) {\n setScanResults(prev => {\n if (!prev) return prev\n const updated = { ...prev }\n updated[type] = [...prev[type]]\n updated[type][index] = { ...updated[type][index], selected: !updated[type][index].selected }\n return updated\n })\n }\n\n async function handleMigrate() {\n setIsLoading(true)\n setMigrationLog([])\n setMigrationProgress(0)\n\n for (let i = 0; i < selectedItems.length; i++) {\n const item = selectedItems[i]\n setMigrationLog(prev => [...prev, `Migrating ${item.type} in ${item.file}...`])\n try {\n await fetch('/_uptrade/api/migrate', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ item, projectId: selectedProject?.id })\n })\n setMigrationLog(prev => [...prev, `✓ Migrated ${item.type}`])\n } catch {\n setMigrationLog(prev => [...prev, `✗ Failed to migrate ${item.type}`])\n }\n setMigrationProgress(Math.round(((i + 1) / selectedItems.length) * 100))\n }\n\n setIsLoading(false)\n setStep('integration')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Review & Migrate</h2>\n <p className=\"text-gray-400\">Select items to migrate to managed versions</p>\n </div>\n\n {scanResults.forms.length > 0 && (\n <Section title=\"📝 Forms\" count={scanResults.forms.filter(f => f.selected).length}>\n {scanResults.forms.map((form, i) => <ItemRow key={i} item={form} onToggle={() => toggleItem('forms', i)} />)}\n </Section>\n )}\n\n {scanResults.widgets.length > 0 && (\n <Section title=\"💬 Widgets\" count={scanResults.widgets.filter(w => w.selected).length}>\n {scanResults.widgets.map((widget, i) => <ItemRow key={i} item={widget} onToggle={() => toggleItem('widgets', i)} />)}\n </Section>\n )}\n\n {scanResults.metadata.length > 0 && (\n <Section title=\"🏷️ Metadata/Schema\" count={scanResults.metadata.filter(m => m.selected).length}>\n {scanResults.metadata.map((meta, i) => <ItemRow key={i} item={meta} onToggle={() => toggleItem('metadata', i)} />)}\n </Section>\n )}\n\n {allItems.length === 0 && (\n <div className=\"text-center py-8 text-gray-400\">\n <div className=\"text-4xl mb-4\">✨</div>\n <p>No existing forms or widgets detected.</p>\n <p className=\"text-sm\">You're starting fresh!</p>\n </div>\n )}\n\n {migrationLog.length > 0 && (\n <div className=\"bg-gray-900 rounded-lg p-4 font-mono text-sm max-h-48 overflow-y-auto\">\n {migrationLog.map((log, i) => (\n <div key={i} className={log.startsWith('✗') ? 'text-red-400' : log.startsWith('✓') ? 'text-green-400' : 'text-gray-400'}>{log}</div>\n ))}\n </div>\n )}\n\n {isLoading && (\n <div className=\"h-2 bg-gray-700 rounded-full overflow-hidden\">\n <div className=\"h-full bg-green-500 transition-all duration-300\" style={{ width: `${migrationProgress}%` }} />\n </div>\n )}\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('integration')}>Skip Migration</Button>\n <Button onClick={handleMigrate} loading={isLoading}>Migrate {selectedItems.length} Items →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Domain Input\n // ============================================\n\n function DomainStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Enter Existing Site Domain</h2>\n <p className=\"text-gray-400\">We'll scrape it to extract brand, routes, FAQs, and content</p>\n </div>\n\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Website Domain</label>\n <input type=\"text\" value={scrapeDomain} onChange={(e) => setScrapeDomain(e.target.value)} placeholder=\"example.com\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-purple-500\" />\n <p className=\"text-sm text-gray-500 mt-2\">Enter without https://</p>\n </div>\n\n <div className=\"bg-purple-500/10 border border-purple-500/30 rounded-lg p-4\">\n <h4 className=\"font-semibold text-purple-400 mb-2\">What we'll extract:</h4>\n <ul className=\"text-sm text-gray-400 space-y-1\">\n <li>🎨 Brand colors, logos, and fonts</li>\n <li>🗺️ Sitemap and all routes</li>\n <li>❓ FAQ sections → Managed FAQs</li>\n <li>📧 Contact info and social profiles</li>\n <li>🔀 Route mappings for redirects</li>\n </ul>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('setup-type')}>← Back</Button>\n <Button onClick={() => setStep('scrape')} disabled={!scrapeDomain.trim()}>Start Scrape →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Scraping\n // ============================================\n\n function ScrapeStep() {\n const [pollInterval, setPollInterval] = useState<NodeJS.Timeout | null>(null)\n\n useEffect(() => {\n startScrape()\n return () => { if (pollInterval) clearInterval(pollInterval) }\n }, [])\n\n async function startScrape() {\n try {\n const res = await callPortalApi('/site-scrape', {\n method: 'POST',\n body: JSON.stringify({ project_id: selectedProject?.id, domain: scrapeDomain.replace(/^https?:\\/\\//, '') })\n })\n if (!res.ok) throw new Error('Failed to start scrape')\n const data = await res.json()\n setScrapeStatus(data)\n\n const interval = setInterval(async () => {\n try {\n const statusRes = await callPortalApi(`/site-scrape/${data.id}/status`)\n const status = await statusRes.json()\n setScrapeStatus(status)\n\n if (status.status === 'completed') {\n clearInterval(interval)\n setPollInterval(null)\n // Initialize redirect mappings from scraped routes\n if (status.routes) {\n setRedirectMappings(status.routes.map((r: any) => ({ from: r.path, to: r.path, enabled: true })))\n }\n setTimeout(() => setStep('review'), 1000)\n } else if (status.status === 'failed') {\n clearInterval(interval)\n setPollInterval(null)\n setError(status.error || 'Scrape failed')\n }\n } catch (err) { console.error('Poll error:', err) }\n }, 2000)\n setPollInterval(interval)\n } catch (err) {\n setError((err as Error).message)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-6xl animate-pulse mb-4\">🔍</div>\n <h2 className=\"text-2xl font-bold mb-2\">Scraping {scrapeDomain}</h2>\n <p className=\"text-gray-400\">{scrapeStatus?.current_step || 'Starting...'}</p>\n </div>\n\n <div className=\"max-w-lg mx-auto\">\n <div className=\"h-2 bg-gray-700 rounded-full overflow-hidden\">\n <div className=\"h-full bg-gradient-to-r from-purple-500 to-pink-500 transition-all duration-500\" style={{ width: `${scrapeStatus?.progress || 0}%` }} />\n </div>\n <div className=\"flex justify-between text-sm text-gray-500 mt-2\">\n <span>{scrapeStatus?.progress || 0}%</span>\n <span>{scrapeStatus?.pages_found || 0} pages</span>\n </div>\n </div>\n\n {scrapeStatus && (\n <div className=\"grid grid-cols-3 gap-4 max-w-lg mx-auto\">\n <StatCard value={scrapeStatus.pages_found || 0} label=\"Pages\" color=\"purple\" />\n <StatCard value={scrapeStatus.routes_planned || 0} label=\"Routes\" color=\"pink\" />\n <StatCard value={scrapeStatus.faqs_imported || 0} label=\"FAQs\" color=\"blue\" />\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg text-center max-w-lg mx-auto\">\n {error}\n <button onClick={() => { setError(null); startScrape() }} className=\"block mx-auto mt-2 text-sm underline\">Try again</button>\n </div>\n )}\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Review Results\n // ============================================\n\n function ReviewStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-5xl mb-4\">✅</div>\n <h2 className=\"text-2xl font-bold mb-2\">Scrape Complete!</h2>\n <p className=\"text-gray-400\">Here's what we found on {scrapeDomain}</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto space-y-4\">\n {scrapeStatus?.brand && (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <h3 className=\"font-semibold mb-3\">🎨 Brand</h3>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <div className=\"text-sm text-gray-400 mb-1\">Business Name</div>\n <div className=\"font-medium\">{scrapeStatus.brand.business_name || 'Not found'}</div>\n </div>\n <div>\n <div className=\"text-sm text-gray-400 mb-1\">Colors</div>\n <div className=\"flex gap-2\">\n {scrapeStatus.brand.primary_colors?.slice(0, 4).map((c, i) => (\n <div key={i} className=\"w-8 h-8 rounded border border-gray-600\" style={{ backgroundColor: c.hex }} title={c.hex} />\n )) || <span className=\"text-gray-500\">None</span>}\n </div>\n </div>\n </div>\n </div>\n )}\n\n <div className=\"grid grid-cols-3 gap-4\">\n <StatCard value={scrapeStatus?.pages_found || 0} label=\"Pages Crawled\" color=\"purple\" large />\n <StatCard value={scrapeStatus?.routes_planned || 0} label=\"Routes Mapped\" color=\"pink\" large />\n <StatCard value={scrapeStatus?.faqs_imported || 0} label=\"FAQs Imported\" color=\"blue\" large />\n </div>\n\n <div className=\"bg-blue-500/10 border border-blue-500/30 rounded-lg p-4\">\n <p className=\"text-sm text-blue-400\">\n 💡 All data saved to your project. FAQs are ready in Portal. Next: set up redirects for SEO.\n </p>\n </div>\n </div>\n\n <div className=\"flex justify-center\">\n <Button onClick={() => setStep('redirects')}>Configure Redirects →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Redirect Mappings\n // ============================================\n\n function RedirectsStep() {\n function updateRedirect(index: number, field: 'from' | 'to' | 'enabled', value: string | boolean) {\n setRedirectMappings(prev => {\n const updated = [...prev]\n updated[index] = { ...updated[index], [field]: value }\n return updated\n })\n }\n\n async function handleSaveRedirects() {\n try {\n await callPortalApi(`/site-scrape/${scrapeStatus?.id}/redirects`, {\n method: 'POST',\n body: JSON.stringify({ redirects: redirectMappings.filter(r => r.enabled && r.from !== r.to) })\n })\n setStep('integration')\n } catch (err) {\n setError((err as Error).message)\n }\n }\n\n const changedRedirects = redirectMappings.filter(r => r.enabled && r.from !== r.to)\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Configure Redirects</h2>\n <p className=\"text-gray-400\">Map old URLs to new routes to preserve SEO</p>\n </div>\n\n <div className=\"max-w-3xl mx-auto\">\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-3 bg-gray-800 flex justify-between items-center border-b border-gray-700\">\n <span className=\"font-medium\">Route Mappings</span>\n <span className=\"text-sm text-gray-400\">{changedRedirects.length} redirects</span>\n </div>\n <div className=\"max-h-80 overflow-y-auto divide-y divide-gray-700\">\n {redirectMappings.map((redirect, i) => (\n <div key={i} className={`flex items-center gap-4 px-4 py-3 ${!redirect.enabled ? 'opacity-50' : ''}`}>\n <input type=\"checkbox\" checked={redirect.enabled} onChange={(e) => updateRedirect(i, 'enabled', e.target.checked)}\n className=\"w-5 h-5 rounded border-gray-600 bg-gray-700\" />\n <input type=\"text\" value={redirect.from} onChange={(e) => updateRedirect(i, 'from', e.target.value)}\n className=\"flex-1 px-3 py-2 bg-gray-800 border border-gray-600 rounded text-sm font-mono\" placeholder=\"/old-path\" />\n <span className=\"text-gray-500\">→</span>\n <input type=\"text\" value={redirect.to} onChange={(e) => updateRedirect(i, 'to', e.target.value)}\n className=\"flex-1 px-3 py-2 bg-gray-800 border border-gray-600 rounded text-sm font-mono\" placeholder=\"/new-path\" />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg p-4\">\n <p className=\"text-sm text-yellow-400\">\n ⚠️ Only routes where \"from\" differs from \"to\" will create redirects. \n Same paths = no redirect needed.\n </p>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('review')}>← Back</Button>\n <Button onClick={handleSaveRedirects}>\n {changedRedirects.length > 0 ? `Save ${changedRedirects.length} Redirects →` : 'Skip & Continue →'}\n </Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // COMMON: Integration Code\n // ============================================\n\n function IntegrationStep() {\n const envVars = `NEXT_PUBLIC_UPTRADE_PROJECT_ID=${selectedProject?.id || 'xxx'}\nNEXT_PUBLIC_SUPABASE_URL=${config?.url || 'https://xxx.supabase.co'}\nNEXT_PUBLIC_SUPABASE_ANON_KEY=${config?.anonKey || 'xxx'}`\n\n const providerCode = `import { SiteKitProvider } from '@sonordev/site-kit'\nimport { ManagedFavicon } from '@sonordev/site-kit/images'\n\nexport default function RootLayout({ children }) {\n return (\n <html>\n <head>\n <ManagedFavicon />\n </head>\n <body>\n <SiteKitProvider\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n supabaseUrl={process.env.NEXT_PUBLIC_SUPABASE_URL!}\n supabaseAnonKey={process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!}\n >\n {children}\n </SiteKitProvider>\n </body>\n </html>\n )\n}`\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Integration Code</h2>\n <p className=\"text-gray-400\">Add these to connect your project to Sonor</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto space-y-4\">\n <ConfigPreview title=\"Environment Variables\" description=\".env.local\" content={envVars} />\n <ConfigPreview title=\"Layout Provider\" description=\"app/layout.tsx\" content={providerCode} />\n <div className=\"text-center text-gray-500 text-sm\">\n <p>Install: <code className=\"bg-gray-800 px-2 py-1 rounded\">pnpm add @sonordev/site-kit</code></p>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => {\n if (setupType === 'new') setStep('scaffold')\n else if (setupType === 'existing') setStep('migrate')\n else setStep('redirects')\n }}>← Back</Button>\n <Button onClick={() => setStep('copilot')}>Continue to Copilot →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // COMMON: Copilot Instructions\n // ============================================\n\n function CopilotStep() {\n useEffect(() => { generateCopilotInstructions() }, [])\n\n async function generateCopilotInstructions() {\n setGeneratingCopilot(true)\n try {\n const res = await callPortalApi('/signal/generate-copilot-instructions', {\n method: 'POST',\n body: JSON.stringify({\n projectId: selectedProject?.id,\n setupType,\n modules: selectedModules,\n domain: scrapeDomain || selectedProject?.domain,\n brand: setupType === 'new' ? brandConfig : scrapeStatus?.brand,\n routes: scrapeStatus?.routes,\n })\n })\n if (res.ok) {\n const data = await res.json()\n setCopilotInstructions(data.instructions || data.content || '')\n } else {\n setCopilotInstructions(generateFallbackTemplate())\n }\n } catch {\n setCopilotInstructions(generateFallbackTemplate())\n } finally {\n setGeneratingCopilot(false)\n }\n }\n\n function generateFallbackTemplate() {\n const brand = setupType === 'new' ? brandConfig : scrapeStatus?.brand\n const brandName = (brand as any)?.businessName || (brand as any)?.business_name || 'TBD'\n return `# ${selectedProject?.name} - Copilot Instructions\n\n**Project:** ${selectedProject?.name}\n**Domain:** ${scrapeDomain || selectedProject?.domain}\n**Stack:** Next.js + @sonordev/site-kit\n**Setup Type:** ${setupType}\n\n## Brand\n- **Name:** ${brandName}\n- **Primary Color:** ${brandConfig?.primaryColor || 'TBD'}\n- **Secondary Color:** ${brandConfig?.secondaryColor || 'TBD'}\n\n## Enabled Modules\n${selectedModules.map(m => `- ${m}`).join('\\n')}\n\n## Development Notes\n- This project uses @sonordev/site-kit for managed content\n- Forms, FAQs, and metadata are managed via Sonor\n- Analytics tracked via SiteKitProvider\n${setupType === 'rebuild' ? '- This is a rebuild of an existing site - check redirects for SEO' : ''}\n`\n }\n\n async function copyToClipboard() {\n await navigator.clipboard.writeText(copilotInstructions)\n alert('Copied!')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Copilot Instructions</h2>\n <p className=\"text-gray-400\">Add this to your repo for better AI assistance</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto\">\n {generatingCopilot ? (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-8 text-center\">\n <div className=\"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin mx-auto mb-4\" />\n <p className=\"text-gray-400\">Generating with AI...</p>\n </div>\n ) : (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-2 bg-gray-800 flex justify-between items-center\">\n <span className=\"font-medium\">.github/copilot-instructions.md</span>\n <button onClick={copyToClipboard} className=\"text-sm text-blue-400 hover:underline\">Copy</button>\n </div>\n <pre className=\"p-4 text-sm overflow-x-auto max-h-80 overflow-y-auto\">\n <code className=\"text-gray-300 whitespace-pre-wrap\">{copilotInstructions}</code>\n </pre>\n </div>\n )}\n\n <div className=\"mt-4 bg-green-500/10 border border-green-500/30 rounded-lg p-4\">\n <p className=\"text-sm text-green-400\">\n 💡 Save as <code className=\"bg-gray-800 px-1 rounded\">.github/copilot-instructions.md</code> for GitHub Copilot context.\n </p>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('integration')}>← Back</Button>\n <Button onClick={() => setStep('complete')}>Finish Setup →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Complete\n // ============================================\n\n function CompleteStep() {\n const [removing, setRemoving] = useState(false)\n\n async function handleRemoveSetup() {\n setRemoving(true)\n try {\n await fetch('/_uptrade/api/self-destruct', { method: 'POST' })\n window.location.href = '/'\n } catch (err) {\n setError((err as Error).message)\n setRemoving(false)\n }\n }\n\n function handleReset() {\n localStorage.removeItem('uptrade_access_token')\n setStep('welcome')\n setIsAuthenticated(false)\n setAccessToken(null)\n setUserEmail(null)\n setSelectedOrg(null)\n setSelectedProject(null)\n setSetupType(null)\n }\n\n return (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-6xl\">🎉</div>\n <h2 className=\"text-3xl font-bold\">You're All Set!</h2>\n <p className=\"text-gray-400 text-lg\">Site-Kit is configured for {selectedProject?.name}</p>\n\n <div className=\"grid grid-cols-2 gap-4 max-w-lg mx-auto my-8\">\n <QuickLink icon=\"📊\" title=\"Project Dashboard\" href={`https://app.sonor.io/projects/${selectedProject?.id}`} />\n <QuickLink icon=\"📝\" title=\"Manage Forms\" href={`https://app.sonor.io/projects/${selectedProject?.id}/forms`} />\n <QuickLink icon=\"📖\" title=\"Documentation\" href=\"https://docs.sonor.io/site-kit\" />\n <QuickLink icon=\"💬\" title=\"Get Help\" href=\"https://app.sonor.io/messages\" />\n </div>\n\n <div className=\"flex gap-4 justify-center\">\n <Button variant=\"secondary\" onClick={handleReset}>Restart Setup</Button>\n </div>\n\n <div className=\"pt-8 border-t border-gray-700\">\n <p className=\"text-gray-400 mb-4\">Remove this setup wizard from your project?</p>\n <Button variant=\"danger\" onClick={handleRemoveSetup} loading={removing}>Remove Setup Wizard</Button>\n <p className=\"text-gray-500 text-sm mt-2\">This will delete the /_uptrade route</p>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Render\n // ============================================\n\n // Render step content directly to avoid component recreation on state changes\n const renderStep = () => {\n switch (step) {\n case 'welcome': return <WelcomeStep />\n case 'auth': return <AuthStep />\n case 'project': return (\n <div className=\"space-y-6\" key=\"project-step\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Select Your Project</h2>\n <p className=\"text-gray-400\">Choose an existing project or create a new one</p>\n </div>\n\n <div className=\"max-w-lg mx-auto\">\n <div className=\"flex justify-between items-center mb-2\">\n <label className=\"text-sm text-gray-400\">Organization</label>\n <button type=\"button\" className=\"text-sm text-blue-400 hover:underline\" onClick={() => setShowNewOrg(!showNewOrg)}>\n {showNewOrg ? 'Select existing' : '+ New organization'}\n </button>\n </div>\n \n {showNewOrg ? (\n <div className=\"space-y-3 p-4 bg-gray-800/50 rounded-lg border border-gray-700\">\n <input \n id=\"new-org-name\"\n key=\"new-org-name\"\n type=\"text\" \n value={newOrgName} \n onChange={(e) => setNewOrgName(e.target.value)} \n placeholder=\"Organization name\"\n autoComplete=\"off\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\" \n />\n <Button onClick={handleCreateOrg} loading={creatingOrg} disabled={!newOrgName.trim()}>Create Organization</Button>\n </div>\n ) : (\n <select value={selectedOrg?.id || ''} onChange={(e) => setSelectedOrg(organizations.find(o => o.id === e.target.value) || null)}\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\">\n <option value=\"\">Select organization...</option>\n {organizations.map(org => <option key={org.id} value={org.id}>{org.name}</option>)}\n </select>\n )}\n </div>\n\n {selectedOrg && (\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm text-gray-400\">Projects</label>\n <button type=\"button\" className=\"text-sm text-blue-400 hover:underline\" onClick={() => setCreateNewProject(!createNewProject)}>\n {createNewProject ? 'Select existing' : '+ Create new'}\n </button>\n </div>\n\n {createNewProject ? (\n <div className=\"space-y-4 p-4 bg-gray-800/50 rounded-lg border border-gray-700\">\n <input \n id=\"new-project-name\"\n key=\"new-project-name\"\n type=\"text\" \n value={newProjectName} \n onChange={(e) => setNewProjectName(e.target.value)} \n placeholder=\"Project name\"\n autoComplete=\"off\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" \n />\n <input \n id=\"new-project-domain\"\n key=\"new-project-domain\"\n type=\"text\" \n value={newProjectDomain} \n onChange={(e) => setNewProjectDomain(e.target.value)} \n placeholder=\"localhost\"\n autoComplete=\"off\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" \n />\n <Button onClick={handleCreateProject} loading={creatingProject} disabled={!newProjectName.trim()}>Create Project</Button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {selectedOrg.projects.length === 0 ? (\n <p className=\"text-gray-500 text-center py-8\">\n No projects yet. <button type=\"button\" className=\"text-blue-400 hover:underline\" onClick={() => setCreateNewProject(true)}>Create one</button>\n </p>\n ) : selectedOrg.projects.map(project => (\n <button type=\"button\" key={project.id} onClick={() => handleSelectProject(project)}\n className=\"w-full text-left px-4 py-3 bg-gray-800/50 hover:bg-gray-800 border border-gray-700 rounded-lg transition-colors\">\n <div className=\"font-medium\">{project.name}</div>\n <div className=\"text-sm text-gray-400\">{project.domain}</div>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n case 'setup-type': return <SetupTypeStep />\n case 'brand': return <BrandStep />\n case 'modules': return <ModulesStep />\n case 'scaffold': return <ScaffoldStep />\n case 'scan': return <ScanStep />\n case 'migrate': return <MigrateStep />\n case 'domain': return <DomainStep />\n case 'scrape': return <ScrapeStep />\n case 'review': return <ReviewStep />\n case 'redirects': return <RedirectsStep />\n case 'integration': return <IntegrationStep />\n case 'copilot': return <CopilotStep />\n case 'complete': return <CompleteStep />\n default: return <WelcomeStep />\n }\n }\n\n const getProgress = () => {\n const common = ['welcome', 'auth', 'project', 'setup-type']\n const newFlow = ['brand', 'modules', 'scaffold']\n const existingFlow = ['modules', 'scan', 'migrate']\n const rebuildFlow = ['domain', 'scrape', 'review', 'redirects']\n const finish = ['integration', 'copilot', 'complete']\n \n const flow = setupType === 'new' ? [...common, ...newFlow, ...finish]\n : setupType === 'existing' ? [...common, ...existingFlow, ...finish]\n : setupType === 'rebuild' ? [...common, ...rebuildFlow, ...finish]\n : [...common, ...finish]\n \n const idx = flow.indexOf(step)\n return idx >= 0 ? (idx / (flow.length - 1)) * 100 : 0\n }\n\n const setupLabels = { new: '🆕 New Site', existing: '🔧 Existing', rebuild: '🔄 Rebuild' }\n\n return (\n <div style={{ \n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99999,\n minHeight: '100vh', \n backgroundColor: '#0f172a', \n color: '#ffffff',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'auto'\n }} className=\"min-h-screen bg-gradient-to-br from-gray-900 via-gray-900 to-gray-800 text-white\">\n <div style={{ position: 'fixed', top: 0, left: 0, right: 0, height: '4px', backgroundColor: '#1e293b', zIndex: 100000 }}>\n <div style={{ height: '100%', background: 'linear-gradient(to right, #3b82f6, #8b5cf6)', transition: 'width 0.5s', width: `${getProgress()}%` }} />\n </div>\n\n <header style={{ padding: '1.5rem 2rem', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg\" />\n <span className=\"font-semibold\">Sonor Site-Kit</span>\n {setupType && (\n <span className={`text-xs px-2 py-1 rounded ${\n setupType === 'new' ? 'bg-blue-500/20 text-blue-400' \n : setupType === 'existing' ? 'bg-green-500/20 text-green-400'\n : 'bg-purple-500/20 text-purple-400'\n }`}>{setupLabels[setupType]}</span>\n )}\n </div>\n {userEmail && <div className=\"text-gray-400 text-sm\">{userEmail}</div>}\n </header>\n\n <main className=\"max-w-4xl mx-auto px-8 py-12\">{renderStep()}</main>\n\n <footer className=\"fixed bottom-0 left-0 right-0 px-8 py-4 text-center text-gray-500 text-sm\">\n <a href=\"https://sonor.io\" target=\"_blank\" className=\"hover:text-gray-300\">Sonor</a>\n {' · '}\n <a href=\"https://docs.sonor.io\" target=\"_blank\" className=\"hover:text-gray-300\">Docs</a>\n </footer>\n </div>\n )\n}\n\n// ============================================\n// UI Components\n// ============================================\n\nfunction Button({ children, onClick, loading, disabled, variant = 'primary' }: {\n children: React.ReactNode; onClick?: () => void; loading?: boolean; disabled?: boolean; variant?: 'primary' | 'secondary' | 'danger'\n}) {\n const variants = {\n primary: 'bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700',\n secondary: 'bg-gray-700 hover:bg-gray-600',\n danger: 'bg-red-600/20 border border-red-500/30 text-red-400 hover:bg-red-600/30'\n }\n return (\n <button onClick={onClick} disabled={loading || disabled}\n className={`px-6 py-3 rounded-lg font-medium transition-all disabled:opacity-50 disabled:cursor-not-allowed ${variants[variant]}`}>\n {loading ? <span className=\"flex items-center gap-2\"><span className=\"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />Loading...</span> : children}\n </button>\n )\n}\n\nfunction FeatureCard({ icon, title, description }: { icon: string; title: string; description: string }) {\n return (\n <div className=\"p-6 bg-gray-800/50 rounded-xl border border-gray-700 text-center\">\n <div className=\"text-3xl mb-3\">{icon}</div>\n <h3 className=\"font-semibold mb-1\">{title}</h3>\n <p className=\"text-sm text-gray-400\">{description}</p>\n </div>\n )\n}\n\nfunction StatCard({ value, label, color, large }: { value: number; label: string; color: 'purple' | 'pink' | 'blue'; large?: boolean }) {\n const colors = { purple: 'text-purple-400', pink: 'text-pink-400', blue: 'text-blue-400' }\n return (\n <div className=\"bg-gray-800/50 rounded-lg p-4 text-center border border-gray-700\">\n <div className={`${large ? 'text-3xl' : 'text-2xl'} font-bold ${colors[color]}`}>{value}</div>\n <div className=\"text-sm text-gray-400\">{label}</div>\n </div>\n )\n}\n\nfunction Section({ title, count, children }: { title: string; count: number; children: React.ReactNode }) {\n return (\n <div className=\"bg-gray-800/30 rounded-xl border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-3 bg-gray-800/50 flex justify-between items-center\">\n <span className=\"font-medium\">{title}</span>\n <span className=\"text-sm text-gray-400\">{count} selected</span>\n </div>\n <div className=\"divide-y divide-gray-700\">{children}</div>\n </div>\n )\n}\n\nfunction ItemRow({ item, onToggle }: { item: DetectedItem; onToggle: () => void }) {\n return (\n <div className=\"flex items-center gap-4 px-4 py-3 hover:bg-gray-800/30 transition-colors\">\n <input type=\"checkbox\" checked={item.selected} onChange={onToggle} className=\"w-5 h-5 rounded border-gray-600 bg-gray-700 text-blue-500\" />\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{item.type}</div>\n <div className=\"text-sm text-gray-400 truncate\">{item.file}:{item.line}</div>\n </div>\n </div>\n )\n}\n\nfunction ConfigPreview({ title, description, content }: { title: string; description: string; content: string }) {\n async function copy() { await navigator.clipboard.writeText(content) }\n return (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-2 bg-gray-800 flex justify-between items-center\">\n <span className=\"font-medium\">{title}</span>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm text-gray-400\">{description}</span>\n <button onClick={copy} className=\"text-sm text-blue-400 hover:underline\">Copy</button>\n </div>\n </div>\n <pre className=\"p-4 text-sm overflow-x-auto\"><code className=\"text-green-400\">{content}</code></pre>\n </div>\n )\n}\n\nfunction QuickLink({ icon, title, href }: { icon: string; title: string; href: string }) {\n return (\n <a href={href} target=\"_blank\" className=\"flex items-center gap-3 p-4 bg-gray-800/50 rounded-lg border border-gray-700 hover:bg-gray-800 transition-colors\">\n <span className=\"text-2xl\">{icon}</span>\n <span className=\"font-medium\">{title}</span>\n </a>\n )\n}\n\nexport default SetupWizard\n"]}
|
|
@@ -4,7 +4,7 @@ import { useRef, useEffect } from 'react';
|
|
|
4
4
|
// src/SitemapSync.tsx
|
|
5
5
|
function getApiConfig() {
|
|
6
6
|
if (typeof window === "undefined") return { apiUrl: "", apiKey: "" };
|
|
7
|
-
const apiUrl = window.__SITE_KIT_API_URL__ || "https://api.
|
|
7
|
+
const apiUrl = window.__SITE_KIT_API_URL__ || "https://api.sonor.io";
|
|
8
8
|
const apiKey = window.__SITE_KIT_API_KEY__ || "";
|
|
9
9
|
return { apiUrl, apiKey };
|
|
10
10
|
}
|
|
@@ -132,5 +132,5 @@ function SitemapSync({
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
export { SitemapSync };
|
|
135
|
-
//# sourceMappingURL=chunk-
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
135
|
+
//# sourceMappingURL=chunk-JIDOXTX2.mjs.map
|
|
136
|
+
//# sourceMappingURL=chunk-JIDOXTX2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SitemapSync.tsx"],"names":[],"mappings":"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","file":"chunk-PKN27UMH.mjs","sourcesContent":["/**\n * SitemapSync - Automatically sync sitemap.xml to Portal API\n *\n * Client-only component. Lives at package root so the main entry does not\n * pull in seo/ (and server-only code). For use in SiteKitProvider and\n * from @sonordev/site-kit/seo.\n *\n * @example\n * ```tsx\n * import { SitemapSync } from '@sonordev/site-kit'\n * // or\n * import { SitemapSync } from '@sonordev/site-kit/seo'\n * ```\n */\n\n'use client'\n\nimport { useEffect, useRef } from 'react'\n\ninterface SitemapSyncProps {\n /** Custom sitemap URL (defaults to /sitemap.xml) */\n sitemapUrl?: string\n /** How often to re-sync in minutes (0 = only on mount, default: 60) */\n syncInterval?: number\n /** Enable debug logging */\n debug?: boolean\n}\n\ninterface SitemapEntry {\n path: string\n lastmod?: string\n changefreq?: string\n priority?: number\n}\n\nfunction getApiConfig() {\n if (typeof window === 'undefined') return { apiUrl: '', apiKey: '' }\n\n const apiUrl = (window as any).__SITE_KIT_API_URL__ || 'https://api.uptrademedia.com'\n const apiKey = (window as any).__SITE_KIT_API_KEY__ || ''\n return { apiUrl, apiKey }\n}\n\nasync function parseSitemap(sitemapUrl: string, debug: boolean): Promise<SitemapEntry[]> {\n try {\n const response = await fetch(sitemapUrl)\n if (!response.ok) {\n if (debug) console.warn('[SitemapSync] Failed to fetch sitemap:', response.status)\n return []\n }\n\n const text = await response.text()\n const parser = new DOMParser()\n const doc = parser.parseFromString(text, 'application/xml')\n\n const parseError = doc.querySelector('parsererror')\n if (parseError) {\n if (debug) console.warn('[SitemapSync] Sitemap parse error:', parseError.textContent)\n return []\n }\n\n const urls = doc.querySelectorAll('url')\n const entries: SitemapEntry[] = []\n\n urls.forEach(url => {\n const loc = url.querySelector('loc')?.textContent\n if (!loc) return\n\n let path: string\n try {\n const urlObj = new URL(loc)\n path = urlObj.pathname\n } catch {\n path = loc.startsWith('/') ? loc : `/${loc}`\n }\n\n if (path !== '/' && path.endsWith('/')) {\n path = path.slice(0, -1)\n }\n\n const lastmod = url.querySelector('lastmod')?.textContent || undefined\n const changefreq = url.querySelector('changefreq')?.textContent || undefined\n const priorityStr = url.querySelector('priority')?.textContent\n const priority = priorityStr ? parseFloat(priorityStr) : undefined\n\n entries.push({ path, lastmod, changefreq, priority })\n })\n\n if (debug) {\n console.log(`[SitemapSync] Parsed ${entries.length} entries from sitemap`)\n }\n\n return entries\n } catch (error) {\n if (debug) console.error('[SitemapSync] Error parsing sitemap:', error)\n return []\n }\n}\n\nasync function syncToPortal(\n entries: SitemapEntry[],\n apiUrl: string,\n apiKey: string,\n debug: boolean\n): Promise<{ success: boolean; created: number; updated: number }> {\n if (!apiKey) {\n if (debug) console.warn('[SitemapSync] No API key configured')\n return { success: false, created: 0, updated: 0 }\n }\n\n if (entries.length === 0) {\n if (debug) console.log('[SitemapSync] No entries to sync')\n return { success: true, created: 0, updated: 0 }\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/register-sitemap`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({\n entries: entries.map(e => ({\n path: e.path,\n priority: e.priority,\n changefreq: e.changefreq,\n })),\n }),\n })\n\n if (!response.ok) {\n if (debug) console.error('[SitemapSync] API error:', response.status, response.statusText)\n return { success: false, created: 0, updated: 0 }\n }\n\n const result = await response.json()\n\n if (debug) {\n console.log(`[SitemapSync] Synced: ${result.created} created, ${result.updated} updated`)\n }\n\n return {\n success: true,\n created: result.created || 0,\n updated: result.updated || 0,\n }\n } catch (error) {\n if (debug) console.error('[SitemapSync] Sync error:', error)\n return { success: false, created: 0, updated: 0 }\n }\n}\n\nexport function SitemapSync({\n sitemapUrl = '/sitemap.xml',\n syncInterval = 60,\n debug = false,\n}: SitemapSyncProps) {\n const hasSyncedRef = useRef(false)\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n useEffect(() => {\n const doSync = async () => {\n const { apiUrl, apiKey } = getApiConfig()\n\n if (!apiKey) {\n if (debug) console.warn('[SitemapSync] No API key found')\n return\n }\n\n if (debug) console.log('[SitemapSync] Starting sitemap sync...')\n\n const entries = await parseSitemap(sitemapUrl, debug)\n\n if (entries.length > 0) {\n await syncToPortal(entries, apiUrl, apiKey, debug)\n }\n }\n\n if (!hasSyncedRef.current) {\n hasSyncedRef.current = true\n doSync()\n }\n\n if (syncInterval > 0) {\n intervalRef.current = setInterval(doSync, syncInterval * 60 * 1000)\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [sitemapUrl, syncInterval, debug])\n\n return null\n}\n\nexport default SitemapSync\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/SitemapSync.tsx"],"names":[],"mappings":"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","file":"chunk-JIDOXTX2.mjs","sourcesContent":["/**\n * SitemapSync - Automatically sync sitemap.xml to Portal API\n *\n * Client-only component. Lives at package root so the main entry does not\n * pull in seo/ (and server-only code). For use in SiteKitProvider and\n * from @sonordev/site-kit/seo.\n *\n * @example\n * ```tsx\n * import { SitemapSync } from '@sonordev/site-kit'\n * // or\n * import { SitemapSync } from '@sonordev/site-kit/seo'\n * ```\n */\n\n'use client'\n\nimport { useEffect, useRef } from 'react'\n\ninterface SitemapSyncProps {\n /** Custom sitemap URL (defaults to /sitemap.xml) */\n sitemapUrl?: string\n /** How often to re-sync in minutes (0 = only on mount, default: 60) */\n syncInterval?: number\n /** Enable debug logging */\n debug?: boolean\n}\n\ninterface SitemapEntry {\n path: string\n lastmod?: string\n changefreq?: string\n priority?: number\n}\n\nfunction getApiConfig() {\n if (typeof window === 'undefined') return { apiUrl: '', apiKey: '' }\n\n const apiUrl = (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n const apiKey = (window as any).__SITE_KIT_API_KEY__ || ''\n return { apiUrl, apiKey }\n}\n\nasync function parseSitemap(sitemapUrl: string, debug: boolean): Promise<SitemapEntry[]> {\n try {\n const response = await fetch(sitemapUrl)\n if (!response.ok) {\n if (debug) console.warn('[SitemapSync] Failed to fetch sitemap:', response.status)\n return []\n }\n\n const text = await response.text()\n const parser = new DOMParser()\n const doc = parser.parseFromString(text, 'application/xml')\n\n const parseError = doc.querySelector('parsererror')\n if (parseError) {\n if (debug) console.warn('[SitemapSync] Sitemap parse error:', parseError.textContent)\n return []\n }\n\n const urls = doc.querySelectorAll('url')\n const entries: SitemapEntry[] = []\n\n urls.forEach(url => {\n const loc = url.querySelector('loc')?.textContent\n if (!loc) return\n\n let path: string\n try {\n const urlObj = new URL(loc)\n path = urlObj.pathname\n } catch {\n path = loc.startsWith('/') ? loc : `/${loc}`\n }\n\n if (path !== '/' && path.endsWith('/')) {\n path = path.slice(0, -1)\n }\n\n const lastmod = url.querySelector('lastmod')?.textContent || undefined\n const changefreq = url.querySelector('changefreq')?.textContent || undefined\n const priorityStr = url.querySelector('priority')?.textContent\n const priority = priorityStr ? parseFloat(priorityStr) : undefined\n\n entries.push({ path, lastmod, changefreq, priority })\n })\n\n if (debug) {\n console.log(`[SitemapSync] Parsed ${entries.length} entries from sitemap`)\n }\n\n return entries\n } catch (error) {\n if (debug) console.error('[SitemapSync] Error parsing sitemap:', error)\n return []\n }\n}\n\nasync function syncToPortal(\n entries: SitemapEntry[],\n apiUrl: string,\n apiKey: string,\n debug: boolean\n): Promise<{ success: boolean; created: number; updated: number }> {\n if (!apiKey) {\n if (debug) console.warn('[SitemapSync] No API key configured')\n return { success: false, created: 0, updated: 0 }\n }\n\n if (entries.length === 0) {\n if (debug) console.log('[SitemapSync] No entries to sync')\n return { success: true, created: 0, updated: 0 }\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/register-sitemap`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({\n entries: entries.map(e => ({\n path: e.path,\n priority: e.priority,\n changefreq: e.changefreq,\n })),\n }),\n })\n\n if (!response.ok) {\n if (debug) console.error('[SitemapSync] API error:', response.status, response.statusText)\n return { success: false, created: 0, updated: 0 }\n }\n\n const result = await response.json()\n\n if (debug) {\n console.log(`[SitemapSync] Synced: ${result.created} created, ${result.updated} updated`)\n }\n\n return {\n success: true,\n created: result.created || 0,\n updated: result.updated || 0,\n }\n } catch (error) {\n if (debug) console.error('[SitemapSync] Sync error:', error)\n return { success: false, created: 0, updated: 0 }\n }\n}\n\nexport function SitemapSync({\n sitemapUrl = '/sitemap.xml',\n syncInterval = 60,\n debug = false,\n}: SitemapSyncProps) {\n const hasSyncedRef = useRef(false)\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n useEffect(() => {\n const doSync = async () => {\n const { apiUrl, apiKey } = getApiConfig()\n\n if (!apiKey) {\n if (debug) console.warn('[SitemapSync] No API key found')\n return\n }\n\n if (debug) console.log('[SitemapSync] Starting sitemap sync...')\n\n const entries = await parseSitemap(sitemapUrl, debug)\n\n if (entries.length > 0) {\n await syncToPortal(entries, apiUrl, apiKey, debug)\n }\n }\n\n if (!hasSyncedRef.current) {\n hasSyncedRef.current = true\n doSync()\n }\n\n if (syncInterval > 0) {\n intervalRef.current = setInterval(doSync, syncInterval * 60 * 1000)\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [sitemapUrl, syncInterval, debug])\n\n return null\n}\n\nexport default SitemapSync\n"]}
|
|
@@ -336,7 +336,7 @@ export default ${componentName}
|
|
|
336
336
|
`;
|
|
337
337
|
}
|
|
338
338
|
async function createFormInUptrade(form, slug, options) {
|
|
339
|
-
const response = await fetch("https://api.
|
|
339
|
+
const response = await fetch("https://api.sonor.io/forms", {
|
|
340
340
|
method: "POST",
|
|
341
341
|
headers: {
|
|
342
342
|
"Content-Type": "application/json",
|
|
@@ -378,14 +378,14 @@ async function migrateWidget(filePath, widget, options) {
|
|
|
378
378
|
let content = await fs__default.default.readFile(fullPath, "utf-8");
|
|
379
379
|
switch (widget.widgetType) {
|
|
380
380
|
case "intercom":
|
|
381
|
-
content = content.replace(/<Script[^>]*intercom[^>]*\/?>(?:<\/Script>)?/gi, "{/* Intercom replaced with
|
|
381
|
+
content = content.replace(/<Script[^>]*intercom[^>]*\/?>(?:<\/Script>)?/gi, "{/* Intercom replaced with Sonor Engage */}");
|
|
382
382
|
content = content.replace(/window\.Intercom\s*=\s*[^;]+;/g, "");
|
|
383
383
|
break;
|
|
384
384
|
case "crisp":
|
|
385
|
-
content = content.replace(/<Script[^>]*crisp[^>]*\/?>(?:<\/Script>)?/gi, "{/* Crisp replaced with
|
|
385
|
+
content = content.replace(/<Script[^>]*crisp[^>]*\/?>(?:<\/Script>)?/gi, "{/* Crisp replaced with Sonor Engage */}");
|
|
386
386
|
break;
|
|
387
387
|
case "drift":
|
|
388
|
-
content = content.replace(/<Script[^>]*drift[^>]*\/?>(?:<\/Script>)?/gi, "{/* Drift replaced with
|
|
388
|
+
content = content.replace(/<Script[^>]*drift[^>]*\/?>(?:<\/Script>)?/gi, "{/* Drift replaced with Sonor Engage */}");
|
|
389
389
|
break;
|
|
390
390
|
}
|
|
391
391
|
await fs__default.default.writeFile(fullPath, content, "utf-8");
|
|
@@ -557,7 +557,7 @@ export async function generateMetadata() {
|
|
|
557
557
|
return { filePath, success: true, changes };
|
|
558
558
|
}
|
|
559
559
|
async function createPageMetadata(pagePath, metadata, options) {
|
|
560
|
-
const response = await fetch("https://api.
|
|
560
|
+
const response = await fetch("https://api.sonor.io/seo/pages", {
|
|
561
561
|
method: "POST",
|
|
562
562
|
headers: {
|
|
563
563
|
"Content-Type": "application/json",
|
|
@@ -621,7 +621,7 @@ function extractSchemaJSON(content) {
|
|
|
621
621
|
return null;
|
|
622
622
|
}
|
|
623
623
|
async function createSchemaRecord(pagePath, schemaType, schemaJson, options) {
|
|
624
|
-
const apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || "https://api.
|
|
624
|
+
const apiUrl = process.env.SONOR_API_URL || process.env.NEXT_PUBLIC_UPTRADE_API_URL || "https://api.sonor.io";
|
|
625
625
|
const response = await fetch(`${apiUrl}/api/public/seo/register-schema`, {
|
|
626
626
|
method: "POST",
|
|
627
627
|
headers: {
|
|
@@ -733,7 +733,7 @@ function extractFAQItems(content, faqType) {
|
|
|
733
733
|
return items;
|
|
734
734
|
}
|
|
735
735
|
async function createFAQRecord(pagePath, items, options) {
|
|
736
|
-
const apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || "https://api.
|
|
736
|
+
const apiUrl = process.env.SONOR_API_URL || process.env.NEXT_PUBLIC_UPTRADE_API_URL || "https://api.sonor.io";
|
|
737
737
|
const response = await fetch(`${apiUrl}/api/public/seo/register-faq`, {
|
|
738
738
|
method: "POST",
|
|
739
739
|
headers: {
|
|
@@ -977,5 +977,5 @@ exports.migrateFiles = migrateFiles;
|
|
|
977
977
|
exports.migrateMetadata = migrateMetadata;
|
|
978
978
|
exports.migrateSchema = migrateSchema;
|
|
979
979
|
exports.migrateSitemap = migrateSitemap;
|
|
980
|
-
//# sourceMappingURL=chunk-
|
|
981
|
-
//# sourceMappingURL=chunk-
|
|
980
|
+
//# sourceMappingURL=chunk-JM3ZR6LB.js.map
|
|
981
|
+
//# sourceMappingURL=chunk-JM3ZR6LB.js.map
|