Claude-code-plugins-plus-skills hubspot-deploy-integration
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/hubspot-pack/skills/hubspot-deploy-integration" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-hubspot-deploy-integration && rm -rf "$T"
manifest:
plugins/saas-packs/hubspot-pack/skills/hubspot-deploy-integration/SKILL.mdsource content
HubSpot Deploy Integration
Overview
Deploy HubSpot-powered applications to Vercel, Fly.io, or Google Cloud Run with proper secret management and health checks.
Prerequisites
- HubSpot private app token for production
- Platform CLI installed (vercel, fly, or gcloud)
- Application code with health check endpoint
Instructions
Step 1: Vercel Deployment
# Add HubSpot secrets to Vercel vercel env add HUBSPOT_ACCESS_TOKEN production # Paste: pat-na1-xxxxx # Optional webhook secret vercel env add HUBSPOT_WEBHOOK_SECRET production
// vercel.json { "env": { "HUBSPOT_ACCESS_TOKEN": "@hubspot-access-token" }, "functions": { "api/**/*.ts": { "maxDuration": 30 } } }
// api/hubspot/contacts.ts (Vercel serverless function) import * as hubspot from '@hubspot/api-client'; const client = new hubspot.Client({ accessToken: process.env.HUBSPOT_ACCESS_TOKEN!, numberOfApiCallRetries: 3, }); export default async function handler(req: Request) { if (req.method === 'GET') { const contacts = await client.crm.contacts.basicApi.getPage( 10, undefined, ['firstname', 'lastname', 'email'] ); return Response.json(contacts.results); } if (req.method === 'POST') { const body = await req.json(); const contact = await client.crm.contacts.basicApi.create({ properties: body, associations: [], }); return Response.json(contact, { status: 201 }); } }
# Deploy vercel --prod
Step 2: Fly.io Deployment
# fly.toml app = "my-hubspot-app" primary_region = "iad" [env] NODE_ENV = "production" [http_service] internal_port = 3000 force_https = true auto_stop_machines = true auto_start_machines = true [[http_service.checks]] grace_period = "10s" interval = "30s" method = "GET" path = "/health" timeout = "5s"
# Set HubSpot secrets fly secrets set HUBSPOT_ACCESS_TOKEN=pat-na1-xxxxx fly secrets set HUBSPOT_WEBHOOK_SECRET=your-secret # Deploy fly deploy # Verify health fly status curl https://my-hubspot-app.fly.dev/health
Step 3: Google Cloud Run Deployment
#!/bin/bash # deploy-cloud-run.sh PROJECT_ID="${GOOGLE_CLOUD_PROJECT}" SERVICE_NAME="hubspot-service" REGION="us-central1" # Store token in Secret Manager echo -n "pat-na1-xxxxx" | gcloud secrets create hubspot-access-token \ --data-file=- --replication-policy="automatic" # Grant Cloud Run access to the secret gcloud secrets add-iam-policy-binding hubspot-access-token \ --member="serviceAccount:${PROJECT_ID}-compute@developer.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" # Build and deploy gcloud builds submit --tag gcr.io/$PROJECT_ID/$SERVICE_NAME gcloud run deploy $SERVICE_NAME \ --image gcr.io/$PROJECT_ID/$SERVICE_NAME \ --region $REGION \ --platform managed \ --set-secrets=HUBSPOT_ACCESS_TOKEN=hubspot-access-token:latest \ --min-instances=1 \ --max-instances=10 \ --memory=512Mi \ --timeout=30s
Step 4: Health Check for All Platforms
// src/health.ts import * as hubspot from '@hubspot/api-client'; export async function healthCheck(): Promise<{ status: string; services: Record<string, any>; timestamp: string; }> { const client = new hubspot.Client({ accessToken: process.env.HUBSPOT_ACCESS_TOKEN!, }); let hubspotStatus = { connected: false, latencyMs: 0 }; const start = Date.now(); try { await client.crm.contacts.basicApi.getPage(1); hubspotStatus = { connected: true, latencyMs: Date.now() - start }; } catch { hubspotStatus = { connected: false, latencyMs: Date.now() - start }; } return { status: hubspotStatus.connected ? 'healthy' : 'degraded', services: { hubspot: hubspotStatus }, timestamp: new Date().toISOString(), }; }
Output
- Application deployed to chosen platform
- HubSpot access token stored in platform's secret manager
- Health check endpoint verifying HubSpot connectivity
- HTTPS enforced on all endpoints
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Secret not found at runtime | Wrong env var name | Check platform secret config |
| Deploy timeout | Large build | Increase build timeout |
| Health check fails | Wrong token for environment | Verify production token |
| Cold start latency | Serverless function | Set or use warm-up |
Resources
Next Steps
For webhook handling, see
hubspot-webhooks-events.