[object Object]

← back to Ventura Claw

+/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

23e98874bdee186792677e0745df456b6622fbe1 · 2026-05-07 09:12:14 -0700 · Steve

Files touched

Diff

commit 23e98874bdee186792677e0745df456b6622fbe1
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu May 7 09:12:14 2026 -0700

    +/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
---
 server/server.js | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/server/server.js b/server/server.js
index 0edf84f..5d7bab3 100644
--- a/server/server.js
+++ b/server/server.js
@@ -689,6 +689,42 @@ app.get("/api/public/connectors", (req, res) => {
   })) });
 });
 
+// Public services hub catalog — 18 ready-to-run orchestrations on top of the connectors.
+// Mirrors /api/public/connectors. Use for SEO syndication, partner listings, future affiliate feed.
+const SERVICES_CATALOG = [
+  { id: "business-bank-account",   category: "banking",    name: "Business bank account",          partners: ["Mercury","Relay","Bluevine"],         price_free: "Recommendation",       price_paid: 39,  unit: "flat" },
+  { id: "stripe-square-setup",     category: "banking",    name: "Stripe / Square setup",          partners: ["Stripe Connect","Square"],            price_free: "DIY",                  price_paid: 49,  unit: "flat" },
+  { id: "payroll-setup",           category: "banking",    name: "Payroll setup",                  partners: ["Gusto","Justworks"],                  price_free: "DIY",                  price_paid: 79,  unit: "flat" },
+  { id: "business-credit-card",    category: "banking",    name: "Business credit card",           partners: ["BREX","Mercury IO","Capital One"],    price_free: "Guidance",             price_paid: null, unit: "self-serve" },
+  { id: "accounting-setup",        category: "banking",    name: "Accounting setup",               partners: ["QuickBooks","Wave","Xero"],           price_free: "DIY",                  price_paid: 59,  unit: "flat" },
+  { id: "quarterly-estimates",     category: "tax-help",   name: "Quarterly estimates",            partners: ["IRS Direct Pay"],                     price_free: "Calc + reminders",     price_paid: null, unit: "cpa-referral" },
+  { id: "schedule-c-walkthrough",  category: "tax-help",   name: "Schedule C walkthrough",         partners: [],                                     price_free: "Walkthrough",          price_paid: null, unit: "cpa-referral" },
+  { id: "1099-nec-filing",         category: "tax-help",   name: "1099-NEC filing",                partners: ["Track1099","TaxBandits"],             price_free: "DIY",                  price_paid: 9,   unit: "per-form" },
+  { id: "cpa-referral",            category: "tax-help",   name: "CPA referral",                   partners: [],                                     price_free: "Intro",                price_paid: null, unit: "free-referral" },
+  { id: "general-liability",       category: "insurance",  name: "General liability",              partners: ["Embroker","Coverwallet","Next"],      price_free: "Quote routing",        price_paid: null, unit: "broker-quote" },
+  { id: "professional-liability",  category: "insurance",  name: "Professional liability (E&O)",   partners: ["Embroker","Coverwallet","Next"],      price_free: "Quote routing",        price_paid: null, unit: "broker-quote" },
+  { id: "cyber-liability",         category: "insurance",  name: "Cyber liability",                partners: ["Embroker","Coalition"],               price_free: "Quote routing",        price_paid: null, unit: "broker-quote" },
+  { id: "bop",                     category: "insurance",  name: "Business Owner's Policy",        partners: ["Embroker","Hiscox"],                  price_free: "Quote routing",        price_paid: null, unit: "broker-quote" },
+  { id: "domain-email-setup",      category: "identity",   name: "Domain + email",                 partners: ["Porkbun","Namecheap","Cloudflare"],   price_free: "Walkthrough",          price_paid: 39,  unit: "flat-plus-reg-fee" },
+  { id: "virtual-mailbox",         category: "identity",   name: "Virtual mailbox",                partners: ["iPostal1"],                           price_free: "Recommendation",       price_paid: null, unit: "provider-monthly" },
+  { id: "operating-agreement",     category: "documents",  name: "Operating agreement",            partners: ["template-engine"],                    price_free: "Template",             price_paid: 49,  unit: "flat" },
+  { id: "privacy-tos-generator",   category: "documents",  name: "Privacy policy + ToS",           partners: ["template-engine"],                    price_free: "Generate",             price_paid: 39,  unit: "flat" },
+  { id: "contract-templates",      category: "documents",  name: "Contract templates",             partners: ["template-engine"],                    price_free: "Library",              price_paid: 29,  unit: "flat" },
+];
+app.get("/api/public/services", (req, res) => {
+  res.json({
+    count: SERVICES_CATALOG.length,
+    services: SERVICES_CATALOG,
+    notes: {
+      operating_model: "API-orchestration only — no government-portal filing",
+      currency: "USD",
+      docs_url: `https://${DOMAIN}/services`,
+      flow_url: `https://${DOMAIN}/how-it-works`,
+      legal_notice_url: `https://${DOMAIN}/legal-notice`,
+    },
+  });
+});
+
 app.post("/api/demo-classify", demoLimiter, express.json({ limit: "2kb" }), async (req, res) => {
   const { message } = req.body || {};
   if (typeof message !== "string" || message.length < 3 || message.length > 200) {

← a261c64 /privacy + /terms post-pivot refresh: bump 'Last updated' to  ·  back to Ventura Claw  ·  /docs: add curl example for /api/public/services (18-row ser b2b64af →