jeremylongshore/claude-code-plugins-plus-skills
clerk-pack
plugins/saas-packs/clerk-pack/skills/clerk-deploy-integration/SKILL.md
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/main/plugins/saas-packs/clerk-pack/skills/clerk-deploy-integration/SKILL.md -a claude-code --skill clerk-deploy-integrationInstallation paths:
.claude/skills/clerk-deploy-integration/# Clerk Deploy Integration
## Overview
Deploy Clerk-authenticated applications to various hosting platforms.
## Prerequisites
- Clerk production instance configured
- Production API keys ready
- Hosting platform account
## Instructions
### Platform 1: Vercel Deployment
#### Step 1: Configure Environment Variables
```bash
# Using Vercel CLI
vercel env add NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY production
vercel env add CLERK_SECRET_KEY production
vercel env add CLERK_WEBHOOK_SECRET production
# Or in vercel.json
```
```json
// vercel.json
{
"env": {
"NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY": "@clerk-publishable-key",
"CLERK_SECRET_KEY": "@clerk-secret-key"
},
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "X-Frame-Options", "value": "DENY" },
{ "key": "X-Content-Type-Options", "value": "nosniff" }
]
}
]
}
```
#### Step 2: Configure Clerk Dashboard
1. Add Vercel domain to allowed origins
2. Set production URLs in Clerk Dashboard
3. Configure webhook endpoint
#### Step 3: Deploy
```bash
# Deploy to production
vercel --prod
# Or link to Git for auto-deploy
vercel link
```
### Platform 2: Netlify Deployment
#### Step 1: Configure Environment Variables
```bash
# netlify.toml
[build]
command = "npm run build"
publish = ".next"
[build.environment]
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY = "pk_live_..."
# Add secret in Netlify Dashboard
# Site settings > Environment variables > CLERK_SECRET_KEY
```
#### Step 2: Create Netlify Functions for API
```typescript
// netlify/functions/clerk-webhook.ts
import { Handler } from '@netlify/functions'
import { Webhook } from 'svix'
export const handler: Handler = async (event) => {
const WEBHOOK_SECRET = process.env.CLERK_WEBHOOK_SECRET!
const svix_id = event.headers['svix-id']
const svix_timestamp = event.headers['svix-timestamp']
const svix_signature = event.headers['svix-signature']
const wh = new Webhook(WEBHOOK_SECRET)
try {
const evt = wh.ver