From hubspot-pack
Deploys HubSpot-powered apps to Vercel, Fly.io, and Cloud Run with secret management for access tokens, health checks, and platform configs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hubspot-pack:hubspot-deploy-integrationThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Deploy HubSpot-powered applications to Vercel, Fly.io, or Google Cloud Run with proper secret management and health checks.
Deploy HubSpot-powered applications to Vercel, Fly.io, or Google Cloud Run with proper secret management and health checks.
# 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
# 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
#!/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}[email protected]" \
--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
// 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(),
};
}
| 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 min-instances=1 or use warm-up |
For webhook handling, see hubspot-webhooks-events.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin hubspot-packExecutes HubSpot production deployment checklist for CRM integrations, including verifications, TypeScript health check endpoint, and monitoring setup.
Deploys Intercom apps to Vercel, Fly.io, and Cloud Run with secrets, webhook handlers, and health checks.
Deploys Hootsuite integrations to Vercel, Fly.io, and Cloud Run with OAuth token persistence using KV stores or databases.