44 Commits
Author SHA1 Message Date
Eric f145c778b8 Website: log number of android enterprise requests in the past minute (#50780)
Related to: https://github.com/fleetdm/fleet/issues/49212

Changes:
- Updated the custom hook to create `sails.androidProxyApiRequestCount`,
and to log and reset the value every minute
- Updated android proxy endpoints to increment
`sails.androidProxyApiRequestCount` every time a request to the Android
management API is sent

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Monitoring**
* Added comprehensive tracking for Android Management API requests
across enrollment, enterprise, device, application, policy, and command
operations.
* Added periodic request-count logging and automatic resets when Android
Enterprise credentials are configured.
* Improved reporting alignment with minute-based API limits while
keeping logs quiet during periods without requests.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-07 11:58:35 -05:00
Eric 85692f8238 Website: set historical event source (#50546)
Changes:
- Updated the website's createHistoricalEvent helper to accept an
eventSource input that is used to set the historical event source on
created records.
- Updated places where we create historical events to set a historical
event source
- Updated the accepted contact sources values in the receive-from-clay
webhook
- Updated the deliver-gitops-workshop-request action to log a warning
when a campaign member record cannot be created

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Improvements**
- Improved activity tracking for newsletter subscriptions, signups,
contact forms, workshop requests, webinars, gated content, and page
views.
- Added clearer source details to records for more accurate attribution.
- Expanded support for website, webinar, event, LinkedIn, prospecting,
and GitHub activity sources.
- **Bug Fixes**
- Workshop requests now continue successfully if campaign updates
encounter an error.
- Corrected warning messages and preserved relevant submission details
for troubleshooting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 18:26:14 -05:00
Mike McNeilandEric 84da114c14 Website: Contributor experience: Allow pages to load without requiring build (#46225)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Scrollable tweets display more robustly when size/DOM measurements
fail.
* Several page renderers now tolerate missing static-content builds and
will show configured testimonials instead of erroring.

* **New Features**
* Dev/local setups now inject a placeholder testimonial to guide running
the static-content build.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/46225?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2026-05-28 14:40:07 -05:00
johnjeremiahandEric cc2cb0a204 Add mostRecentCampaign to event records (#45750)
Following the pattern we have for Clay updating historical events with
the campaign name, this updates the historical event to include the
campaign name for website events.

After the contact is created/updated, we now include the campaign name
as a parameter for the historical event to update/populate the existing
field on the sfdc historical event object.




<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Historical events for signups, newsletter subscriptions, contact/quote
requests, whitepaper downloads, workshop requests, and page views now
include campaign association to improve marketing analytics.
* **Bug Fixes / Reliability**
* Webhooks now fall back to the most recent campaign when none is
provided.
* **Chores**
* Backend responses now expose a mostRecentCampaign field to support
campaign attribution.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45750?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2026-05-22 22:38:29 -04:00
Eric 0693041f13 Website: Update attribution cookie (#40532)
Closes: https://github.com/fleetdm/confidential/issues/14391

Changes:
- Updated the attribution cookie set in the website's custom hook to
include the value of a user's `gclid` query parameter (if it is set)
- Updated the updateOrCreateContactAndAccount helper to set this value
on created Contact records.
2026-02-25 15:18:14 -06:00
Eric 358d61192b Website: Create historical events for signups (#39429)
Closes: https://github.com/fleetdm/fleet/issues/38375

Changes:
- Added a new intent signal value to the create-historical-event helper
- Updated the signup action to create a historical event when new users
sign up.
2026-02-05 15:26:31 -06:00
Eric 8ca9abc5a0 Website: add attribution cookie and update CRM helper (#38324)
https://github.com/fleetdm/confidential/issues/13605

Changes:
- Updated the website's custom hook to set a `marketingAttribution`
cookie.
- Updated places where we use the update-or-create-contact-and-account
helper to pass in a requesting user's marketingAttribution cookie.
- Updated the update-or-create-contact-and-account helper to process
values from the marketingAttribution cookie.
2026-01-14 18:14:55 -06:00
Eric b9b4ba1cc9 Website: Update response headers (#36543)
Closes: https://github.com/fleetdm/confidential/issues/11257

Changes:
- Updated the website's custom hook to set security-related response
headers for GET and HEAD requests
2025-12-04 13:20:40 -06:00
Eric a2ec263591 Website: Fix ad attribution when creating historical event records (#32211)
Changes:
- Updated the custom hook to check the correct value when determining if
a website page view can be attributed to an ad.
2025-08-22 11:36:49 -05:00
Eric e90f6e463d Website: Update primary buying situations set by ads (#30757)
Changes:
- Updated the website's custom hook to set the new
primaryBuyingSituations values.
2025-07-10 16:31:07 -05:00
Eric ae7dac7e2b Website: add create-historical-event helper (#29435)
Closes: https://github.com/fleetdm/confidential/issues/10718
Related to: https://github.com/fleetdm/confidential/issues/10719

Changes:
- Created a new helper
(`sails.helpers.salesforce.createHistoricalEvent`) to create Historical
event records in our CRM.
- Updated the custom hook, receive-from-clay webhook, and
create-or-update-one-newsletter-subscription action to create historical
event records using the new helper.
2025-05-23 17:59:58 -05:00
Mike McNeil 242658183a Introducing sails.helpers.ai.satisfy() (#28590)
Constraint satisfaction for dummies like me
2025-04-26 15:16:07 -05:00
Eric 1df3270545 Website: Update CRM records created in custom hook (#28461)
Changes:
- Updated the Historical event crm records created by the website's
custom hook to include an `Event_type__c` value and to not set a
`Visited_on__c` timestamp.
2025-04-23 00:18:51 -05:00
Eric e0b0219a89 Website: Update start CTA for logged-out users (#27228)
Closes: https://github.com/fleetdm/confidential/issues/9975

Changes:
- Updated the start CTA to be collapsed by default for users who aren't
signed in.
2025-03-18 17:39:41 -05:00
Eric 695bf2900a Website: Update start CTA visibility (#26865)
Closes: #26754

Changes:
- Updated the start CTA on the website to be visible to logged out
users.
2025-03-06 16:34:43 -06:00
Eric 1eae4f6e1b Website split article page routes (#25149)
Closes: #23904

Changes:
- Replaced the regex routes that handle articles and article category
pages to have a separate route for each category
- Updated the build-static-content script to transform periods in
article filenames into dashes
- Added redirects for articles that have a changed URL
2025-01-07 11:43:36 -06:00
Eric 00c35aed11 Webiste: Update custom hook to validate githubRepoDRIByPath config variable (#24497)
Closes: #24399

Changes:
- Updated the website's custom hook to validate values in the
sails.config.custom.githubRepoDRIByPath config variable when the website
starts.
2024-12-09 16:33:20 -06:00
Eric ee1ee95907 Website: Add account to website page view CRM records (#23956)
Changes:
- Updated the custom hook to set an `account` value on new Fleet website
page view records created.
2024-11-19 14:35:12 -06:00
Eric 2d8ebb4388 Website: Update CRM helper and usage (#23670)
Changes:
- Updated the update-or-create-contact-and-account helper to update
created contact records with a psychological stage
- Updated places where we were using the
update-or-create-contact-and-account helper to set a contact source on
new records.
2024-11-11 12:35:49 -06:00
Eric b6a1127b60 Website: update custom hook (#23618)
Changes:
- Updated sails.LOOKS_LIKE_ASSET_RX
2024-11-07 11:09:55 -06:00
Eric 581a2f7a53 Website: update sails.LOOKS_LIKE_ASSET_RX (#23603)
Closes: https://github.com/fleetdm/fleet/issues/23598

Changes:
- Updated `sails.LOOKS_LIKE_ASSET_RX` to not match URLs for articles.
2024-11-06 16:08:35 -06:00
Eric 9d69f01c2b Website: Add website visit reason to page view records. (#23154)
Closes: #23107

Changes:
- Updated the custom hook to send `adAttributionString` to Fleet website
page view records if that value was set in a logged-in user's session
<30m before they visit a page.
2024-10-24 16:39:32 -05:00
Eric 77862664d5 Website: update CRM record creation in custom hook (#23013)
Closes: https://github.com/fleetdm/confidential/issues/8475

Changes:
- Updated the website's custom hook to not track Fleet website page view
records for new (<30 seconds old) user accounts.
2024-10-18 12:22:01 -05:00
Eric 697cfc59f7 Website: update CRM record creation in custom hook (#22923)
Closes: #22881

Changes:
- updated the website's custom hook to only create Fleet website page
view records if the requested URL will not redirect the user and to not
log warnings caused by duplicate records.
2024-10-14 21:13:13 -05:00
Eric 153148dbbc Website: Update CRM records for logged-in page views (#22638)
Closes: #21694

Changes:

- Updated the custom hook to run the
`update-or-create-contact-and-account` helper and create a fleet website
page view record in the background when logged-in users visit a page.
2024-10-11 12:06:35 -05:00
Eric b18f60cf03 Website: Track reason behind psychological stage changes in start flow. (#21483)
Changes:
- Updated the `update-or-create-contact-and-account` helper to support a
new input: `psychologicalStageChangedBy`, and to set the provided value
on contact records.
- Updated `save-questionnaire-progress` to set a
psychologicalStageChangedBy value when updating contact records.
2024-08-24 13:40:12 -06:00
Eric 637e5e1216 Website: Update /start questionnaire steps and add images (#21452)
Closes: #21417 
Closes: #21413
Closes: #21378 


Changes:
- Updated save-questionnaire-progress to return the user's current
psychological stage when a user submits a step of the /start
questionnaire
- Updated the /start questionnaire to display an image that changes as
the user's psychological stage progresses.
- Updated the first step of the /start questionnaire and gave users the
ability to go back to the first step.
- Added an option for Linux to the "what do you manage" question that is
asked to MDM-focused users
- Added a step for MDM-focused users filling out the /start
questionnaire
- Updated the /start CTA to show different images based on psychological
stage and to be visible to users who have not purchased a self-service
license
2024-08-21 11:54:06 -06:00
Eric e27a3bb851 Website: Update start questionnaire CTA visibility (#20206)
Closes: #20189

Changes:
- Made the CTA for the get started questionnaire visible to users who
have completed the "Thanks for checking out Fleet" step
- Updated the background of the image in the mobile start CTA.
- Updated the get started questionnaire to take users who have completed
the "Thanks for checking out Fleet" step to either the "What did you
think?" or "How was your deployment?" steps
2024-07-03 15:57:35 -05:00
Eric 80a9ffeb69 Website: add step to the /start questionnaire for users who don't want to use Fleet (#19514)
Closes: https://github.com/fleetdm/confidential/issues/6287

Changes:
- Added a new page to the /start questionnaire where users can let us
know they're not interested in using Fleet.
2024-06-05 10:52:25 +09:00
EricandMike Thomas bf239ecc78 Website: Add site-wide CTA to bring users back to the /start questionnaire (#19393)
Closes: #18530

Changes: 
- Added a collapsable sitewide CTA to bring users who have not completed
the get started questionnaire back to the /start page.
- Added a new action (`account/updateStartCtaVisibility`) to set a
timestamp of when the CTA will be visible (not collapsed) in a user's
session when they close the CTA

---------

Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
2024-05-31 18:44:13 -05:00
Mike McNeil 3df7a9232a Website: Remove utm parameter stripping for now (#19425) 2024-05-31 14:31:21 -05:00
Eric 502f2c9a38 Website: Update homepage personalization, add note to custom hook. (#18433)
Changes:
- Updated personalization on the integrations section of the homepage
for users with `vm` or `eo-security`.
- Added a `FUTURE:` note to the custom hook detailing how to use the
platform model to be smarter about sending requests to the Algolia
crawler.
2024-04-19 17:40:45 -05:00
Eric 5692598143 Website: update guaranteed locals in custom hook (#18296)
Closes: #18295

Changes:
- Updated the custom hook to set `res.locals` for HEAD requests to
prevent 500 errors when a request is sent to a page that references
`res.locals.me`
2024-04-15 19:51:50 -05:00
Eric 3e8ebf84cf Website: Reduce number of requests to the Algolia crawler (#18277)
Related to: #18242

Changes:
- Updated the request that is sent to the Algolia crawler to only be
sent from the `web.1` dyno in Heroku.
2024-04-15 14:03:52 -05:00
Mike McNeil 158931046e Handbook: shortlinks and personalization redirects (#18258) 2024-04-13 17:36:51 -05:00
Eric 51c59e59b8 Website: update personalization (#18075)
Changes:
- updated the custom hook to support clearing the
`primaryBuyingSituation` with a query string (`?utm_content=clear`)
- Updated the pricing page to pre-select a pricing table mode based on a
user's `primaryBuyingSituation`
- reordered content on and updated the /support page to personalize/hide
community slack links based on a user's `primaryBuyingSituation`
- Updated the meta description of the product category landing pages
- updated personalization based on `primaryBuyingSituation` on the
/contact page.
- Updated the title of the /queries page based on the user's
`primaryBuyingSituation`
- Added personalization to the product category landing pages.
2024-04-05 12:57:45 +09:00
Eric 302c594046 Website: update custom hook to prevent 500 error from HEAD requests. (#17331)
Changes:
- Updated the custom hook to set `res.locals.primaryBuyingSituation` for
HEAD requests to prevent 500 errors when `primaryBuyingSituation` is not
set to `undefined`.
2024-03-03 17:30:21 -06:00
Eric 4ed8a1d24f Website: Update personalization in custom hook (#17324)
Changes:
- Updated the custom hook to not set
`req.session.primaryBuyingSituation` as undefined if a user does not
have a `utm_content` query parameter.
2024-03-01 18:33:36 -06:00
Mike McNeilandEric ea5b8f8204 Handbook: Make the website feel more like home (#17317)
Further personalization for folks arriving from ads, so that the site
makes more sense to them

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2024-03-01 17:47:37 -06:00
Mike McNeil fc078d4b41 Website: Add personalization (#17296)
I didn't test it yet
2024-03-01 11:42:46 -06:00
Eric a684d42f67 Website: Add override sails.LOOKS_LIKE_ASSET_RX value (#11021)
Closes: #10984 

Changes:
- Added an override `sails.LOOKS_LIKE_ASSET_RX` value to the custom hook
that does not match paths that start with `/releases/`.
2023-04-12 11:10:46 -05:00
EricandMike McNeil 5fabe6ce2d Website: Update Fleet website search index when website server starts. (#9480)
Changes:
- Updated the custom hook to include a POST request to Algolia to
refresh the Fleetdm.com search index.

Co-authored-by: Mike McNeil <mikermcneil@users.noreply.github.com>
2023-01-25 10:09:41 -06:00
EricandMike McNeil 922da1592e Website: Disable caching /dist folder (#5596)
* Website: update custom hook

* update comment

* Update index.js

* lint fixes

Co-authored-by: Mike McNeil <mikermcneil@users.noreply.github.com>
2022-05-05 14:22:47 -05:00
Mike McNeil 27eae209fd Move fleetdm.com into main Fleet repo (#83)
* rename dir

* no need to install website or docs from npm

At some point, would also be nice to be able to exclude assets/ as well, and to only install a pre-built version of Fleet's frontend code

* Bring in fleetdm.com website

From https://github.com/fleetdm/fleetdm.com as of https://github.com/fleetdm/fleetdm.com/releases/tag/v0.0.21

* add procfile for heroku

Using https://github.com/timanovsky/subdir-heroku-buildpack

* avoid getting anybody's hopes up

* Create deploy-fleet-website.yml (#82)

* Create deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* update pjs with SPDX-like license expressions.  also fix repo URL

and remove package lock

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* remove dummy uri

* Dissect deploy script

* Update deploy-fleet-website.yml

* workaround for eslintrc nesting issue

* lint fixes

* forgot the .js

* add per-commit git config

* Update deploy-fleet-website.yml

* might as well remove that

* cleanup

* connect w/ heroku app and have it actually push

* fix bug I introduced in 578a1a01ffb8404aae869e05005e30a6ba2b2a95

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* the beauty, the glory, of javascript

* GH actions don't like "\n"

* Update deploy-fleet-website.yml

* restore \n chars from 0d45e568f693efba7d7072085bc98d72a482d9ae

hoping I was wrong in 0d45e568f693efba7d7072085bc98d72a482d9ae but see also https://github.community/t/what-is-the-correct-character-escaping-for-workflow-command-values-e-g-echo-xxxx/118465/5

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* Update deploy-fleet-website.yml

* rename script to prevent duplicate building

* Configure the real website

* clean up

* a test of the deploy workflow

* add handbook to npmignore

* I guess you could call this fixing a typo

* point workflow at master branch

* now clearly bogus: this completely unused version string
2020-12-02 14:48:03 -06:00