skills/timescale/marketing-skills/event-brief-planner

event-brief-planner

Installation
SKILL.md

Event Brief Planner

This skill helps marketing team members plan and produce complete event campaign briefs. It collects event details, generates on-brand copy for all campaign assets (landing pages, emails, social posts, ads, banners, newsletters), and provides a KPI tracking framework. Output is Markdown in chat, designed for iteration before finalizing.

When to use this skill

  • Planning a new event campaign (field event, conference, webinar)
  • Filling out the event campaign brief template
  • Writing campaign assets for an upcoming event
  • When someone asks "what marketing do we need for [event name]?"

When NOT to use:

  • Writing a single email or social post in isolation (use brand-voice-writer)
  • Planning an email nurture sequence (use email-nurture-planner)
  • Reviewing existing content (use content-reviewer)

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

Step 1: Load brand and audience context

Fetch context from Tiger Den before generating any copy so all assets are grounded in who we are and who we're talking to.

Fetch both reference docs:

get_marketing_context(slugs: ["product-marketing-context", "brand-voice-guide"])
  • product-marketing-context -- audience personas, pain points, positioning, competitive landscape, proof points. Determines targeting and messaging.
  • brand-voice-guide -- tone, structural guidance, email rules, social post conventions. The authority on how to write.

If Tiger Den is not connected, do not proceed — tell the user to run /setup. See REFERENCES.md in the plugin root for details and error handling.

Freshness check: After fetching each doc, check the "Last updated" date near the top. If either doc 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 with what's there, or should we verify the numbers first?" This matters most for product-marketing-context since it contains performance benchmarks and customer metrics that change over time.

Step 2: Collect the event overview (Part 1)

Gather event facts using AskUserQuestion so the user sees a structured guided form rather than plain text questions. Do not ask everything at once. Do not silently assume defaults.

Start with a URL check — always ask this first:

