
Newsletter Writer
- 2 installs
- 9 repo stars
- Updated June 11, 2026
- timescale/marketing-skills
Plans and drafts the bi-weekly Tiger Data developer newsletter, sourcing recent content from Tiger Den and writing each section in brand voice with UTM-tagged links.
About
Sources recent blog posts, tutorials, case studies, and community content from Tiger Den, organizes it into the standard newsletter sections, and drafts each in brand voice with UTM-tagged links. A marketer uses it to plan and write the owned bi-weekly developer newsletter.
- Pulls product-marketing-context and brand-voice-guide references
- User supplies events, press mentions, and untracked community content
Newsletter Writer by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,659 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/timescale/marketing-skills --skill newsletter-writerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 9 |
| Last updated | June 11, 2026 |
| Repository | timescale/marketing-skills ↗ |
What it does
Plans and drafts the bi-weekly Tiger Data developer newsletter, sourcing recent content from Tiger Den and writing each section in brand voice with UTM-tagged links.
Files
Newsletter Writer
Plan and draft the bi-weekly Tiger Data developer newsletter. Surfaces recent content from Tiger Den, organizes it into the standard newsletter sections, and drafts each section in brand voice with UTM-tagged links. The user provides event details, external press mentions, and community content that isn't tracked in Tiger Den.
When to use this skill
- Drafting a new newsletter edition
- Planning what content to include in the next newsletter
- Writing newsletter copy for specific sections
- When someone says "it's newsletter time" or "let's do the newsletter"
When NOT to use this skill
- Writing standalone email sequences or drip campaigns (use email-nurture-planner)
- Writing social posts to promote the newsletter (use social-post-writer)
- Writing blog posts or long-form content (use brand-voice-writer)
Step 0: Pre-flight check
Read REFERENCES.md from the plugin root and run the pre-flight check described there. Call list_marketing_references() to verify Tiger Den is reachable. If it fails or the tool is not found, STOP — do not continue. Follow the error handling in REFERENCES.md.
Also fetch the No Fly List before doing any work:
get_marketing_reference(slug: "no-fly-list")This is a list of customers who cannot be publicly referenced. Load these names as a hard constraint: never include any No Fly List customer in any output — not as named examples, proof points, customer quotes, case study references, or any other mention. If the user requests content featuring or referencing a No Fly List customer, stop and inform them that this customer cannot be publicly referenced. If a No Fly List name appears in source material you are working from, omit it from all outputs.
Instructions
1. Load context
This skill requires the Tiger Den MCP server. If Tiger Den tools are not available, tell the user: "This skill needs the Tiger Den MCP server to load brand context and find content. Please connect Tiger Den and try again." Do not proceed without it.
Fetch reference docs before starting:
- Always fetch:
product-marketing-contextandbrand-voice-guideusingget_marketing_context(slugs: ["product-marketing-context", "brand-voice-guide"]). - Read the newsletter template: Read the local reference file at
./references/newsletter-template.mdfor section order, formatting conventions, and CTA patterns. - Freshness check: After fetching, check the "Last updated" date on product-marketing-context. If it is more than 6 months old, flag it: "The product-marketing-context doc was last updated [date]. Some metrics or proof points may be outdated. Want me to proceed or verify first?"
2. Gather the brief
Use AskUserQuestion to collect the brief in two calls. Do not post questions as plain text in chat.
If the user has already provided a list of content upfront (URLs, titles, or descriptions), skip questions for those sections and proceed directly to Step 3.
First call — edition basics (up to 4 questions):
- "When is this edition going out?" — open (user types send date via Other; e.g., "March 20", "next Thursday")
- "Any must-include content for this edition?" — options: Yes (I'll list below), No — source everything from Tiger Den
- "Any product or open-source release to announce?" — options: Yes (I'll describe below), No product update this edition
- "Any upcoming events to feature?" — options: Yes (I'll add details below), No events this edition
Second call — optional sections:
- "Any external press mentions or industry coverage to include?" — options: Yes (I'll share links below), No press this edition
- "Any community-created content to feature?" — options: Yes (I'll share details below), No community content this edition
- "Any sections to skip entirely?" — options: Skip Product Update, Skip Tech Innovation, Skip Developer Events, Skip From the Community (multiSelect: true); or "Include all sections"
After both calls, review the answers. If the user indicated "Yes" to any section (must-include, product update, events, press, community), ask them to provide those details in a follow-up message before proceeding to Step 3.
3. Source content from Tiger Den
Search Tiger Den for recently published content to populate the core sections. Use the send date to calculate the content window: search for content published in the ~4 weeks before the send date.
Run these searches:
list_content(content_type: "blog_post", published_after: "[4 weeks before send date]", sort_by: "published", sort_order: "desc", limit: 10)for From the Blog and Developer Resourceslist_content(content_type: "youtube_video", published_after: "[4 weeks before send date]", sort_by: "published", sort_order: "desc", limit: 5)for From the Communitylist_content(content_type: "third_party", published_after: "[4 weeks before send date]", sort_by: "published", sort_order: "desc", limit: 5)for Tech Innovationlist_content(content_type: "case_study", published_after: "[4 weeks before send date]", sort_by: "published", sort_order: "desc", limit: 5)for Developer Resourceslist_content(content_type: "whitepaper", published_after: "[4 weeks before send date]", sort_by: "published", sort_order: "desc", limit: 5)for Developer Resources
Present the results as a table grouped by newsletter section:
| Section | Title | Published | Type |
|--------------------------|------------------------------------|------------|------------|
| 🐯 Product Update (user) | [Title] | YYYY-MM-DD | n/a |
| 📚 From the Blog | [Title] | YYYY-MM-DD | blog_post |
| ⚙️ Dev Resources | [Title] | YYYY-MM-DD | whitepaper |
| 🎬 Community | [Title] | YYYY-MM-DD | youtube |Include the must-include items the user provided at the top of the relevant sections (marked as "user-selected").
Ask the user to confirm which items to include and which section each belongs to. Some content may fit multiple sections (e.g., a technical blog post could be "From the Blog" or "Developer Resources"). Let the user decide placement.
4. Draft each section
Once the user confirms the content selection, draft the newsletter.
For each Tiger Den content item:
1. Fetch the full text with get_content_text(id: "[content-id]"). 2. Read the full content to understand the piece thoroughly. 3. Write a 2-4 sentence description following the patterns in the newsletter template reference. Lead with what the reader will learn or gain. Include one specific data point or result when the source material provides one. 4. Generate a UTM-tagged link with generate_utm_link(url: "[content-url]", source: "newsletter", medium: "email", campaign: "newsletter-[send-date]"). 5. Format the section following the template conventions (emoji, heading, image placeholder, description, CTA link with arrow).
For user-provided items (events, press, community):
1. If the user provided a URL, fetch the page content to write a description. If they provided a description, use it. 2. Generate UTM-tagged links for internal URLs. External URLs (press coverage, community content) do not need UTM tags. 3. Format following the template conventions for that section type.
For boilerplate sections (Careers, Share Your Use Case):
1. Use the standard text from the newsletter template reference. 2. Generate a fresh UTM-tagged link for the Careers page: generate_utm_link(url: "https://www.tigerdata.com/careers", source: "newsletter", medium: "email", campaign: "newsletter-[send-date]").
5. Write subject line, preview text, and intro
Draft these after the body sections are complete, since they need to reference the content.
Subject line: Provide 2-3 options. Each should:
- Reference the strongest content piece in the edition
- Be specific and intriguing (a concrete number, result, or question)
- Avoid generic phrases like "This week in Tiger Data" or "Your bi-weekly update"
Preview text: Provide 2-3 options. Each should:
- Complement the subject line (not repeat it)
- Tease 2-3 additional pieces from the edition
- Pattern: "Plus: [item], [item], and [item]"
Intro: Write one intro paragraph following the template format:
- Start with the personalized greeting:
👋 [First Name], - 2-3 sentences summarizing the key highlights with inline links
- Address the reader directly ("you'll discover", "you'll find")
- End with a brief transition like "Let's get into it."
6. Brand voice cross-check
Review the complete draft against the brand voice guide:
1. No em dashes. Replace every em dash with a comma, period, colon, or separate sentence. 2. Lead with value. Descriptions should open with what the reader gets, not "we published" or "Tiger Data released." 3. Terminology. Product names and technical terms must match the glossary in product-marketing-context (e.g., "Tiger Data" not "Timescale", "Tiger Cloud" not "Timescale Cloud" unless quoting historical content). 4. CTA consistency. All CTA links should follow the arrow format: [👉 Descriptive text →](URL). 5. UTM links. Verify every internal link has UTM parameters. 6. No AI slop. Scan for forced triples, sycophantic openers, vocabulary clusters, hallmark-card endings.
Fix issues inline. If no issues are found, state "No voice issues found."
7. Present the complete newsletter
Output the full newsletter as structured Markdown in chat. Use this order:
1. Subject line options 2. Preview text options 3. Intro 4. All body sections in template order 5. Voice check results
Output format
Present everything directly in chat as structured Markdown. Do not create files unless the user requests one.
Label each section clearly with its emoji and heading. Separate sections with horizontal rules for readability.
Include this note at the end: "To edit any section, tell me what to change. I can also regenerate subject lines, rewrite descriptions, or adjust the content selection."
Tiger Den tools used
- `get_marketing_context` -- fetch product-marketing-context and brand-voice-guide (Step 1)
- `list_content` -- browse recent content by type and date to populate sections (Step 3)
- `search_content` -- find content on specific topics if the user requests a themed newsletter (Step 3)
- `get_content_text` -- read full content items to write accurate descriptions (Step 4)
- `generate_utm_link` -- tag all internal links with newsletter UTM convention (Step 4)
Hand-off
After the draft is complete, offer to:
- Run de-slop if any sections read as AI-generated
- Refine individual sections with brand-voice-writer for deeper voice alignment
- Create social posts to promote the newsletter with social-post-writer
Do not auto-trigger other skills. Wait for the user to confirm the output looks good first.
Newsletter Template Reference
Structural guide for the bi-weekly Tiger Data developer newsletter. This file defines section order, formatting conventions, and content patterns. It does not contain proprietary content.
Section Order
Every newsletter follows this sequence. Sections marked "optional" can be skipped if no content is available for that edition.
1. Subject Line 2. Preview Text 3. Intro 4. Product Update (🐯) - optional 5. From the Blog (📚) 6. Vertical Tutorial (🏭 or similar) - optional 7. Developer Resources (⚙️) 8. Tech Innovation (🧠) - optional 9. Developer Events (📅) - optional 10. From the Community (🎬) - optional 11. Careers (👀) 12. Share Your Use Case (🔄)
Section Formatting
Subject Line
- One line, specific and intriguing
- Reference the strongest content piece in the edition
- Pattern: lead with a concrete number, claim, or question that earns the open
- Examples of patterns: "The 9 Postgres extensions developers actually use in 2026", "Why 2026 is the year to simplify your stack"
Preview Text
- One line that complements the subject line (not repeats it)
- Provide 2-3 options for the team to choose from
- Two valid patterns:
- Teaser list: "Plus: [item], [item], and [item]" - lists specific pieces in the edition
- Thematic: A single declarative statement capturing the edition's unifying idea (e.g., "From search to time-series to AI memory - all in one database.")
Intro
Format:
👋 [First Name],
[2-3 sentences summarizing the edition's highlights with inline links to the top pieces.
Speak directly to the reader. Focus on what they'll get out of reading.]
[Closing hook, e.g., "Let's get into it."]Rules:
- Address the reader directly with "you" and "you'll"
- Inline-link the 2-3 most important pieces naturally within the sentences
- Keep to one short paragraph (3-5 sentences max)
- End with a brief transition into the content
Product Update (🐯) - optional
Use when there is a notable product or open-source release to announce (e.g., a new extension version, a GA launch, a significant feature). Appears before From the Blog. Format:
## 🐯 Product Update
[Product/Extension Name] [Version] Released
**[Image placeholder]**
[2-4 sentence description: what was released, the headline improvement (e.g., "4x faster indexing"),
and what it means for users. Can include a "In case you missed it" link to a related post.]No CTA link is required if the release links naturally within the description. Otherwise use the standard [👉 CTA text →](URL) format.
From the Blog (📚)
1-2 featured blog posts. Each item follows this format:
[Title as plain text heading]
**[Image placeholder]**
[2-4 sentence description: what the post covers, key insight or data point, why it matters
to the reader. Lead with the practical value, not the product.]
[👉 CTA link text with arrow →](URL)Description rules:
- Lead with what the reader will learn or gain, not "we published" or "this post covers"
- Include one specific data point or takeaway when available
- Keep to 2-4 sentences
Vertical Tutorial (🏭 or domain emoji) - optional
Use when there is an in-depth, industry-specific or use-case-specific tutorial worth spotlighting separately from the general Developer Resources section. The emoji should match the domain (e.g., 🏭 for manufacturing/IoT, 🤖 for AI/ML, 🏦 for fintech). Format:
## [🏭] [Domain] Tutorial
[Tutorial Title]
**[Image placeholder]**
[2-4 sentence description: the specific scenario (e.g., "50 machines at 10 samples/second"),
the step-by-step approach, and the concrete result (e.g., "67 seconds to 1.8 milliseconds").]
[👉 CTA text →](URL)Developer Resources (⚙️)
1-3 technical guides, tutorials, or learn articles. Same format as From the Blog.
Content types that fit here: step-by-step guides, migration walkthroughs, decision frameworks, how-to tutorials, benchmarks, architecture deep-dives.
Tech Innovation (🧠)
1-2 items. External press coverage, founder profiles, research features, or industry commentary. Format:
[Title] - *[Publication Name]*
[2-3 sentence description with inline link to the source on first mention.
Focus on what makes the piece interesting, not just what it covers.]
[👉 CTA link text with arrow →](URL)Developer Events (📅)
1-2 upcoming events. The emoji for this section is 📅. Format varies by event type:
Virtual events (webinars):
# [Event Title]
### [Date] | [Time with timezone]
**[Image placeholder]**
[2-4 sentence description of what the event covers, who it's for, and what
attendees will learn.]
📌 [Register now →](URL)In-person events (conferences, meetups):
# [Event/Conference Name]
### [Date range] | [City, State/Country]
**[Image placeholder]**
[2-4 sentence description: what Tiger Data is doing at the event, who should
come find us, and what's relevant about this event for the audience.]
📌 [Register now →](URL)From the Community (🎬)
1-2 items. Community-created content: YouTube tutorials, blog posts, open-source tools, conference talks. Format:
[Title] - *[Creator Name]*
[Video embed placeholder or image placeholder if applicable]
[2-3 sentence description of what the content covers and why it's useful.]
[Emoji] [CTA link text with arrow →](URL)Use contextual emojis for CTAs: 🍿 for videos, 📖 for articles, 🛠️ for tools.
Careers (👀)
Recurring section with light variations per edition:
👀 Tiger Data Careers
Looking for a career opportunity or know someone who is? We're hiring across
departments! If you have experience in databases, open source, and building
tools that make developers' lives easier, you might find the role you're
looking for with Tiger Data. Find out [what it takes to thrive](https://www.tigerdata.com/careers)
here. Then, check out [the roles we're hiring for](careers-utm-link).Generate a UTM link for the careers URL each edition.
Share Your Use Case (🔄)
Recurring boilerplate:
🔄 Share Your Use Case
Are you building something cool with TimescaleDB, Tiger Cloud, or Agentic
Postgres? We want to hear about it! [Email us](mailto:community@tigerdata.com).
We love seeing what you're building no matter where you are in the world,
and we might feature it in our newsletter or blog to bring your global community.CTA Link Conventions
- All CTA links use an emoji pointer followed by descriptive text and an arrow:
[👉 See the full breakdown →](URL) - CTA text should describe the destination, not be generic ("Click here" or "Read more")
- Good patterns: "See the full breakdown →", "Follow the migration guide →", "Read the decision framework →", "Watch the tutorial →", "Register now →"
- All links must be UTM-tagged via
generate_utm_link
UTM Convention for Newsletters
source:newslettermedium:emailcampaign:newsletter-YYYY-MM-DD(using the send date)
Image Placeholders
The skill does not generate images. Use **[Image: brief description of what image should show]** as a placeholder. The team will add images during final production.
Typical image placement: one image per From the Blog item, one per Developer Resources item, one per Developer Events item.