Edit marketing handbook (#46692)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Reformatted marketing ritual data structure in handbook * **Refactor** * Removed workshop creation automation script * **Chores** * Updated GitHub webhook authorization whitelist for bot and maintainer access control <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- Built for [Sam Pfluger](https://fleetdm.slack.com/archives/D0AF8QFBVHB/p1780458404375619?thread_ts=1775094096.519039&cid=D0AF8QFBVHB) by [Kilo for Slack](https://kilo.ai/slack) Built for [Mike McNeil](https://fleetdm.slack.com/archives/D0AFASLRHNU/p1780459512087809?thread_ts=1780459268.285059&cid=D0AFASLRHNU) by [Kilo for Slack](https://kilo.ai/slack) --------- Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> Co-authored-by: Mike McNeil <mikermcneil@users.noreply.github.com>
This commit is contained in:
co-authored by
kiloconnect[bot]
Mike McNeil
parent
c25bd2ea1e
commit
38eade73ff
@@ -110,23 +110,6 @@ When you reach out to a prospect or customer, make sure you're the right person:
|
||||
- **🌦️ Customers**: The Customer Success Manager (CSM) reaches out.
|
||||
- **🫧 Any other prospects**: The Solutions Consultant (SC) reaches out.
|
||||
|
||||
|
||||
### Outbound messaging experimentation and tracking
|
||||
|
||||
Our outbound motion for Solution Specialists is intentionally experimental and evolving. Rather than locking into a single script or sequence, we actively test different messaging approaches and learn from real conversations.
|
||||
|
||||
The [Outbound pivot tracking spreadsheet (confidential)](https://docs.google.com/spreadsheets/d/1VjJTrldUpJTZTLg0Xz2B9dZ-D8vYZNhGVMSYBxOxqEA/edit?gid=0#gid=0) is used to track:
|
||||
• the initial outreach approach
|
||||
• how we build toward an ask
|
||||
• where and how we pivot to a meeting request
|
||||
• the exact wording used at the pivot point
|
||||
• the outcome and post-mortem notes
|
||||
|
||||
The goal is not perfect attribution or rigid process. The goal is to:
|
||||
• identify which messaging patterns create momentum
|
||||
• understand when a prospect signals readiness for a call
|
||||
• refine how and when we transition from curiosity to a meeting ask
|
||||
|
||||
|
||||
### Programs
|
||||
|
||||
@@ -165,7 +148,7 @@ Fleet uses advertising to spread awareness through a broader audience and foster
|
||||
|
||||
#### Events
|
||||
|
||||
It's important for Fleet to engage at [events](https://docs.google.com/spreadsheets/d/1YQXAX2Q_WnGkAwMYjMbQpV3nbCj7gOBbv7Y0u4twxzQ/edit#gid=1931288160). This provides an opportunity to directly engage with potential users and contributors, build relationships, gather feedback, and create a stronger sense of community and trust.
|
||||
We sponsor and participate in events so that we can support, connect, engage, and grow the Fleet community. We need to be thoughtful about what events we sponsor or host, and we need to be disciplined in how we run events so we can be efficient and effective.
|
||||
|
||||
|
||||
### Field event follow-up
|
||||
@@ -209,6 +192,14 @@ It's important for Fleet to engage at [events](https://docs.google.com/spreadshe
|
||||
|
||||
Bulk SWAG (Stuff-We-All-Get) orders of any kind are reviewed and placed by the [🫧 Content Specialist](https://fleetdm.com/handbook/marketing#team). If we're ordering a new SWAG item, the Content Specialist will work with the [🦢 Head of Design](https://fleetdm.com/handbook/product-design#team) to obtain an approved product template.
|
||||
|
||||
##### Request swag
|
||||
|
||||
There are many times in which community members, customers, and contributors are in need of some cool Fleet swag. To request swag:
|
||||
1. [Create an issue](https://github.com/orgs/fleetdm/projects/65) on the :help-marketing board.
|
||||
2. Provide order details (e.g. expected shirt size, name, and shipping details).
|
||||
3. Decide if you'd like to include a personalized message and attach it to the issue.
|
||||
|
||||
|
||||
#### Video
|
||||
|
||||
Fleet uses YouTube to help keep the community up-to-date and informed. These videos facilitate community engagement, provide educational resources, and help share essential information about Fleet and the people using it. Meetings regularly uploaded to YouTube will have a "▶️" emoji prepended to the calendar event title (e.g. "▶️ ☁️🌈 Sprint demos!").
|
||||
|
||||
+93
-103
@@ -3,8 +3,15 @@
|
||||
This handbook page details processes specific to working [with](#contact-us) and [within](#responsibilities) this department.
|
||||
|
||||
## Team
|
||||
|
||||
The different roles in the marketing team and the DRIs executing the responsibilities of that role are listed on [this handbook page](https://fleetdm.com/handbook/marketing/marketing-responsibilities).
|
||||
|
||||
| Role | Contributor(s)
|
||||
|:--------------------------------|:----------------------------------------------------------------------|
|
||||
| Chief Marketing Officer | [Ashish Kuthiala](https://www.linkedin.com/in/ashishkuthiala) _([*@akuthiala*](https://github.com/akuthiala))_
|
||||
| Content Specialist | [Irena Reedy](https://www.linkedin.com/in/irena-reedy-520ab9354/) _([*@irenareedy*](https://github.com/irenareedy))_
|
||||
| Technical product marketing and content specialist (Consultant) | [Dan Gordon](https://www.linkedin.com/in/dangordon/) · [@danbgordon](https://github.com/danbgordon) · Create core technical marketing strategy, positioning, messaging and assets for IT technical teams Market Fleet releases Create, drive and manage analyst relations for Fleet |
|
||||
| Product marketing (Consultant) | [Erin Miska](https://www.linkedin.com/in/erinmiska/) · [*@miskaek*](https://github.com/miskaek) · Positioning and messaging Leadership marketing facing assets, Sales and partner enablement Content strategy |
|
||||
| Social media strategy and management (Consultant) | [Thomas Basgil Jr.](https://www.linkedin.com/in/tombasgil/) · [*@tombasgil*](https://github.com/tombasgil) · Establish, manage and grow Fleet’s social media presence across all appropriate channels. Monitor and respond to comments on company page posts (e.g., LinkedIn); comments on tracked posts are surfaced in the [#_linkedin-comments-from-tracked-posts](https://fleetdm.slack.com/archives/C0AP1FM3ES2) Slack channel |
|
||||
| Public relations (Consultant) | [Alyssa Pallotti](https://www.linkedin.com/in/alyssapallotti/) · Establish Fleet AR & PR program Identify and train key Fleet employees on AR & PR interactions Establish, measure and improve Fleet share of voice with press, analysts, and media. Manage Fleet submissions for industry awards |
|
||||
|
||||
## Contact us
|
||||
|
||||
@@ -13,10 +20,6 @@ The different roles in the marketing team and the DRIs executing the responsibil
|
||||
- Any Fleet team member can [view the kanban board](https://github.com/orgs/fleetdm/projects/94) for this department, including pending tasks and the status of new requests.
|
||||
|
||||
|
||||
## Responsibilities
|
||||
|
||||
The Marketing department is directly responsible for achieving revenue pipeline targets, increasing market awareness about Fleet, customer training curriculums, prospect enablement, and nurturing the Fleet community through participation in video, sponsored events, and other [programs](https://fleetdm.com/handbook/company/communications#programs).
|
||||
|
||||
|
||||
### Marketing assets
|
||||
|
||||
@@ -30,6 +33,74 @@ Fleet is the single endpoint management platform for macOS, iOS, Android, Window
|
||||
Deploy Fleet anywhere - on-prem, air-gapped, or on any major cloud, and keep full control over data residency and legal jurisdiction, or let Fleet handle the infrastructure with Fleet Cloud. Learn more at [fleetdm.com](https://fleetdm.com)
|
||||
|
||||
|
||||
## Fleet writing style, tone, and voice instructions for AI
|
||||
|
||||
When using an AI to create written content for Fleet, give your AI [these instructions first](https://fleetdm.com/handbook/marketing/fleet-ai-writing-instructions) so that it will write in the correct style, tone, and voice. These instructions can also be used to have the AI audit existing writing. These instructions are aggregated and token-optimized from the handbook, in addition to fine tuned from usage results, which we should all continue to contribute to.
|
||||
|
||||
|
||||
### Website traffic Looker dashboard
|
||||
|
||||
<!-- 2025-11-29 This heading doesn't follow the format of a responsibility (https://fleetdm.com/handbook/company/leadership#outline-of-departmental-page-structure). However, we will leave the title as is in preparation for moving it to a separate page, not yet created-->
|
||||
|
||||
This dashboard is the first iteration of a tracking website that monitors performance, traffic acquisition, and key event conversions. It is updated daily and is essential for tracking the success of marketing initiatives.
|
||||
|
||||
**Dashboard Link:** [Website Traffic by Source](https://lookerstudio.google.com/reporting/612ee012-b35a-42d3-8806-3ff0728dde58)
|
||||
|
||||
#### Simple summary
|
||||
|
||||
The Website Traffic Dashboard provides a comprehensive view of how users interact with the Fleet website. It tracks overall health metrics, such as **Total Users**, **Bounce Rate**, and **Sessions per user**, alongside detailed breakdowns of **traffic sources** and **conversion performance**. It is a critical tool for measuring the effectiveness of our organic and paid strategies, identifying high-performing content, and spotting trends in user behavior and goal completion.
|
||||
|
||||
|
||||
#### Key views description
|
||||
|
||||
The dashboard is structured with a side navigation menu that allows you to dive into specific areas of performance:
|
||||
|
||||
|
||||
##### 1\. WebTraffic dashboard (overview)
|
||||
|
||||
This is the main landing page, providing a high-level snapshot of website performance for the selected date range.
|
||||
|
||||
* **Top Metrics:** Shows current values and trends for Total Users, Bounce Rate, Average session duration, and Sessions per user.
|
||||
* **Volume Chart:** Tracks the daily/monthly volume of Views, Total users, and Sessions.
|
||||
* **Acquisition Table:** The table further down breaks down traffic by **Session / medium** (e.g., google / organic, google / cpc, (direct) / (none)), providing total users, engagement rate, and key event volume for each channel.
|
||||
|
||||
##### 2\. Organic traffic
|
||||
|
||||
This view isolates the performance of all non-paid traffic, which is a major focus for content and SEO efforts.
|
||||
|
||||
* **Channel Trends:** The chart shows the total users over time broken down by specific organic channels: **Organic Search**, Organic Video, Organic Social, and Organic Shopping.
|
||||
* **Usage:** Used to track the growth of our SEO efforts and the health of our overall content visibility.
|
||||
|
||||
##### 3\. Traffic by landing page
|
||||
|
||||
This view is crucial for understanding how specific pages on the site are performing in attracting and engaging users.
|
||||
|
||||
* **Performance Table:** Lists the top-performing **Landing Pages** by **Total users** and displays their corresponding **Bounce rate**.
|
||||
* **Key Pages:** Allows us to quickly identify our most popular entry points (e.g., the homepage /, /docs/get-started/why-fleet, /pricing) and assess content quality based on bounce rate.
|
||||
|
||||
##### 4\. Key events
|
||||
|
||||
This section tracks the **volume** of our most important user actions on the website, allowing us to see how marketing activity correlates with goal completion.
|
||||
|
||||
* **Events over time:** The chart tracks the total number of key events (e.g., form\_submit, purchase, fleet\_website\_contact\_forms, and fleet\_website\_swag\_request) completed over the time range.
|
||||
* **Usage:** Helps identify peak periods for event completion and measure the absolute success of lead generation forms.
|
||||
|
||||
##### 5\. Key event conversion rates
|
||||
|
||||
This view displays the website's efficiency by tracking the rate at which users complete a key event. Conversion rate is generally a stronger indicator of performance than event volume alone.
|
||||
|
||||
- **Conversion Rates:** Displays the **User Key Event Rate** for primary goals, including:
|
||||
- **Sign Up Form (Sign up for Fleet):** Tracks the rate of fleet\_website\_sign\_up.
|
||||
- **Contact Us (or Request Demo):** Tracks the rate of fleet website contact forms.
|
||||
- **Swag:** Tracks the rate of fleet\_website\_swag\_request.
|
||||
- **Usage:** Used to monitor A/B test results, measure the quality of traffic from different channels, and ensure key pathways in the product/website are optimized.
|
||||
|
||||
|
||||
## Responsibilities
|
||||
|
||||
The Marketing department is directly responsible for achieving revenue pipeline targets, increasing market awareness about Fleet, customer training curriculums, prospect enablement, and nurturing the Fleet community through participation in video, sponsored events, and other [programs](https://fleetdm.com/handbook/company/communications#programs).
|
||||
|
||||
|
||||
### Organize work in GitHub issues with marketing labels
|
||||
|
||||
In the Marketing department, we're using the following issue labels to organize our work into different categories/buckets.
|
||||
@@ -71,15 +142,7 @@ Fleet's Head of Marketing is directly responsible for the accuracy of event loca
|
||||
|
||||
### Begin or modify an advertising campaign
|
||||
|
||||
Any new ads or changes to current running ads are approved in ["🦢🗣 Design review (:help-design)"](https://github.com/orgs/fleetdm/projects/93).
|
||||
|
||||
To propose an ad, or a change to an ad:
|
||||
1. Evaluate the buying situation before proposing any changes to ads. This determines the audience that will see each ad and which campaign it will be placed in. (Device management, vuln management, endpoint ops - security, endpoint ops - IT)
|
||||
2. Experiment campaigns must follow the YYYY-MM-DD._{buying_situation}-{ad_name}_ format. (2024-01-12.mdm - Cross-platform MDM waitlist)
|
||||
3. Image ads should follow the recommended size, centering, and asset guidelines. These are available on [Figma](https://www.figma.com/file/1J2yxqH8Q7u8V7YTtA1iej/Social-media-(logos%2C-covers%2C-banners)?type=design&node-id=2078-100840&mode=design&t=cHriEw2E7hLxgwuG-0).
|
||||
4. Add your proposed ads to the ["🧫 Experiment review" agenda](https://docs.google.com/document/d/1e2TFsV0JFFym7MvCUrJR1Wr2DVmqUgboKYFUXBEmCyI/edit#heading=h.kvp9pcc0kkq) (private Google doc) and attend the next episode. During the meeting, existing ads will be compared against the newly proposed ads within the corresponding ad platform. ([Google Ads](https://ads.google.com/home/), [LinkedIn Campaign Manager](https://www.linkedin.com/campaignmanager/), etc.)
|
||||
5. Make revisions and re-attend the meeting as needed until the planned change is executed.
|
||||
7. Create a calendar reminder to check ad performance two weeks from the date changes were made.
|
||||
> LinkedIn's campaign manager does not allow you to truly delete old or failed creatives from evergreen campaigns, which clutters performance data and makes reporting unreliable. To work around this, always create new ad creatives and boosted posts as new campaigns inside the "Targeting experiments" campaign group. Name each campaign with a date prefix (YYYY-MM-DD) and set a lifetime budget (not daily) to cap spend on each experiment. Boosted posts follow the same process since they are also temporary and experimental. If a creative performs well (good CTR), move it into the appropriate pre-existing evergreen awareness campaign to run on a daily budget until performance drops. Never create new LinkedIn "campaigns" outside the "Targeting experiments" campaign group.
|
||||
|
||||
|
||||
### Promote a post on LinkedIn
|
||||
@@ -90,26 +153,21 @@ To propose an ad, or a change to an ad:
|
||||
4. Launch campaign once approved.
|
||||
|
||||
|
||||
### Manage LinkedIn ad creatives
|
||||
|
||||
LinkedIn's campaign manager does not allow you to truly delete old or failed creatives from evergreen campaigns, which clutters performance data and makes reporting unreliable. To work around this, always create new ad creatives and boosted posts as new campaigns inside the "Targeting experiments" campaign group. Name each campaign with a date prefix (YYYY-MM-DD) and set a lifetime budget (not daily) to cap spend on each experiment. Boosted posts follow the same process since they are also temporary and experimental. If a creative performs well (good CTR), move it into the appropriate pre-existing evergreen awareness campaign to run on a daily budget until performance drops. Never create new LinkedIn "campaigns" outside the "Targeting experiments" campaign group.
|
||||
|
||||
|
||||
### Settle content strategy
|
||||
|
||||
<!-- 2026-06-02 TODO: Is this still a thing? If so, we need to update the responsibility -->
|
||||
|
||||
The CMO is the DRI for deploying Fleet's outward-facing content. The content schedule is settled significantly in advance to provide ample time for strategy and planning. Use the following steps to settle content strategy:
|
||||
|
||||
1. Using the [content calendar](https://docs.google.com/spreadsheets/d/1Hso0LxqwrRVINCyW_n436bNHmoqhoLhC8bcbvLPOs9A/edit?gid=809357993#gid=809357993), propose the content that Fleet will produce in the current quarter, and the strategy behind that content, including:
|
||||
- Release date: The date by which the content will be complete and finalized.
|
||||
- DRI: Person(s) responsible for the project management of this content.
|
||||
- Title (e.g. "Article: Fleet takes bacon to new heights with flying pigs release").
|
||||
2. Attend a 30m meeting with Fleet's Client Platform Engineer & Community Advocate, CTO, and CEO to review and settle the proposed content.
|
||||
|
||||
2. Attend a 30m meeting with Fleet's Content Specialist to review and settle the proposed content.
|
||||
|
||||
[Planned content for SEO and GEO optimization](https://airtable.com/appiljMCYUZJGeRmH/tblfNFlpMJrrLe3eH/viwe6rmqbyUm8XFIC?blocks=hide)
|
||||
|
||||
|
||||
|
||||
<!-- TODO Create Article issue template and update this section of the handbook to reflect reality and add corresponding rituals to engineering.rituals.yml
|
||||
|
||||
### Create an article
|
||||
@@ -158,13 +216,6 @@ To do this:
|
||||
6. Repeat this process until all remaining draft orders show "Waiting for Fulfillment."
|
||||
|
||||
|
||||
### Request swag
|
||||
There are many times in which community members, customers, and contributors are in need of some cool Fleet swag. To request swag:
|
||||
1. [Create an issue](https://github.com/orgs/fleetdm/projects/65) on the :help-marketing board.
|
||||
2. Provide order details (e.g. expected shirt size, name, and shipping details).
|
||||
3. Decide if you'd like to include a personalized message and attach it to the issue.
|
||||
|
||||
|
||||
### Fulfill a swag request
|
||||
|
||||
Swag requests are received in the form of issues and will be fulfilled based on availability. To process a swag request:
|
||||
@@ -174,19 +225,20 @@ Swag requests are received in the form of issues and will be fulfilled based on
|
||||
4. Confirm delivery and close issue.
|
||||
|
||||
|
||||
<!-- 2026-06-02 SAM: This isn't happening today, commenting out for now...
|
||||
|
||||
### Send swag for community contributions to Fleet
|
||||
|
||||
- Reach out to the contributor to thank them for their contribution
|
||||
- Consider sharing the contribution on social media
|
||||
- Ask if we could send the contributor any swag
|
||||
- If yes, follow the steps to fulfill a swag request.
|
||||
|
||||
-->
|
||||
|
||||
### Engage with the community
|
||||
|
||||
Public conversations on social media create valuable opportunities for contributors to answer technical questions and collect feedback.
|
||||
Public conversations on social media create valuable opportunities for contributors to answer technical questions and collect feedback.Here are some links that filter relevant conversations on each platform:
|
||||
|
||||
Here are some links that filter relevant conversations on each platform:
|
||||
- [LinkedIn](https://www.linkedin.com/search/results/content/?datePosted=%22past-week%22&keywords=osquery%20OR%20%22fleet%20device%20management%22%20OR%20%22fleetdm%22%20OR%20%22github.com%2Ffleetdm%2Ffleet%22%20OR%20%22fleetdm.com%22&origin=FACETED_SEARCH&sid=oxR)
|
||||
- [Twitter](https://twitter.com/search?q=%22osquery%22%20OR%20%22github.com%2Fosquery%2Fosquery%22%20OR%20%22github.com%2Ffleetdm%2Ffleet%22%20OR%20%22github.com%2Fkolide%2Ffleet%22%20OR%20%22fleetdm%22%20OR%20%22fleet%20device%20management%22%20OR%20%22nanomdm%22%20OR%20%22micromdm%22%20OR%20%22swiftDialog%22&src=typed_query&f=live)
|
||||
|
||||
@@ -196,7 +248,9 @@ Here are some links that filter relevant conversations on each platform:
|
||||
4. If a post is helpful to our audience, reshare it.
|
||||
|
||||
|
||||
<!-- 2026-06-02 SAM: Commenting out for now, this is now automated by Harry.
|
||||
### Process to send out GitOps workshop certifications
|
||||
|
||||
After every GitOps workshop, Fleet issues a certificate to all participants who passed via email.
|
||||
|
||||
#### Collect attendee data
|
||||
@@ -266,6 +320,8 @@ After every GitOps workshop, Fleet issues a certificate to all participants who
|
||||
- Do not send certificates to registrants or attendees who did not pass.
|
||||
- Use the workshop date for all certificate records.
|
||||
- Keep the process simple and consistent for every workshop.
|
||||
-->
|
||||
|
||||
|
||||
### Publish sprint demo video
|
||||
|
||||
@@ -308,6 +364,7 @@ After each sprint demo, the marketing team is responsible for doing a quick post
|
||||
|
||||
Add the new video to the "Releases" playlist.
|
||||
|
||||
|
||||
### Upload to YouTube
|
||||
|
||||
Fleet regularly uploads a variety of content to YouTube such as podcast episodes, sprint demos, educational updates, design reviews, and more.
|
||||
@@ -327,77 +384,8 @@ Fleet regularly uploads a variety of content to YouTube such as podcast episodes
|
||||
- Share video link on social media.
|
||||
|
||||
|
||||
### Create a podcast episode
|
||||
## Post a blog article
|
||||
|
||||
Fleet invites guests to discuss the future of IT and security on the [ExpedITioners podcast](https://expeditioners.podbean.com/) to be shared with the community,
|
||||
|
||||
- Find the new episode in the [Fleet drive](https://drive.google.com/drive/folders/1v2sBswrqaayxRTfqoDDZBhz0xViqoNbC?usp=drive_link).
|
||||
- Combine audio from the guest and speaker together in Garageband with the [jingle and introduction](https://drive.google.com/drive/u/0/folders/1Av8yAgkKo22nYOeFJyXXEHtpyX9tETIH).
|
||||
- Listen to the episode and note talking points, title, and links mentioned in the [show notes doc](https://docs.google.com/document/d/1quyiYWm7rZSGTobJbE4vFlZwT3nlutZG5e5u6fZ3Y_4/edit?usp=sharing).
|
||||
- Upload the audio file to the [episode folder](https://drive.google.com/drive/folders/1v2sBswrqaayxRTfqoDDZBhz0xViqoNbC)
|
||||
- Create episode cover and sharable image in [Figma](https://www.figma.com/file/1J2yxqH8Q7u8V7YTtA1iej/Social-media-(logos%2C-covers%2C-banners)?type=design&node-id=1711-84364&mode=design&t=mm5L76TMiRV4yUIA-0)
|
||||
- Log in to [Podbean](https://www.podbean.com/user-z61jYLi85TV2) to manage the podcast and click new episode.
|
||||
- Use the show notes to complete the Podbean description and [create a new article](https://github.com/fleetdm/fleet/tree/main/articles) on Fleet's website.
|
||||
- Publish on social media
|
||||
|
||||
### Website traffic Looker dashboard
|
||||
<!-- 2025-11-29 This heading doesn't follow the format of a responsibility (https://fleetdm.com/handbook/company/leadership#outline-of-departmental-page-structure). However, we will leave the title as is in preparation for moving it to a separate page, not yet created-->
|
||||
|
||||
This dashboard is the first iteration of a tracking website that monitors performance, traffic acquisition, and key event conversions. It is updated daily and is essential for tracking the success of marketing initiatives.
|
||||
|
||||
**Dashboard Link:** [Website Traffic by Source](https://lookerstudio.google.com/reporting/612ee012-b35a-42d3-8806-3ff0728dde58)
|
||||
|
||||
#### Simple summary
|
||||
|
||||
The Website Traffic Dashboard provides a comprehensive view of how users interact with the Fleet website. It tracks overall health metrics, such as **Total Users**, **Bounce Rate**, and **Sessions per user**, alongside detailed breakdowns of **traffic sources** and **conversion performance**. It is a critical tool for measuring the effectiveness of our organic and paid strategies, identifying high-performing content, and spotting trends in user behavior and goal completion.
|
||||
|
||||
#### Key views description
|
||||
|
||||
The dashboard is structured with a side navigation menu that allows you to dive into specific areas of performance:
|
||||
|
||||
##### 1\. WebTraffic dashboard (overview)
|
||||
|
||||
This is the main landing page, providing a high-level snapshot of website performance for the selected date range.
|
||||
|
||||
* **Top Metrics:** Shows current values and trends for Total Users, Bounce Rate, Average session duration, and Sessions per user.
|
||||
* **Volume Chart:** Tracks the daily/monthly volume of Views, Total users, and Sessions.
|
||||
* **Acquisition Table:** The table further down breaks down traffic by **Session / medium** (e.g., google / organic, google / cpc, (direct) / (none)), providing total users, engagement rate, and key event volume for each channel.
|
||||
|
||||
##### 2\. Organic traffic
|
||||
|
||||
This view isolates the performance of all non-paid traffic, which is a major focus for content and SEO efforts.
|
||||
|
||||
* **Channel Trends:** The chart shows the total users over time broken down by specific organic channels: **Organic Search**, Organic Video, Organic Social, and Organic Shopping.
|
||||
* **Usage:** Used to track the growth of our SEO efforts and the health of our overall content visibility.
|
||||
|
||||
##### 3\. Traffic by landing page
|
||||
|
||||
This view is crucial for understanding how specific pages on the site are performing in attracting and engaging users.
|
||||
|
||||
* **Performance Table:** Lists the top-performing **Landing Pages** by **Total users** and displays their corresponding **Bounce rate**.
|
||||
* **Key Pages:** Allows us to quickly identify our most popular entry points (e.g., the homepage /, /docs/get-started/why-fleet, /pricing) and assess content quality based on bounce rate.
|
||||
|
||||
##### 4\. Key events
|
||||
|
||||
This section tracks the **volume** of our most important user actions on the website, allowing us to see how marketing activity correlates with goal completion.
|
||||
|
||||
* **Events over time:** The chart tracks the total number of key events (e.g., form\_submit, purchase, fleet\_website\_contact\_forms, and fleet\_website\_swag\_request) completed over the time range.
|
||||
* **Usage:** Helps identify peak periods for event completion and measure the absolute success of lead generation forms.
|
||||
|
||||
##### 5\. Key event conversion rates
|
||||
|
||||
This view displays the website's efficiency by tracking the rate at which users complete a key event. Conversion rate is generally a stronger indicator of performance than event volume alone.
|
||||
|
||||
- **Conversion Rates:** Displays the **User Key Event Rate** for primary goals, including:
|
||||
- **Sign Up Form (Sign up for Fleet):** Tracks the rate of fleet\_website\_sign\_up.
|
||||
- **Contact Us (or Request Demo):** Tracks the rate of fleet website contact forms.
|
||||
- **Swag:** Tracks the rate of fleet\_website\_swag\_request.
|
||||
- **Usage:** Used to monitor A/B test results, measure the quality of traffic from different channels, and ensure key pathways in the product/website are optimized.
|
||||
|
||||
## Fleet writing style, tone, and voice instructions for AI
|
||||
When using an AI to create written content for Fleet, give your AI [these instructions first](https://fleetdm.com/handbook/marketing/fleet-ai-writing-instructions) so that it will write in the correct style, tone, and voice. These instructions can also be used to have the AI audit existing writing. These instructions are aggregated and token-optimized from the handbook, in addition to fine tuned from usage results, which we should all continue to contribute to.
|
||||
|
||||
## Post blog articles
|
||||
Although details on how to format and meta tag a blog are in [the writing handbook page](https://fleetdm.com/handbook/company/writing#articles), it does not give the step-by-step, so to a new person how exactly to get a blog published is not clear. Here is how you do it.
|
||||
|
||||
1. Create your own branch either in [https://github.com/fleetdm/fleet](https://github.com/fleetdm/fleet) or in your local clone.
|
||||
@@ -415,6 +403,8 @@ Although details on how to format and meta tag a blog are in [the writing handbo
|
||||
- Or if local, [follow this setup to view your changes locally](https://fleetdm.com/handbook/engineering#test-fleetdm-com-locally) - this provides the most true to reality check
|
||||
11. When ready, submit a PR to get it reviewed and merged
|
||||
|
||||
|
||||
|
||||
## Rituals
|
||||
<rituals :rituals="rituals['handbook/marketing/marketing.rituals.yml']"></rituals>
|
||||
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
## **Digital campaigns**
|
||||
|
||||
### **Overall approach: share insight**
|
||||
|
||||
Our approach to digital paid media is rooted in sharing and teaching. We do not pay for traditional ads; instead, we invest in distributing **high-utility knowledge and expertise** across digital channels to educate, inform, and build trust within the community.
|
||||
|
||||
The primary goals of our digital strategy are:
|
||||
|
||||
* **Generate awareness:** Increase overall awareness of FleetDM in the market.
|
||||
* **Value distribution:** Distributing high-utility assets (Handbooks, Calculators, Reports) that answer questions and solve immediate problems.
|
||||
* **Demand generation:** Identifying new contacts through strategic form completions.
|
||||
* **Intent capture:** Gathering intent signals from known contacts as they engage with our technical content.
|
||||
* **Precision targeting:** Focusing paid spend on our core ICP (target personas at organizations with \>1,000 employees) to drive high-quality "Growth Vectors".
|
||||
|
||||
---
|
||||
|
||||
### **Tracking & UTMs**
|
||||
|
||||
To ensure accurate attribution and data visibility, we use UTMs when processing form completions to connect the dots.
|
||||
|
||||
#### **UTM medium:**
|
||||
|
||||
For digital agency collaboration, the following utm_medium values are needed:
|
||||
|
||||
* **utm_medium=ps**: Paid Search (e.g., Google Search Ads)
|
||||
* **utm_medium=so**: Paid Social (e.g., LinkedIn Sponsored Content)
|
||||
|
||||
**UTM campaign:**
|
||||
We use the campaigns in salesforce to keep track of roi and impact of investments. Therefore, we need to tag ads with the appropriate utm_campagn.
|
||||
|
||||
---
|
||||
|
||||
### **Paid search campaigns**
|
||||
|
||||
The following campaigns are scheduled for launch in **January 2026**. Campaign names follow the Fleet naming convention: [YYYY-MM]-[Medium]-[Campaign-Name].
|
||||
|
||||
| Campaign Name | General Description & Purpose | Target Signal/Objective |
|
||||
| :---- | :---- | :---- |
|
||||
| **2026-01-ps-Brand** | Distributing "Thought Leadership" content that answers hard technical questions to build brand affinity. | High-utility asset engagement. |
|
||||
| **2026-01-ps-MDM** | Targeting "Solution" and "Technical" keywords related to modern MDM and mac admins. | High-intent demo/contact requests. |
|
||||
| **2026-01-ps-Linux** | "Linux Beachhead" vector focusing on Linux hardening and visibility for developer workstations. | Seed account acquisition. |
|
||||
| **2026-01-ps-Competitive** | "Modernization Migration" focusing on Jamf displacement and the "GitOps future". | Impact analysis meetings. |
|
||||
| **2026-01-ps-GitOps** | Promoting GitOps-native workflows and Infrastructure-as-Code (IaC) for endpoints. | Workshop attendance/certification. |
|
||||
|
||||
---
|
||||
|
||||
### **Paid social campaigns**
|
||||
|
||||
The following campaigns are scheduled for launch in **March 2026**. Campaign names follow the Fleet naming convention: [YYYY-MM]-[Medium]-[Campaign-Name].
|
||||
|
||||
| Campaign Name | General Description & Purpose | Target Signal/Objective |
|
||||
| :---- | :---- | :---- |
|
||||
| **2026-01-so-Brand** | Distributing "Thought Leadership" content that answers hard technical questions to build brand affinity. | High-utility asset engagement. |
|
||||
| **2026-01-so-MDM** | Targeting "Solution" and "Technical" keywords related to modern MDM and mac admins. | High-intent demo/contact requests. |
|
||||
| **2026-01-so-Linux** | "Linux Beachhead" vector focusing on Linux hardening and visibility for developer workstations. | Seed account acquisition. |
|
||||
| **2026-01-so-Competitive** | "Modernization Migration" focusing on Jamf displacement and the "GitOps future". | Impact analysis meetings. |
|
||||
| **2026-01-so-GitOps** | Promoting GitOps-native workflows and Infrastructure-as-Code (IaC) for endpoints. | Workshop attendance/certification. |
|
||||
|
||||
|
||||
|
||||
<meta name="maintainedBy" value="johnjeremiah">
|
||||
<meta name="title" value="🫧 Digital Campaigns">
|
||||
@@ -6,23 +6,6 @@ We sponsor and participate in events so that we can support, connect, engage, an
|
||||
It's simple Open an issue: **[Propose an event](https://github.com/fleetdm/confidential/issues/new?template=propose-an-event.md)**
|
||||
|
||||
|
||||
## Current events
|
||||
|
||||
|
||||
| QTR | Event name | Date | Location |
|
||||
| :---- | :---- | :---- | :---- |
|
||||
| Q1 | [GitOps Workshop](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.kgy1oagh9dvl) | 2026-03-12 | Chicago |
|
||||
| Q1 | * **[Gartner Digital Workspace](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.tvvzxp6efa6s)** | 2026-03-23 | San Diego |
|
||||
| Q2 | [GitOps Workshop](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.9bojminke8bt) | 2026-04-07 | Minneapolis |
|
||||
| Q2 | [HappyHour-Apple](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.2lh2oum4rxur) | 2026-04-TBD | Austin |
|
||||
| Q2 | * **[MACAd-UK](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.u1lwe72sguc3)** | 2026-04-21 | Brighton, UK |
|
||||
| Q2 | * **[Gartner Digital Workplace UK](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.9h2x1faopsyk)** | 2026-04-28 | London |
|
||||
| Q2 | * **[MacAdmins Europe](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.qg7ymw2g9ui8)** | 2026-04-30 | Leiden, Netherlands |
|
||||
| Q2 | * **[MacDevOpsYVR](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.afz38t4pwdka)** | 2026-06-25 | Montreal |
|
||||
| Q2 | * **[PSU MacAdmin](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.yibj67h9z2xz)** | 2026-07-07 | PennState |
|
||||
| Q3 | * **[JNUC 2026 Gurrilla](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.tk8t9mud265j)** | 2026-09-23 | Kansas City |
|
||||
| Q4 | * **[MacSysAdmin](https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.tk8t9mud265j)** |2026-09-29 | Gothenburg, Sweden |
|
||||
|
||||
|
||||
## Event process
|
||||
There are three phases to running an event at FleetDM,
|
||||
@@ -39,11 +22,11 @@ See the section "Settle event strategy" below for the process.
|
||||
|
||||
##### Settle event strategy (approve proposed events)
|
||||
|
||||
Anyone at Fleet can propose a future event. Fleet's [Head of DemandGen](https://fleetdm.com/handbook/marketing#team) serves as the project manager for managing the event approval process. Events are settled in advance to provide ample time for strategy and planning. This includes any event that Fleet pays to attend or sponsor.
|
||||
Anyone at Fleet can propose a future event. Fleet's [Head of GTM Architecture](https://fleetdm.com/handbook/marketing#team) serves as the project manager for managing the event approval process. Events are settled in advance to provide ample time for strategy and planning. This includes any event that Fleet pays to attend or sponsor.
|
||||
|
||||
The "Settle events strategy" meeting is held on the first Wednesday of every quarter to discuss and lock in all events (conferences, field/sales events, and GitOps workshops) for the next quarter.
|
||||
|
||||
The [Marketing Campaign Manager](https://fleetdm.com/handbook/marketing#team) is the DRI for this meeting.
|
||||
The [Content Specialist](https://fleetdm.com/handbook/marketing#team) is the DRI for this meeting.
|
||||
|
||||
Once events have been settled for the upcoming quarter, Fleet does not make changes except in extreme circumstances.
|
||||
|
||||
@@ -60,7 +43,7 @@ Once events have been settled for the upcoming quarter, Fleet does not make chan
|
||||
- Who from Fleet will attend?
|
||||
- Which talk proposal will Fleet submit?
|
||||
- Estimated budget, including sponsorship or airfare, and lodging for attendees.
|
||||
2. Attend the 30m quarterly event strategy meeting with the CMO, Head of Demand Generation, and Marketing Campaign Manager.
|
||||
2. Attend the 30m quarterly event strategy meeting with the CMO, Head of GTM Architecture, and Content Specialist.
|
||||
- During this meeting, Marketing will decide which events (conferences, field/sales events, and GitOps workshops) Fleet will execute in the **following quarter**.
|
||||
3. After the meeting, the Content Specialist will communicate the settled events by
|
||||
- Moving all settled events to the "All 🎪 Official (planned & settled events)" tab of the 🎪 Events spreadsheet (confidential doc).
|
||||
@@ -213,317 +196,11 @@ When back online, the doc syncs automatically. The event DRI reviews all tabs, t
|
||||
|
||||
An event's execution is not complete until the **Definition of Done** is met: the Event Overview Doc must be fully updated with post-event outcomes, notes, and final details.
|
||||
|
||||
### **How to automate event creation**
|
||||
|
||||
Since the tracking process uses github issues and subissues to track tasks, it can be tedious to create the structure for a new event. Here are the steps to automate the creation of the event execution issues in github.
|
||||
|
||||
#### Setup
|
||||
We will use a local script that executes commands on the local GitHub command line interface (CLI). In order to get started you need to have the GitHub CLI installed.
|
||||
|
||||
1. **Install Homebrew.** *Homebrew is a package installer and the simplest way to get the GitHub CLI installed.*.
|
||||
1. Navigate to https://brew.sh/ and copy the installation script.
|
||||
2. Open a terminal window, paste and run the script. *You will be prompted for your local password*
|
||||
2. **Install GitHub CLI (GH CLI)**
|
||||
Using homebrew, tell it to install the GitHub command line interface
|
||||
`brew install gh`
|
||||
|
||||
3. **Authenticate / connect with GitHub**
|
||||
1. Enter the command: `gh auth login` and follow the steps to authenticate with the repository
|
||||
|
||||
4. **Update the CLI permissions to include projects**
|
||||
1. Enter the command `gh auth refresh -s project` and follow the steps to authenticate.
|
||||
|
||||
TODO - add a test set up section where a user has a simple issue script they test
|
||||
|
||||
|
||||
#### Event template process and script
|
||||
Creating a new event group is now simple.
|
||||
1. copy the script below and save as **NewEvent.sh**
|
||||
2. Edit the script.
|
||||
|
||||
First - CHANGE THESE THREE THINGS.
|
||||
|
||||
**Nothing else needs to change**
|
||||
|
||||
* EVENT_SLUG - will be the name of the event and part of the label for the event
|
||||
* PLANNING_DOC_URL - is the link to the google doc where we're keeping the latest status of the event plans
|
||||
* REQUEST_ISSUE - is thte number of the issue that proposed the event
|
||||
|
||||
For example:
|
||||
```
|
||||
EVENT_SLUG="2606-MacDevOpsYVR-Montreal"
|
||||
PLANNING_DOC_URL="https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.afz38t4pwdka"
|
||||
REQUEST_ISSUE = "#14599"
|
||||
```
|
||||
|
||||
Save the changed file **NewEvent.sh**
|
||||
|
||||
And then execute the script. `./NewEvent.sh`
|
||||
|
||||
That's it. This should create the events in GitHub to manage the event.
|
||||
|
||||
here's the script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# --- Event specifics / details - change this
|
||||
EVENT_SLUG="2026_04-MC-Gartner_UK"
|
||||
PLANNING_DOC_URL="https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.9h2x1faopsyk"
|
||||
REQUEST_ISSUE = "#14599"
|
||||
|
||||
# No need to change anything else to run the script
|
||||
|
||||
# --- Static Configuration ---
|
||||
ORG="fleetdm"
|
||||
REPO="confidential"
|
||||
PROJECT_NUMBER="94"
|
||||
|
||||
# 1. Define Labels (Fixed with leading colons)
|
||||
NEW_LABEL=":mktg-event:${EVENT_SLUG}"
|
||||
PARENT_LABELS=":mktg-event,:mktg-event:overview,:mktg-event:tp"
|
||||
CHILD_LABELS=":mktg-event,:mktg-event:detail,:mktg-event:tp"
|
||||
|
||||
# Ensure the specific event label exists
|
||||
echo "1. Ensuring label '${NEW_LABEL}' exists..."
|
||||
# gh label create "$NEW_LABEL" --repo "$ORG/$REPO" --color "1D76DB" --force >/dev/null 2>&1 || true
|
||||
gh label create "$NEW_LABEL" --repo "$ORG/$REPO" --force >/dev/null 2>&1 || true
|
||||
|
||||
|
||||
# ==========================================
|
||||
# STEP 1: CREATE THE PARENT ISSUE
|
||||
# ==========================================
|
||||
echo "2. Creating Parent Issue (Overview)..."
|
||||
|
||||
PARENT_TITLE="${EVENT_SLUG} Execution Overview"
|
||||
|
||||
# Using a Heredoc for clean, WYSIWYG Markdown formatting
|
||||
PARENT_BODY=$(cat << EOF
|
||||
Master tracking issue for ${EVENT_SLUG}.
|
||||
|
||||
EXECUTION for request $REQUEST_ISSUE
|
||||
|
||||
## Executive Snapshot & Key Decisions
|
||||
- [ ] Update the working google doc for the ${EVENT_SLUG}
|
||||
See: Planing Doc: $PLANNING_DOC_URL
|
||||
|
||||
- [ ] Finalize sponsorship agreements
|
||||
- [ ] Assign child issues/tasks
|
||||
|
||||
## Progress Tracker - See SubIssues
|
||||
|
||||
EOF
|
||||
)
|
||||
|
||||
# Create Parent
|
||||
PARENT_URL=$(gh issue create \
|
||||
--repo "$ORG/$REPO" \
|
||||
--title "$PARENT_TITLE" \
|
||||
--body "$PARENT_BODY" \
|
||||
--label "$PARENT_LABELS,$NEW_LABEL")
|
||||
|
||||
# CRITICAL CHECK: Did the parent issue actually get created?
|
||||
if [ -z "$PARENT_URL" ]; then
|
||||
echo "❌ ERROR: Failed to create Parent Issue. Check if labels exist in the repo."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract Issue Number from URL
|
||||
PARENT_NUM=$(echo "$PARENT_URL" | awk -F/ '{print $NF}')
|
||||
echo " ✅ Parent Created: #$PARENT_NUM"
|
||||
|
||||
# Get the Global Node ID of the Parent (Needed for GraphQL linking)
|
||||
PARENT_NODE_ID=$(gh api graphql -f query='
|
||||
query($owner:String!, $repo:String!, $number:Int!) {
|
||||
repository(owner:$owner, name:$repo) {
|
||||
issue(number:$number) { id }
|
||||
}
|
||||
}' -f owner="$ORG" -f repo="$REPO" -F number="$PARENT_NUM" --jq '.data.repository.issue.id')
|
||||
|
||||
if [ -z "$PARENT_NODE_ID" ] || [ "$PARENT_NODE_ID" == "null" ]; then
|
||||
echo "❌ ERROR: Could not fetch GraphQL Node ID for Parent #$PARENT_NUM"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " 🔹 Parent Node ID: $PARENT_NODE_ID"
|
||||
|
||||
# Add Parent to Project
|
||||
gh project item-add "$PROJECT_NUMBER" --owner "$ORG" --url "$PARENT_URL" >/dev/null 2>&1
|
||||
|
||||
|
||||
# ==========================================
|
||||
# STEP 2: HELPER FUNCTION FOR CHILD ISSUES
|
||||
# ==========================================
|
||||
# This function handles the creation and linking of all sub-issues
|
||||
create_sub_issue() {
|
||||
local TITLE="$1"
|
||||
local BODY="$2"
|
||||
|
||||
CHILD_URL=$(gh issue create \
|
||||
--repo "$ORG/$REPO" \
|
||||
--title "$TITLE: ${EVENT_SLUG}" \
|
||||
--body "$BODY" \
|
||||
--label "$CHILD_LABELS,$NEW_LABEL")
|
||||
|
||||
if [ -n "$CHILD_URL" ]; then
|
||||
CHILD_NUM=$(echo "$CHILD_URL" | awk -F/ '{print $NF}')
|
||||
|
||||
# Get Child Node ID
|
||||
CHILD_NODE_ID=$(gh api graphql -f query='
|
||||
query($owner:String!, $repo:String!, $number:Int!) {
|
||||
repository(owner:$owner, name:$repo) {
|
||||
issue(number:$number) { id }
|
||||
}
|
||||
}' -f owner="$ORG" -f repo="$REPO" -F number="$CHILD_NUM" --jq '.data.repository.issue.id')
|
||||
|
||||
echo " ✅ Created Child: #$CHILD_NUM ($TITLE)"
|
||||
|
||||
# Link as Sub-Issue via GraphQL
|
||||
LINK_RESULT=$(gh api graphql -f query='
|
||||
mutation($parentId: ID!, $childId: ID!) {
|
||||
addSubIssue(input: {issueId: $parentId, subIssueId: $childId}) {
|
||||
clientMutationId
|
||||
}
|
||||
}
|
||||
' -f parentId="$PARENT_NODE_ID" -f childId="$CHILD_NODE_ID" 2>&1)
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo " 🔗 Linked as Sub-issue to Parent #$PARENT_NUM"
|
||||
else
|
||||
echo " ⚠️ Failed to link. Error details:"
|
||||
echo "$LINK_RESULT"
|
||||
fi
|
||||
|
||||
# Add to Project
|
||||
gh project item-add "$PROJECT_NUMBER" --owner "$ORG" --url "$CHILD_URL" >/dev/null 2>&1
|
||||
else
|
||||
echo " ❌ Failed to create child: $TITLE"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# ==========================================
|
||||
# STEP 3: DEFINE & CREATE CHILD ISSUES
|
||||
# ==========================================
|
||||
echo "3. Creating and Linking Child Issues..."
|
||||
|
||||
# --- Child 1 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
Track all details, deadlines, and requirements for any speaking slots or workshops we are hosting before, during, or after the event.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Confirm speaking session details (Title, Speaker, Date/Time, Room)
|
||||
- Submit Abstract Link and AV Requirements
|
||||
- Confirm workshop hosting and timing
|
||||
- Update Workshop Planning Doc, Registration Link, and Capacity
|
||||
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "1. Speaking Session & Workshop Details" "$BODY"
|
||||
|
||||
|
||||
# --- Child 2 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
Manage how we are driving traffic to our booth, session, or workshop.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Schedule Pre-Event Email Blast
|
||||
- Work w/ Social Media Manager to schedule LinkedIn and Twitter/X Posts
|
||||
- Create Speaker Promo Graphics and Blog Post
|
||||
- Assign Live Social Coverage during event
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "2. Promotion & Marketing Plan" "$BODY"
|
||||
|
||||
|
||||
# --- Child 3 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
Define the booth details.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Document Booth Number and Exhibit Hall Hours
|
||||
- Define Core Messaging/Theme
|
||||
- Define Digital Booth Content (Videos, Slides, Demos)
|
||||
- Document Key Requirements (internet, scanners, monitors)
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "3. Booth Strategy & Messaging" "$BODY"
|
||||
|
||||
|
||||
# --- Child 4 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
Manage who is going, where they are staying, and when they are working the booth.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Assign Staff Manager and Attire
|
||||
- Select Suggested Hotel
|
||||
- Set Arrival and Departure Requirements
|
||||
- Complete Staff Assignments table
|
||||
- Create Booth Staffing Schedule
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "4. Staffing & Travel Logistics" "$BODY"
|
||||
|
||||
|
||||
# --- Child 5 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
This section is for the operations team to handle on-site setup, booth build, and shipping.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Track Shipping & Handling deadlines and tracking numbers
|
||||
- Create Return Shipping Label
|
||||
- Confirm Booth Vendor, Graphics Deadline, and Furniture/Electrical
|
||||
- Order Premium Swag, General Swag, and Raffle/Contest items
|
||||
- Complete Key Points of Contact table
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "5. Execution, Logistics & Swag" "$BODY"
|
||||
|
||||
|
||||
# --- Child 6 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
Crucial for ROI. Track how we capture data and what happens next.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Define Capture Mechanics, Method, and Device Rental
|
||||
- Define Incentive to Scan
|
||||
- Write Qualifying Questions for Booth Staff
|
||||
- Assign Lead Upload Owner and SLA
|
||||
- Define Follow Up Strategy and Nurture Sequence
|
||||
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "6. Lead Capture & Follow-Up Strategy" "$BODY"
|
||||
|
||||
|
||||
# --- Child 7 ---
|
||||
BODY=$(cat << EOF
|
||||
**Description**
|
||||
To be filled out within 1 week of event conclusion to analyze performance and ROI.
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Record The Numbers (Leads, MQLs, Spend, CPL)
|
||||
- Complete Retrospective (What went well/wrong)
|
||||
- Document Competitor Intel
|
||||
- Upload Photo Archive
|
||||
EOF
|
||||
)
|
||||
create_sub_issue "7. Post-Mortem & ROI Analysis" "$BODY"
|
||||
|
||||
echo "Done."
|
||||
```
|
||||
|
||||
|
||||
## How to automate workshop creation
|
||||
|
||||
The workshop tracking process uses the same GitHub parent/child issue structure as conferences, but with a smaller, workshop-specific set of tasks. Use this script instead of the conference script when running a GitOps workshop.
|
||||
|
||||
> If you haven't set up the GitHub CLI yet, follow the **Setup** steps in the [How to automate event creation](#how-to-automate-event-creation) section above before continuing.
|
||||
> If you haven't set up the GitHub CLI yet, install it via [Homebrew](https://brew.sh/) (`brew install gh`), then authenticate with `gh auth login` and `gh auth refresh -s project` before continuing.
|
||||
|
||||
### Workshop template process and script
|
||||
|
||||
@@ -562,5 +239,5 @@ see new-workshop.sh in the marketing folder
|
||||
|
||||
|
||||
|
||||
<meta name="maintainedBy" value="johnjeremiah">
|
||||
<meta name="maintainedBy" value="akuthiala">
|
||||
<meta name="title" value="🫧 Marketing event execution">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Marketing ops
|
||||
|
||||
Drive efficient, scalable pipeline growth by building and optimizing the systems, processes, and campaigns that attract, nurture, and convert high-quality leads into revenue—enabling the sales team to focus on closing while we focus on filling the funnel.
|
||||
Drive efficient, scalable pipeline growth by building and optimizing the systems, processes, and campaigns that attract, nurture, and convert high-quality contacts into revenue—enabling the sales team to focus on closing while we focus on filling the funnel.
|
||||
|
||||
|
||||
## Go-to-market attribution
|
||||
@@ -27,22 +27,63 @@ Conversion rates help us to plan, forecast, and improve. There are several key c
|
||||
|
||||
## GTM model
|
||||
|
||||
We can build a reverse funnel using the conversion rates and an estimated ASP, which will indicate the business demand for top-of-funnel leads/contacts and opportunities in order to attain future revenue targets.
|
||||
We can build a reverse funnel using the conversion rates and an estimated ASP, which will indicate the business demand for top-of-funnel contacts and opportunities in order to attain future revenue targets.
|
||||
|
||||
|
||||
## Contact source
|
||||
At Fleet, we also keep track of the specific form or activity that a contact completed when they were created. This way we keep track of "Where" they came from (the attribution framework), but also have data about what they did. We have a field *Contact source*, which is the same as the first historical event that took place causing us to create the contact.
|
||||
|
||||
Here are the values for the contact source:
|
||||
|
||||
| Contact source value | Definition |
|
||||
| :---- | :---- |
|
||||
| Website \- Sign up | Contact created an account/signed up for the Fleet platform. |
|
||||
| Website \- Contact forms \- Demo | Contact requested a standard demo via the website. |
|
||||
| Website \- Contact forms \- Demo \- ICP | Contact requested a demo and was routed/flagged as an Ideal Customer Profile. |
|
||||
| Website \- Contact forms | Contact submitted a general inquiry via the website. |
|
||||
| Website \- Gated document | Contact filled out a form to download a whitepaper, report, or guide. |
|
||||
| Website \- Newsletter | Contact explicitly subscribed to the Fleet blog or newsletter. |
|
||||
| Website \- Swag request | Contact filled out a form specifically to request Fleet merchandise. |
|
||||
| Website \- GitOps | Contact converted via a specific GitOps-related form or landing page flow. |
|
||||
| Website \- Chat | Contact engaged and provided their email via the website chatbot. |
|
||||
| Website \- Partner sign up | Contact submitted a form to apply for or join the Fleet partner program. |
|
||||
| Webinar | Contact registered for or attended a webinar (hosted by Fleet or a 3rd-party). Note: The specific host/campaign is captured in the 3-tier attribution. |
|
||||
| Event | Contact was scanned, uploaded, or registered from a live physical or virtual event. |
|
||||
| LinkedIn \- Native lead form | Contact submitted their info directly inside LinkedIn via a Document Ad or lead gen form. |
|
||||
| Content syndication | Contact info was acquired via a 3rd-party vendor promoting Fleet's content. |
|
||||
| Partner \- Deal registration | Contact was formally registered by an authorized partner/reseller. |
|
||||
| GitHub \- Stared fleetdm/fleet | Contact starred the Fleet repository. |
|
||||
| GitHub \- Forked fleetdm/fleet | Contact forked the Fleet repository. |
|
||||
| GitHub \- Contributed to fleetdm/fleet | Contact made a code/documentation contribution to the Fleet repository. |
|
||||
| LinkedIn \- Liked the LinkedIn company page | Contact followed or liked the official Fleet LinkedIn page. |
|
||||
| LinkedIn \- Reaction | Contact reacted (like, celebrate, etc.) to a Fleet post. |
|
||||
| LinkedIn \- Comment | Contact commented on a Fleet post. |
|
||||
| LinkedIn \- Share | Contact shared a Fleet post. |
|
||||
| Prospecting \- AE | Contact was sourced directly via outbound efforts by an Account Executive. |
|
||||
| Prospecting \- Specialist | Contact was sourced directly via outbound efforts by a Sales Specialist. |
|
||||
| Prospecting \- Meeting service | Contact was sourced/booked via an outsourced meeting-setting agency. |
|
||||
| Dripify \- AE | Contact was sourced via Dripify automation by an AE. |
|
||||
| Dripify \- Specialist | Contact was sourced via Dripify automation by a Specialist. |
|
||||
| Attended a call with Fleet | Contact was added to the system after attending a calendar invite/call with the team. |
|
||||
|
||||
|
||||
|
||||
|
||||
## Attribution framework
|
||||
|
||||
To scale demand generation effectively, we need to have a trusted source of data about what works in generating new leads, opportunities, pipeline, and business. Without a consistent framework, our data is messy, reporting is unreliable, and we cannot confidently measure the ROI of our marketing or sales efforts. This framework solves three core problems:
|
||||
To scale demand generation effectively, we need to have a trusted source of data about what works in generating new contacts, opportunities, pipeline, and business. Without a consistent framework, our data is messy, reporting is unreliable, and we cannot confidently measure the ROI of our marketing or sales efforts. This framework solves three core problems:
|
||||
|
||||
1. **Inconsistent data**
|
||||
2. **Lack of visibility**
|
||||
3. **Inaccurate ROI**
|
||||
|
||||
This outlines a simple, scalable, and non-negotiable system for tracking all lead-generating activities at Fleet.
|
||||
This outlines a simple, scalable, and non-negotiable system for tracking all contact-generating activities at Fleet.
|
||||
|
||||
|
||||
|
||||
### First-touch vs. converting-touch
|
||||
|
||||
This framework is **not** just for the Original Lead/Contact Source field. It should be applied to **two separate, critical moments** in the customer journey. At some point, we may want to look at multi-touch attribution, this model is our starting point and foundation.
|
||||
This framework is **not** just for the Contact Source field. It should be applied to **two separate, critical moments** in the customer journey. At some point, we may want to look at multi-touch attribution, this model is our starting point and foundation.
|
||||
|
||||
|
||||
#### 🌎 First-touch: Original contact source
|
||||
@@ -51,10 +92,9 @@ This framework is **not** just for the Original Lead/Contact Source field. It sh
|
||||
- **The rule:** This field is **set once and is locked forever**. It should *never* be overwritten.
|
||||
- **It answers:** "Which of our channels are best at generating *net-new names* and filling the top of our funnel?"
|
||||
|
||||
|
||||
#### 🏁 Converting-touch: Opportunity creation source 🟡
|
||||
|
||||
- **What it is:** The "final push." It is the specific campaign that caused a known lead or contact to convert into a sales-qualified opportunity (i.e., they booked a demo or engaged with sales).
|
||||
- **What it is:** The "final push." It is the specific campaign that caused a known contact to convert into a sales-qualified opportunity (i.e., they booked a demo or engaged with sales).
|
||||
- **The rule:** This field is set *at the moment of opportunity creation*.
|
||||
- **It answers:** "Which of our channels are best at generating *pipeline and revenue*?"
|
||||
|
||||
@@ -68,7 +108,7 @@ Example:
|
||||
|
||||
Converting-touch is always stamped fresh at the moment of opportunity creation. If a contact re-engages after a prior opportunity has closed, the new opportunity's Converting-touch reflects whatever campaign or activity drove the current re-engagement,not any historical value. The prior opportunity record retains its own Converting-touch data. If a closed-lost opportunity is re-engaged within 90 days, we typically should reopen the original opportunity rather than creating a new one.
|
||||
|
||||
**Converting0touch** allows us to see that our webinars are great for *finding* leads, and our SDR team is great at *converting* them.
|
||||
**Converting-touch** allows us to see that our webinars are great for *finding* contacts, and our SDR team is great at *converting* them.
|
||||
|
||||
|
||||
### Attribution hierarchy
|
||||
@@ -91,7 +131,7 @@ At the top of the hierarchy, there are 6 “Source” buckets, where all our con
|
||||
- **🗓️ Event**: All in-person or virtual events, sponsored or hosted.
|
||||
- **💻 Digital**: All paid and owned online media and content.
|
||||
- **🎯 Prospecting**: All outbound activities initiated by sales or a 3rd-party vendor.
|
||||
- **🤝 Partner**: All co-marketing and leads generated from formal channel partners.
|
||||
- **🤝 Partner**: All co-marketing and contacts generated from formal channel partners.
|
||||
|
||||
|
||||
#### 🌳 Organic/web
|
||||
@@ -166,7 +206,7 @@ Default-SDR-Dripify_LinkedIn
|
||||
|
||||
#### 🤝 Partner
|
||||
|
||||
For all co-marketing and leads generated from formal channel partners.
|
||||
For all co-marketing and contacts generated from formal channel partners.
|
||||
|
||||
| Source detail | Code | Campaign examples |
|
||||
| :---- | :---- | :---- |
|
||||
@@ -177,7 +217,7 @@ For all co-marketing and leads generated from formal channel partners.
|
||||
|
||||
### Campaigns
|
||||
|
||||
**The golden rule:** Every single lead-generating activity *must* have a unique campaign in the CRM before it launches.
|
||||
**The golden rule:** Every single contact-generating activity *must* have a unique campaign in the CRM before it launches.
|
||||
|
||||
There are only two types of campaigns:
|
||||
1. "Always-on" campaigns (continuous)
|
||||
@@ -205,11 +245,11 @@ These are generic "buckets" for continuous inbound channels that don't have a st
|
||||
|
||||
## SFDC field mapping
|
||||
|
||||
The attribution framework is implemented across three record types in Salesforce: Contact/Lead, and Opportunity. Understanding which fields store which attribution values — and how they behave — is essential for building accurate reports and debugging data issues.
|
||||
The attribution framework is implemented across two record types in Salesforce: Contact and Opportunity. Understanding which fields store which attribution values — and how they behave — is essential for building accurate reports and debugging data issues.
|
||||
|
||||
### Contact and Lead fields
|
||||
### Contact fields
|
||||
|
||||
There are nine attribution fields on the Contact and Lead records, organized into two groups: **Source** (first-touch, locked forever) and **Most Recent** (updated on every new campaign touch).
|
||||
There are nine attribution fields on the Contact record, organized into two groups: **Source** (first-touch, locked forever) and **Most Recent** (updated on every new campaign touch).
|
||||
|
||||
| Field label | API name | Attribution level | Behavior |
|
||||
|---|---|---|---|
|
||||
@@ -225,7 +265,7 @@ There are nine attribution fields on the Contact and Lead records, organized int
|
||||
|
||||
### Opportunity fields
|
||||
|
||||
When an opportunity is created from a Contact or Lead, the Most Recent values at that moment are copied into the Opportunity's Converting fields. These represent the converting-touch — the campaign that drove this specific pipeline event.
|
||||
When an opportunity is created from a Contact, the Most Recent values at that moment are copied into the Opportunity's Converting fields. These represent the converting-touch — the campaign that drove this specific pipeline event.
|
||||
|
||||
| Field label | API name | Attribution level | Behavior |
|
||||
|---|---|---|---|
|
||||
@@ -351,7 +391,7 @@ All campaigns must utilize the following status values. Custom statuses outside
|
||||
| **Interacted** | **Yes** | Interest | **3 \- Intrigued** | **(Light Touch)** Passive engagement. They clicked a link, liked a post, or visited a high-value page, but **did not exchange contact** info. |
|
||||
| **Registered** | **Yes** | Consideration | **3 \- Intrigued** | **(Conversion)** The individual explicitly exchanged data for access (Form Fill, Sign Up, RSVP). |
|
||||
| **Attended** | **Yes** | Evaluation | 3 \- Intrigued | The individual showed up to a synchronous event (Booth Scan, Webinar, Live Event, Dinner). |
|
||||
| **Engaged** | **Yes** | Intent | **4 \- Has use case** | **(Deep Interaction)** High-effort engagement. They asked a question, made a meaningful comment, or engaged in a conversation. Hot Lead from Event |
|
||||
| **Engaged** | **Yes** | Intent | **4 \- Has use case** | **(Deep Interaction)** High-effort engagement. They asked a question, made a meaningful comment, or engaged in a conversation. Hot contact from Event |
|
||||
| **Meeting Requested** | **Yes** | Purchase | 5 \- Personally confident | The individual explicitly requested a sales contact or a demo. |
|
||||
|
||||
|
||||
@@ -359,11 +399,11 @@ All campaigns must utilize the following status values. Custom statuses outside
|
||||
|
||||
#### Social media and content
|
||||
|
||||
*Goal: Distinguish between vanity metrics (Likes) and true leads.*
|
||||
*Goal: Distinguish between vanity metrics (Likes) and true prospects.*
|
||||
|
||||
- **Interacted:** User "Likes" a post, "Follows" the page, or clicks a link to ungated content.
|
||||
- **Engaged:** User comments on a post, shares/retweets with their own commentary, or sends a Direct Message (DM).
|
||||
- **Registered:** User fills out a specific lead gen form (e.g., LinkedIn lead gen) or clicks through to a landing page and converts.
|
||||
- **Registered:** User fills out a specific lead gen form (e.g., LinkedIn lead gen form) or clicks through to a landing page and converts.
|
||||
|
||||
#### Webinars and virtual events
|
||||
|
||||
@@ -378,10 +418,10 @@ All campaigns must utilize the following status values. Custom statuses outside
|
||||
|
||||
*Goal: Differentiate between booth traffic and serious conversations.*
|
||||
|
||||
- **Interacted:** Visited the booth, took swag, a COLD LEAD
|
||||
- **Interacted:** Visited the booth, took swag, a COLD contact
|
||||
- **Registered:** RSVP’d to the event (if hosted by us) or pre-booked a meeting.
|
||||
- **Attended:** Badge scanned at booth.
|
||||
- **Engaged:** HOT lead. Had a meaningful conversation with a rep; notes added to CRM.
|
||||
- **Engaged:** HOT contact. Had a meaningful conversation with a rep; notes added to CRM.
|
||||
- **Meeting Requested**
|
||||
|
||||
|
||||
@@ -408,44 +448,6 @@ All campaigns must utilize the following status values. Custom statuses outside
|
||||
- **Engaged:** We chatted and learned about the prospect
|
||||
- **Meeting Requested:** The prospect has booked a meeting
|
||||
|
||||
## Contact source (Lead source)
|
||||
At Fleet, we also keep track of the specific form or activity that a contact completed when they were created. This way we keep track of "Where" they came from (the attribution framework), but also have data about what they did. Historically, we've had the field *Contact source*, which effectively told us what form or activity a person did. This is good data, and works alongside the overall attribution framework.
|
||||
|
||||
Here are the values for the contact source:
|
||||
|
||||
|
||||
| **Contact Source Value** | **Category** | **Status** | **Definition** |
|
||||
| :---- | :---- | :---- | :---- |
|
||||
| Website \- Sign up | Website | Existing | Contact created an account/signed up for the Fleet platform. |
|
||||
| Website \- Contact forms \- Demo | Website | Existing | Contact requested a standard demo via the website. |
|
||||
| Website \- Contact forms \- Demo \- ICP | Website | Existing | Contact requested a demo and was routed/flagged as an Ideal Customer Profile. |
|
||||
| Website \- Contact forms | Website | Existing | Contact submitted a general inquiry via the website. |
|
||||
| Website \- Gated document | Website | NEW | Contact filled out a form to download a whitepaper, report, or guide. |
|
||||
| Website \- Newsletter | Website | Existing | Contact explicitly subscribed to the Fleet blog or newsletter. |
|
||||
| Website \- Swag request | Website | Existing | Contact filled out a form specifically to request Fleet merchandise. |
|
||||
| Website \- GitOps | Website | Existing | Contact converted via a specific GitOps-related form or landing page flow. |
|
||||
| Website \- Chat | Website | Existing | Contact engaged and provided their email via the website chatbot. |
|
||||
| Website \- Partner sign up | Website | NEW | Contact submitted a form to apply for or join the Fleet partner program. |
|
||||
| Webinar | Events | NEW | Contact registered for or attended a webinar (hosted by Fleet or a 3rd-party). Note: The specific host/campaign is captured in the 3-tier attribution. |
|
||||
| Event | Events | Existing | Contact was scanned, uploaded, or registered from a live physical or virtual event. |
|
||||
| LinkedIn \- Native lead form | Third-Party | NEW | Contact submitted their info directly inside LinkedIn via a Document Ad or Lead Gen form. |
|
||||
| Content syndication | Third-Party | NEW | Contact info was acquired via a 3rd-party vendor promoting Fleet's content. |
|
||||
| Partner \- Deal registration | Third-Party | NEW | Contact was formally registered as a lead by an authorized partner/reseller. |
|
||||
| GitHub \- Stared fleetdm/fleet | Community | Existing | Contact starred the Fleet repository. |
|
||||
| GitHub \- Forked fleetdm/fleet | Community | Existing | Contact forked the Fleet repository. |
|
||||
| GitHub \- Contributed to fleetdm/fleet | Community | Existing | Contact made a code/documentation contribution to the Fleet repository. |
|
||||
| LinkedIn \- Liked the LinkedIn company page | Social | Existing | Contact followed or liked the official Fleet LinkedIn page. |
|
||||
| LinkedIn \- Reaction | Social | Existing | Contact reacted (like, celebrate, etc.) to a Fleet post. |
|
||||
| LinkedIn \- Comment | Social | Existing | Contact commented on a Fleet post. |
|
||||
| LinkedIn \- Share | Social | Existing | Contact shared a Fleet post. |
|
||||
| Prospecting \- AE | Outbound | Existing | Contact was sourced directly via outbound efforts by an Account Executive. |
|
||||
| Prospecting \- Specialist | Outbound | Existing | Contact was sourced directly via outbound efforts by a Sales Specialist. |
|
||||
| Prospecting \- Meeting service | Outbound | Existing | Contact was sourced/booked via an outsourced meeting-setting agency. |
|
||||
| Dripify \- AE | Outbound | Existing | Contact was sourced via Dripify automation by an AE. |
|
||||
| Dripify \- Specialist | Outbound | Existing | Contact was sourced via Dripify automation by a Specialist. |
|
||||
| Attended a call with Fleet | Outbound | Existing | Contact was added to the system after attending a calendar invite/call with the team. |
|
||||
|
||||
|
||||
|
||||
## 📧 Contact marketability & compliance
|
||||
|
||||
@@ -498,7 +500,7 @@ We generally do not manually update these fields. A Salesforce Flow acts as a "T
|
||||
|
||||
- **Triggers:** User clicks "Unsubscribe" in email, or `HasOptedOutOfEmail` is checked in SFDC.
|
||||
- **Result:** Status `Unsubscribed`.
|
||||
- **Rule:** This is permanent. A "Cold" lead can become "Marketable" (by filling a form), but an "Unsubscribed" contact is locked unless they manually re-subscribe.
|
||||
- **Rule:** This is permanent. A "Cold" contact can become "Marketable" (by filling a form), but an "Unsubscribed" contact is locked unless they manually re-subscribe.
|
||||
|
||||
### Why this matters
|
||||
|
||||
@@ -509,7 +511,7 @@ We generally do not manually update these fields. A Salesforce Flow acts as a "T
|
||||
|
||||
## ActiveCampaign
|
||||
|
||||
Fleet uses ActiveCampaign as its marketing automation platform for email marketing, contact lifecycle management, lead nurturing, and segmentation. ActiveCampaign is integrated with Salesforce (SFDC) as the system of record; key contact fields sync from SFDC into ActiveCampaign, and lifecycle transitions driven by sales activity in SFDC are reflected in ActiveCampaign automations.
|
||||
Fleet uses ActiveCampaign as its marketing automation platform for email marketing, contact lifecycle management, nurturing, and segmentation. ActiveCampaign is integrated with Salesforce (SFDC) as the system of record; key contact fields sync from SFDC into ActiveCampaign, and lifecycle transitions driven by sales activity in SFDC are reflected in ActiveCampaign automations.
|
||||
|
||||
### Lists
|
||||
|
||||
@@ -573,10 +575,10 @@ Tags handle behavioral and automation state signals that change over time. They
|
||||
| Tag | Category | Description |
|
||||
|---|---|---|
|
||||
| `ls: prospect` | Lifecycle Stage | Opted-in contact with no qualification yet. Starting point for all contacts regardless of source. |
|
||||
| `ls: mql` | Lifecycle Stage | Marketing Qualified Lead. Right-fit demographics/firmographics plus minor intent signal. Qualifies for increased marketing investment. |
|
||||
| `ls: srl` | Lifecycle Stage | Sales Ready Lead. MQL threshold met plus sufficient intent to hand off. Triggers sales notification and pauses marketing nurture. |
|
||||
| `ls: sal` | Lifecycle Stage | Sales Accepted Lead. Sales has accepted and is actively working the contact. SFDC is system of record from this point. |
|
||||
| `ls: sql` | Lifecycle Stage | Sales Qualified Lead. Sales has met with the contact and is moving forward toward a deal. |
|
||||
| `ls: mql` | Lifecycle Stage | Marketing Qualified. Right-fit demographics/firmographics plus minor intent signal. Qualifies for increased marketing investment. |
|
||||
| `ls: srl` | Lifecycle Stage | Sales Ready. MQL threshold met plus sufficient intent to hand off. Triggers sales notification and pauses marketing nurture. |
|
||||
| `ls: sal` | Lifecycle Stage | Sales Accepted. Sales has accepted and is actively working the contact. SFDC is system of record from this point. |
|
||||
| `ls: sql` | Lifecycle Stage | Sales Qualified. Sales has met with the contact and is moving forward toward a deal. |
|
||||
| `ls: customer` | Lifecycle Stage | Has purchased Fleet. Contact is added to the Customers list. |
|
||||
| `ls: churned` | Lifecycle Stage | Former customer who has cancelled or not renewed. |
|
||||
| `ls: non-prospect` | Lifecycle Stage | In the database but will never enter the funnel (press, media, analysts, students, community members). Excluded from all nurture automations. |
|
||||
@@ -596,7 +598,7 @@ Tags handle behavioral and automation state signals that change over time. They
|
||||
|
||||
### Email marketing
|
||||
|
||||
Fleet uses ActiveCampaign for all owned-list email marketing. This includes the newsletter, product announcements, event follow-ups, and lead nurture sequences.
|
||||
Fleet uses ActiveCampaign for all owned-list email marketing. This includes the newsletter, product announcements, event follow-ups, and nurture sequences.
|
||||
|
||||
All campaign names in ActiveCampaign must follow the Level 3 attribution naming convention so that email-driven conversions are correctly attributed in SFDC:
|
||||
|
||||
@@ -684,7 +686,7 @@ We use a virtual team member — **"Grace"** — as the sender identity for our
|
||||
People engage with people, not logos. Emails from a named individual consistently outperform emails sent from a brand name or a generic address like `marketing@` or `no-reply@`. A virtual persona gives us the warmth and approachability of a personal sender without the operational problems that come with tying automation to a real employee.
|
||||
|
||||
- Turnover risk: When a real person is the face of automated email, their departure creates a jarring experience for recipients and a scramble to update templates, signatures, and sender addresses across every platform.
|
||||
- Scalability: No single employee can realistically "own" the relationship with every lead and contact in the database. A persona can.
|
||||
- Scalability: No single employee can realistically "own" the relationship with every contact in the database. A persona can.
|
||||
- Consistency: A virtual identity stays on-brand across every touchpoint — tone, title, photo, and signature never drift.
|
||||
- Privacy for the team: Real employees don't have their name and likeness attached to thousands of cold or automated emails they didn't personally write.
|
||||
|
||||
@@ -738,5 +740,5 @@ Fleet uses a virtual persona — Grace West (gracewest at fleetdm.com) — as th
|
||||
|
||||
Once verified, the **From** dropdown in Gmail's compose window lets you switch to "Grace West <gracewest at fleetdm.com>" when sending.
|
||||
|
||||
<meta name="maintainedBy" value="johnjeremiah">
|
||||
<meta name="maintainedBy" value="akuthiala">
|
||||
<meta name="title" value="🫧 Marketing ops">
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
# Marketing team
|
||||
|
||||
This page outlines the different roles in the marketing team and the DRIs executing the responsibilities of that role.
|
||||
|
||||
| Role | Person | GitHub ID | Responsibilities |
|
||||
| ----- | ----- | ----- | ----- |
|
||||
| Chief marketing officer | [Ashish Kuthiala](https://www.linkedin.com/in/ashishkuthiala) | [*@akuthiala*](https://github.com/akuthiala) | Set, lead, and manage Fleet’s marketing strategy and execution across all aspects of marketing Lead or own various functions of marketing as appropriate. |
|
||||
| Content specialist | [Irena Reedy](https://www.linkedin.com/in/irena-reedy-520ab9354/) | [*@irenareedy*](https://github.com/irenareedy) | Manage and scale the Fleet Champions Community program by expanding the size and diversity of customer advocates while increasing the number of Fleet peer reviews across multiple platforms. Lead event execution in close collaboration with the Campaign Manager to ensure conferences, meetups, and community events are planned, coordinated, and delivered successfully. Oversee Fleet’s social media program by working with the Social Media Manager to coordinate content, messaging, and publishing across channels. Maintain the marketing operations board to ensure tasks are assigned, actively worked on, and completed so marketing initiatives remain organized and on track. Own and report on weekly marketing KPIs, tracking progress across initiatives and ensuring visibility into performance and outcomes |
|
||||
| Content specialist (Consultant) | [Anthony Critelli](https://www.linkedin.com/in/anthonycritelli/) | [*@acritelli*](https://github.com/acritelli) | Build out Fleet linux management capabilities content |
|
||||
| Content specialist (Consultant) | [Adrian Kok](https://www.linkedin.com/in/adriankok/) | [*@adriankok*](https://github.com/adriankok) | Consult on Fleet technical content |
|
||||
| Technical product marketing and content specialist (Consultant) | [Dan Gordon](https://www.linkedin.com/in/dangordon/) | [@danbgordon](https://github.com/danbgordon) | Create core technical marketing strategy, positioning, messaging and assets for IT technical teams Market Fleet releases Create, drive and manage analyst relations for Fleet |
|
||||
| Product marketing (Consultant) | [Erin Miska](https://www.linkedin.com/in/erinmiska/) | [*@miskaek*](https://github.com/miskaek) | Positioning and messaging Leadership marketing facing assets, Sales and partner enablement Content strategy |
|
||||
| Social media strategy and management (Consultant) | [Thomas Basgil Jr.](https://www.linkedin.com/in/tombasgil/) | [*@tombasgil*](https://github.com/tombasgil) | Establish, manage and grow Fleet’s social media presence across all appropriate channels. Monitor and respond to comments on company page posts (e.g., LinkedIn); comments on tracked posts are surfaced in the [#_linkedin-comments-from-tracked-posts](https://fleetdm.slack.com/archives/C0AP1FM3ES2) Slack channel |
|
||||
| Public relations (Consultant) | [Alyssa Pallotti](https://www.linkedin.com/in/alyssapallotti/) | | Establish Fleet AR & PR program Identify and train key Fleet employees on AR & PR interactions Establish, measure and improve Fleet share of voice with press, analysts, and media. Manage Fleet submissions for industry awards |
|
||||
|
||||
<meta name="maintainedBy" value="akuthiala">
|
||||
<meta name="title" value="Fleet team responsibilities">
|
||||
@@ -1,10 +1,12 @@
|
||||
- task: "Prioritize for next sprint" # Title that will actually show in rituals table
|
||||
-
|
||||
task: "Prioritize for next sprint" # Title that will actually show in rituals table
|
||||
startedOn: "2023-09-04" # Needs to align with frequency e.g. if frequency is every thrid Thursday startedOn === any third thursday
|
||||
frequency: "Triweekly"
|
||||
description: "Using your departmental kanban board, prioritize and finalize next sprint's goals for your team by draging the appropriate issues to the top of the 'Not yet' column." # example of a longer thing: description: "[Prioritizing next sprint](https://fleetdm.com/handbook/company/communication)"
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/company/why-this-way#why-make-work-visible" #URL used to highlight "description:" test in table
|
||||
dri: "mikermcneil" # DRI for ritual (assignee if autoIssue) (TODO display GitHub proflie pic instead of name or title)
|
||||
- task: "Refresh event calendar"
|
||||
-
|
||||
task: "Refresh event calendar"
|
||||
startedOn: "2023-12-31"
|
||||
frequency: "Monthly"
|
||||
description: "Check the [Event strategy workbook](https://docs.google.com/spreadsheets/d/1YQXAX2Q_WnGkAwMYjMbQpV3nbCj7gOBbv7Y0u4twxzQ/edit) and update any new event details."
|
||||
@@ -13,31 +15,36 @@
|
||||
autoIssue:
|
||||
labels: [":help-marketing"]
|
||||
repo: fleet
|
||||
- task: "Review CTRs of recently boosted posts"
|
||||
-
|
||||
task: "Review CTRs of recently boosted posts"
|
||||
startedOn: "2026-03-23"
|
||||
frequency: "Weekly"
|
||||
description: "Review CTR for recently boosted posts to understand performance and inform future content decisions. The CEO will attend the first few monthly sessions to help understand what ads are working. After that, the Content Specialist and the CMO will continue running the ritual."
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/marketing/socialmedia"
|
||||
dri: "irenareedy"
|
||||
- task: "Settle event strategy"
|
||||
-
|
||||
task: "Settle event strategy"
|
||||
startedOn: "2024-01-02"
|
||||
frequency: "Quarterly (first Tuesday)"
|
||||
description: "https://fleetdm.com/handbook/marketing#settle-event-strategy"
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/marketing#settle-event-strategy"
|
||||
dri: "irenareedy"
|
||||
- task: "Optimize ads"
|
||||
-
|
||||
task: "Optimize ads"
|
||||
startedOn: "2026-03-26"
|
||||
frequency: "Weekly"
|
||||
description: "Remove all but the top 5 performing ads in each evergreen campaign. Make sure ABM campaigns are using top-performing evergreen (named Awareness (reach) in Campaign Manager) ads."
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/marketing#optimize-ads-through-experimentation"
|
||||
dri: "irenareedy"
|
||||
- task: "Process pending swag requests" # Title that will actually show in rituals table
|
||||
-
|
||||
task: "Process pending swag requests" # Title that will actually show in rituals table
|
||||
startedOn: "2025-04-02" # Needs to align with frequency e.g. if frequency is every thrid Thursday startedOn === any third thursday
|
||||
frequency: "Daily" # must be supported by
|
||||
description: "Complete draft orders." # example of a longer thing: description: "[Prioritizing next sprint](https://fleetdm.com/handbook/company/communication)"
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/marketing#process-pending-swag-requests-from-the-website" #URL used to highlight "description:" test in table
|
||||
dri: "irenareedy" # DRI for ritual (assignee if autoIssue) (TODO display GitHub proflie pic instead of name or title)
|
||||
- task: "Publish ☁️🌈 Sprint demos"
|
||||
-
|
||||
task: "Publish ☁️🌈 Sprint demos"
|
||||
startedOn: "2023-11-03"
|
||||
frequency: "Triweekly"
|
||||
description: "Every release cycle, upload the ☁️🌈 Sprint demos video to YouTube"
|
||||
@@ -46,19 +53,22 @@
|
||||
autoIssue:
|
||||
labels: [ ":help-marketing",":mktg-ritual" ]
|
||||
repo: "confidential"
|
||||
- task: "Check ongoing events"
|
||||
-
|
||||
task: "Check ongoing events"
|
||||
startedOn: "2024-10-21"
|
||||
frequency: "Daily"
|
||||
description: "Check event issues and complete steps."
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/engineering#book-an-event"
|
||||
dri: "irenareedy"
|
||||
- task: "Check that there is sufficient availability for scheduling demos via fleetdm.com/contact"
|
||||
-
|
||||
task: "Check that there is sufficient availability for scheduling demos via fleetdm.com/contact"
|
||||
startedOn: "2024-10-25"
|
||||
frequency: "Weekly"
|
||||
description: "Check out the meeting booking flow that you get when you schedule a demo from Fleet's contact form, and make sure there is plenty of availability for the rest of the day in US PT thru ET, with significant spots open in the morning (US time) for folks in EMEA and at least one or two spots open in the evening (US time) for folks in APAC / Hawaii."
|
||||
moreInfoUrl: ""
|
||||
dri: "irenareedy"
|
||||
- task: "Prepare Let's get you set up meeting notes"
|
||||
-
|
||||
task: "Prepare Let's get you set up meeting notes"
|
||||
startedOn: "2026-03-05"
|
||||
frequency: "Weekly"
|
||||
description: "Every Thursday before each group/community demo call that occurs on Fridays, copy the attendees from the Lets get you set up! (group office hours) calendar event and paste them into the correct section of the [Let's get you set up! meeting notes](https://docs.google.com/document/d/1rlvueDlTqiz0cyH426nVL6LXpv9MWDUtXW6YiMT3oK8/edit?tab=t.0#heading=h.l967l3n9mjnd), be sure to use the format listed in the doc."
|
||||
@@ -67,7 +77,8 @@
|
||||
autoIssue:
|
||||
labels: [ ":help-marketing",":mktg-ritual" ]
|
||||
repo: "confidential"
|
||||
- task: "Update content calendar"
|
||||
-
|
||||
task: "Update content calendar"
|
||||
startedOn: "2025-08-04"
|
||||
frequency: "Triweekly"
|
||||
description: "Every Monday, the Content Specialist will go through the content calendar with the Social media strategy and management (consultant) to verify that the next two months of content are completely planned, LinkedIn links are added for all content, and the content calendar is updated."
|
||||
@@ -76,7 +87,8 @@
|
||||
autoIssue:
|
||||
labels: [ ":help-marketing",":mktg-ritual" ]
|
||||
repo: "confidential"
|
||||
- task: "Update KPIs"
|
||||
-
|
||||
task: "Update KPIs"
|
||||
startedOn: "2025-08-08"
|
||||
frequency: "Weekly"
|
||||
description: "Every Friday, the Content Specialist will fill out the weekly marketing KPIs."
|
||||
@@ -85,19 +97,22 @@
|
||||
autoIssue:
|
||||
labels: [ ":help-marketing",":mktg-ritual" ]
|
||||
repo: "confidential"
|
||||
- task: "Check new customers and add them to the Fleet Champions Community."
|
||||
-
|
||||
task: "Check new customers and add them to the Fleet Champions Community."
|
||||
startedOn: "2026-03-09"
|
||||
frequency: "Weekly"
|
||||
description: "Check the #general Slack channel for all new customers who have joined Fleet."
|
||||
moreInfoUrl: "https://fleetdm.com/handbook/marketing/fleetchampions"
|
||||
dri: "irenareedy"
|
||||
- task: "Populate Fleet Champions Community spreadsheet"
|
||||
-
|
||||
task: "Populate Fleet Champions Community spreadsheet"
|
||||
startedOn: "2026-03-09"
|
||||
frequency: "Weekly"
|
||||
description: "Every Monday, make sure Fleet Champions Community spreadsheet is filled out and up to date."
|
||||
moreInfoUrl: "https://www.printful.com/dashboard/default/orders"
|
||||
dri: "irenareedy"
|
||||
- task: "Follow up on Gartner Peer Review with customers"
|
||||
-
|
||||
task: "Follow up on Gartner Peer Review with customers"
|
||||
startedOn: "2026-03-09"
|
||||
frequency: "Weekly"
|
||||
description: "Every week, touch base with customers and/or CMS to make sure they are working on."
|
||||
|
||||
@@ -1,261 +0,0 @@
|
||||
#!/bin/bash
|
||||
# --- Workshop specifics / details - change this
|
||||
WORKSHOP_SLUG="2026_05-GitOps-Workshop-test3"
|
||||
PLANNING_DOC_URL="https://docs.google.com"
|
||||
REQUEST_ISSUE="#14944"
|
||||
LOCATION="test3"
|
||||
MKTG_DRI="mb-chigoose312"
|
||||
CHANNEL_DRI="escomeau"
|
||||
SOCIAL_DRI="tombasgil"
|
||||
DESIGN_DRI="mike-j-thomas"
|
||||
|
||||
# No need to change anything else to run the script
|
||||
|
||||
# --- Static Configuration ---
|
||||
ORG="fleetdm"
|
||||
REPO="confidential"
|
||||
PROJECT_NUMBER="94"
|
||||
|
||||
# 1. Define Labels
|
||||
NEW_LABEL=":mktg-event:${WORKSHOP_SLUG}"
|
||||
PARENT_LABELS=":mktg-event,:mktg-event:overview,:mktg-event:tp"
|
||||
CHILD_LABELS=":mktg-event,:mktg-event:detail,:mktg-event:tp"
|
||||
|
||||
# Temp file for issue bodies (avoids heredoc/subshell parenthesis conflicts)
|
||||
BODY_FILE=$(mktemp)
|
||||
cleanup() { rm -f "$BODY_FILE"; }
|
||||
trap cleanup EXIT
|
||||
|
||||
# Ensure the specific workshop label exists
|
||||
echo "1. Ensuring label '${NEW_LABEL}' exists..."
|
||||
gh label create "$NEW_LABEL" --repo "$ORG/$REPO" --force >/dev/null 2>&1 || true
|
||||
|
||||
|
||||
# ==========================================
|
||||
# STEP 1: CREATE THE PARENT ISSUE
|
||||
# ==========================================
|
||||
echo "2. Creating Parent Issue (Overview)..."
|
||||
|
||||
PARENT_TITLE="${WORKSHOP_SLUG} Workshop Overview"
|
||||
|
||||
cat > "$BODY_FILE" << EOF
|
||||
Master tracking issue for the GitOps Workshop: ${WORKSHOP_SLUG}.
|
||||
|
||||
EXECUTION for request $REQUEST_ISSUE
|
||||
|
||||
## Executive Snapshot & Key Decisions
|
||||
- [ ] Update the working google doc for the ${EVENT_SLUG}
|
||||
See: Planing Doc: $PLANNING_DOC_URL
|
||||
|
||||
- [ ] Finalize sponsorship agreements
|
||||
- [ ] Assign child issues/tasks
|
||||
|
||||
## Progress Tracker - See SubIssues
|
||||
|
||||
EOF
|
||||
|
||||
PARENT_URL=$(gh issue create \
|
||||
--repo "$ORG/$REPO" \
|
||||
--title "$PARENT_TITLE" \
|
||||
--body-file "$BODY_FILE" \
|
||||
--label "$PARENT_LABELS,$NEW_LABEL" \
|
||||
--assignee "$MKTG_DRI")
|
||||
|
||||
if [ -z "$PARENT_URL" ]; then
|
||||
echo "❌ ERROR: Failed to create Parent Issue. Check if labels exist in the repo."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PARENT_NUM=$(echo "$PARENT_URL" | awk -F/ '{print $NF}')
|
||||
echo " ✅ Parent Created: #$PARENT_NUM"
|
||||
|
||||
PARENT_NODE_ID=$(gh api graphql -f query='
|
||||
query($owner:String!, $repo:String!, $number:Int!) {
|
||||
repository(owner:$owner, name:$repo) {
|
||||
issue(number:$number) { id }
|
||||
}
|
||||
}' -f owner="$ORG" -f repo="$REPO" -F number="$PARENT_NUM" --jq '.data.repository.issue.id')
|
||||
|
||||
if [ -z "$PARENT_NODE_ID" ] || [ "$PARENT_NODE_ID" == "null" ]; then
|
||||
echo "❌ ERROR: Could not fetch GraphQL Node ID for Parent #$PARENT_NUM"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " 🔹 Parent Node ID: $PARENT_NODE_ID"
|
||||
gh project item-add "$PROJECT_NUMBER" --owner "$ORG" --url "$PARENT_URL" >/dev/null 2>&1
|
||||
|
||||
|
||||
# ==========================================
|
||||
# STEP 2: HELPER FUNCTION FOR CHILD ISSUES
|
||||
# ==========================================
|
||||
create_sub_issue() {
|
||||
local TITLE="$1"
|
||||
local ASSIGNEE="$2"
|
||||
# Body is already written to $BODY_FILE by the caller
|
||||
|
||||
local OPTIONAL_ARGS=()
|
||||
if [ -n "$ASSIGNEE" ]; then
|
||||
OPTIONAL_ARGS=(--assignee "$ASSIGNEE")
|
||||
fi
|
||||
|
||||
CHILD_URL=$(gh issue create \
|
||||
--repo "$ORG/$REPO" \
|
||||
--title "$TITLE: ${WORKSHOP_SLUG}" \
|
||||
--body-file "$BODY_FILE" \
|
||||
--label "$CHILD_LABELS,$NEW_LABEL" \
|
||||
"${OPTIONAL_ARGS[@]}")
|
||||
|
||||
if [ -n "$CHILD_URL" ]; then
|
||||
CHILD_NUM=$(echo "$CHILD_URL" | awk -F/ '{print $NF}')
|
||||
|
||||
CHILD_NODE_ID=$(gh api graphql -f query='
|
||||
query($owner:String!, $repo:String!, $number:Int!) {
|
||||
repository(owner:$owner, name:$repo) {
|
||||
issue(number:$number) { id }
|
||||
}
|
||||
}' -f owner="$ORG" -f repo="$REPO" -F number="$CHILD_NUM" --jq '.data.repository.issue.id')
|
||||
|
||||
echo " ✅ Created Child: #$CHILD_NUM ($TITLE)"
|
||||
|
||||
LINK_RESULT=$(gh api graphql -f query='
|
||||
mutation($parentId: ID!, $childId: ID!) {
|
||||
addSubIssue(input: {issueId: $parentId, subIssueId: $childId}) {
|
||||
clientMutationId
|
||||
}
|
||||
}
|
||||
' -f parentId="$PARENT_NODE_ID" -f childId="$CHILD_NODE_ID" 2>&1)
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo " 🔗 Linked as Sub-issue to Parent #$PARENT_NUM"
|
||||
else
|
||||
echo " ⚠️ Failed to link. Error details:"
|
||||
echo "$LINK_RESULT"
|
||||
fi
|
||||
|
||||
gh project item-add "$PROJECT_NUMBER" --owner "$ORG" --url "$CHILD_URL" >/dev/null 2>&1
|
||||
else
|
||||
echo " ❌ Failed to create child: $TITLE"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# ==========================================
|
||||
# STEP 3: DEFINE & CREATE CHILD ISSUES
|
||||
# ==========================================
|
||||
echo "3. Creating and Linking Child Issues..."
|
||||
|
||||
# --- Child 1 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
Get the main workshop event live to start gathering leads.
|
||||
|
||||
Note: You can launch with "Venue TBD" or "Downtown [City]" if the specific room isn't booked yet- SEE TEMPLATE LINK BELOW
|
||||
|
||||
**Who:** Marketing DRI
|
||||
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Create Workshop Landing Page on Eventbrite or Luma
|
||||
Link to [TEMPLATE in EventBrite](https://www.eventbrite.com/e/1985443830945?aff=oddtdtcreator)
|
||||
- Create Slack Channel
|
||||
- Create Calendar Placeholder
|
||||
- Create SFDC campaign
|
||||
- Identify Staff and Instructor(s)
|
||||
EOF
|
||||
create_sub_issue "1. Create & Launch Workshop" "$MKTG_DRI"
|
||||
|
||||
# --- Child 2 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
Ensure the instructor and support staff can get to the city and are prepared for the event.
|
||||
|
||||
**Who:** Onsite DRI, Marketing DRI, Attendees
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Book flights for Lead Instructor and TA if traveling
|
||||
- Book hotel — ensure proximity to the venue
|
||||
- Confirm staffing assignments and attire
|
||||
EOF
|
||||
create_sub_issue "2. Travel & Staffing" "$MKTG_DRI"
|
||||
|
||||
# --- Child 3 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
Secure the physical space for the workshop. Once confirmed, notify attendees.
|
||||
|
||||
**Who:** Onsite DRI, Marketing DRI
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Secure venue — confirm availability for workshop date
|
||||
- Power + AV check — confirm power drops options + projector/HDMI availability
|
||||
- F&B: Identify options - ask venue POC for F&B options.
|
||||
- F&B: Decide amount and place order (example: assortment of drinks and light snacks)
|
||||
- Update Workshop Landing Page with the specific venue name and address
|
||||
EOF
|
||||
create_sub_issue "3. Venue Selection + Food & Beverage" "$MKTG_DRI"
|
||||
|
||||
# --- Child 4 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
Each workshop requires looping in our go-to local partner and assigning the channel manager to the planning team to lead coordination efforts..
|
||||
|
||||
**Who:** Marketing DRI
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Assign issue to Eric Comeau
|
||||
- Connect with AE to discuss which partner to invite/include on the workshop.
|
||||
- Share Workshop reg link with identified partner to help drive registration
|
||||
EOF
|
||||
create_sub_issue "4. Engage the Channel" "$CHANNEL_DRI"
|
||||
|
||||
# --- Child 5 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
For each event and workshop we do, we want to have a special sticker created, tailored to that city.
|
||||
|
||||
**Who:** Design DRI
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Assign issue to Mike Thomas
|
||||
- Create a Fleet sticker graphic customized to the city where workshop is being held.
|
||||
- Send Sticker graphic to the Marketing DRI 7 days before the event date.
|
||||
EOF
|
||||
create_sub_issue "5. Design" "$DESIGN_DRI"
|
||||
|
||||
# --- Child 6 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
General + Instructor social posts for team use to help drive awareness and registration.
|
||||
|
||||
**Who:** Marketing DRI
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Assign issue to Tom Basgil
|
||||
- Create LinkedIn + Twitter/X posts for the following: General Workshop itself plus an Instructor post
|
||||
- Share the posts with the attending team & instructor on the event slack channel (link to slack channel located in the event doc)
|
||||
EOF
|
||||
create_sub_issue "6. Get Social" "$SOCIAL_DRI"
|
||||
|
||||
|
||||
# --- Child 7 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
Plan the post-workshop networking. This is treated as a separate event to allow for broader networking — invite people who couldn't make the workshop itself.
|
||||
|
||||
**Who:** Onsite DRI, Marketing DRI
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Secure venue — find a bar/restaurant within a 5-minute walk of the workshop area
|
||||
- Confirm menu/tab — decide on Open Bar vs. Fixed Menu and set the budget cap
|
||||
- IF NEEDED: Create Dinner registration page on Eventbrite or Luma and promote separately
|
||||
EOF
|
||||
create_sub_issue "7. Dinner Planning" "$MKTG_DRI"
|
||||
|
||||
|
||||
# --- Child 8 ---
|
||||
cat > "$BODY_FILE" << EOF
|
||||
**Description**
|
||||
To be completed within 48 hours after the event. Close the loop on leads and technical feedback.
|
||||
- [ ] Update the $PLANNING_DOC_URL with these details
|
||||
- Calculate stats — record Registered, Attended, and No-Show rates for both Workshop and Dinner
|
||||
- Log technical issues — document any WiFi drops or firewall blockers for future reference
|
||||
- CRM upload — upload attendee list to Salesforce/HubSpot
|
||||
- Send follow-up email with slides and repo links
|
||||
|
||||
EOF
|
||||
create_sub_issue "8. Post-Mortem & Follow-Up" "$MKTG_DRI"
|
||||
|
||||
echo "Done."
|
||||
@@ -1,33 +0,0 @@
|
||||
# Product education
|
||||
|
||||
## Fleet training program
|
||||
|
||||
[Fleet Training Program](https://docs.google.com/document/d/1mTkynk4Z4viApH1wDUobUlrbdfz5-b0W6bkH6cj46UQ/edit?tab=t.7dosbdt2vbum)
|
||||
|
||||
## Fleet training course certification standards
|
||||
|
||||
*A Fleetie seeking certification to deliver an offically-sanctioned Fleet training course must:*
|
||||
|
||||
```
|
||||
1. Sign up for & successfully complete the course they intend to be certified to deliver.
|
||||
|
||||
2. Shadow a 2nd course:
|
||||
a. Acknowledge & read any intstructor guides that exist for the course.
|
||||
b. Attend a course delivered by a certified instructor.
|
||||
b. Help students with issues or answer student questions.
|
||||
c. Demonstrate an understanding of how an instructor delivers the course.
|
||||
|
||||
3. Teach any part of a 3rd course:
|
||||
a. Attend a course delivered by a certified instructor.
|
||||
b. Deliver course lessons.
|
||||
|
||||
4. Teach a course.
|
||||
a. Ideally with a certified instructor "in the room" (in-person or virtually).
|
||||
```
|
||||
|
||||
If these steps are completed for any current online or in-person training, the Fleetie is certified.
|
||||
|
||||
>This is a clear set of instructions, but it is also a system of honor, kind of like getting knighted. Once made a knight, you can knight other knights ("System admins" also tend to follow this pattern.) Use this power wisely. We want students to have great experiences. Great Experiences in classes are delvered by qualified instructors.
|
||||
|
||||
<meta name="maintainedBy" value="nonpunctual">
|
||||
<meta name="title" value="Product education">
|
||||
@@ -114,7 +114,6 @@ module.exports = {
|
||||
'GrayW',
|
||||
'maribell-fleetdm',
|
||||
'jkatz01',
|
||||
'johnjeremiah',
|
||||
'melpike',
|
||||
'headmin',
|
||||
'nulmete',
|
||||
|
||||
Reference in New Issue
Block a user