Use AskUserQuestion with a single question:

  • "Do you have an event website URL?" — options: Yes (I'll paste it below), No — I'll fill in details manually

If the user provides a URL: Read the page immediately. Extract everything available: event name, type (conference/webinar/field event), dates, time zone, location, venue, agenda/speaker info, registration CTA, and whether Tiger Data is listed as a sponsor or exhibitor.

After extraction, build a field-state ledger and maintain it for the rest of Step 2. Assign each tracked field one of three states:

  • prefilled — extracted from the URL
  • confirmed — user confirmed or corrected a prefilled value
  • missing — not found on the page and not yet answered

Minimum fields to track: event name, event type, dates, time zone, location, venue, sponsor/exhibitor status, speaking details (if found).

Present this ledger as a prefill summary in chat — show what was found and what is still missing. Then use a single AskUserQuestion to let the user confirm or correct prefilled fields. Once the user responds, mark confirmed fields as confirmed.

For the rest of Step 2 (Groups A–D): Only fire AskUserQuestion for fields still marked missing. Do not re-ask any field already marked confirmed, even if that field would normally appear in a later group. A field confirmed once stays confirmed.

If no URL is provided: Proceed through Groups A–D using the full question sequence below.

Group A: Event basics

If URL was provided and filled most fields, use a single confirmation AskUserQuestion showing what was extracted and asking the user to confirm or correct. Only ask for genuinely missing fields.

If no URL, use two sequential AskUserQuestion calls:

First call — core event details (up to 4 questions):

  • "What is the event name?" — open (user types via Other; e.g., "AWS re:Invent", "Snowflake Summit")
  • "What type of event is this?" — options: Field Event, Conference, Webinar
  • "What are the event date(s) and time zone?" — open (user types via Other; e.g., "June 3–5, 2026, PT")
  • "Where is the event?" — open (user types via Other; e.g., "San Francisco, CA" or "Virtual")

Second call — logistics:

  • "Do we have a booth?" — options: Yes (with booth number), Yes (no booth number yet), No booth
  • "Is the contract signed?" — options: Yes — signed, In progress, Not yet

Step 2.5: Check for existing brief in Tiger Den

Follow the Step A protocol in references/briefs-integration.md (from the plugin root):

  1. Generate source_run_id and source_run_at.
  2. Search for an existing brief using the event name and brief_type: "event".
  3. If a match is found, ask the user whether to update it or create a new one.
  4. Carry the brief_id forward if updating.

Group B: Speaking details

Start with a single AskUserQuestion: "Are we speaking at this event?" — options: Yes, No. If No, skip to Group C (or D for webinars).

If Yes, check whether the URL already surfaced session details (title, date/time, room). If so, present those as prefilled answers and only ask for what's missing. Otherwise use an AskUserQuestion call:

  • "Speaker name(s) and title(s)?" — open (user types via Other)
  • "Session title?" — open (user types via Other)
  • "When is the session? (date, time, room/stage)" — open (user types via Other)
  • "Will the session be recorded?" — options: Yes, No, Not sure

Group C: On-site attendees (in-person events only)

Skip this group entirely for webinars.

Use one AskUserQuestion call:

  • "Who is attending from Tiger Data? (names and titles)" — open (user types via Other)
  • "Do any attendees need headshot graphics for promotion?" — options: Yes, No, Not sure yet

If headshots are needed, note that full names, titles, and headshot files must be provided before submitting a design request.

Also ask: "Are there customer speakers who need graphics?" — options: Yes, No

Group D: Target audience (always ask)

Use one AskUserQuestion call with options where possible:

  • "What target titles or roles are we focused on?" — open (user types via Other; suggest options from product-marketing-context ICPs)
  • "What company size?" — options: SMB (under 100), Mid-market (100–1,000), Enterprise (1,000+), All sizes
  • "What region?" — options: North America, Europe, APAC, Global / All
  • "What industry vertical?" — open (user types via Other)

After collecting Group D, map the audience answers to the ICPs in product-marketing-context if possible.

After Group A, decide which remaining groups are relevant: skip Group C for webinars, skip booth questions if no booth. Always ask Group D.

Step 3: Confirm brief and select campaign assets

After collecting Part 1, present a formatted summary of the event overview in chat.

Then use AskUserQuestion with multiSelect: true to let the user select which assets they need:

Asset selection call:

  • "Which campaign assets do you need?" (multiSelect: true)
    • options: Landing page, Website banner, Newsletter blurb, Pre-event email, Post-event email, Organic social posts, Paid ads

After the user selects assets, use a second AskUserQuestion to collect quantities and key details for the selected assets only (skip questions for assets not selected):

  • "How many landing pages?" — options: 1, 2, 3+
  • "What is the primary CTA / offer?" — open (e.g., "Register now", "Book a meeting at booth #X"; user types via Other)
  • "What is the key messaging angle for this event?" — open (user types via Other)
  • If social posts selected — "How many social posts per phase?" — options: 1 per phase, 2 per phase, 3+ per phase

For newsletter blurbs and pre-event emails, ask launch dates in a follow-up AskUserQuestion call. Stagger at least 3–5 days between any newsletter blurb and pre-event email so the same audience is not hit twice in the same window.

If paid ads are selected, ask: "Which ad channels?" — options: LinkedIn, Google, Meta, Reddit, X (multiSelect: true)

Establish UTM convention based on the event name. Convert the event name to a lowercase, hyphenated slug (e.g., "AWS re:Invent 2026" becomes aws-reinvent-2026). This slug is the campaign parameter for all UTM links. Document the convention so it is visible in the output:

  • source = channel (e.g., linkedin, twitter, email, website)
  • medium = asset type (e.g., social, paid-social, email, banner)
  • campaign = event slug
  • content = asset identifier (e.g., pre-event-email, social-pre-1, paid-linkedin-1)

Wait for the user to confirm the asset list, quantities, CTA, and messaging angle before generating any copy.

Build the asset ledger. After the user confirms asset selections, create an explicit ledger tracking each selected asset with one of these states:

  • selected — user selected it; not yet generated
  • generated — output has been produced
  • blocked — cannot be generated; a reason must be provided inline (see Step 5 reconciliation for where this surfaces in the final brief)

This ledger persists through all of Step 4. When an asset's state changes during generation, print a brief status line in chat (e.g. "Asset ledger updated: Newsletter blurb → generated" or "Asset ledger updated: Paid ad — blocked (reason: no ad channels confirmed)"). Before final output, every selected asset must be either generated or blocked. A missing newsletter launch date is not a valid block reason — suggest timing relative to the event date instead. Silent omissions are not allowed.

Step 4: Generate campaign assets (Part 2)

Generate each selected asset in order. Present each as a clearly headed section. Include all fields from the template.

4a. Landing page(s)

For each landing page, generate:

  • Page title (for the browser tab)
  • Proposed URL: https://www.tigerdata.com/events/[event-slug]
  • Header (H1): One compelling line that leads with what the attendee gets
  • Body copy: 2-3 short paragraphs (under 200 words total). Cover: the event value prop, Tiger Data's presence (speaking, booth, demos), and what attendees will learn or gain.
  • CTA button text: Aligned with the primary CTA from Step 3
  • Form fields: Recommend fields (typically: first name, last name, company email, company name, job title, and an optional "Interested in a follow-up meeting?" checkbox)
  • Book a meeting integration? Y/N based on whether we have a booth
  • Design asset notes: Suggest what visuals are needed (hero banner, event logo, etc.)

Lead with what the attendee gets, not what Tiger Data is doing. Frame the value prop using the target audience from Part 1.

Avoid copy overlap with the pre-event email. The landing page and the pre-event email serve different contexts (inbound vs. push) even though they share a message. Use a different lead-in and structure for each. If the landing page opens with the audience's current stack, the email should open with the event value prop, or vice versa.

Conversion-path alignment. When writing the paragraph immediately before and after the primary CTA button, confirm that copy reinforces the conversion path selected in Step 3. If the CTA is commercial or sales-oriented ("Book a meeting," "Start a trial," "Talk to sales"), do not foreground self-hosted or open-source positioning in that surrounding copy — it introduces a competing path. TimescaleDB can appear where context requires it, but not as the leading alternative to the chosen CTA.

4b. Website banner(s)

For each banner, generate:

  • Copy: One punchy line. Strict 120-character limit. Count characters and rewrite if over.
  • CTA: Short action text (2-4 words)
  • Landing page link

4c. Newsletter blurb(s)

For each blurb, generate:

  • Launch date: Based on user input or suggest timing relative to event date
  • Copy: 2-3 sentences. Conversational, not promotional. Focus on why the reader should care about this event.
  • CTA: What action to take
  • Link: Landing page URL
  • Image notes: Suggest what visual to include

4d. Pre-event email

Generate:

  • Launch date: Based on user input (typically 2-4 weeks before event)
  • Target audience: Specific segment from the brief, or "all subscribers" if not specified
  • Subject line: Under 50 characters. Follow brand voice guide email rules: no clickbait, no ALL CAPS, no false urgency.
  • Preheader text: Strict 85-character limit. Extends or complements the subject line, never repeats it. Count characters and rewrite if over.
  • Body copy: 150-250 words. Lead with the event value prop, mention Tiger Data's presence, close with the CTA. Follow the brand voice guide's email section.
  • CTA: Aligned with primary CTA
  • Offer URL(s): Landing page with UTM parameters
  • Signature: Suggest sender (default: "The Tiger Data Team")
  • Recipients/send list: Based on target audience (e.g., "newsletter subscribers, prospects in [region], previous event attendees")
  • Design asset notes: Suggest what visuals are needed

One primary next step. This email must have exactly one primary next step. Supporting resources may appear inline in the body but must be subordinate and clearly in service of the primary CTA — not framed as a second CTA or a parallel offer. If any secondary element competes for attention, rewrite the email.

No substantive content after the CTA. Once the email reaches its close and primary CTA, do not add any substantive paragraphs. Allowed after the CTA: sender/signature, footer, unsubscribe content. Not allowed: proof points, additional arguments, extra resources presented as a new pitch, a second closing paragraph.

4e. Post-event email

Generate:

  • Launch date: Suggest 1-2 business days after event ends
  • Target audience: Segment based on engagement (e.g., "booth visitors, session attendees, meeting no-shows")
  • Subject line: Under 50 characters.
  • Preheader text: 85-character limit.
  • Body copy: 150-250 words. Thank attendees, share 1-2 key takeaways or resources, provide a clear next-step CTA. If a session was recorded, mention the recording will be available (or link it).
  • CTA: Next step (e.g., "Start a free trial," "Read the recap," "Watch the recording")
  • Offer URL(s) with UTMs
  • Signature: Match pre-event email sender
  • Recipients/send list: Segmented list (e.g., "booth visitors, attendees, no-show registrants, meeting follow-ups"). Only list segments that are buildable based on how leads will be captured. If lead capture method hasn't been discussed yet, flag it: "These segments depend on how booth leads are captured. Confirm scan method in the KPI tracking section."
  • Design asset notes

One primary next step. This email must have exactly one primary next step. Supporting resources may appear inline in the body but must be subordinate and clearly in service of the primary CTA — not framed as a second CTA or a parallel offer. If any secondary element competes for attention, rewrite the email.

No substantive content after the CTA. Once the email reaches its close and primary CTA, do not add any substantive paragraphs. Allowed after the CTA: sender/signature, footer, unsubscribe content. Not allowed: proof points, additional arguments, extra resources presented as a new pitch, a second closing paragraph.

4f. Organic social posts

For each requested post (pre-event, live, post-event), generate:

  • Channel(s): LinkedIn, X, or both
  • Launch date and time: Based on event timeline
  • Copy: Channel-appropriate length. LinkedIn posts can be longer (up to 300 words for thought-leadership style). X posts must be under 280 characters. Write separate versions if both channels are selected and the copy differs significantly.
  • CTA: What action to take
  • Page URL with UTMs: Use the UTM convention from Step 3
  • Accounts to tag: Suggest the event organizer's account, any co-speakers, partner companies
  • Image notes: Suggest what visual to include (event graphic, speaker card, booth photo, etc.)

Pre-event posts build anticipation. Post-event posts share highlights and drive follow-up.

Live posts are drafts, not final copy. A pre-written "live" post cannot capture real energy. Write these as templates with bracketed placeholders for real-time details (e.g., "[specific conversation topic]", "[speaker name]", "[booth photo]"). Note in the output that live posts should be adapted on-site with actual moments, photos, and specifics.

Platform tone: LinkedIn posts can be longer and more narrative. X posts should be punchier, more conversational, and written as native X content, not compressed LinkedIn posts. If the same message works on both platforms without changes, the X version probably needs more personality.

4g. Paid ads

For each ad, generate:

  • Channel: As specified by user (LinkedIn, Google, Reddit, Meta, X)
  • Launch date and time
  • Ad type: e.g., LinkedIn Sponsored Content, Google Search, Reddit Promoted Post
  • Destination URL with UTMs
  • Headline: Respect platform character limits. State the limit next to the field:
    • LinkedIn Sponsored Content headline: 70 characters
    • Google RSA headline: 30 characters
    • Meta primary text: 125 characters
  • Body copy: Respect platform limits:
    • LinkedIn Sponsored Content body: 150 characters
    • Google RSA description: 90 characters
  • CTA: Platform CTA button or text
  • Image notes: Suggest creative direction and platform-specific dimensions

Count characters for each field and rewrite if over the limit.

Step 5: Brand voice cross-check

After generating all assets, review everything against the brand voice guide:

  1. No em dashes. The brand voice guide has an absolute rule: do not use em dashes in any content. Scan all generated copy and replace every em dash with a period, comma, colon, or separate sentence.

  2. Marketing tone, not sales tone. Check for sales patterns: "I noticed you...", "I wanted to reach out," pushy or aggressive language. Event marketing should be inviting and informative.

  3. Subject lines follow the rules. No clickbait, no ALL CAPS, no false urgency, no misleading promises.

  4. Character limits respected. Re-verify: banner copy (120 chars), preheader (85 chars), X posts (280 chars), ad copy (platform-specific limits).

  5. Terminology correct. Product names, capitalization, and technical terms per the glossary in product-marketing-context.

  6. CTAs varied and natural. Not every asset should say the same thing. Vary CTA language while keeping the action clear and consistent.

  7. Hard overlap check (landing page + pre-event email). Only run this check if both assets were selected. Compare the opening paragraph of the landing page body against the opening paragraph of the pre-event email body. Check for: same subject focus, same framing pattern, same sentence structure, obviously similar phrasing. Structural similarity is the real problem — do not reduce this to exact wording or first-sentence matching only. If meaningful overlap is found, rewrite the weaker opening so the two assets clearly serve different contexts before proceeding. This check is mandatory; rewrite is mandatory if overlap exists.

  8. CTA-adjacent conversion alignment. Identify the primary CTA selected in Step 3. For each asset, find the paragraph immediately before and after each primary CTA. Confirm that nearby copy reinforces the intended next step. Flag and rewrite any CTA-adjacent language that introduces a competing conversion path. This check is intent-based — it keys to the user's selected CTA, not to a blanket product assumption.

  9. One primary next step per email. For each email (pre-event and post-event), confirm there is exactly one primary next step. A secondary resource mention is allowed if it is inline, subordinate, and clearly supports the primary CTA. If any secondary element competes for attention, rewrite the email.

  10. No substantive content after CTA in emails. For each email, locate the primary CTA. If any substantive paragraph appears after it, move it before the CTA or cut it. Allowed after the CTA: signature, footer, compliance content. Not allowed: proof points, arguments, extra resources as a new pitch.

Hard gate behavior. Steps 7–10 are hard gates, not advisory checks. If any gate fails, rewrite the affected asset immediately and re-run the relevant check before continuing. Do not present final output until all applicable gates pass. Only then state "No voice issues found" or list what was fixed.

Asset completeness reconciliation. Before presenting the final brief, review the asset ledger from Step 3. Every selected asset must be marked generated. If any asset is blocked, include the block reason inline in the brief under that asset's heading. If an asset is missing with no valid block reason, generate it now. Silent omissions are not allowed.

Step 6: KPI tracking and lead management (Part 3)

This section is optional. Use AskUserQuestion to ask: "Include a KPI tracking and lead management section?" — options: Yes, No.

If yes, generate a tracking table:

Metric Target Actual
Event registrants
Event attendees
Booth scans
Meetings/calls booked
Speaking session attendees

Then use AskUserQuestion to ask:

  • "How are booth scans / leads being captured?" — options: Badge scanner app, QR code, Manual entry, Not sure yet

Include the answer below the tracking table.

Output format

Present everything as structured Markdown directly in chat. Organize into these sections:

  1. Event Brief Summary -- the confirmed Part 1 inputs, formatted as a clean reference
  2. Campaign Assets -- each asset type as a subsection with all fields filled
  3. Brand Voice Check -- results of Step 5
  4. KPI Tracking -- if requested (Step 6)
  5. Next Steps -- recommendations for execution

Do not create files, documents, or reports. The brief is a working artifact meant to be iterated on in conversation.

Include this note in the Next Steps section: "To edit any section before finalizing, you can tell me what to change or paste a revised version directly."

Tiger Den content enrichment

These features use Tiger Den tools that are already connected (since you fetched reference docs in Step 1).

Content search

Use search_content when generating copy to find existing Tiger Data content to reference or link to. Search for topics related to each asset's theme. This grounds copy in real content rather than hypothetical links. Apply an 18-month freshness filter using the published_after parameter. If no recent content exists for a topic, note the gap (e.g., "No recent content on this topic; consider creating a new piece") rather than linking stale material.

Actually use what you find. Do not just search and move on. If you find a relevant blog post, case study, or guide, weave it into the copy. For example, link a specific article in the post-event email's "read the docs" CTA, or reference a case study in the landing page body. Generic "read the docs" links are weaker than specific content recommendations.

UTM link generation

Use generate_utm_link for all URLs that need UTM parameters, following the convention established in Step 3.

Voice profiles

If the user mentions a specific sender for emails (e.g., "these should come from Matty"), call get_voice_profile with that person's name to load their writing samples and inform the email tone and style.

Tiger Den brief persistence

After all brand voice gates pass (Step 5) and optional KPI tracking (Step 6), follow the Step B protocol in references/briefs-integration.md (from the plugin root) to save the brief.

If the user re-enters the editing loop after a save, update the existing brief on the next exit from editing. The brief_id is already held from the initial create or from Step A.

Field mapping

Map the event brief output sections to structured_fields as follows:

Output section structured_fields key
Event name event_summary.event_name
Event type event_summary.event_type
Dates event_summary.dates
Time zone event_summary.timezone
Location event_summary.location
Booth status event_summary.booth_status
Contract status event_summary.contract_status
Speaking details event_summary.speaking_details
On-site attendees event_summary.onsite_attendees
Target audience event_summary.target_audience
Landing page(s) assets.landing_pages[]
Banner(s) assets.banners[]
Newsletter blurb(s) assets.newsletter_blurbs[]
Pre-event email(s) assets.pre_event_emails[]
Post-event email(s) assets.post_event_emails[]
Social post(s) assets.social_posts[]
Paid ad(s) assets.paid_ads[]
Brand voice check results brand_voice_check
KPI tracking table kpi_tracking.metrics
Lead capture method kpi_tracking.lead_capture_method

Hand-off

After the brief is complete, offer to:

  • Run content-reviewer on the landing page and email copy. These are the longest pieces and benefit most from a quality review. Do not run content-reviewer on banner copy, newsletter blurbs, or social posts since those are too short for a meaningful evaluation. Frame it as: "Want me to run the landing page and email copy through content-reviewer before we finalize?"
  • Refine individual assets using brand-voice-writer (one asset at a time)
  • Adjust any section based on feedback
  • Generate the KPI tracking section if it was skipped
  • Plan a follow-up nurture sequence for event leads using email-nurture-planner

Do not auto-trigger content-reviewer or brand-voice-writer. The brief is meant to be reviewed and iterated on before handing off. Wait for the user to confirm the brief looks good.

Editing the brief

The user may want to tweak individual assets or sections. Support two editing modes:

  1. Conversational edits. The user says what to change (e.g., "Make the pre-event email subject line shorter" or "Change the social posts to LinkedIn only"). Rewrite the affected section and confirm.
  2. Paste-back edits. The user copies a section, edits it directly, and pastes the revised version back. Use the pasted version as the replacement for that section.
Weekly Installs
1
GitHub Stars
5
First Seen
Apr 13, 2026