Ventura Claw

repo: ~/Projects/ventura-claw · 79 commits · 0 in last 24h, 1 in last 7d ·

Search the build

79 commits indexed

  1. fa4ad4d 2026-07-23 Pin autonomous Claude CLI invocation to Opus (--model opus)
  2. 49d825b 2026-05-31 fix: add rel=noopener noreferrer to target=_blank link in admin-wizard.html
  3. f04d321 2026-05-30 fix(llm): demo classify returned 0/5 — qwen3 reasoning ate token budget + health-gate ignored fallback
  4. 7a6c4ad 2026-05-29 Update Claude model IDs to claude-opus-4-8 (Opus 4.8 upgrade)
  5. 01b8b05 2026-05-24 preload fleet: 5 seed users × 10 connectors from secrets-manager .env
  6. 5e81c08 2026-05-19 snapshot — gitify backup 2026-05-19
  7. 90d7b12 2026-05-13 snapshot: 2 file(s) changed, +2 new
  8. f4a6174 2026-05-07 marketing: pre-flight section flags Show HN draft is unshippable until demo widget returns to homepage; fix 56→67 connector count
  9. 8cdeaf7 2026-05-07 tighten .gitignore: add missing standing-rule patterns (tmp/ dist/ build/ .next/)
  10. 2c1f81f 2026-05-07 /services: client-side search filter (mirrors /connectors pattern) — substring match across data-svc + name + description + category heading; live 'N / 18 match' count; sections hide when fully filtered; skips demo + how-it-works + compare sections
  11. 1843ec6 2026-05-07 [ops] local ventura-claw process recovered (was missing from pm2 dump); pm2 save'd; sitemap.xml audit clean (0 /admin paths leaked)
  12. 21e25ee 2026-05-07 robots.txt: explicit hint pointing at /feed (RSS) for crawlers that don't honor <link rel=alternate>; multi-line format for readability
  13. a506956 2026-05-07 BreadcrumbList JSON-LD ('Home › X') on /services + /legal-notice + /how-it-works directly; auto-generated for ALL _shell-rendered pages from canonical URL path; rich-snippet eligible across the site
  14. 334b6e1 2026-05-07 /connectors: client-side search filter — single input filters tiles by name/category/meta on every keystroke; live count ('N / 67 match'); category sections hide when fully filtered
  15. 734a275 2026-05-07 /services + /legal-notice + /how-it-works: <link rel='alternate' type='application/rss+xml'> pointing at /feed; RSS readers + Google/Bing now discover the changelog feed from any page
  16. 1e1f786 2026-05-07 /how-it-works: expand step-2 partner-API tag cloud from 13 → 21 (added Square/Wave/Relay/Bluevine/Next Insurance/Coalition/TaxBandits/Justworks to match SERVICES_CATALOG)
  17. 4da6324 2026-05-07 remaining '56' stragglers swept: login.html (title + 3x og/twitter/JSON-LD + 2x body), /docs (56→67 connector catalog), DEPLOY.md + MARKETING.md internal docs
  18. 8e2cca0 2026-05-07 homepage.html: theme toggle (sun/moon top-right) + light CSS vars + anti-flash inline script; FIX leftover '56 business connectors' in SoftwareApplication JSON-LD → 67 (caught during theme audit)
  19. a3250a8 2026-05-07 /changelog 2026-05-07: append 4 continued-sweep wins (Last-Modified+/api/public/services SEO, theme toggle on 11 pages, _shell topbar Commerce-Claw fix, disk-audit playbook saved to memory)
  20. b1dd058 2026-05-07 _shell template: theme toggle (sun/moon, fixed top-right) + light CSS vars; FIX leftover 'Commerce Claw' brand string in topbar → 'VenturaClaw' (caught by /pricing audit); add /services to topbar nav
  21. 7151c1c 2026-05-07 teaser footer: add /connectors + /docs links (alongside /services /how-it-works /legal-notice /privacy /terms /info-email) for discoverability
  22. b2a4b3b 2026-05-07 /services + /legal-notice + /how-it-works: dark/light theme toggle (sun/moon button) per CLAUDE.md rule — anti-flash inline script + light CSS vars + topbar button + localStorage persistence
  23. 2461005 2026-05-07 /services + /legal-notice + /how-it-works: emit real Last-Modified header (from underlying HTML mtime) + Cache-Control: public, max-age=300, must-revalidate; CDN/proxy cache hint after the post-pivot copy sweep
  24. b2b64af 2026-05-07 /docs: add curl example for /api/public/services (18-row services-hub catalog) above the demo-classifier example
  25. 23e9887 2026-05-07 +/api/public/services — 18-row JSON catalog (mirrors /api/public/connectors), per-service id/category/name/partners/price_free/price_paid/unit; nginx route added on venturaclaw.com
  26. a261c64 2026-05-07 /privacy + /terms post-pivot refresh: bump 'Last updated' to 2026-05-07; add 'Lead capture' clause for /services Get-Started forms; clarify 'no markup on partner fees' in /terms
  27. 12f8e98 2026-05-07 /connectors lede: cross-link to /services hub ('Looking for a curated bundle? 18 ready-to-run orchestrations on top of these connectors')
  28. 90488b5 2026-05-07 /changelog: prepend 2026-05-07 'API-orchestration pivot' entry (9 items: hidden door, /how-it-works, /pricing v2, lead funnel, demo widget, brand sweep, session-debrief hardening, dw-collections-viewer wins, SEO); fix '56 indexable' → '67' in earlier entry
  29. 80bb40d 2026-05-07 /docs meta: '56 SaaS connectors' → '67 SaaS connectors and orchestrates 18 small-business services on top'
  30. 1e26894 2026-05-07 homepage.html: '56 connectors' → '67' across title/meta/og/twitter/eyebrow/subhead/aria-label/JS rotator (10 spots)
  31. ed58e70 2026-05-07 /about: '56 connectors' → '67 + 18 /services orchestrations on top'; key envelope; cross-link /services
  32. 958d1e1 2026-05-06 /services demo widget: tighten CTA copy from 'Run this plan' (long, promised auto-execution we don't have yet) to 'Pre-fill & send' (honest about the human-in-the-loop)
  33. 7489430 2026-05-06 /sitemap.xml: per-URL <lastmod> (resolved from underlying HTML mtime when available, fallback to server start) + <priority> per route; SEO win after post-pivot copy sweep so Google recrawls
  34. a129aee 2026-05-06 teaser coming-soon: '56 connectors/SaaS tools' → '67' across title/meta/og/hero/connectors-strip (5 spots)
  35. edaa577 2026-05-06 /services chat: add 7th suggestion pill — '$99 freelance stack' triggering full multi-API walkthrough (domain+email+Stripe+accounting+contracts)
  36. 45ead1c 2026-05-06 /pricing + /connectors + /docs: '56 connectors' → '67 connectors' (real count from /api/public/connectors)
  37. df490ed 2026-05-06 /services: align top banner + modal disclaimer + flow-foot with API-orchestration framing (matches /legal-notice post-pivot sweep)
  38. 1128b8f 2026-05-06 /legal-notice: clean up the last 4 'Document Preparation' / 'Filing Service' references in section heading + glossary + ack header
  39. f640869 2026-05-06 /legal-notice: post-pivot sweep — replace all 'document preparation service' / 'filing service' / 'we file' framing with 'API-orchestration service' (matches new positioning); §6400 marked explicitly inapplicable since we don't file gov forms
  40. 8d0f1e1 2026-05-06 /admin/services-leads: dark/light theme toggle (sun/moon button) with anti-flash inline script + localStorage persistence; per CLAUDE.md sun/moon rule
  41. f80fef5 2026-05-06 /pricing v2: dual-product split (chat orchestrator free + services hub $0–$99 per-service); kills 'eventual flat workspace fee' single-product framing; cross-links /services + /how-it-works
  42. 6b0bf81 2026-05-06 /how-it-works page: 3-step API-orchestration explainer + alternatives comparison + JSON-LD HowTo schema; sitemap entry + nginx proxy + teaser footer link
  43. 5a1709c 2026-05-06 /services hero: tighter measurable hook — '47-second domain + email setup · $39 flat · what a VA charges $300 for'
  44. a5630c3 2026-05-06 Add 5 no-auth SMB / civic public-data connectors
  45. 4cd2509 2026-05-06 Add 5 no-auth public-data connectors: MET, Cleveland, AIC, Wikipedia, Color API
  46. a6a5067 2026-05-06 ENV_KEY_TO_CONNECTOR: align field names with what the handlers actually read
  47. 1ad784f 2026-05-06 Wizard: bulk health strip — see all saved connectors auth status at a glance
  48. 437cf54 2026-05-06 Wizard: Test button — saves + validates against connector health, auto-advances on ✓
  49. 7334fa7 2026-05-06 Connector wizard: one-question-at-a-time onboarding at /admin/wizard
  50. 0c593b6 2026-05-06 ENV_KEY_TO_CONNECTOR: add ELEVENLABS_API_KEY, PURELYMAIL_API_TOKEN, SHOPIFY_ADMIN_TOKEN
  51. 03cee41 2026-05-06 /services demo widget: 'Try it now' domain+email orchestration plan; structured 7-step API call sequence + cost + deliverables + lead-modal pre-fill
  52. ff436d8 2026-05-06 /services chat: welcome message points at API offerings (Stripe/domain/insurance) instead of dropped govt-form services
  53. 473898d 2026-05-06 /services pivot: 30→18 services, dropped all government-portal flows (LLC/DBA/EIN/BOI/sales-tax/trademark/copyright); 5 new categories (Banking/Tax/Insurance/Identity/Documents); replaced LegalZoom comparison with How-It-Works flow; new positioning: API-orchestration not document-prep
  54. a04d263 2026-05-06 /services: public comparison matrix (VenturaClaw vs LegalZoom/ZenBusiness/Northwest/Bizee) — bundle math + honest 'Northwest is competitive' read
  55. a075901 2026-05-06 rebrand sweep: users use steve@venturaclaw.com primary + steve@businessclaw.com alias; login accepts either; user-facing 'BusinessClaw' string in connector-acquisition.json fixed
  56. 9c9548d 2026-05-06 /services: JSON-LD ProfessionalService schema + 14 Offers; sitemap + robots wired to venturaclaw.com via nginx; admin /admin/services-leads viewer page
  57. 49f1891 2026-05-06 /services lead capture: modal form + /api/services-lead JSONL + best-effort George email + admin viewer endpoint
  58. 4c50012 2026-05-06 teaser: gold-accent CTA card linking to /services hub + footer links
  59. 39390b0 2026-05-06 /services: per-card 'Not legal advice' badge; /legal-notice: drop §6400-specific framing for general doc-prep model
  60. 28a107c 2026-05-06 /services: cut workers-comp + IRS-payment-plan; ship bold /legal-notice page (UPL/LDA/§6400 disclosures)
  61. 103d327 2026-05-06 services hub: 31 small-biz services + collapsible left chat + smart-router (local-first, Claude opt-in)
  62. b15fb3e 2026-05-06 competitor matrix: 8 platforms crawled, 10 differentiation vectors
  63. 45dc5f6 2026-05-06 Snapshot: ElevenLabs + Shopify connectors + coming-soon page
  64. 5b582d2 2026-05-06 chat: surface Admin link in topbar for admin users
  65. 37b29cb 2026-05-06 sync-tokens: strip hardcoded password fallback (was leaked in git)
  66. 817b756 2026-05-06 no breakins: pull plaintext creds from login banner, add PUT /api/admin/users/:id/password rotation endpoint
  67. e175bc9 2026-05-06 Add ElevenLabs as a VenturaClaw connector
  68. 35b8bea 2026-05-06 test: confirm post-commit celebration sound fires globally
  69. 3911073 2026-05-06 Drop the .local pseudo-TLD from demo accounts
  70. 7c714cb 2026-05-06 Migrate canonical hostname to venturaclaw.com
  71. 5f60f03 2026-05-06 Purge remaining businessclaw / commerce-claw refs across docs + code
  72. 181cd5f 2026-05-06 Rebrand Commerce Claw / BusinessClaw → VenturaClaw
  73. ee0bbe0 2026-05-06 Launch comms drafts + og-cover.png raster + linter brand polish
  74. c42b617 2026-05-06 Track homepage.css (was untracked when CSS extraction committed)
  75. d9e7a6c 2026-05-06 Externalize homepage inline CSS to /static/homepage.css
  76. d6f1881 2026-05-06 /changelog updated + ● Prime cache UI button on admin
  77. 320d50b 2026-05-06 Add POST /api/admin/cache/prime endpoint
  78. 21481b0 2026-05-06 Overnight ticks — public surface polish (post-61cfcb1)
  79. 61cfcb1 2026-05-06 Initial commit · Commerce Claw

Authors

Agents used

  • secrets-manager7

Skills used

  • /services28
  • /connectors24
  • /legal-notice10
  • /how-it-works9
  • /docs9
  • /terms6
  • /connections6
  • /moon5
  • /changelog5
  • /privacy5
  • /feed4
  • /pricing4
  • /about4
  • /healthz4
  • /faq4
  • /meta3
  • /sitemap3
  • /health-all3
  • /wizard3
  • /server3
  • /oauth3
  • /category2
  • /twitter2
  • /light2
  • /services-leads2
  • /import2
  • /elevenlabs2
  • /index2
  • /users2
  • /credentials2

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

fa4ad4d · 2026-07-23 · Pin autonomous Claude CLI invocation to Opus (--model opus)
Bare 'claude' spawn inherited the CLI's drifting default model; pin to Opus
so this build/gen loop always runs on the intended model.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
f04d321 · 2026-05-30 · fix(llm): demo classify returned 0/5 — qwen3 reasoning ate token budget + health-gate ignored fallback
Root causes (demo widget = Show HN launch blocker):
- classifyIntent used num_predict:220 against qwen3:14b (a reasoning model); reasoning
  tokens consumed the whole budget so response came back EMPTY (done_reason=length).
  Fix: pass think:false to /api/generate (clean JSON in ~1.2s) + raise budget to 512.
- _isHealthy() gated only on the PRIMARY endpoint; when Mac1 Ollama returned HTTP 500 it
  returned null in 0ms and never reached the healthy Mac2 fallback. Fix: healthy if EITHER
  primary or fallback /api/tags answers.
- prewarm() logged success without checking r.ok, masking a dead backend (silent 0/5).
  Fix: check r.ok, warn loudly on unhealthy backend.
- Defense-in-depth: strip <think> in tryParse + /no_think suffix (for builds that ignore think:false).

Note: OLLAMA_FALLBACK_URL/MODEL added to server/.env (gitignored) — Mac1 stays primary
per project default, Mac2 (also holds qwen3:14b) is the fallback. Verified PRIMED 5/5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
01b8b05 · 2026-05-24 · preload fleet: 5 seed users × 10 connectors from secrets-manager .env
- maskFields: first4 + 8 asterisks + last4 (was first4…last4); pass _* provenance through
- scripts/preload-fleet.js: full ENV_KEY_TO_CONNECTOR map, 5 canonical logins
  (admin, info@vcl, steve@vcl, info@dw, steve@dw — all role=admin, bcrypt-hashed)
- Backs up existing encrypted credentials.json; writes plaintext seed
  (server boot re-encrypts under CC_SECRET via existing migration block)
a5630c3 · 2026-05-06 · Add 5 no-auth SMB / civic public-data connectors
Federal:
  sec         — SEC EDGAR (10-K filings, financial data, ticker lookup)
  usaspending — federal contracts + grants search by keyword/recipient/year
Local-state:
  nws         — National Weather Service (forecasts + active alerts by lat/lon)
  lacity      — LA City Open Data (Socrata) — business tax registry, permits,
                crime, code violations; SoQL query interface
  cadata      — California Open Data (CKAN) — package search + datastore query

All zero-auth — pre-connected for everyone. Health probes verified live on
Mac dev + Kamatera prod.

(USPTO was attempted but TSDR + PEDS recently auth-walled their public
endpoints; dropped from this batch.)
4cd2509 · 2026-05-06 · Add 5 no-auth public-data connectors: MET, Cleveland, AIC, Wikipedia, Color API
All 5 are pre-connected — zero credentials required, just HTTPS calls.
Useful for DW content workflows (art reference, color tooling, encyclopedic
fact-checks). Live counts on health probe:
  - MET Museum:                 43,947 PD objects
  - Cleveland Museum of Art:    68,738 CC0 artworks
  - Art Institute of Chicago:  131,990 artworks (IIIF imagery)
  - Wikipedia:                 english REST + search APIs
  - Color API:                 identify + scheme actions

Each handler follows the archive.js pattern: meta + empty fields + always-
configured + health() probing a free endpoint + 2-3 read-only actions.

Registered in REAL map with WRITE_ACTIONS: Set([]) (read-only) and
READ_ACTIONS enumerated. Catalog entries added to connectors.json (62 total).
a6a5067 · 2026-05-06 · ENV_KEY_TO_CONNECTOR: align field names with what the handlers actually read
Previous version used descriptive field keys (api_key, access_token, store).
The connector handlers (stripe.js, cloudflare.js, etc) look up creds under
the upper-case env var name (STRIPE_SECRET_KEY, CF_API_TOKEN, ...). After
import, /admin/connectors UI showed 'filled: true' but every command failed
with 'no_token' because the lookup key didn't match the storage key.

Fixed by making each entry's 'field' match the handler's lookup key. Notable
remappings beyond the obvious uppercase-rename:
- CLOUDFLARE_API_TOKEN  → CF_API_TOKEN  (CF_ prefix in handler)
- HUBSPOT_ACCESS_TOKEN  → HUBSPOT_TOKEN
- NOTION_API_KEY        → NOTION_TOKEN
- CANVA_API_KEY         → CANVA_TOKEN
- ETSY_API_KEY          → ETSY_KEYSTRING
- SHOPIFY_ACCESS_TOKEN  → SHOPIFY_ADMIN_TOKEN

Also added direct-name aliases (HUBSPOT_TOKEN, NOTION_TOKEN, CANVA_TOKEN,
ETSY_KEYSTRING, ETSY_ACCESS_TOKEN) so users can paste either variant.

After re-import: stripe + cloudflare + archive flip from rejected → ✓ ok.
Live prod /api/connectors/health-all confirms 5 connectors authenticate
where 2 did before.
1ad784f · 2026-05-06 · Wizard: bulk health strip — see all saved connectors auth status at a glance
- New strip at top of wizard shows one pill per filled connector (✓ ok / ⊘ catalog-only / ✗ rejected)
- Pulls from existing /api/connectors/health-all (30s cached, no rate hit)
- Click a pill to insert that connector into the wizard queue at current cursor
  (handy for fixing a broken one without leaving the page)
- Re-test button refreshes the strip on demand
- Connectors absent from /health-all (catalog-only filled) render as ⊘ skipped, not stuck-in-testing
- Summary line: 'N authenticate · M no test handler · K rejected'
437cf54 · 2026-05-06 · Wizard: Test button — saves + validates against connector health, auto-advances on ✓
- New 'Test' button next to 'Save & Next →' chains save → /api/connectors/:id/health
- Inline result panel shows: ok (green, auto-advances 1.2s), 'no test handler' for
  catalog-only (yellow, stays put), error reason (red, stays put for fixing)
- 'Save & Next →' still works as fast-path skip-validation
- Test-result resets each step
7334fa7 · 2026-05-06 · Connector wizard: one-question-at-a-time onboarding at /admin/wizard
Replaces the wall-of-tiles connector page with a guided wizard. Walks Steve
through every unfilled connector one at a time, with paste/skip/save buttons
and a 'Search Vault' button that auto-fills from secrets-manager .env on
Mac dev (gracefully no-ops on Kamatera prod where the vault isn't present).

- New GET /admin/wizard serves the single-page wizard
- New GET /api/wizard/vault-search?connector=:id inverts ENV_KEY_TO_CONNECTOR
  and looks up matching env values from $VC_VAULT_PATH or
  ~/Projects/secrets-manager/.env. Admin-gated; never proxies arbitrary paths.
- Cmd/Ctrl-Enter to save+next; progress bar shows N/M filled.
- Wizard fetches /api/me/connections, filters to .filled==false,
  uses existing POST /api/me/connections/:id to save each.

Mirrored to Kamatera /root/public-projects/ventura-claw with backups.
0c593b6 · 2026-05-06 · ENV_KEY_TO_CONNECTOR: add ELEVENLABS_API_KEY, PURELYMAIL_API_TOKEN, SHOPIFY_ADMIN_TOKEN
The bulk-import endpoint at /api/me/connections/import maps env-var names to
connector credentials via a static table. Three keys that exist in Steve's
secrets-manager vault weren't mapped:

- ELEVENLABS_API_KEY  → elevenlabs.ELEVENLABS_API_KEY
- PURELYMAIL_API_TOKEN → purelymail.PURELYMAIL_API_TOKEN
- SHOPIFY_ADMIN_TOKEN → shopify.access_token (alias for SHOPIFY_ACCESS_TOKEN)

After this patch a fresh import of secrets-manager .env populates 7 of
Steve's available connectors instead of 5 (stripe, cloudflare, shopify,
godaddy, browserbase, elevenlabs, purelymail) — zero unmatched.
45dc5f6 · 2026-05-06 · Snapshot: ElevenLabs + Shopify connectors + coming-soon page
server/connectors/elevenlabs.js — full impl that was missed in the
earlier commit (file was untracked)
server/connectors/shopify.js — DW prod store connector (read shop info,
products, orders; write order.fulfill, order.refund, product.update)
server/connectors/index.js — register both with proper write/read action
sets; Shopify writes are sensitive (gated)
server/public/coming-soon.html — placeholder
server/server.js — adjacent updates
37b29cb · 2026-05-06 · sync-tokens: strip hardcoded password fallback (was leaked in git)
The literal value '149940c2c5b209fb' was previously the OR-fallback when BC_PASS env was missing — meaning anyone with the repo had Steve's prod password. Now fail-closed: BC_PASS env required at runtime, script exits 1 with clear message if missing. Existing launchd plist already passes the env, so no functional change for the hot path.

NOTE for daylight Steve: rotate the prod password since the old one is in git history.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
e175bc9 · 2026-05-06 · Add ElevenLabs as a VenturaClaw connector
- server/connectors/elevenlabs.js — REAL impl, health probe returns
  subscription tier + char usage
- server/connectors/index.js — registered in REAL, READ_ACTIONS, WRITE_ACTIONS
- server/connectors.json — added catalog entry (now 57 connectors)
- scripts/sync-tokens.js — routes ELEVENLABS_API_KEY into the user vault
  (verified: 'live' on next sync, health 200 with starter tier 9.3K/90K chars)
35b8bea · 2026-05-06 · test: confirm post-commit celebration sound fires globally
Empty commit to verify the new global git post-commit hook at
~/.git-hooks/post-commit plays Hero.aiff (the macOS achievement-unlocked
chime) every time a commit lands. Hooks path is set globally via
core.hooksPath so this fires across every repo, with delegation to
repo-local hooks preserved.
3911073 · 2026-05-06 · Drop the .local pseudo-TLD from demo accounts
.local is reserved for mDNS / Bonjour, not real email — using it as the
email-domain on demo accounts was visually confusing (and inherited from
the original businessclaw.local placeholder pattern that I just blindly
renamed in the rebrand).

Switched to venturaclaw.com everywhere, which is real and has a working
mailbox now:
- admin@venturaclaw.local       -> admin@venturaclaw.com (+ pw reset to 'admin'
                                     so the displayed demo creds actually work)
- steve@venturaclaw.local       -> steve@venturaclaw.com (pw preserved)
- demo@venturaclaw.local        -> demo@venturaclaw.com (display only)
- BC_USER default in sync-tokens.js → steve@venturaclaw.com (verified working
                                       against the canonical hostname)

Server reads users from JSON in memory, so this required a pm2 restart
after editing users.json. Login at admin/admin verified 200; steve@ login
verified to still reject wrong password (401 not 404, so the rename took).
7c714cb · 2026-05-06 · Migrate canonical hostname to venturaclaw.com
Steve registered venturaclaw.com today and asked to put all builds on it.
Same Express server, new front door:

- Apex A + www CNAME at GoDaddy → 45.61.58.125
- nginx server block + Let's Encrypt SSL on apex + www
- MX/SPF/DKIM/DMARC for venturaclaw.com (mirrors agentabrams.com pattern)
- Domain added to Purelymail; info@venturaclaw.com mailbox provisioned;
  password in secrets-manager as INFO_VENTURACLAW_COM_PASSWORD.
- All venturaclaw.agentabrams.com refs across docs + code swapped to
  venturaclaw.com.
- venturaclaw.agentabrams.com + businessclaw.agentabrams.com both 301
  to venturaclaw.com, except /oauth/* + /healthz which still proxy to
  the app so existing OAuth callback URLs in provider consoles keep
  working.

CC_SECRET note: rotated during this migration after rsync --delete
wiped the .env on Kamatera. Old encrypted credentials.json preserved
as data/credentials.json.pre-rotate-2026-05-06.bak; vault refilled
from secrets-manager via sync-tokens.js (5/14 connectors back, same
as pre-rotation).
5f60f03 · 2026-05-06 · 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).
181cd5f · 2026-05-06 · Rebrand Commerce Claw / BusinessClaw → VenturaClaw
Rename the product and live hostname end-to-end:
- 96 user-visible refs swapped across public HTML, server.js, marketing
  pages, login, oauth-setup, JSON-LD/OG tags. Brand-name keeps the
  italic-gold treatment by splitting Ventura<em>Claw</em>.
- Subtitle 'Connected Commerce' → 'Connected Operations'.
- Footer email info@businessclaw.com → info@venturaclaw.agentabrams.com
  (mailbox provisioned on Purelymail with full MX/SPF/DKIM/DMARC).
- Bulk-select-and-connect on /connections: per-tile checkboxes plus a
  Select-all / Connect-selected control bar that walks selected
  providers through their OAuth popups in a sessionStorage-backed
  queue, with a Continue button between each so each popup gets a
  fresh user gesture and avoids browser pop-up blocks.
- Hardcoded log tag [commerce-claw] → [ventura-claw].
- launchd job com.steve.businessclaw-sync → com.steve.venturaclaw-sync;
  sync-tokens.js paths + default BC_URL repointed to venturaclaw.

Live at https://venturaclaw.agentabrams.com (Let's Encrypt SSL,
nginx → 127.0.0.1:9788). businessclaw.agentabrams.com 301-redirects
all paths except /oauth/* + /healthz so existing OAuth callback URLs
registered in each provider's developer console keep working.
ee0bbe0 · 2026-05-06 · 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>
c42b617 · 2026-05-06 · Track homepage.css (was untracked when CSS extraction committed)
Belongs with d9e7a6c — without this file the previous commit ships a broken homepage. fill.html and app/icon.svg left uncommitted (not from this loop).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d9e7a6c · 2026-05-06 · Externalize homepage inline CSS to /static/homepage.css
Saves ~7KB on every homepage HTML response (37.7KB → 30.8KB).
Repeat visitors hit the CSS from cache (express.static maxAge:7d).
Pure refactor — zero visual or behavioral change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d6f1881 · 2026-05-06 · /changelog updated + ● Prime cache UI button on admin
- /changelog top entry now reflects what actually shipped overnight (admin endpoint, sequential prime fix, /feed, /faq, /docs, etc.)
- /admin/connectors filter bar gets a ● Prime cache button that calls /api/admin/cache/prime, shows primed N/5 + cache size

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
320d50b · 2026-05-06 · Add POST /api/admin/cache/prime endpoint
Re-fires the 5 preset cache primes on demand — useful when Mac1 evicts qwen3:14b
(concurrent codex 8-way runs etc.) and visitors are eating cold-loads. Admin-gated.
Audit-logged as admin_cache_prime. Returns {ok, primed, total, cache_size}.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21481b0 · 2026-05-06 · Overnight ticks — public surface polish (post-61cfcb1)
Public pages added:
- /faq dedicated page (FAQPage JSON-LD for Google rich-result eligibility)
- /docs page · 5 curl examples for public + auth API surface
- /changelog page · 4 dated entries · gold-rail timeline
- /feed RSS · IndieWeb / reader auto-discovery
- /about /privacy /terms (required SaaS pages)
- Branded 404 (HTML for browsers, JSON for /api/*)

Homepage improvements:
- "How it works" 3-step strip (Type → Route → Approve, code-on-card)
- 8-question FAQ section with details/summary expand
- Live route trail widget · rotating eyebrow taglines (4× cycle)
- Tile float animation · animated thinking state on demo
- ?demo=<query> deep-link auto-fires from connector pages
- noscript fallback (graceful degrade for JS-off visitors)
- <link rel="prefetch" href="/connectors"> · theme-color · RSS link

Perf + ops:
- /healthz JSON variant (uptime, mem, demo cache size, LLM endpoints)
- Sequential preset cache prime on boot (4/5 fills, 20ms cached responses)
- Allowlist env loader extended for OLLAMA_FALLBACK_URL + CC_KEY_ID
- robots.txt cleanup (removed dead duplicate handler)
- Footer cross-links every shell page (/connectors /about /faq /docs /privacy /terms /sitemap.xml)
- Sitemap grew 3 → 65 URLs · ItemList JSON-LD on /connectors
- Favicon (gold connector-graph SVG) at .ico/.svg/apple-touch paths

Security:
- esc() XSS sweep on chat.html + brand.html (completes all 5 HTML pages)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
61cfcb1 · 2026-05-06 · Initial commit · Commerce Claw
Public surface (anon-accessible):
- / homepage with live-demo widget · 56-connector grid · "How it works" 3-step · 8-Q FAQ · live route trail · rotating taglines · branded 404
- /connectors directory + 56 per-connector pages w/ ItemList JSON-LD
- /privacy /terms /about /faq (FAQPage JSON-LD) /docs (5 curl examples)
- /sitemap.xml (64 URLs) · /robots.txt · /healthz JSON variant · favicon (gold connector-graph SVG)
- POST /api/demo-classify (rate-limited 8/min/IP, no execute, intent-only)
- GET /api/public/connectors

Auth surface:
- POST /api/auth/login + bcrypt password hashing + signed session cookies
- POST /api/me/connections/:id (per-user encrypted token vault)
- POST /api/me/connections/import (paste-claude-json + paste-env auto-detect)
- POST /api/chat (regex planner → qwen3:14b LLM escalation → tool-call queue)

Admin surface:
- /admin/connectors /admin/users /admin/approvals /admin/audit /admin/oauth-setup
- POST /api/admin/oauth/:vendor/credentials + /sandbox (Browserbase)
- GET /admin/audit (event ledger)

Security:
- AES-256-GCM at-rest encryption with versioned key_id envelope (rotation supported)
- Atomic write + fsync(2) in save() · loud-fail load() (corrupt → exit, never silent default)
- chmod 0700 data/ + 0600 *.json
- CSP · HSTS preload · X-Frame DENY · X-Content-Type-Options nosniff
- Sensitive-action approval queue · audit trail
- esc() XSS sweep across all 5 user-facing HTML pages

LLM:
- Local Ollama (Mac1 qwen3:14b via tailnet 100.94.103.98:11434) — zero third-party API
- Pre-warm on boot · parallel preset-cache prime · 25min keep-alive ping
- 10min LRU response cache (200 entries) · Mac2 fallback chain (gemma3:12b, dead until OLLAMA_HOST=0.0.0.0)

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

File tree

121 files tracked. Click any to browse the source at HEAD.

Other build journals

← Ventura Bus 3d  ·  all 4 projects  ·  Ventura Claw Leads →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 1ms