From shopify-pack
Executes Shopify app production checklist for App Store submission, GDPR webhooks, API versioning, security verification, rate limits, and error handling.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin shopify-packThis skill is limited to using the following tools:
Complete pre-launch checklist for deploying Shopify apps to production and submitting to the Shopify App Store.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Complete pre-launch checklist for deploying Shopify apps to production and submitting to the Shopify App Store.
2024-10), not unstableAPP_UNINSTALLED webhook handler cleans up sessionscustomers/data_request webhook handler implementedcustomers/redact webhook handler implementedshop/redact webhook handler implemented (fires 48h after uninstall)shopify.app.tomlX-Shopify-Hmac-Sha256 using HMAC-SHA256crypto.timingSafeEqual() for signature comparisonrequestedQueryCost with debug header)userErrors array (200 with errors!)X-Request-Idframe-ancestors https://*.myshopify.com https://admin.shopify.com# Check which API versions your store supports
curl -s -H "X-Shopify-Access-Token: $TOKEN" \
"https://$STORE/admin/api/versions.json" \
| jq '.supported_versions[] | select(.supported == true) | .handle'
# Shopify deprecates versions ~12 months after release
# Set a calendar reminder to upgrade quarterly
app.get("/health", async (req, res) => {
const checks: Record<string, any> = {};
// Test Shopify connectivity
try {
const start = Date.now();
await client.request("{ shop { name } }");
checks.shopify = { status: "ok", latencyMs: Date.now() - start };
} catch (err) {
checks.shopify = { status: "error", message: (err as Error).message };
}
// Test database
try {
await db.query("SELECT 1");
checks.database = { status: "ok" };
} catch (err) {
checks.database = { status: "error" };
}
const allHealthy = Object.values(checks).every((c: any) => c.status === "ok");
res.status(allHealthy ? 200 : 503).json({
status: allHealthy ? "healthy" : "degraded",
checks,
timestamp: new Date().toISOString(),
});
});
| Alert | Condition | Severity |
|---|---|---|
| Shopify API down | 5xx errors > 5/min | P1 - Critical |
| Auth failures | 401 errors > 0 | P1 - Token may be revoked |
| Rate limited | THROTTLED > 5/min | P2 - Reduce query cost |
| High latency | p95 > 3000ms | P2 - Check query complexity |
| Webhook failures | Delivery success < 95% | P2 - Check endpoint health |
#!/bin/bash
echo "=== Shopify Pre-Deploy Smoke Test ==="
STORE="$SHOPIFY_STORE"
TOKEN="$SHOPIFY_ACCESS_TOKEN"
PASS=0; FAIL=0
# Auth test
if curl -sf -H "X-Shopify-Access-Token: $TOKEN" \
"https://$STORE/admin/api/2024-10/shop.json" > /dev/null; then
echo "PASS: Auth"; ((PASS++))
else
echo "FAIL: Auth"; ((FAIL++))
fi
# Scopes test
SCOPES=$(curl -sf -H "X-Shopify-Access-Token: $TOKEN" \
"https://$STORE/admin/oauth/access_scopes.json" | jq -r '.access_scopes[].handle')
for required in read_products read_orders; do
if echo "$SCOPES" | grep -q "$required"; then
echo "PASS: Scope $required"; ((PASS++))
else
echo "FAIL: Missing scope $required"; ((FAIL++))
fi
done
echo "---"
echo "Results: $PASS passed, $FAIL failed"
[ $FAIL -eq 0 ] && echo "READY FOR DEPLOY" || echo "FIX FAILURES FIRST"
For version upgrades, see shopify-upgrade-migration.