[object Object]

← back to Ventura Claw

Launch comms drafts + og-cover.png raster + linter brand polish

ee0bbe0909241d40e194fa4c456467ee8f1d8a75 · 2026-05-06 08:16:37 -0700 · Steve Abrams

- MARKETING.md: Show HN post · 3 seed comments · Twitter · IndieHackers · Search Console + IndexNow steps
- /static/og-cover.png (1200x630 raster from og-cover.svg via headless Chrome) — needed because some social platforms reject SVG OG
- Linter polish: contact email shifted info@agentabrams.com → info@businessclaw.com
- brand.html: sticky section heads, identity card, team grid; admin-connectors: Prime cache button (already shipped earlier, this picks up linter formatting)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit ee0bbe0909241d40e194fa4c456467ee8f1d8a75
Author: Steve Abrams <info@businessclaw.com>
Date:   Wed May 6 08:16:37 2026 -0700

    Launch comms drafts + og-cover.png raster + linter brand polish
    
    - MARKETING.md: Show HN post · 3 seed comments · Twitter · IndieHackers · Search Console + IndexNow steps
    - /static/og-cover.png (1200x630 raster from og-cover.svg via headless Chrome) — needed because some social platforms reject SVG OG
    - Linter polish: contact email shifted info@agentabrams.com → info@businessclaw.com
    - brand.html: sticky section heads, identity card, team grid; admin-connectors: Prime cache button (already shipped earlier, this picks up linter formatting)
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 MARKETING.md                        |  78 ++++++++++++++++++++++++++++++++++++
 server/public/admin-connectors.html |   2 +-
 server/public/brand.html            |   2 +-
 server/public/login.html            |   4 +-
 server/public/oauth-setup.html      |   8 ++--
 server/public/og-cover.png          | Bin 0 -> 407253 bytes
 6 files changed, 86 insertions(+), 8 deletions(-)

