← back to Ventura Claw
Purge remaining businessclaw / commerce-claw refs across docs + code
5f60f03ed3ea4eff41043aea5346a9b1e5190e34 · 2026-05-06 10:58:26 -0700 · Steve Abrams
Steve flagged that login.html, DEPLOY.md, API.md, MARKETING.md, sync-tokens
defaults, package.json names, viewer/server.js, integration tests, and
relay/server.js still carried the old brand. Mass-rename:
- businessclaw.agentabrams.com -> venturaclaw.agentabrams.com
- *.businessclaw.local -> *.venturaclaw.local (admin/demo accounts)
- steve@businessclaw.com -> steve@venturaclaw.local
- info@businessclaw.com -> info@venturaclaw.agentabrams.com
- commerce-claw -> ventura-claw
- commerceclaw / businessclaw -> venturaclaw
Also renamed the email fields in production users.json on Kamatera
(admin@businessclaw.local -> admin@venturaclaw.local; steve@businessclaw.com
-> steve@venturaclaw.local). Hashed passwords preserved in place.
Login on the canonical hostname now works with steve@venturaclaw.local +
the existing password (verified 200 OK).
Files touched
M API.mdM DEPLOY.mdM MARKETING.mdM PLAN.mdM app/package.jsonM relay/server.jsM scripts/auto-build.shM scripts/populate-credentials.jsM scripts/sync-tokens.jsM server/connectors/archive.jsM server/package-lock.jsonM server/package.jsonM server/public/admin-audit.htmlM server/public/homepage.htmlM server/public/login.htmlM server/public/og-cover.svgM server/server.jsM server/tests/integration.test.jsM viewer/server.js
Diff
commit 5f60f03ed3ea4eff41043aea5346a9b1e5190e34
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed May 6 10:58:26 2026 -0700
Purge remaining businessclaw / commerce-claw refs across docs + code
Steve flagged that login.html, DEPLOY.md, API.md, MARKETING.md, sync-tokens
defaults, package.json names, viewer/server.js, integration tests, and
relay/server.js still carried the old brand. Mass-rename:
- businessclaw.agentabrams.com -> venturaclaw.agentabrams.com
- *.businessclaw.local -> *.venturaclaw.local (admin/demo accounts)
- steve@businessclaw.com -> steve@venturaclaw.local
- info@businessclaw.com -> info@venturaclaw.agentabrams.com
- commerce-claw -> ventura-claw
- commerceclaw / businessclaw -> venturaclaw
Also renamed the email fields in production users.json on Kamatera
(admin@businessclaw.local -> admin@venturaclaw.local; steve@businessclaw.com
-> steve@venturaclaw.local). Hashed passwords preserved in place.
Login on the canonical hostname now works with steve@venturaclaw.local +
the existing password (verified 200 OK).
---
API.md | 52 ++++++++++++++++++++--------------------
DEPLOY.md | 32 ++++++++++++-------------
MARKETING.md | 10 ++++----
PLAN.md | 2 +-
app/package.json | 2 +-
relay/server.js | 12 +++++-----
scripts/auto-build.sh | 2 +-
scripts/populate-credentials.js | 12 +++++-----
scripts/sync-tokens.js | 2 +-
server/connectors/archive.js | 2 +-
server/package-lock.json | 4 ++--
server/package.json | 2 +-
server/public/admin-audit.html | 2 +-
server/public/homepage.html | 2 +-
server/public/login.html | 4 ++--
server/public/og-cover.svg | 2 +-
server/server.js | 18 +++++++-------
server/tests/integration.test.js | 8 +++----
viewer/server.js | 2 +-
19 files changed, 86 insertions(+), 86 deletions(-)
diff --git a/API.md b/API.md
index 441eb41..2d7ee20 100644
--- a/API.md
+++ b/API.md
@@ -1,6 +1,6 @@
# VenturaClaw API Reference
-Production endpoint: `https://businessclaw.agentabrams.com`
+Production endpoint: `https://venturaclaw.agentabrams.com`
---
@@ -14,7 +14,7 @@ VenturaClaw uses HMAC-signed cookies for session management. All protected endpo
**Request:**
```json
{
- "email": "admin@businessclaw.local",
+ "email": "admin@venturaclaw.local",
"password": "admin"
}
```
@@ -41,9 +41,9 @@ VenturaClaw uses HMAC-signed cookies for session management. All protected endpo
**curl:**
```bash
-curl -X POST https://businessclaw.agentabrams.com/api/auth/login \
+curl -X POST https://venturaclaw.agentabrams.com/api/auth/login \
-H "Content-Type: application/json" \
- -d '{"email":"admin@businessclaw.local","password":"admin"}' \
+ -d '{"email":"admin@venturaclaw.local","password":"admin"}' \
-c cookies.txt
```
@@ -66,7 +66,7 @@ curl -X POST https://businessclaw.agentabrams.com/api/auth/login \
**curl:**
```bash
-curl -X POST https://businessclaw.agentabrams.com/api/auth/logout \
+curl -X POST https://venturaclaw.agentabrams.com/api/auth/logout \
-b cookies.txt
```
@@ -80,7 +80,7 @@ curl -X POST https://businessclaw.agentabrams.com/api/auth/logout \
{
"user": {
"sub": 1,
- "email": "admin@businessclaw.local",
+ "email": "admin@venturaclaw.local",
"role": "admin",
"name": "Admin",
"iat": 1714982400000
@@ -136,7 +136,7 @@ VenturaClaw connectors are pre-built integrations (Stripe, Cloudflare, Shopify,
**curl:**
```bash
-curl https://businessclaw.agentabrams.com/api/connectors \
+curl https://venturaclaw.agentabrams.com/api/connectors \
-b cookies.txt \
-H "Accept: application/json"
```
@@ -174,7 +174,7 @@ curl https://businessclaw.agentabrams.com/api/connectors \
**curl:**
```bash
-curl https://businessclaw.agentabrams.com/api/connectors/stripe/health \
+curl https://venturaclaw.agentabrams.com/api/connectors/stripe/health \
-b cookies.txt
```
@@ -229,7 +229,7 @@ Users save API keys, OAuth tokens, and other credentials for connectors. All sto
**curl:**
```bash
-curl https://businessclaw.agentabrams.com/api/me/connections \
+curl https://venturaclaw.agentabrams.com/api/me/connections \
-b cookies.txt
```
@@ -278,7 +278,7 @@ Fields accepted are defined by the connector's schema in GET /api/me/connections
**curl:**
```bash
-curl -X POST https://businessclaw.agentabrams.com/api/me/connections/stripe \
+curl -X POST https://venturaclaw.agentabrams.com/api/me/connections/stripe \
-b cookies.txt \
-H "Content-Type: application/json" \
-d '{"api_key":"sk_live_...","publishable_key":"pk_live_..."}'
@@ -302,7 +302,7 @@ curl -X POST https://businessclaw.agentabrams.com/api/me/connections/stripe \
**curl:**
```bash
-curl -X DELETE https://businessclaw.agentabrams.com/api/me/connections/stripe \
+curl -X DELETE https://venturaclaw.agentabrams.com/api/me/connections/stripe \
-b cookies.txt
```
@@ -361,7 +361,7 @@ Recognizes 45+ standard environment variables (STRIPE_SECRET_KEY, CLOUDFLARE_API
**curl:**
```bash
-curl -X POST https://businessclaw.agentabrams.com/api/me/connections/import \
+curl -X POST https://venturaclaw.agentabrams.com/api/me/connections/import \
-b cookies.txt \
-H "Content-Type: application/json" \
-d @- << 'EOF'
@@ -396,7 +396,7 @@ VenturaClaw supports 10 OAuth providers (Google, Slack, Stripe Connect, Notion,
"register_url": "https://console.cloud.google.com/apis/credentials/oauthclient",
"docs_url": "https://developers.google.com/identity/protocols/oauth2/web-server",
"note": "Create OAuth 2.0 Client ID · Application type: Web · Authorized redirect URI: paste below.",
- "redirect_uri": "https://businessclaw.agentabrams.com/oauth/google/callback",
+ "redirect_uri": "https://venturaclaw.agentabrams.com/oauth/google/callback",
"has_credentials": true,
"registered_at": "2026-05-04T10:30:00Z"
},
@@ -407,7 +407,7 @@ VenturaClaw supports 10 OAuth providers (Google, Slack, Stripe Connect, Notion,
"registered_at": null
}
],
- "redirect_uri_pattern": "https://businessclaw.agentabrams.com/oauth/<vendor>/callback"
+ "redirect_uri_pattern": "https://venturaclaw.agentabrams.com/oauth/<vendor>/callback"
}
```
@@ -483,7 +483,7 @@ Creates a temporary cloud browser (expires in 10 min) pre-aimed at the vendor's
"session_id": "abc-123-def",
"live_view": "https://api.browserbase.com/debug/abc-123-def",
"register_url": "https://console.cloud.google.com/apis/credentials/oauthclient",
- "redirect_uri": "https://businessclaw.agentabrams.com/oauth/google/callback",
+ "redirect_uri": "https://venturaclaw.agentabrams.com/oauth/google/callback",
"hint": "Step 1: paste https://console.cloud.google.com/apis/credentials/oauthclient into the cloud browser's address bar. Step 2: register the app, set redirect URI, copy Client ID/Secret. Step 3: paste them back here."
}
```
@@ -537,7 +537,7 @@ User clicks "Connect Google" (or other vendor) on the connections page → this
```
Location: https://accounts.google.com/o/oauth2/v2/auth?
client_id=...&
- redirect_uri=https://businessclaw.agentabrams.com/oauth/google/callback&
+ redirect_uri=https://venturaclaw.agentabrams.com/oauth/google/callback&
state=<signed-24-byte-token>&
response_type=code&
scope=...
@@ -692,7 +692,7 @@ Response:
**curl:**
```bash
-curl -X POST https://businessclaw.agentabrams.com/api/chat \
+curl -X POST https://venturaclaw.agentabrams.com/api/chat \
-b cookies.txt \
-H "Content-Type: application/json" \
-d '{"message":"what is my stripe balance"}'
@@ -714,7 +714,7 @@ Admins see all approvals. Regular users see only their own.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"userId": 2,
- "userEmail": "demo@businessclaw.local",
+ "userEmail": "demo@venturaclaw.local",
"connector": "stripe",
"connectorName": "Stripe",
"action": "refund.create",
@@ -764,7 +764,7 @@ Executes the action on approve (if real impl exists), logs comms-compliance chec
"approval": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "approved",
- "decidedBy": "admin@businessclaw.local",
+ "decidedBy": "admin@venturaclaw.local",
"decidedAt": "2026-05-05T18:35:00Z",
"executionResult": {
"ok": true,
@@ -825,7 +825,7 @@ Executes the action on approve (if real impl exists), logs comms-compliance chec
"id": "550e8400-e29b-41d4-a716-446655440000",
"connector": "slack",
"action": "chat.postMessage",
- "by": "admin@businessclaw.local",
+ "by": "admin@venturaclaw.local",
"ok": true
},
{
@@ -839,7 +839,7 @@ Executes the action on approve (if real impl exists), logs comms-compliance chec
"ts": "2026-05-05T18:00:00Z",
"kind": "login",
"userId": 2,
- "email": "demo@businessclaw.local",
+ "email": "demo@venturaclaw.local",
"role": "user"
}
],
@@ -869,13 +869,13 @@ Executes the action on approve (if real impl exists), logs comms-compliance chec
"users": [
{
"id": 1,
- "email": "admin@businessclaw.local",
+ "email": "admin@venturaclaw.local",
"name": "Admin",
"role": "admin"
},
{
"id": 2,
- "email": "demo@businessclaw.local",
+ "email": "demo@venturaclaw.local",
"name": "Demo User",
"role": "user"
}
@@ -891,7 +891,7 @@ Executes the action on approve (if real impl exists), logs comms-compliance chec
**Request:**
```json
{
- "email": "newuser@businessclaw.local",
+ "email": "newuser@venturaclaw.local",
"password": "temporary-password",
"name": "New User",
"role": "user"
@@ -904,7 +904,7 @@ Executes the action on approve (if real impl exists), logs comms-compliance chec
"ok": true,
"user": {
"id": 3,
- "email": "newuser@businessclaw.local",
+ "email": "newuser@venturaclaw.local",
"name": "New User",
"role": "user"
}
@@ -1098,7 +1098,7 @@ All data persists to JSON files in `/server/data/`:
## Public Domain
-VenturaClaw is deployed to `https://businessclaw.agentabrams.com`. All subdomains/paths require SSL. Robots.txt blocks `/admin` and `/api` from search indexing.
+VenturaClaw is deployed to `https://venturaclaw.agentabrams.com`. All subdomains/paths require SSL. Robots.txt blocks `/admin` and `/api` from search indexing.
---
diff --git a/DEPLOY.md b/DEPLOY.md
index 139353c..50b188b 100644
--- a/DEPLOY.md
+++ b/DEPLOY.md
@@ -1,10 +1,10 @@
# VenturaClaw — Go-Live Deployment
-**Target:** `businessclaw.agentabrams.com` → Kamatera (45.61.58.125) → port 9788, fronted by nginx + Cloudflare proxy.
+**Target:** `venturaclaw.agentabrams.com` → Kamatera (45.61.58.125) → port 9788, fronted by nginx + Cloudflare proxy.
## ✅ Done locally
-- Express server live on `127.0.0.1:9788` (pm2 id varies; name `commerce-claw`)
-- Admin/user login working: `admin@businessclaw.local / admin` and `demo@businessclaw.local / demo`
+- Express server live on `127.0.0.1:9788` (pm2 id varies; name `ventura-claw`)
+- Admin/user login working: `admin@venturaclaw.local / admin` and `demo@venturaclaw.local / demo`
- 56 connectors served, audit log + approval queue functional
- pm2 dump saved (will resurrect on reboot)
@@ -14,7 +14,7 @@
Run in your CF MCP / dashboard:
- Zone: `agentabrams.com`
- Type: `A`
-- Name: `businessclaw`
+- Name: `venturaclaw`
- Value: `45.61.58.125`
- Proxy: ON (orange cloud)
- TTL: Auto
@@ -24,21 +24,21 @@ From this Mac:
```bash
rsync -av --delete --exclude node_modules --exclude data \
~/Projects/business-claw/server/ \
- root@45.61.58.125:/root/public-projects/commerce-claw/
+ root@45.61.58.125:/root/public-projects/ventura-claw/
-ssh root@45.61.58.125 'cd /root/public-projects/commerce-claw && \
+ssh root@45.61.58.125 'cd /root/public-projects/ventura-claw && \
npm install --omit=dev --silent && \
- CC_SECRET=$(openssl rand -hex 32) PORT=9788 PUBLIC_DOMAIN=businessclaw.agentabrams.com \
- pm2 start server.js --name commerce-claw --update-env --time && \
+ CC_SECRET=$(openssl rand -hex 32) PORT=9788 PUBLIC_DOMAIN=venturaclaw.agentabrams.com \
+ pm2 start server.js --name ventura-claw --update-env --time && \
pm2 save'
```
### 3. nginx site (Kamatera)
```bash
-ssh root@45.61.58.125 'cat > /etc/nginx/sites-available/businessclaw.agentabrams.com <<NGINX
+ssh root@45.61.58.125 'cat > /etc/nginx/sites-available/venturaclaw.agentabrams.com <<NGINX
server {
listen 80;
- server_name businessclaw.agentabrams.com;
+ server_name venturaclaw.agentabrams.com;
location / {
proxy_pass http://127.0.0.1:9788;
proxy_http_version 1.1;
@@ -50,20 +50,20 @@ server {
}
}
NGINX
-ln -sf /etc/nginx/sites-available/businessclaw.agentabrams.com /etc/nginx/sites-enabled/
+ln -sf /etc/nginx/sites-available/venturaclaw.agentabrams.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx'
```
### 4. SSL — Cloudflare proxy = origin doesn't need a real cert (Flexible mode acceptable for v1).
For Full(Strict) later:
```bash
-ssh root@45.61.58.125 'certbot --nginx -d businessclaw.agentabrams.com -n --agree-tos -m info@agentabrams.com'
+ssh root@45.61.58.125 'certbot --nginx -d venturaclaw.agentabrams.com -n --agree-tos -m info@agentabrams.com'
```
### 5. Smoke test
```bash
-curl -sI https://businessclaw.agentabrams.com/healthz
-curl -s https://businessclaw.agentabrams.com/login | grep -o '<title>.*</title>'
+curl -sI https://venturaclaw.agentabrams.com/healthz
+curl -s https://venturaclaw.agentabrams.com/login | grep -o '<title>.*</title>'
```
### 6. Per Steve's standing rule: dedupe sites-enabled
@@ -73,9 +73,9 @@ ssh root@45.61.58.125 'ls -la /etc/nginx/sites-enabled/ | grep -E "\.(bak|old)$"
```
## Production checklist (Steve's rules)
-- [x] info@<domain> surfaced — footer says `info@agentabrams.com` (umbrella). Add MX/forwarder for `info@businessclaw.agentabrams.com` if you want a dedicated mailbox.
+- [x] info@<domain> surfaced — footer says `info@agentabrams.com` (umbrella). Add MX/forwarder for `info@venturaclaw.agentabrams.com` if you want a dedicated mailbox.
- [ ] Verify nginx proxy_pass port 9788 matches pm2 PORT after deploy
- [ ] Test admin + user login + a chat-triggered approval flow end-to-end
- [ ] Add to `~/cncp-starter/cncp-config.json` domains[]
- [x] CC_SECRET = openssl-random per env (NOT the dev default)
-- [ ] Rotate `admin@businessclaw.local` password to a real one before public traffic
+- [ ] Rotate `admin@venturaclaw.local` password to a real one before public traffic
diff --git a/MARKETING.md b/MARKETING.md
index 28e7d07..ad2847e 100644
--- a/MARKETING.md
+++ b/MARKETING.md
@@ -10,7 +10,7 @@
>
> Try the live demo on the homepage — type a command, watch the 56-connector grid light up the matched tile. No login needed for the demo. The classifier runs on my hardware, not OpenAI/Anthropic.
>
-> https://businessclaw.agentabrams.com/
+> https://venturaclaw.agentabrams.com/
>
> Stack: Express + JSON store (will be PG when user count crosses 5), local Ollama qwen3:14b for routing (zero per-request inference cost), AES-256-GCM at rest, Browserbase for OAuth-app registration sandbox. Single-file HTML pages, no SPA, no SDK to install.
>
@@ -28,7 +28,7 @@
## Twitter / X announce (280 chars)
-> VenturaClaw is live: type one sentence ("refund order 1234 on shopify"), the local LLM picks the right SaaS tool from 56 wired connectors, runs it. Sensitive actions gated by approval queue. No workflow builder. No third-party LLM. https://businessclaw.agentabrams.com/
+> VenturaClaw is live: type one sentence ("refund order 1234 on shopify"), the local LLM picks the right SaaS tool from 56 wired connectors, runs it. Sensitive actions gated by approval queue. No workflow builder. No third-party LLM. https://venturaclaw.agentabrams.com/
---
@@ -39,7 +39,7 @@
**Body:**
Hey IH,
-I just shipped VenturaClaw at https://businessclaw.agentabrams.com/. Quick summary:
+I just shipped VenturaClaw at https://venturaclaw.agentabrams.com/. Quick summary:
**The problem:** Zapier, Make, n8n all sell you the *canvas*. You drag triggers to actions, wire them up, maintain them. The actual job is one English sentence; the canvas is a tax.
@@ -64,12 +64,12 @@ Looking for feedback on: the demo UX (does it feel responsive enough?), the home
After verifying domain ownership in Google Search Console (DNS TXT or HTML meta tag — DNS is cleaner; add at Cloudflare):
-1. Search Console → Sitemaps → Add: `https://businessclaw.agentabrams.com/sitemap.xml`
+1. Search Console → Sitemaps → Add: `https://venturaclaw.agentabrams.com/sitemap.xml`
2. Bing Webmaster Tools → Sitemaps → same URL
3. IndexNow (faster Bing/Yandex indexing): the GET below pings them with the changed URLs
```bash
-curl "https://www.bing.com/indexnow?url=https://businessclaw.agentabrams.com/&key=KEY-FILE-NAME"
+curl "https://www.bing.com/indexnow?url=https://venturaclaw.agentabrams.com/&key=KEY-FILE-NAME"
```
(IndexNow needs a key file at `/<KEY>.txt` containing the key as proof of ownership — set up later)
diff --git a/PLAN.md b/PLAN.md
index 172fb44..7416440 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -76,7 +76,7 @@ n8n · Zapier · Make · PostgreSQL · Supabase · Airtable
## Auto-execution
`scripts/auto-build.sh` — single entry point. Runs all phases sequentially, emits events to `logs/build-events.jsonl`, never prompts.
-Runs as pm2 service `commerce-claw-builder`. Viewer runs as pm2 service `commerce-claw-viewer` on :9785.
+Runs as pm2 service `ventura-claw-builder`. Viewer runs as pm2 service `ventura-claw-viewer` on :9785.
## Out of scope (v1)
- Real OAuth app review submissions (manual; Steve does these)
diff --git a/app/package.json b/app/package.json
index ee03d74..92a8f92 100644
--- a/app/package.json
+++ b/app/package.json
@@ -1,5 +1,5 @@
{
- "name": "commerce-claw",
+ "name": "ventura-claw",
"version": "0.1.0",
"private": true,
"scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" },
diff --git a/relay/server.js b/relay/server.js
index 74768a1..b8a91ea 100644
--- a/relay/server.js
+++ b/relay/server.js
@@ -72,7 +72,7 @@ function writeEnvMerge(p, kv) {
function triggerVenturaClawSync() {
return new Promise((resolve) => {
- const p = spawn("launchctl", ["start", "com.steve.businessclaw-sync"]);
+ const p = spawn("launchctl", ["start", "com.steve.venturaclaw-sync"]);
p.on("close", (code) => resolve({ code }));
p.on("error", (err) => resolve({ error: err.message }));
});
@@ -125,8 +125,8 @@ const HTML = `<!doctype html>
<h1>Paste your <em>tokens</em> once</h1>
<p style="font-size:13px;opacity:0.78;line-height:1.6;margin:8px 0 0">
One paste writes <code>KEY=value</code> lines to <code>~/Projects/secrets-manager/.env</code>
- AND immediately triggers <code>com.steve.businessclaw-sync</code> so the
- <a href="https://businessclaw.agentabrams.com/admin/connectors" style="color:var(--gold)">VenturaClaw connectors page</a>
+ AND immediately triggers <code>com.steve.venturaclaw-sync</code> so the
+ <a href="https://venturaclaw.agentabrams.com/admin/connectors" style="color:var(--gold)">VenturaClaw connectors page</a>
flips tiles green within seconds. From this moment on, the launchd job keeps everything in sync — no further pasting ever.
</p>
</div>
@@ -151,7 +151,7 @@ ETSY_ACCESS_TOKEN=..."></textarea>
<div id="results" class="results"></div>
</div>
- <small>This server runs only on <code>127.0.0.1</code>, never accessible from outside your Mac. Tokens travel: browser → loopback → secrets-manager file → launchd → businessclaw.</small>
+ <small>This server runs only on <code>127.0.0.1</code>, never accessible from outside your Mac. Tokens travel: browser → loopback → secrets-manager file → launchd → venturaclaw.</small>
</main>
<script>
const paste = document.getElementById("paste");
@@ -173,9 +173,9 @@ save.addEventListener("click", async () => {
const d = await r.json();
let html = "";
html += '<div class="ok">✓ secrets-manager: ' + d.added + ' added · ' + d.updated + ' updated</div>';
- html += '<div class="info">→ launching com.steve.businessclaw-sync…</div>';
+ html += '<div class="info">→ launching com.steve.venturaclaw-sync…</div>';
html += d.synced ? '<div class="ok">✓ launchd triggered</div>' : '<div class="err">✗ launchd: ' + (d.syncError || 'failed') + '</div>';
- html += '<div class="info" style="margin-top:8px">— now reload <a href="https://businessclaw.agentabrams.com/admin/connectors" style="color:var(--gold)">/admin/connectors</a> in 5 sec —</div>';
+ html += '<div class="info" style="margin-top:8px">— now reload <a href="https://venturaclaw.agentabrams.com/admin/connectors" style="color:var(--gold)">/admin/connectors</a> in 5 sec —</div>';
results.innerHTML = html;
save.textContent = "Saved";
setTimeout(() => { save.textContent = "Save & sync"; save.disabled = false; }, 2000);
diff --git a/scripts/auto-build.sh b/scripts/auto-build.sh
index 2b1d83c..6298ce6 100755
--- a/scripts/auto-build.sh
+++ b/scripts/auto-build.sh
@@ -19,7 +19,7 @@ if [ ! -f "$ROOT/app/package.json" ]; then
mkdir -p "$ROOT/app"
cat > "$ROOT/app/package.json" <<'JSON'
{
- "name": "commerce-claw",
+ "name": "ventura-claw",
"version": "0.1.0",
"private": true,
"scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" },
diff --git a/scripts/populate-credentials.js b/scripts/populate-credentials.js
index 023721e..f205be9 100644
--- a/scripts/populate-credentials.js
+++ b/scripts/populate-credentials.js
@@ -1,6 +1,6 @@
#!/usr/bin/env node
// populate-credentials.js
-// One-stop credential populator for commerce-claw connectors. Reads from your
+// One-stop credential populator for ventura-claw connectors. Reads from your
// canonical ~/Projects/secrets-manager/.env file (NEVER prints values), maps
// each env var to the matching connector ID, writes credentials.json locally,
// and optionally rsync+restarts on Kamatera.
@@ -150,9 +150,9 @@ function main() {
const mergeScript = `
const fs = require("fs");
const path = require("path");
-const PROD = "/root/public-projects/commerce-claw/data/credentials.json";
+const PROD = "/root/public-projects/ventura-claw/data/credentials.json";
const INCOMING = "/tmp/cc-incoming-creds.json";
-const BACKUP_DIR = "/var/backups/commerce-claw";
+const BACKUP_DIR = "/var/backups/ventura-claw";
fs.mkdirSync(BACKUP_DIR, { recursive: true });
const prod = fs.existsSync(PROD) ? JSON.parse(fs.readFileSync(PROD, "utf8")) : {};
const incoming = JSON.parse(fs.readFileSync(INCOMING, "utf8"));
@@ -175,11 +175,11 @@ console.log("merged users -> " + stats + " (backup: " + bak + ")");
`.replace(/"/g, '\\"');
execSync(`ssh root@45.61.58.125 "node -e \\"${mergeScript}\\""`, { stdio: 'inherit' });
// Restart + post-deploy health check (200 or 401 = healthy; 502 = process didn't bind)
- execSync(`ssh root@45.61.58.125 "pm2 restart commerce-claw --update-env >/dev/null && sleep 8 && S=\\$(curl -o /dev/null -s -w '%{http_code}' http://127.0.0.1:9788/api/connectors); if [ \\"\\$S\\" != \\"200\\" ] && [ \\"\\$S\\" != \\"401\\" ]; then echo \\"DEPLOY HEALTH FAIL: HTTP \\$S\\" >&2; exit 1; fi; echo Health: \\$S"`, { stdio: 'inherit' });
- console.log(`\n✓ Live on https://businessclaw.agentabrams.com`);
+ execSync(`ssh root@45.61.58.125 "pm2 restart ventura-claw --update-env >/dev/null && sleep 8 && S=\\$(curl -o /dev/null -s -w '%{http_code}' http://127.0.0.1:9788/api/connectors); if [ \\"\\$S\\" != \\"200\\" ] && [ \\"\\$S\\" != \\"401\\" ]; then echo \\"DEPLOY HEALTH FAIL: HTTP \\$S\\" >&2; exit 1; fi; echo Health: \\$S"`, { stdio: 'inherit' });
+ console.log(`\n✓ Live on https://venturaclaw.agentabrams.com`);
} catch (e) {
console.error(`\n✗ Deploy failed: ${e.message}`);
- console.error(` Backup is at /var/backups/commerce-claw/credentials.<ts>.json on Kamatera.`);
+ console.error(` Backup is at /var/backups/ventura-claw/credentials.<ts>.json on Kamatera.`);
}
} else {
console.log(`→ Local only. Add --deploy to merge-deploy + health-check on Kamatera.`);
diff --git a/scripts/sync-tokens.js b/scripts/sync-tokens.js
index 68da27a..2535ee7 100755
--- a/scripts/sync-tokens.js
+++ b/scripts/sync-tokens.js
@@ -9,7 +9,7 @@ const path = require("path");
const os = require("os");
const PROD = process.env.BC_URL || "https://venturaclaw.agentabrams.com";
-const EMAIL = process.env.BC_USER || "steve@businessclaw.com";
+const EMAIL = process.env.BC_USER || "steve@venturaclaw.local";
const PASS = process.env.BC_PASS || "149940c2c5b209fb";
const LOG = path.join(os.homedir(), "Projects", "ventura-claw", "logs", "sync.log");
fs.mkdirSync(path.dirname(LOG), { recursive: true });
diff --git a/server/connectors/archive.js b/server/connectors/archive.js
index f713f23..b1f0c51 100644
--- a/server/connectors/archive.js
+++ b/server/connectors/archive.js
@@ -25,7 +25,7 @@ function classifyLicense(url) {
async function callJson(url, c) {
const r = await fetch(url, {
- headers: { "User-Agent": "Commerce-Claw/1.0 (steve@businessclaw.com)", "Accept": "application/json" },
+ headers: { "User-Agent": "Commerce-Claw/1.0 (steve@venturaclaw.local)", "Accept": "application/json" },
signal: AbortSignal.timeout(15_000)
});
if (!r.ok) throw new Error(`archive ${r.status}: ${await r.text().then(t => t.slice(0,180)).catch(()=> "")}`);
diff --git a/server/package-lock.json b/server/package-lock.json
index 3870ba9..e68ab6d 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -1,11 +1,11 @@
{
- "name": "commerce-claw-server",
+ "name": "ventura-claw-server",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "commerce-claw-server",
+ "name": "ventura-claw-server",
"version": "0.1.0",
"dependencies": {
"bcrypt": "^6.0.0",
diff --git a/server/package.json b/server/package.json
index 1b3078f..4d8e438 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,5 +1,5 @@
{
- "name": "commerce-claw-server",
+ "name": "ventura-claw-server",
"version": "0.1.0",
"private": true,
"main": "server.js",
diff --git a/server/public/admin-audit.html b/server/public/admin-audit.html
index 253e691..d473347 100644
--- a/server/public/admin-audit.html
+++ b/server/public/admin-audit.html
@@ -147,7 +147,7 @@ document.getElementById('export-csv').addEventListener('click', () => {
const blob = new Blob([csv], { type: 'text/csv' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
- a.download = `commerce-claw-audit-${new Date().toISOString().slice(0,10)}.csv`;
+ a.download = `ventura-claw-audit-${new Date().toISOString().slice(0,10)}.csv`;
a.click();
});
document.getElementById('logout').addEventListener('click', async e => {
diff --git a/server/public/homepage.html b/server/public/homepage.html
index 65143e4..b5c9b31 100644
--- a/server/public/homepage.html
+++ b/server/public/homepage.html
@@ -62,7 +62,7 @@
<div class="demo-presets">
<button type="button" class="demo-preset" data-preset="post in #launch on slack saying we shipped">Slack post</button>
<button type="button" class="demo-preset" data-preset="refund order 1234 on shopify">Shopify refund</button>
- <button type="button" class="demo-preset" data-preset="purge cloudflare cache for businessclaw.agentabrams.com">Cloudflare purge</button>
+ <button type="button" class="demo-preset" data-preset="purge cloudflare cache for venturaclaw.agentabrams.com">Cloudflare purge</button>
<button type="button" class="demo-preset" data-preset="add a row to my hubspot deals pipeline">HubSpot CRM</button>
<button type="button" class="demo-preset" data-preset="send a message to the team">Ambiguous (watch it ask)</button>
</div>
diff --git a/server/public/login.html b/server/public/login.html
index f6b1010..bd6bfde 100644
--- a/server/public/login.html
+++ b/server/public/login.html
@@ -40,8 +40,8 @@
</form>
<p style="font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--ink-mute);margin-top:32px;line-height:1.7;border-top:1px solid var(--rule);padding-top:20px">
All 56 connectors pre-wired. After login your chat is connected and ready.<br>
- <span style="color:var(--ink-faint)">Demo · admin@businessclaw.local / admin</span><br>
- <span style="color:var(--ink-faint)">Demo · demo@businessclaw.local / demo</span>
+ <span style="color:var(--ink-faint)">Demo · admin@venturaclaw.local / admin</span><br>
+ <span style="color:var(--ink-faint)">Demo · demo@venturaclaw.local / demo</span>
</p>
</div>
</main>
diff --git a/server/public/og-cover.svg b/server/public/og-cover.svg
index bd02c02..fe23a86 100644
--- a/server/public/og-cover.svg
+++ b/server/public/og-cover.svg
@@ -40,7 +40,7 @@
<g transform="translate(110, 540)">
<text font-family="Cormorant Garamond, Georgia, serif" font-size="28" fill="#f4f1ea" font-weight="500">Commerce </text>
<text x="178" font-family="Cormorant Garamond, Georgia, serif" font-size="28" fill="#d4a04a" font-style="italic" font-weight="500">Claw</text>
- <text x="990" y="6" font-family="JetBrains Mono, monospace" font-size="13" letter-spacing="2.2" fill="#a8a39a">businessclaw</text>
+ <text x="990" y="6" font-family="JetBrains Mono, monospace" font-size="13" letter-spacing="2.2" fill="#a8a39a">venturaclaw</text>
</g>
<!-- decorative connector dots, top-right -->
diff --git a/server/server.js b/server/server.js
index 13fa921..7367341 100644
--- a/server/server.js
+++ b/server/server.js
@@ -51,12 +51,12 @@ const crypto = require("crypto");
const PORT = parseInt(process.env.PORT || "9788", 10);
const HOST = process.env.HOST || "127.0.0.1";
-const SECRET = process.env.CC_SECRET || "commerce-claw-dev-secret-please-rotate";
-if (process.env.NODE_ENV === "production" && SECRET === "commerce-claw-dev-secret-please-rotate") {
+const SECRET = process.env.CC_SECRET || "ventura-claw-dev-secret-please-rotate";
+if (process.env.NODE_ENV === "production" && SECRET === "ventura-claw-dev-secret-please-rotate") {
console.error("FATAL: CC_SECRET is the dev default in production — refusing to boot. Set CC_SECRET in env (32+ random chars).");
process.exit(1);
}
-const DOMAIN = process.env.PUBLIC_DOMAIN || "businessclaw.agentabrams.com";
+const DOMAIN = process.env.PUBLIC_DOMAIN || "venturaclaw.agentabrams.com";
const SUPPORT_EMAIL = process.env.SUPPORT_EMAIL || "info@venturaclaw.agentabrams.com";
// HTML-escape — used in OAuth error pages where vendor responses are echoed
@@ -144,8 +144,8 @@ function save(name, data) {
// seed users — only on first boot when users.json doesn't exist; never overwrite an existing store
let users = load("users", [
- { id: 1, email: "admin@businessclaw.local", password: "admin", role: "admin", name: "Admin" },
- { id: 2, email: "demo@businessclaw.local", password: "demo", role: "user", name: "Demo User" }
+ { id: 1, email: "admin@venturaclaw.local", password: "admin", role: "admin", name: "Admin" },
+ { id: 2, email: "demo@venturaclaw.local", password: "demo", role: "user", name: "Demo User" }
]);
// (removed: unconditional save("users", users) — was wiping rotated passwords on every restart)
let approvals = load("approvals", []);
@@ -526,7 +526,7 @@ app.post("/api/admin/cache/prime", requireAdmin, async (req, res) => {
const presets = [
"post in #launch on slack saying we shipped",
"refund order 1234 on shopify",
- "purge cloudflare cache for businessclaw.agentabrams.com",
+ "purge cloudflare cache for venturaclaw.agentabrams.com",
"add a row to my hubspot deals pipeline",
"send a message to the team",
];
@@ -764,7 +764,7 @@ function _renderConnectorPage(c) {
crm: [`add John Doe to ${c.name} as a lead`, `find ${c.name} contacts at Acme Corp`, `update deal stage to Closed-Won`],
email: [`send a welcome email via ${c.name}`, `pause the welcome ${c.name} campaign`, `add subscriber to "VIPs" list`],
docs: [`create a ${c.name} doc titled "Q4 Plan"`, `find the ${c.name} page about onboarding`, `share doc with team`],
- infra: [`purge ${c.name} cache for businessclaw.agentabrams.com`, `list ${c.name} DNS records for example.com`, `add an A record`],
+ infra: [`purge ${c.name} cache for venturaclaw.agentabrams.com`, `list ${c.name} DNS records for example.com`, `add an A record`],
storage: [`upload report.pdf to ${c.name}`, `list files in ${c.name} /reports/`, `share folder with steve@`],
analytics: [`show this week's ${c.name} top pages`, `compare last 7d vs prior 7d`, `export the funnel to CSV`],
social: [`post to ${c.name} with this image`, `schedule a ${c.name} post for Friday 9am`, `find recent ${c.name} comments`],
@@ -882,7 +882,7 @@ app.get("/connectors", (req, res) => {
function _renderTextPage(title, eyebrow, h1, blocks) {
return _shell({
title: `${title} — VenturaClaw`,
- desc: `${title} for VenturaClaw — businessclaw.agentabrams.com.`,
+ desc: `${title} for VenturaClaw — ${DOMAIN}.`,
canonical: `https://${DOMAIN}/${title.toLowerCase()}`,
body: `
<main class="page page-narrow">
@@ -2002,7 +2002,7 @@ app.listen(PORT, HOST, () => {
const presets = [
"post in #launch on slack saying we shipped",
"refund order 1234 on shopify",
- "purge cloudflare cache for businessclaw.agentabrams.com",
+ "purge cloudflare cache for venturaclaw.agentabrams.com",
"add a row to my hubspot deals pipeline",
"send a message to the team",
];
diff --git a/server/tests/integration.test.js b/server/tests/integration.test.js
index caaf3f1..e30dca7 100644
--- a/server/tests/integration.test.js
+++ b/server/tests/integration.test.js
@@ -1,6 +1,6 @@
#!/usr/bin/env node
// VenturaClaw — integration tests (bare node + assert, no test runner)
-// Target: http://127.0.0.1:9788 (pm2: commerce-claw)
+// Target: http://127.0.0.1:9788 (pm2: ventura-claw)
// Run: node tests/integration.test.js
"use strict";
@@ -75,7 +75,7 @@ async function test(name, fn) {
let SESSION; // reused across subsequent tests
await test("bcrypt login: valid creds → 200 + cc_session cookie", async () => {
const { status, json, headers } = await req("POST", "/api/auth/login", {
- body: { email: "steve@businessclaw.com", password: "149940c2c5b209fb" },
+ body: { email: "steve@venturaclaw.local", password: "149940c2c5b209fb" },
headers: { "X-Forwarded-For": uniqueTestIp() },
});
assert.strictEqual(status, 200, `expected 200, got ${status}`);
@@ -90,7 +90,7 @@ async function test(name, fn) {
// ------------------------------------------------------------------
await test("bcrypt login: wrong password → 401", async () => {
const { status, json } = await req("POST", "/api/auth/login", {
- body: { email: "steve@businessclaw.com", password: "wrongpassword" },
+ body: { email: "steve@venturaclaw.local", password: "wrongpassword" },
headers: { "X-Forwarded-For": uniqueTestIp() },
});
assert.strictEqual(status, 401, `expected 401, got ${status}`);
@@ -121,7 +121,7 @@ async function test(name, fn) {
const { status, json } = await req("GET", "/api/me", { cookie: SESSION });
assert.strictEqual(status, 200, `expected 200, got ${status}`);
assert.ok(json?.user, "response must contain a 'user' object");
- assert.strictEqual(json.user.email, "steve@businessclaw.com", "user.email mismatch");
+ assert.strictEqual(json.user.email, "steve@venturaclaw.local", "user.email mismatch");
assert.strictEqual(json.user.role, "admin", "user.role must be 'admin'");
});
diff --git a/viewer/server.js b/viewer/server.js
index d74ac73..a67d28f 100755
--- a/viewer/server.js
+++ b/viewer/server.js
@@ -79,5 +79,5 @@ const server = http.createServer((req, res) => {
});
server.listen(PORT, '127.0.0.1', () => {
- console.log(`[commerce-claw-viewer] listening on http://127.0.0.1:${PORT}`);
+ console.log(`[ventura-claw-viewer] listening on http://127.0.0.1:${PORT}`);
});
← 181cd5f Rebrand Commerce Claw / BusinessClaw → VenturaClaw
·
back to Ventura Claw
·
Migrate canonical hostname to venturaclaw.com 7c714cb →