writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
hootsuite-prod-checklistExecute Hootsuite production deployment checklist and rollback procedures. Use when deploying Hootsuite integrations to production, preparing for launch, or implementing go-live procedures. Trigger with phrases like "hootsuite production", "deploy hootsuite", "hootsuite go-live", "hootsuite launch checklist".
Independent GitHub snapshot · Automated classification · Original documentation governs
name: hootsuite-prod-checklist description: 'Execute Hootsuite production deployment checklist and rollback procedures.
Use when deploying Hootsuite integrations to production, preparing for launch,
or implementing go-live procedures.
Trigger with phrases like "hootsuite production", "deploy hootsuite",
"hootsuite go-live", "hootsuite launch checklist".
' allowed-tools: Read, Bash(curl:*), Grep version: 1.6.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:
Hootsuite manages social media publishing, scheduling, and analytics across multiple platforms (Twitter/X, LinkedIn, Facebook, Instagram). A production integration automates post scheduling, monitors engagement, and syncs analytics. Failures mean posts go out at wrong times, media uploads get rejected, or social profile disconnections go undetected, creating gaps in your publishing calendar.
HOOTSUITE_API_KEY and OAuth client secret in secrets managerhttps://platform.hootsuite.com/v1)async function checkHootsuiteReadiness(): Promise<void> {
const checks: { name: string; pass: boolean; detail: string }[] = [];
// API connectivity
try {
const res = await fetch('https://platform.hootsuite.com/v1/me', {
headers: { Authorization: `Bearer ${process.env.HOOTSUITE_API_KEY}` },
});
checks.push({ name: 'Hootsuite API', pass: res.ok, detail: res.ok ? 'Connected' : `HTTP ${res.status}` });
} catch (e: any) { checks.push({ name: 'Hootsuite API', pass: false, detail: e.message }); }
// Credentials present
checks.push({ name: 'API Key Set', pass: !!process.env.HOOTSUITE_API_KEY, detail: process.env.HOOTSUITE_API_KEY ? 'Present' : 'MISSING' });
// Social profiles connected
try {
const res = await fetch('https://platform.hootsuite.com/v1/socialProfiles', {
headers: { Authorization: `Bearer ${process.env.HOOTSUITE_API_KEY}` },
});
const data = await res.json();
const count = data?.data?.length || 0;
checks.push({ name: 'Social Profiles', pass: count > 0, detail: `${count} profiles connected` });
} catch (e: any) { checks.push({ name: 'Social Profiles', pass: false, detail: e.message }); }
for (const c of checks) console.log(`[${c.pass ? 'PASS' : 'FAIL'}] ${c.name}: ${c.detail}`);
}
checkHootsuiteReadiness();
| Check | Risk if Skipped | Priority |
|---|---|---|
| Token refresh logic | All scheduled posts fail silently | P1 |
| Profile disconnection | Publishing gap on key platforms | P1 |
| Media rejection handling | Broken posts with missing images | P2 |
| Timezone validation | Posts published at wrong local time | P2 |
| Content moderation | Brand-damaging automated content | P3 |
public_posts=0 assertions.Create a readiness receipt with revision, canary profile, health/quota/approval/audience results, public-post count, approvals, outcome, and rollback reference. Exclude copy, media, handles, and secrets.
revision=r44; canary=sandbox-brand; health=pass; quota=within-budget; approval=pass; audience=approved; public_posts=0; outcome=hold-for-human is a complete canary decision.
See hootsuite-security-basics for social account protection and access control.