From dd71d228b0d784bcef9fdd6b579b1e46869eef45 Mon Sep 17 00:00:00 2001 From: Sid Date: Thu, 28 May 2026 16:23:29 +0530 Subject: [PATCH 1/3] Refresh CraftMyFunnel brand and hero --- .../migration.sql | 2 +- .../src/modules/security/FirmwareService.ts | 2 +- apps/edge-fastapi/Dockerfile | 2 +- apps/edge-fastapi/main.py | 2 +- apps/web/package.json | 2 +- .../migration.sql | 2 +- .../app/(dashboard)/governance/keys/page.tsx | 2 +- apps/web/src/app/globals.css | 337 ++++++++++++++++++ apps/web/src/app/marketing-home-page.tsx | 216 +++++++++-- .../src/modules/security/FirmwareService.ts | 2 +- build-logs/api-fix-verify.out | 2 +- build-logs/api-playwright-dev.err | 2 +- build-logs/api-playwright-start.err | 2 +- build-logs/api-playwright-start.out | 2 +- build-logs/api-setup-fix.err | 2 +- ...=> craftmyfunnel-esm-full-fix-windows.diff | 0 ...d.ps1 => create-craftmyfunnel-scaffold.ps1 | 22 +- database/migrations/001_initial_schema.sql | 2 +- debug_paths.ps1 | 6 +- docs/DEPLOYMENT_RUNBOOK.md | 2 +- docs/NETJANA_SIGNAL_INTEGRATION_PLAN.md | 2 +- ...e_convospan.ps1 => merge_craftmyfunnel.ps1 | 10 +- scripts/e2e_campaign_test.py | 2 +- scripts/package-extension.ps1 | 2 +- scripts/start-local-beta.mjs | 6 +- scripts/verify_ci.sh | 2 +- setup-dev.ps1 | 4 +- setup-dev.sh | 4 +- 28 files changed, 573 insertions(+), 70 deletions(-) rename convospan-esm-full-fix-windows.diff => craftmyfunnel-esm-full-fix-windows.diff (100%) rename create-convospan-scaffold.ps1 => create-craftmyfunnel-scaffold.ps1 (94%) rename merge_convospan.ps1 => merge_craftmyfunnel.ps1 (88%) diff --git a/apps/api/prisma/migrations/20251217185234_add_marketplace/migration.sql b/apps/api/prisma/migrations/20251217185234_add_marketplace/migration.sql index a5eb7e33..22dabaa0 100644 --- a/apps/api/prisma/migrations/20251217185234_add_marketplace/migration.sql +++ b/apps/api/prisma/migrations/20251217185234_add_marketplace/migration.sql @@ -9,7 +9,7 @@ CREATE TABLE "MarketplaceTemplate" ( "config" JSONB NOT NULL, "metrics" JSONB, "isOfficial" BOOLEAN NOT NULL DEFAULT true, - "author" TEXT NOT NULL DEFAULT 'ConvoSpan', + "author" TEXT NOT NULL DEFAULT 'CraftMyFunnel', "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "MarketplaceTemplate_pkey" PRIMARY KEY ("id") diff --git a/apps/api/src/modules/security/FirmwareService.ts b/apps/api/src/modules/security/FirmwareService.ts index 1f05d2b0..86861f97 100644 --- a/apps/api/src/modules/security/FirmwareService.ts +++ b/apps/api/src/modules/security/FirmwareService.ts @@ -3,7 +3,7 @@ import crypto from 'crypto'; /** * Firmware Service * Handles Digital Signing and Remote Attestation for Edge Nodes (Jetson). - * Ensures that only code signed by the "Covospan Developer Key" is running. + * Ensures that only code signed by the "CraftMyFunnel Developer Key" is running. */ export class FirmwareService { // In production, these should be loaded from a secure HSM or KMS diff --git a/apps/edge-fastapi/Dockerfile b/apps/edge-fastapi/Dockerfile index f4afa83d..e44e3eb0 100644 --- a/apps/edge-fastapi/Dockerfile +++ b/apps/edge-fastapi/Dockerfile @@ -1,6 +1,6 @@ # Stage 1: Build dependencies and artifacts FROM python:3.11-slim AS builder -LABEL org.opencontainers.image.source="https://github.com/Convospanai-outreach/fullstack" +LABEL org.opencontainers.image.source="https://github.com/craftmyfunnel-outreach/fullstack" ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ diff --git a/apps/edge-fastapi/main.py b/apps/edge-fastapi/main.py index 21077c42..5b909d7c 100644 --- a/apps/edge-fastapi/main.py +++ b/apps/edge-fastapi/main.py @@ -38,7 +38,7 @@ async def dispatch(self, request, call_next): "The browser actuator cannot run unauthenticated. Set EDGE_API_KEY or disable EDGE_EXECUTE_ENABLED." ) -app = FastAPI(title="ConvoSpan Edge Node") +app = FastAPI(title="CraftMyFunnel Edge Node") app.add_middleware(CorrelationMiddleware) # Inject correlation ID into logs diff --git a/apps/web/package.json b/apps/web/package.json index ec4a405c..6832dc68 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -3,7 +3,7 @@ "private": true, "repository": { "type": "git", - "url": "git+https://github.com/Convospanai-outreach/fullstack.git" + "url": "git+https://github.com/craftmyfunnel-outreach/fullstack.git" }, "publishConfig": { "registry": "https://npm.pkg.github.com" diff --git a/apps/web/prisma/migrations/20251217185234_add_marketplace/migration.sql b/apps/web/prisma/migrations/20251217185234_add_marketplace/migration.sql index a5eb7e33..22dabaa0 100644 --- a/apps/web/prisma/migrations/20251217185234_add_marketplace/migration.sql +++ b/apps/web/prisma/migrations/20251217185234_add_marketplace/migration.sql @@ -9,7 +9,7 @@ CREATE TABLE "MarketplaceTemplate" ( "config" JSONB NOT NULL, "metrics" JSONB, "isOfficial" BOOLEAN NOT NULL DEFAULT true, - "author" TEXT NOT NULL DEFAULT 'ConvoSpan', + "author" TEXT NOT NULL DEFAULT 'CraftMyFunnel', "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "MarketplaceTemplate_pkey" PRIMARY KEY ("id") diff --git a/apps/web/src/app/(dashboard)/governance/keys/page.tsx b/apps/web/src/app/(dashboard)/governance/keys/page.tsx index c9b2ec01..3e000378 100644 --- a/apps/web/src/app/(dashboard)/governance/keys/page.tsx +++ b/apps/web/src/app/(dashboard)/governance/keys/page.tsx @@ -87,7 +87,7 @@ export default function SecurityKeysPage() {

System Access Keys

-

Automate your workspace using the CovoSpan Public API.

+

Automate your workspace using the CraftMyFunnel Public API.

+ +
+
+ {stats.slice(0, 3).map((stat) =>

{stat.number}

{stat.label}

)} +
+

Built for service companies that need qualified enterprise conversations without building a large inside-sales team.

-

CraftMyFunnel

-

- Craft your funnel from buyer signal to qualified meeting. -

-

CraftMyFunnel helps B2B service teams manage buyer signals, lead review, approved outreach, follow-ups, and qualified meeting tracking in one governed workflow.

-

Google Workspace and Gmail connections are used for user-approved mailbox setup and sending. Humans remain in control of approvals, launch decisions, and brand-sensitive sends.

-
- - -
-

Built for service companies that need qualified enterprise conversations without building a large inside-sales team.

-
- {stats.map((stat) =>

{stat.number}

{stat.label}

)} +
+ +
+ {stats.slice(0, 3).map((stat) =>

{stat.number}

{stat.label}

)} +
+

Built for service companies that need qualified enterprise conversations without building a large inside-sales team.

Designed for service-led growth teams

{serviceTeams.map((team) => {team})}
-

From Buyer Signal to Qualified Meeting

One managed workflow, not another tool to operate

CraftMyFunnel supports signal detection, lead enrichment, campaign preparation, approved outreach, follow-up review, and qualified-meeting tracking.

{features.map((f) =>

{f.title}

{f.description}

)}
+
+ +
+
+
AI orchestration
+

One managed workflow, not another tool to operate

+

CraftMyFunnel supports signal detection, lead enrichment, campaign preparation, approved outreach, follow-up review, and qualified-meeting tracking.

+
+
{features.map((f) =>

{f.title}

{f.description}

)}
+
+
-

Pilot workflow examples

Review-ready workflows without fake customer claims.

{workflowExamples.map((example) =>

{example.title}

{example.description}

)}
+
+ +
+
+
+
Outreach execution
+

Review-ready workflows without fake customer claims.

+
+
+ {["Email", "LinkedIn", "WhatsApp", "Follow-up"].map((channel) => {channel})} +
+
+
{workflowExamples.map((example) =>

{example.title}

{example.description}

)}
+
+
-

Vertical playbooks

Built around service-company markets

{playbooks.map((step) =>
{step.n}

{step.title}

{step.desc}

)}
+
+ +
+
+
Analytics and signal patterns
+

Built around service-company markets

+
+
{playbooks.map((step) =>
{step.n}

{step.title}

{step.desc}

)}
+
+
-
Qualified meeting pilot path

Launch your funnel workflow

Prepare approved outreach, managed follow-ups, and qualified meeting tracking for your service business.

Human approval Vertical playbooks Human support Team collaboration
+
Qualified meeting pilot path

Launch your funnel workflow

Prepare approved outreach, managed follow-ups, and qualified meeting tracking for your service business.

Human approval Vertical playbooks Human support Team collaboration
- + ); } diff --git a/apps/web/src/modules/security/FirmwareService.ts b/apps/web/src/modules/security/FirmwareService.ts index 1f05d2b0..86861f97 100644 --- a/apps/web/src/modules/security/FirmwareService.ts +++ b/apps/web/src/modules/security/FirmwareService.ts @@ -3,7 +3,7 @@ import crypto from 'crypto'; /** * Firmware Service * Handles Digital Signing and Remote Attestation for Edge Nodes (Jetson). - * Ensures that only code signed by the "Covospan Developer Key" is running. + * Ensures that only code signed by the "CraftMyFunnel Developer Key" is running. */ export class FirmwareService { // In production, these should be loaded from a secure HSM or KMS diff --git a/build-logs/api-fix-verify.out b/build-logs/api-fix-verify.out index 63abee9e..a39fa894 100644 --- a/build-logs/api-fix-verify.out +++ b/build-logs/api-fix-verify.out @@ -3,7 +3,7 @@ > node scripts/run-with-env.mjs TEMP=./tmp TMP=./tmp -- node ../../node_modules/tsx/dist/cli.mjs server.ts [dotenv@17.2.3] injecting env (31) from .env -- tip: ⚙️ override existing env vars with { override: true } -✔ ConvoSpan Production API launched on port 3001 +✔ CraftMyFunnel Production API launched on port 3001 [18:54:20.706] INFO (17028): Registering [GET] /ab-testing/track [18:54:20.746] INFO (17028): Registering [POST] /ab-testing/track [18:54:20.750] INFO (17028): Registering [POST] /admin/actions/[action] diff --git a/build-logs/api-playwright-dev.err b/build-logs/api-playwright-dev.err index 67b2e60c..70cfc671 100644 --- a/build-logs/api-playwright-dev.err +++ b/build-logs/api-playwright-dev.err @@ -3,7 +3,7 @@ npm error Lifecycle script `dev` failed with error: npm error code 4294967295 npm error path D:\Convo\fullstack\apps\api -npm error workspace convospan-api-split +npm error workspace CraftMyFunnel-api-split npm error location D:\Convo\fullstack\apps\api npm error command failed npm error command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/run-with-env.mjs TEMP=./tmp TMP=./tmp -- node ../../node_modules/tsx/dist/cli.mjs --watch server.ts diff --git a/build-logs/api-playwright-start.err b/build-logs/api-playwright-start.err index 2324d23e..d554a633 100644 --- a/build-logs/api-playwright-start.err +++ b/build-logs/api-playwright-start.err @@ -47,7 +47,7 @@ Setup status error: Error: `headers` was called outside a request scope. Read mo npm error Lifecycle script `start` failed with error: npm error code 4294967295 npm error path D:\Convo\fullstack\apps\api -npm error workspace convospan-api-split +npm error workspace CraftMyFunnel-api-split npm error location D:\Convo\fullstack\apps\api npm error command failed npm error command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/run-with-env.mjs TEMP=./tmp TMP=./tmp -- node ../../node_modules/tsx/dist/cli.mjs server.ts diff --git a/build-logs/api-playwright-start.out b/build-logs/api-playwright-start.out index 2026481f..f4b5e677 100644 --- a/build-logs/api-playwright-start.out +++ b/build-logs/api-playwright-start.out @@ -3,7 +3,7 @@ > node scripts/run-with-env.mjs TEMP=./tmp TMP=./tmp -- node ../../node_modules/tsx/dist/cli.mjs server.ts [dotenv@17.2.3] injecting env (31) from .env -- tip: ⚙️ write to custom object with { processEnv: myObject } -✔ ConvoSpan Production API launched on port 3001 +✔ CraftMyFunnel Production API launched on port 3001 [17:38:58.181] INFO (752): Registering [GET] /ab-testing/track [17:38:58.241] INFO (752): Registering [POST] /ab-testing/track [17:38:58.249] INFO (752): Registering [POST] /admin/actions/[action] diff --git a/build-logs/api-setup-fix.err b/build-logs/api-setup-fix.err index 0feed41c..79e42bdc 100644 --- a/build-logs/api-setup-fix.err +++ b/build-logs/api-setup-fix.err @@ -3,7 +3,7 @@ npm error Lifecycle script `start` failed with error: npm error code 1 npm error path D:\Convo\fullstack\apps\api -npm error workspace convospan-api-split +npm error workspace CraftMyFunnel-api-split npm error location D:\Convo\fullstack\apps\api npm error command failed npm error command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/run-with-env.mjs TEMP=./tmp TMP=./tmp -- node ../../node_modules/tsx/dist/cli.mjs server.ts diff --git a/convospan-esm-full-fix-windows.diff b/craftmyfunnel-esm-full-fix-windows.diff similarity index 100% rename from convospan-esm-full-fix-windows.diff rename to craftmyfunnel-esm-full-fix-windows.diff diff --git a/create-convospan-scaffold.ps1 b/create-craftmyfunnel-scaffold.ps1 similarity index 94% rename from create-convospan-scaffold.ps1 rename to create-craftmyfunnel-scaffold.ps1 index b19dcc11..876a5653 100644 --- a/create-convospan-scaffold.ps1 +++ b/create-craftmyfunnel-scaffold.ps1 @@ -1,8 +1,8 @@ -# create-convospan-scaffold.ps1 +# create-CraftMyFunnel-scaffold.ps1 # Run in your project root (e.g. D:\Convo\extracted) -# PowerShell: Right-click -> Run with PowerShell or `.\create-convospan-scaffold.ps1` +# PowerShell: Right-click -> Run with PowerShell or `.\create-CraftMyFunnel-scaffold.ps1` -$root = Join-Path (Get-Location) "convospan-full-pack" +$root = Join-Path (Get-Location) "CraftMyFunnel-full-pack" if (Test-Path $root) { Remove-Item -Recurse -Force $root } New-Item -ItemType Directory -Path $root | Out-Null @@ -16,7 +16,7 @@ function Write-File($path, $content) { # README Write-File "README.md" @" -Convospan Full Fix Pack (Scaffold) +CraftMyFunnel Full Fix Pack (Scaffold) ================================= This scaffold contains minimal, safe, and well-documented placeholder implementations to help you continue development quickly. @@ -53,7 +53,7 @@ NODE_ENV=development # package.json Write-File "package.json" @" { - "name": "convospan-full-pack", + "name": "CraftMyFunnel-full-pack", "version": "0.1.0", "private": true, "scripts": { @@ -295,7 +295,7 @@ export function analyzeCommunication(text: string) { Write-File "chrome-extension/manifest.json" @" { ""manifest_version"": 3, - ""name"": ""Convospan LinkedIn Bridge (scaffold)"", + ""name"": ""CraftMyFunnel LinkedIn Bridge (scaffold)"", ""version"": ""0.0.1"", ""permissions"": [""storage"", ""activeTab"", ""scripting""], ""host_permissions"": [""https://www.linkedin.com/*""], @@ -310,15 +310,15 @@ Write-File "chrome-extension/manifest.json" @" } "@ -Write-File "chrome-extension/content.js" "console.log('Convospan extension stub - content script');" -Write-File "chrome-extension/background.js" "console.log('Convospan extension stub - background');" +Write-File "chrome-extension/content.js" "console.log('CraftMyFunnel extension stub - content script');" +Write-File "chrome-extension/background.js" "console.log('CraftMyFunnel extension stub - background');" # simple Next page to satisfy build Write-File "src/pages/index.tsx" @" export default function Home() { return (
-

Convospan Full Pack - Scaffold

+

CraftMyFunnel Full Pack - Scaffold

POST /api/orchestrator/run with { company, contact, linkedin } to test orchestrator.

); @@ -326,13 +326,13 @@ export default function Home() { "@ # create zip -$zipPath = Join-Path (Get-Location) "convospan-full-pack.zip" +$zipPath = Join-Path (Get-Location) "CraftMyFunnel-full-pack.zip" if (Test-Path $zipPath) { Remove-Item $zipPath -Force } Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::CreateFromDirectory($root, $zipPath) Write-Host "Created zip:" $zipPath Write-Host "`nNext steps (recommended):" -Write-Host "1) Copy convospan-full-pack.zip to your project root and extract or merge files." +Write-Host "1) Copy CraftMyFunnel-full-pack.zip to your project root and extract or merge files." Write-Host "2) In project root run: npm install" Write-Host "3) Copy .env.example -> .env and fill keys or leave to use mocks." Write-Host "4) Run: npm run prisma:generate" diff --git a/database/migrations/001_initial_schema.sql b/database/migrations/001_initial_schema.sql index 4866698c..93f5aadd 100644 --- a/database/migrations/001_initial_schema.sql +++ b/database/migrations/001_initial_schema.sql @@ -1,5 +1,5 @@ -- Migration: 001_initial_schema --- Description: ConvoSpan Autonomous Engine Schema - Multi-tenant, PII Separation, Intelligence Domains +-- Description: CraftMyFunnel Autonomous Engine Schema - Multi-tenant, PII Separation, Intelligence Domains -- Dialect: PostgreSQL -- ============================================================ diff --git a/debug_paths.ps1 b/debug_paths.ps1 index 1764f23a..06745737 100644 --- a/debug_paths.ps1 +++ b/debug_paths.ps1 @@ -1,15 +1,15 @@ $root = (Get-Location).Path Write-Host "Root: $root" -$pack1 = Join-Path $root "convospan-postgres-pack" +$pack1 = Join-Path $root "CraftMyFunnel-postgres-pack" Write-Host "Pack1: $pack1" Write-Host "Test-Path Pack1: $(Test-Path $pack1)" -$pack2 = Join-Path $root "convospan-full-pack" +$pack2 = Join-Path $root "CraftMyFunnel-full-pack" Write-Host "Pack2: $pack2" Write-Host "Test-Path Pack2: $(Test-Path $pack2)" -$merged = Join-Path $root "convospan-merged-final" +$merged = Join-Path $root "CraftMyFunnel-merged-final" Write-Host "Merged: $merged" if (Test-Path $merged) { diff --git a/docs/DEPLOYMENT_RUNBOOK.md b/docs/DEPLOYMENT_RUNBOOK.md index e34efce9..9d9b6fd3 100644 --- a/docs/DEPLOYMENT_RUNBOOK.md +++ b/docs/DEPLOYMENT_RUNBOOK.md @@ -73,7 +73,7 @@ npm run docker:web On droplet: ```bash -git clone https://github.com/Convospanai-outreach/fullstack.git /opt/craftmyfunnel/fullstack +git clone https://github.com/craftmyfunnel-outreach/fullstack.git /opt/craftmyfunnel/fullstack cd /opt/craftmyfunnel/fullstack docker build -t craftmyfunnel-api:latest -f apps/api/Dockerfile apps/api ``` diff --git a/docs/NETJANA_SIGNAL_INTEGRATION_PLAN.md b/docs/NETJANA_SIGNAL_INTEGRATION_PLAN.md index 267241e4..f66be118 100644 --- a/docs/NETJANA_SIGNAL_INTEGRATION_PLAN.md +++ b/docs/NETJANA_SIGNAL_INTEGRATION_PLAN.md @@ -35,7 +35,7 @@ Still open or configurable: Grounded on: - `c:\Users\tewar\Desktop\craftmyfunnel_integration_spec.md` -- `c:\Users\tewar\Desktop\covospan_signal_schema.json` +- `c:\Users\tewar\Desktop\CraftMyFunnel_signal_schema.json` - `c:\Users\tewar\Desktop\signal_graph.md` Key contract from the Intel system: diff --git a/merge_convospan.ps1 b/merge_craftmyfunnel.ps1 similarity index 88% rename from merge_convospan.ps1 rename to merge_craftmyfunnel.ps1 index d616443b..1bf48b69 100644 --- a/merge_convospan.ps1 +++ b/merge_craftmyfunnel.ps1 @@ -1,10 +1,10 @@ -Write-Host "=== FIXED Convospan Merge System ===" -ForegroundColor Cyan +Write-Host "=== FIXED CraftMyFunnel Merge System ===" -ForegroundColor Cyan $root = (Get-Location).Path $main = $root -$pack1 = Join-Path $root "convospan-postgres-pack" -$pack2 = Join-Path $root "convospan-full-pack" -$merged = Join-Path $root "convospan-merged-final" +$pack1 = Join-Path $root "CraftMyFunnel-postgres-pack" +$pack2 = Join-Path $root "CraftMyFunnel-full-pack" +$merged = Join-Path $root "CraftMyFunnel-merged-final" # Verify folders exist foreach ($dir in @($pack1, $pack2)) { @@ -24,7 +24,7 @@ if (Test-Path -LiteralPath $merged) { # Report $report = Join-Path $merged "merge-report.txt" -[System.IO.File]::WriteAllText($report, "Convospan Merge Report`r`n=======================`r`nMAIN: $main`r`nPOSTGRES: $pack1`r`nFULLPACK: $pack2`r`n`r`n") +[System.IO.File]::WriteAllText($report, "CraftMyFunnel Merge Report`r`n=======================`r`nMAIN: $main`r`nPOSTGRES: $pack1`r`nFULLPACK: $pack2`r`n`r`n") function Safe-RelPath { param ( diff --git a/scripts/e2e_campaign_test.py b/scripts/e2e_campaign_test.py index 1a2fb3cd..f4218545 100644 --- a/scripts/e2e_campaign_test.py +++ b/scripts/e2e_campaign_test.py @@ -1,5 +1,5 @@ """ -ConvoSpan End-to-End Simulation Test +CraftMyFunnel End-to-End Simulation Test ===================================== 1. Logs in via the NextAuth credentials endpoint 2. Checks system/status (DB, Edge Node, Netjana) diff --git a/scripts/package-extension.ps1 b/scripts/package-extension.ps1 index 97b8ecab..6a473f47 100644 --- a/scripts/package-extension.ps1 +++ b/scripts/package-extension.ps1 @@ -2,7 +2,7 @@ $ErrorActionPreference = "Stop" $SourceDir = "$PSScriptRoot\..\apps\api\src\extension" $DistDir = "$PSScriptRoot\..\dist\chrome-extension" -$ZipPath = "$PSScriptRoot\..\dist\convospan-extension.zip" +$ZipPath = "$PSScriptRoot\..\dist\CraftMyFunnel-extension.zip" Write-Host "Cleaning dist directory..." if (Test-Path $DistDir) { diff --git a/scripts/start-local-beta.mjs b/scripts/start-local-beta.mjs index 924f77ff..97a72eb7 100644 --- a/scripts/start-local-beta.mjs +++ b/scripts/start-local-beta.mjs @@ -4,7 +4,7 @@ import { spawn } from "node:child_process"; const rootDir = process.cwd(); const prismaCli = path.join(rootDir, "node_modules", "prisma", "build", "index.js"); -const databaseUrl = process.env.DATABASE_URL || "postgresql://postgres:postgres@localhost:5433/convospan?schema=public"; +const databaseUrl = process.env.DATABASE_URL || "postgresql://postgres:postgres@localhost:5433/craftmyfunnel?schema=public"; const isWindows = process.platform === "win32"; const withEdge = process.argv.includes("--with-edge") || process.env.START_EDGE === "true"; @@ -73,7 +73,7 @@ async function isApiHealthy() { return false; } const json = await response.json().catch(() => null); - return json?.service === "convospan-api"; + return json?.service === "craftmyfunnel-api"; } catch { return false; } @@ -241,7 +241,7 @@ async function main() { ...process.env, EDGE_DATABASE_URL: process.env.EDGE_DATABASE_URL || - "postgresql://postgres:postgres@host.docker.internal:5433/convospan", + "postgresql://postgres:postgres@host.docker.internal:5433/craftmyfunnel", }, } ); diff --git a/scripts/verify_ci.sh b/scripts/verify_ci.sh index 89e83312..144137ce 100644 --- a/scripts/verify_ci.sh +++ b/scripts/verify_ci.sh @@ -20,7 +20,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" DOCKERFILE="docker/Dockerfile.verify" -IMAGE_NAME="convospan-verify" +IMAGE_NAME="CraftMyFunnel-verify" IMAGE_TAG="$(date +%Y%m%d-%H%M%S)" LOG_FILE="$PROJECT_ROOT/verification-$(date +%Y%m%d-%H%M%S).log" diff --git a/setup-dev.ps1 b/setup-dev.ps1 index c02c9ada..605ea195 100644 --- a/setup-dev.ps1 +++ b/setup-dev.ps1 @@ -1,6 +1,6 @@ -# ConvoSpan Local Setup Script (Powershell) +# CraftMyFunnel Local Setup Script (Powershell) -Write-Host "🚀 Setting up ConvoSpan for local development..." -ForegroundColor Cyan +Write-Host "🚀 Setting up CraftMyFunnel for local development..." -ForegroundColor Cyan if (-Not (Test-Path .env)) { Write-Host "📄 Creating .env from .env.example..." -ForegroundColor Yellow diff --git a/setup-dev.sh b/setup-dev.sh index cff3b2d5..1eb46a47 100644 --- a/setup-dev.sh +++ b/setup-dev.sh @@ -1,7 +1,7 @@ #!/bin/bash -# ConvoSpan Local Setup Script (Unix) +# CraftMyFunnel Local Setup Script (Unix) -echo "🚀 Setting up ConvoSpan for local development..." +echo "🚀 Setting up CraftMyFunnel for local development..." if [ ! -f .env ]; then echo "📄 Creating .env from .env.example..." From 46ba0c6d27041bf25a11e1e2aa4e653c96ac7007 Mon Sep 17 00:00:00 2001 From: Sid Date: Thu, 28 May 2026 16:36:48 +0530 Subject: [PATCH 2/3] Stabilize PR workflows --- .agent/skills/Sentinel.md | 4 +-- .github/workflows/ci.yml | 16 +++++------ .github/workflows/neon_workflow.yml | 35 +++++++++++++++++++++-- .github/workflows/phi3-runtime-verify.yml | 4 +-- .github/workflows/playwright.yml | 20 ++++++------- .github/workflows/production-gate.yml | 20 ++++++------- 6 files changed, 65 insertions(+), 34 deletions(-) diff --git a/.agent/skills/Sentinel.md b/.agent/skills/Sentinel.md index bdde2a6b..a8e10da7 100644 --- a/.agent/skills/Sentinel.md +++ b/.agent/skills/Sentinel.md @@ -1,11 +1,11 @@ --- name: Sentinel Audit -description: A high-precision data auditor and systems engineer (Covospan Sentinel). +description: A high-precision data auditor and systems engineer (CraftMyFunnel Sentinel). --- # Sentinel Agent Prompt -**System Role**: You are the **Covospan Sentinel**. Your mission is to validate incoming scraped payloads and monitor the connection health of the scraper nodes. You verify data quality, consistency, and operational stability before ingestion. +**System Role**: You are the **CraftMyFunnel Sentinel**. Your mission is to validate incoming scraped payloads and monitor the connection health of the scraper nodes. You verify data quality, consistency, and operational stability before ingestion. ## Task 1: Data Quality Check (DQC) - **Schema Validation**: Ensure `title`, `description`, `friction_signal`, `source_url`, `region_id` are present. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52fd6481..c58d5bc2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres - POSTGRES_DB: convospan_ci + POSTGRES_DB: craftmyfunnel_ci ports: - 5432:5432 options: >- @@ -60,14 +60,14 @@ jobs: - name: Generate Prisma Client working-directory: apps/web - run: DATABASE_URL="postgresql://postgres:postgres@localhost:5432/convospan_ci" DIRECT_URL="postgresql://postgres:postgres@localhost:5432/convospan_ci" npx prisma generate --config prisma/prisma.config.ts --schema prisma/schema.prisma + run: DATABASE_URL="postgresql://postgres:postgres@localhost:5432/craftmyfunnel_ci" DIRECT_URL="postgresql://postgres:postgres@localhost:5432/craftmyfunnel_ci" npx prisma generate --config prisma/prisma.config.ts --schema prisma/schema.prisma - name: Setup Database Schema working-directory: apps/web run: npx prisma db push --config prisma/prisma.config.ts --schema prisma/schema.prisma --skip-generate env: - DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/convospan_ci" - DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/convospan_ci" + DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/craftmyfunnel_ci" + DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/craftmyfunnel_ci" - name: Type Check working-directory: apps/web @@ -79,8 +79,8 @@ jobs: env: NEXT_PUBLIC_API_URL: http://localhost:3001 NEXT_PHASE: phase-production-build - DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/convospan_ci" - DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/convospan_ci" + DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/craftmyfunnel_ci" + DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/craftmyfunnel_ci" NEXTAUTH_SECRET: ci-secret-not-real NEXTAUTH_URL: http://localhost:3000 SKIP_ENV_VALIDATION: "true" @@ -129,8 +129,8 @@ jobs: run: node scripts/check-critical-runtime-files.mjs - name: Build API image - run: docker build -t convospan-api-ci -f apps/api/Dockerfile . + run: docker build -t craftmyfunnel-api-ci -f apps/api/Dockerfile . - name: Build Edge image (optional) continue-on-error: true - run: docker build -t convospan-edge-ci -f apps/edge-fastapi/Dockerfile apps/edge-fastapi + run: docker build -t craftmyfunnel-edge-ci -f apps/edge-fastapi/Dockerfile apps/edge-fastapi diff --git a/.github/workflows/neon_workflow.yml b/.github/workflows/neon_workflow.yml index b0f7b575..0bce88f1 100644 --- a/.github/workflows/neon_workflow.yml +++ b/.github/workflows/neon_workflow.yml @@ -15,12 +15,17 @@ jobs: setup: name: Setup outputs: - branch: ${{ steps.branch_name.outputs.current_branch }} + branch: ${{ steps.branch_name.outputs.safe_branch }} runs-on: ubuntu-latest steps: - name: Get branch name id: branch_name - uses: tj-actions/branch-names@v8 + shell: bash + run: | + branch="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}" + safe_branch="$(printf '%s' "$branch" | tr '/[:upper:]' '-[:lower:]' | tr -cd 'a-z0-9._-')" + safe_branch="${safe_branch:0:48}" + echo "safe_branch=${safe_branch:-preview}" >> "$GITHUB_OUTPUT" create_neon_branch: name: Create Neon Branch @@ -38,7 +43,20 @@ jobs: - name: Get branch expiration date as an env variable (2 weeks from now) id: get_expiration_date run: echo "EXPIRES_AT=$(date -u --date '+14 days' +'%Y-%m-%dT%H:%M:%SZ')" >> "$GITHUB_ENV" + - name: Check Neon configuration + id: neon_config + env: + NEON_PROJECT_ID: ${{ vars.NEON_PROJECT_ID }} + NEON_API_KEY: ${{ secrets.NEON_API_KEY }} + run: | + if [ -n "$NEON_PROJECT_ID" ] && [ -n "$NEON_API_KEY" ]; then + echo "configured=true" >> "$GITHUB_OUTPUT" + else + echo "configured=false" >> "$GITHUB_OUTPUT" + echo "Neon preview branch configuration is not present; skipping branch creation." >> "$GITHUB_STEP_SUMMARY" + fi - name: Create Neon Branch + if: steps.neon_config.outputs.configured == 'true' id: create_neon_branch uses: neondatabase/create-branch-action@v6 with: @@ -53,7 +71,20 @@ jobs: if: github.event_name == 'pull_request' && github.event.action == 'closed' runs-on: ubuntu-latest steps: + - name: Check Neon configuration + id: neon_config + env: + NEON_PROJECT_ID: ${{ vars.NEON_PROJECT_ID }} + NEON_API_KEY: ${{ secrets.NEON_API_KEY }} + run: | + if [ -n "$NEON_PROJECT_ID" ] && [ -n "$NEON_API_KEY" ]; then + echo "configured=true" >> "$GITHUB_OUTPUT" + else + echo "configured=false" >> "$GITHUB_OUTPUT" + echo "Neon preview branch configuration is not present; skipping branch deletion." >> "$GITHUB_STEP_SUMMARY" + fi - name: Delete Neon Branch + if: steps.neon_config.outputs.configured == 'true' uses: neondatabase/delete-branch-action@v3 with: project_id: ${{ vars.NEON_PROJECT_ID }} diff --git a/.github/workflows/phi3-runtime-verify.yml b/.github/workflows/phi3-runtime-verify.yml index 5ddd6a63..cfcc1b31 100644 --- a/.github/workflows/phi3-runtime-verify.yml +++ b/.github/workflows/phi3-runtime-verify.yml @@ -36,7 +36,7 @@ jobs: fetch-depth: 1 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v4 + uses: docker/setup-buildx-action@v3 - name: Verify required files exist run: | @@ -77,7 +77,7 @@ jobs: - name: Upload verification artifacts if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@v4 with: name: phi3-verification-logs-${{ github.run_id }} path: verification-artifacts/ diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 868771d1..4b7f57bd 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -18,7 +18,7 @@ jobs: image: ankane/pgvector:latest env: POSTGRES_PASSWORD: password - POSTGRES_DB: convospan + POSTGRES_DB: craftmyfunnel ports: - 5432:5432 options: >- @@ -54,22 +54,22 @@ jobs: npx prisma generate --config prisma/prisma.config.ts --schema prisma/schema.prisma npx prisma db push --config prisma/prisma.config.ts --schema prisma/schema.prisma env: - DATABASE_URL: postgresql://postgres:password@localhost:5432/convospan - DIRECT_URL: postgresql://postgres:password@localhost:5432/convospan + DATABASE_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel + DIRECT_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel - name: Create test user working-directory: apps/web run: npx tsx scripts/create-test-user.ts env: - DATABASE_URL: postgresql://postgres:password@localhost:5432/convospan - DIRECT_URL: postgresql://postgres:password@localhost:5432/convospan + DATABASE_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel + DIRECT_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel - name: Build application working-directory: apps/web run: npm run build env: - DATABASE_URL: postgresql://postgres:password@localhost:5432/convospan - DIRECT_URL: postgresql://postgres:password@localhost:5432/convospan + DATABASE_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel + DIRECT_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel NEXTAUTH_SECRET: ci-playwright-secret NEXTAUTH_URL: http://localhost:3000 NEXT_PUBLIC_API_URL: http://localhost:3001 @@ -83,15 +83,15 @@ jobs: working-directory: apps/web run: npx playwright test env: - DATABASE_URL: postgresql://postgres:password@localhost:5432/convospan - DIRECT_URL: postgresql://postgres:password@localhost:5432/convospan + DATABASE_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel + DIRECT_URL: postgresql://postgres:password@localhost:5432/craftmyfunnel NEXTAUTH_SECRET: ci-playwright-secret NEXTAUTH_URL: http://localhost:3000 TEST_USER_EMAIL: audit_user@example.com TEST_USER_PASSWORD: AuditPassword123! REDIS_URL: redis://localhost:6379 - - uses: actions/upload-artifact@v7 + - uses: actions/upload-artifact@v4 if: always() with: name: playwright-report diff --git a/.github/workflows/production-gate.yml b/.github/workflows/production-gate.yml index 8995d607..ee88aff9 100644 --- a/.github/workflows/production-gate.yml +++ b/.github/workflows/production-gate.yml @@ -20,7 +20,7 @@ jobs: env: POSTGRES_USER: postgres POSTGRES_PASSWORD: password - POSTGRES_DB: convospan + POSTGRES_DB: craftmyfunnel ports: - 5432:5432 options: >- @@ -57,35 +57,35 @@ jobs: working-directory: apps/web run: npx prisma generate --config prisma/prisma.config.ts --schema prisma/schema.prisma env: - DATABASE_URL: "postgresql://postgres:password@localhost:5432/convospan" - DIRECT_URL: "postgresql://postgres:password@localhost:5432/convospan" + DATABASE_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" + DIRECT_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" - name: Setup Database working-directory: apps/web run: npx prisma db push --config prisma/prisma.config.ts --schema prisma/schema.prisma env: - DATABASE_URL: "postgresql://postgres:password@localhost:5432/convospan" - DIRECT_URL: "postgresql://postgres:password@localhost:5432/convospan" + DATABASE_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" + DIRECT_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" - name: Seed Readiness Data working-directory: apps/web run: npm run readiness:seed env: - DATABASE_URL: "postgresql://postgres:password@localhost:5432/convospan" - DIRECT_URL: "postgresql://postgres:password@localhost:5432/convospan" + DATABASE_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" + DIRECT_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" - name: Execute Production Readiness Audit id: audit working-directory: apps/web run: npm run readiness:audit env: - DATABASE_URL: "postgresql://postgres:password@localhost:5432/convospan" - DIRECT_URL: "postgresql://postgres:password@localhost:5432/convospan" + DATABASE_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" + DIRECT_URL: "postgresql://postgres:password@localhost:5432/craftmyfunnel" REDIS_URL: "redis://localhost:6379" NEXTAUTH_SECRET: ci-secret NEXTAUTH_URL: http://localhost:3000 NODE_ENV: production - GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} + GEMINI_API_KEY: "ci-dummy-key" - name: Hardening Compliance Report if: always() From f2bff4c90e1569396441a5d84fca4197eb355606 Mon Sep 17 00:00:00 2001 From: Sid Date: Thu, 28 May 2026 16:41:27 +0530 Subject: [PATCH 3/3] Pin PR workflows to stable runner --- .github/workflows/ci.yml | 6 +++--- .github/workflows/neon_workflow.yml | 6 +++--- .github/workflows/phi3-runtime-verify.yml | 2 +- .github/workflows/playwright.yml | 2 +- .github/workflows/production-gate.yml | 2 +- .github/workflows/vercel-parity-build.yml | 2 +- .github/workflows/verify.yml | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c58d5bc2..fa608d95 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ on: jobs: web-build: name: Web Build (apps/web) - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 services: postgres: @@ -88,7 +88,7 @@ jobs: api-typecheck: name: API Strict Typecheck (apps/api) - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -120,7 +120,7 @@ jobs: docker-smoke: name: Docker Build Smoke (api required, edge-fastapi optional) - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/neon_workflow.yml b/.github/workflows/neon_workflow.yml index 0bce88f1..6c7685f7 100644 --- a/.github/workflows/neon_workflow.yml +++ b/.github/workflows/neon_workflow.yml @@ -16,7 +16,7 @@ jobs: name: Setup outputs: branch: ${{ steps.branch_name.outputs.safe_branch }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Get branch name id: branch_name @@ -38,7 +38,7 @@ jobs: github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.action == 'reopened') - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Get branch expiration date as an env variable (2 weeks from now) id: get_expiration_date @@ -69,7 +69,7 @@ jobs: name: Delete Neon Branch needs: setup if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Check Neon configuration id: neon_config diff --git a/.github/workflows/phi3-runtime-verify.yml b/.github/workflows/phi3-runtime-verify.yml index cfcc1b31..f6dd0df3 100644 --- a/.github/workflows/phi3-runtime-verify.yml +++ b/.github/workflows/phi3-runtime-verify.yml @@ -26,7 +26,7 @@ concurrency: jobs: runtime-verify: name: Phi-3 Runtime Evaluation - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 timeout-minutes: 60 steps: diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 4b7f57bd..007333f5 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -11,7 +11,7 @@ jobs: test: name: Playwright (apps/web) timeout-minutes: 60 - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 services: postgres: diff --git a/.github/workflows/production-gate.yml b/.github/workflows/production-gate.yml index ee88aff9..7d8750dc 100644 --- a/.github/workflows/production-gate.yml +++ b/.github/workflows/production-gate.yml @@ -12,7 +12,7 @@ on: jobs: validate-readiness: name: Production Stability Audit (apps/web) - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 services: postgres: diff --git a/.github/workflows/vercel-parity-build.yml b/.github/workflows/vercel-parity-build.yml index 4e9f0f44..10d518ea 100644 --- a/.github/workflows/vercel-parity-build.yml +++ b/.github/workflows/vercel-parity-build.yml @@ -12,7 +12,7 @@ concurrency: jobs: vercel-parity-build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout repo diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index ec9d59ec..a9943325 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -14,7 +14,7 @@ concurrency: jobs: verify-safety-invariants: name: Verify Phi-3 Safety Enforcement - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 timeout-minutes: 5 steps: @@ -50,7 +50,7 @@ jobs: merge-gate: name: Merge Gate needs: verify-safety-invariants - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 if: always() steps: - name: Check verification result