diff --git a/MARKETING.md b/MARKETING.md
new file mode 100644
index 0000000..dafa2d4
--- /dev/null
+++ b/MARKETING.md
@@ -0,0 +1,78 @@
+# Commerce Claw — launch comms drafts
+
+## Show HN draft
+**Title:** Show HN: Commerce Claw – Type one sentence, AI runs the right SaaS tool
+
+**Body:**
+> I built Commerce Claw because every workflow-builder I tried — Zapier, Make, n8n — felt like more work than the work it was supposed to replace. Drag, wire, debug, maintain. The actual job ("refund this order", "post in #launch", "purge the cache") is one sentence; the canvas was a tax.
+>
+> So this tool sells the outcome, not the canvas. You type what you want; a local LLM (qwen3:14b on a Mac Studio in my office) picks the connector and runs it. 56 SaaS tools pre-wired out of the box. Sensitive actions are gated by an approval queue with the parsed intent shown in plain English. API keys are AES-256-GCM encrypted at rest with a versioned key envelope.
+>
+> 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/
+>
+> 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.
+>
+> Happy to answer technical questions in the thread.
+
+**Top-of-thread seed comments to drop after posting:**
+
+1. *(Why local LLM)* "Routing runs on a Mac Studio at the edge of my home network — qwen3:14b. Eliminates per-request inference cost, removes the 'is OpenAI training on my business commands' question, and the latency is fine because the prompt is small (~3KB system + 200 tokens user). Hot model serves classify in 13s warm, 30-60s cold (Mac1 has OLLAMA_MAX_LOADED_MODELS=1 so it gets evicted by other workloads). 10-min response cache + sequential preset prime on boot keep the demo widget instant for repeat queries."
+
+2. *(Why not just function-calling on a hosted LLM)* "Two reasons: (1) my business commands aren't training data for someone else's model; (2) per-task pricing on hosted LLMs makes the unit economics ugly when you're routing thousands of cheap reads. Self-hosted means the marginal cost of routing is electricity, not API fees. Trade-off: I can't ship a managed multi-tenant SaaS as easily — every customer would either share my hardware (privacy regression) or run their own (deployment burden). Currently single-tenant by design."
+
+3. *(How sensitive actions work)* "Connectors carry a `sensitive: bool` and per-action risk classification. Reads (list, get, search) execute immediately. Writes (refund, post, dns_edit, delete) land in `approvals.json` with the parsed intent shown in plain English: 'Refund order_id=1234 on shopify · $42.50 · customer steve@example.com'. Admin clicks Approve or Reject. The LLM never decides whether to execute — it only decides what would be executed if approved."
+
+---
+
+## Twitter / X announce (280 chars)
+
+> Commerce Claw 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/
+
+---
+
+## IndieHackers (slightly longer, more product-led)
+
+**Title:** Built an AI agent that replaces Zapier with one sentence — and ships running
+
+**Body:**
+Hey IH,
+
+I just shipped Commerce Claw at https://businessclaw.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.
+
+**The product:** You type "refund order 1234 on shopify" or "post in #launch on slack saying we shipped". A local LLM (qwen3:14b on my Mac) picks the right one of 56 wired connectors and runs it. Sensitive actions queue for approval. Reads execute immediately.
+
+**The differentiation:**
+- Per-user OAuth + API key vault, AES-256-GCM encrypted at rest
+- Local LLM means your commands aren't third-party training data
+- Sensitive-action approval gate with parsed intent in plain English
+- 56 connectors pre-wired — no DIY app builder, no Zaps to maintain
+- $0/request inference cost (because Ollama on a Mac, not OpenAI/Anthropic)
+
+**Try it without signing up:** the homepage demo widget calls the live LLM router. Type any command, watch the connector grid light up. No login required for the demo.
+
+**What's next:** registering OAuth apps for Stripe, Slack, Notion, HubSpot, Discord, Mailchimp, Google so users can connect with one click. Today the connector vault accepts pasted API keys. Pricing is free during early access — eventual model is flat workspace fee, no per-task metering.
+
+Looking for feedback on: the demo UX (does it feel responsive enough?), the homepage copy (does it sell the outcome over the canvas?), and the threshold question — would you trust a sensitive-action approval queue, or do you want stricter human-in-the-loop?
+
+---
+
+## Search Console / Bing Webmaster — sitemap submit
+
+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`
+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"
+```
+(IndexNow needs a key file at `/<KEY>.txt` containing the key as proof of ownership — set up later)
+
+## Sitemap auto-ping (already shipped)
+- /robots.txt declares Sitemap line ✓
+- Nothing more to do server-side; the manual SC + Bing submit is the only step.
diff --git a/server/public/admin-connectors.html b/server/public/admin-connectors.html
index eefecdd..48b259e 100644
--- a/server/public/admin-connectors.html
+++ b/server/public/admin-connectors.html
@@ -67,7 +67,7 @@
   </div>
   <div class="glass" style="padding:18px"><div class="tile-grid" id="grid" role="region" aria-label="Connector grid" aria-live="polite"></div></div>
 </main>
-<div class="footer">Commerce Claw · businessclaw.agentabrams.com</div>
+<div class="footer">Commerce Claw</div>
 <script>
 let CONNECTORS = [];
 const HEALTH = {}; // { connector_id: { ok, reason, ... } }
diff --git a/server/public/brand.html b/server/public/brand.html
index 68ded5b..e7ee02c 100644
--- a/server/public/brand.html
+++ b/server/public/brand.html
@@ -210,7 +210,7 @@
 
 </main>
 
-<footer class="footer">Commerce Claw · Brand Kit · businessclaw.agentabrams.com</footer>
+<footer class="footer">Commerce Claw · Brand Kit</footer>
 
 <script>
 const TEAM = [
diff --git a/server/public/login.html b/server/public/login.html
index 4f80718..acd7705 100644
--- a/server/public/login.html
+++ b/server/public/login.html
@@ -17,7 +17,7 @@
 <meta name="twitter:description" content="Connect Stripe, Shopify, Slack, and 53 more SaaS tools to one AI command line." />
 <meta name="twitter:image" content="https://businessclaw.agentabrams.com/static/og-cover.png" />
 <script type="application/ld+json">
-{"@context":"https://schema.org","@type":"SoftwareApplication","name":"Commerce Claw","applicationCategory":"BusinessApplication","description":"AI agent that runs actions across 56 business connectors including Stripe, Shopify, Slack, Cloudflare, Notion, HubSpot, and Discord.","operatingSystem":"Web","url":"https://businessclaw.agentabrams.com","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@type":"Organization","name":"Steve Abrams","email":"info@agentabrams.com"}}
+{"@context":"https://schema.org","@type":"SoftwareApplication","name":"Commerce Claw","applicationCategory":"BusinessApplication","description":"AI agent that runs actions across 56 business connectors including Stripe, Shopify, Slack, Cloudflare, Notion, HubSpot, and Discord.","operatingSystem":"Web","url":"https://businessclaw.agentabrams.com","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@type":"Organization","name":"Steve Abrams","email":"info@businessclaw.com"}}
 </script>
 <link rel="stylesheet" href="/static/style.css" />
 </head><body>
