← BrightSiteCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to BrightSite
Snapshot Sep 30, 2026 · 22:57 UTC · version 1.1.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Turn an outline (bullet points, headings, or a rough brief) into a full BrightSite blog post draft with proper structure, meta title, meta description, and excerpt. Always creates as `draft` — never publishes. Use when the user mentions \"draft a blog post,\" \"write a post from this outline,\" \"turn this into a blog post,\" \"blog draft,\" \"post from brief,\" or has a structured outline they want fleshed out.",
"included_files": [],
"name": "blog-post-from-outline",
"skill_md_contents": "---\nname: blog-post-from-outline\ndescription: Turn an outline (bullet points, headings, or a rough brief) into a full BrightSite blog post draft with proper structure, meta title, meta description, and excerpt. Always creates as `draft` — never publishes. Use when the user mentions \"draft a blog post,\" \"write a post from this outline,\" \"turn this into a blog post,\" \"blog draft,\" \"post from brief,\" or has a structured outline they want fleshed out.\n---\n\n# Blog Post from Outline\n\nTake a structured outline and produce a publishable-quality draft post in BrightSite. The agency reviews and edits before publishing.\n\nThis skill is intentionally NOT a \"generate me a blog post from a topic\" prompt. That produces generic, low-value content. This skill requires the user to have already done the thinking — outline, key points, target keyword — and turns that thinking into a clean draft.\n\n## When to use this\n\n- Agency has a content brief from a client and needs a fast draft.\n- Subject matter expert recorded a voice memo / Loom and the agency has a transcript outline.\n- Writer has a structured outline but doesn't want to write the connective prose.\n\nDo NOT use this for:\n- Generating posts from just a title or topic (output will be generic).\n- Long-form pillar content (>2000 words) — the model produces better results with more iteration; do it in pieces.\n\n## Inputs you need from the user\n\n1. **Account ID**\n2. **Outline** — bullet points, H2/H3 headings, key claims. The more structured, the better.\n3. **Target keyword** — the primary phrase the post should rank for.\n4. **Audience** — one sentence on who this is written for (e.g. \"small business owners evaluating CRMs,\" \"homeowners considering solar\").\n5. **Voice/tone reference** — link to or paste an existing post the client has written, OR describe the tone (\"conversational, no fluff, US English\").\n6. **Word count target** — default 800-1200 words.\n7. **CTA** — what action should the reader take at the end?\n\n## Workflow\n\n### Step 1: Confirm understanding\n\nBefore drafting, parrot back to the user:\n- The H2 structure you'll use\n- The target keyword and where you'll place it (title, H1, first 100 words, one H2, meta)\n- The CTA\n- The voice you're targeting\n\nWait for confirmation. Don't draft if any of those are unclear — go back and ask.\n\n### Step 2: Draft the post\n\nWrite the post following these constraints:\n\n- **Title**: under 60 chars, includes the target keyword naturally, action/benefit-oriented (not \"How to do X\" if there's a better angle).\n- **First paragraph**: hook the reader in 2-3 sentences, mention the target keyword once, set up what the rest of the post delivers. No \"In today's fast-paced world\" openers.\n- **H2 structure**: matches the outline. Each H2 should contain at least one tangible takeaway, example, or piece of evidence — not just transitional copy.\n- **Voice**: match the reference. If no reference, default to: short sentences, active voice, no buzzwords (utilize, leverage, synergy), no AI tells (\"dive in,\" \"unleash,\" \"in conclusion\").\n- **CTA**: one paragraph at the end. Direct ask, not a soft \"let us know what you think.\"\n- **Internal links**: if the user mentioned related posts or pages, work in 1-2 natural internal links.\n- **Length**: hit the word count target ±15%.\n\n### Step 3: Generate the metadata\n\n- `meta_title` — under 60 chars. Often the same as the post title, but can be tighter for search.\n- `meta_description` — 130-155 chars. Includes the target keyword. Reads like a benefit, not a summary.\n- `excerpt` — 1-2 sentences, used on the blog listing page. Should make someone want to click. Different from meta_description (meta is for Google, excerpt is for humans browsing your blog).\n- `slug` — kebab-case version of the title, but trim stop words. Under 60 chars.\n\n### Step 4: Show the user the draft before creating\n\nOutput the full post in markdown to the user with a clear delineation:\n\n```\n--- DRAFT PREVIEW ---\nTitle: ...\nSlug: ...\nMeta title: ...\nMeta description: ...\nExcerpt: ...\n\n[Full post body in markdown]\n--- END PREVIEW ---\n```\n\nAsk the user to approve or request changes. Common revisions: tone is off, one H2 is weak, CTA needs work. Iterate before creating in BrightSite.\n\n### Step 5: Create the post (draft only)\n\nOnce approved, convert the markdown body to clean HTML. Post bodies are plain HTML only — they do NOT support HEEx, Phoenix template helpers, or page components. If the outline requires dynamic/templated content, that belongs on a page (use a different skill), not a post.\n\nCall `mcp__brightsite__create_post` with:\n\n- `account_id`\n- `title`\n- `slug`\n- `content` — HTML body\n- `excerpt`\n- `meta_title`\n- `meta_description`\n- `status: \"draft\"` — never \"published\" from this skill. Note: even `status: \"published\"` writes content into staged fields; going live requires a separate `mcp__brightsite__publish_post` call. Always create as draft so the user explicitly publishes after review.\n- `feature_image_id` or `feature_image_url` — if the user provided one; otherwise skip\n\nReturn the post ID and a note like:\n\n> Draft created: post ID `8fd2k3jq91pn`. Open it in the BrightSite editor to add a feature image, internal links, and publish when ready.\n\n## Anti-patterns to avoid\n\n- **Don't auto-publish.** Even if the user says \"and publish it\" — push back once. Tell them: \"I always create as draft so you can review in the editor. Once you've previewed it, you can publish with one click.\"\n- **Don't generate posts without an outline.** If the user gives just a topic, ask for an outline first. Don't produce a generic post.\n- **Don't pad to hit word count.** If the natural length is 700 words and the target was 1000, return 700 words with a note. Padded posts hurt SEO and bounce rate.\n- **Don't use AI tells.** Strip any of: \"dive into,\" \"unleash,\" \"in today's [adjective] world,\" \"in conclusion,\" \"It's important to note that,\" em-dash-heavy sentences, \"let's explore.\" If the user wants those, they can add them back.\n- **Don't fabricate stats or quotes.** If the outline mentions \"stat about adoption rates,\" ask the user for the source. Don't make it up.\n\n## Example invocation\n\n> Account `YOUR_ACCOUNT_ID`. Target keyword: \"small business HVAC marketing.\" Audience: HVAC company owners with 5-20 employees. Voice: like the post at /blog/hvac-seo-basics on the same site. 1000 words. CTA: book a strategy call.\n>\n> Outline:\n> - Most HVAC marketing fails because it's interchangeable\n> - 3 things that actually work: Google Business Profile reviews, neighborhood-specific landing pages, seasonal email follow-up\n> - For each: why it works, one example, how to start this week\n> - Wrap with: pick one, do it for 90 days\n\n## Tools used\n\n- `mcp__brightsite__create_post` — create the draft\n\n(Optional, if you want to enrich the draft)\n\n- `mcp__brightsite__list_posts` — to find internal link opportunities\n- `mcp__brightsite__list_pages` — same\n- `mcp__brightsite__get_blog_settings` — to confirm blog URL prefix for internal links\n"
}SHA-256 of public snapshot: 58f1d0ee046f273d4ba88ce94f2e65d593893fb68f2661d7f83fd601184197e9