@@ -45,7 +45,7 @@
   </p>
 </div>
 </main>
-<div class="footer">Commerce Claw — businessclaw.agentabrams.com</div>
+<div class="footer">Commerce Claw</div>
 <script>
 const f = document.getElementById('f'), err = document.getElementById('err');
 f.addEventListener('submit', async e => {
diff --git a/server/public/oauth-setup.html b/server/public/oauth-setup.html
index df1fcb7..75250f5 100644
--- a/server/public/oauth-setup.html
+++ b/server/public/oauth-setup.html
@@ -55,12 +55,12 @@
     <div class="sub">Register vendor apps · paste credentials · users connect with one click</div>
   </div>
 
-  <p class="setup-lede">Each vendor below needs a one-time <em style="color:var(--gold)">OAuth app registration</em> in their developer portal. Use <code style="font-family:var(--mono);font-size:14px;color:var(--gold)">info@agentabrams.com</code> as the contact email everywhere. After registering, paste the Client ID + Client Secret here. Users then connect with a single button click.</p>
+  <p class="setup-lede">Each vendor below needs a one-time <em style="color:var(--gold)">OAuth app registration</em> in their developer portal. Use <code style="font-family:var(--mono);font-size:14px;color:var(--gold)">info@businessclaw.com</code> as the contact email everywhere. After registering, paste the Client ID + Client Secret here. Users then connect with a single button click.</p>
 
   <div class="contact">
     <b>Default contact email →</b>
-    <code style="font-family:var(--mono);font-size:13px;color:var(--ink)">info@agentabrams.com</code>
-    <button onclick="navigator.clipboard.writeText('info@agentabrams.com')" class="copy" style="font-family:var(--mono);font-size:9px;padding:4px 10px;background:transparent;border:1px solid var(--rule);color:var(--ink-soft);cursor:pointer;border-radius:2px">Copy</button>
+    <code style="font-family:var(--mono);font-size:13px;color:var(--ink)">info@businessclaw.com</code>
+    <button onclick="navigator.clipboard.writeText('info@businessclaw.com')" class="copy" style="font-family:var(--mono);font-size:9px;padding:4px 10px;background:transparent;border:1px solid var(--rule);color:var(--ink-soft);cursor:pointer;border-radius:2px">Copy</button>
   </div>
 
   <div id="providers" role="region" aria-label="OAuth providers" aria-live="polite"></div>
@@ -87,7 +87,7 @@ async function loadProviders() {
 
       <div class="steps">
         <span class="num">1</span>
-        <span class="lbl"><b>Open</b> ${esc(p.name)} developer portal as <code>info@agentabrams.com</code></span>
+        <span class="lbl"><b>Open</b> ${esc(p.name)} developer portal as <code>info@businessclaw.com</code></span>
         <span style="display:flex;gap:6px">
           <a href="${escAttr(p.register_url)}" target="_blank" rel="noopener" class="btn btn-primary" style="font-family:var(--mono);font-size:9px;padding:6px 14px">Open ↗</a>
           <button data-vendor="${escAttr(p.id)}" class="btn launch-bb" style="font-family:var(--mono);font-size:9px;padding:6px 14px;border-color:var(--gold);color:var(--gold)" title="Cloud browser — isolated, no cookie pollution, auto-expires in 1hr">☁ Cloud →</button>
diff --git a/server/public/og-cover.png b/server/public/og-cover.png
new file mode 100644
index 0000000..ab9dfde
Binary files /dev/null and b/server/public/og-cover.png differ

← c42b617 Track homepage.css (was untracked when CSS extraction commit  ·  back to Ventura Claw  ·  Rebrand Commerce Claw / BusinessClaw → VenturaClaw 181cd5f →