Commit Graph
653 Commits
Author SHA1 Message Date
Isabell Reedy 89969c1eed Update receive-from-github.js (#42181) 2026-03-20 19:00:57 +00:00
262234f5ac Fix fleetdm.com RSS feed to pass W3C Feed Validator (#42068)
## Summary

Fixes all errors and warnings reported by the [W3C Feed Validation
Service](https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Ffleetdm.com%2Frss%2Farticles)
for the `/rss/articles` endpoint (and all other `/rss/:categoryName`
endpoints).

## Changes

Only one file modified: `website/api/controllers/download-rss-feed.js`

### Errors fixed
- **`lastBuildDate` not RFC-822 format**: Changed from `new
Date(Date.now())` (which produces JS `toString()` format like `Thu Mar
19 2026 14:45:30 GMT+0000 (Coordinated Universal Time)`) to `new
Date().toUTCString()` (which produces RFC-822 format like `Thu, 19 Mar
2026 14:45:30 GMT`)
- **`pubDate` not RFC-822 format** (431 occurrences): Changed from
`.toJSON()` (ISO 8601) to `.toUTCString()` (RFC-822)
- **Missing channel `<link>` element**: Added `<link>` element at the
channel level pointing to the category page

### Warnings fixed
- **Missing `guid` on items** (431 occurrences): Added `<guid
isPermaLink="true">` to each item using the article's permalink URL
- **Missing `atom:link` with `rel="self"`**: Added `xmlns:atom`
namespace to the `<rss>` element and an `<atom:link href="..."
rel="self" type="application/rss+xml"/>` element in the channel

### Additional fix
- Fixed a minor bug where the image `<link>` URL was missing a `/`
separator between the domain and category name (`fleetdm.comarticles` →
`fleetdm.com/articles`)

### Not addressed
- The "Invalid HTML: Named entity expected" warning about `&#39;`
entities in descriptions. This is produced by Lodash's `_.escape()`
which correctly escapes apostrophes for XML content. The `&#39;` entity
is valid XML — the validator flags it only in an HTML parsing context,
and it does not affect feed validity or reader interoperability.

---

Built for [Brock
Walters](https://fleetdm.slack.com/archives/C097P4TAPRR/p1773932018039599)
by [Kilo for Slack](https://kilo.ai/features/slack-integration)

---------

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Eric <eashaw@sailsjs.com>
2026-03-20 11:42:26 -05:00
Eric f19cc81772 Website: automatically add case study links to the /customers page (#42088)
Closes: https://github.com/fleetdm/fleet/issues/41799 

Changes:
- Added support for a new required meta tag for anonymous case study
articles: `cardTitleForCustomersPage`. The value of this meta tag is
used as the title of the automatically generated card link for the
article on the /customers page.
- Added support for a new meta tag for anonymous case study articles:
`cardBodyForCustomersPage`. If provided, the card link for the article
will use this value for the body text, if not provided, the card link
will display the `articleTitle` meta tag value.
- Updated the /customers page to automatically create card links for
case study articles that have `useBasicArticleTemplate` and
`cardTitleForCustomersPage` meta tags.
2026-03-19 13:19:22 -05:00
Eric ab3e5ce7f3 Website: Update GitOps workshop page to show events without a venue set. (#41956)
Changes:
- Updated the GitOps workshop page to show events with no venue set.
2026-03-18 11:10:04 -05:00
Eric 4bffa64e14 Website: Update gitops-workshop view action (#41950)
Changes:
- Updated the GitOps workshop page's view action to omit events without
a venue set. (Note: this is a quick fix to resolve 500 errors on that
page, and I will create a follow up PR to display events without a venue
set)
2026-03-18 10:21:21 -05:00
05f2daad4b Add 'Registered for a conference' intent signal (#41919)
## Summary

- Adds `'Registered for a conference'` to the `intentSignal` `isIn`
array in three files:
- `website/api/helpers/salesforce/create-historical-event.js` — between
`'Signed up for Fleet event'` and `'Engaged with Fleetie at event'`
- `website/api/controllers/webhooks/receive-from-clay.js` — between
`'Signed up for Fleet event'` and `'Engaged with Fleetie at event'`
-
`website/api/helpers/salesforce/update-or-create-contact-and-account.js`
— added to the `isIn` array
- This replaces the incorrect approach in PR #41918, which added the
signal to the handbook markdown table instead of the code where intent
signals are validated.

---

Built for [Sam
Pfluger](https://fleetdm.slack.com/archives/D0AF8QFBVHB/p1773789580384389?thread_ts=1773788922.891409&cid=D0AF8QFBVHB)
by [Kilo for Slack](https://kilo.ai/features/slack-integration)

---------

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com>
2026-03-18 08:21:50 -05:00
Eric 38d89d6637 Website: Remove release section in GitHub webhook (#41898)
Changes:
- Commented out the section of the GitHub webhook that handles "release"
webhook events. The Zapier automation triggered by the webhook has been
turned off.
2026-03-17 16:19:27 -05:00
EricandLucas Manuel Rodriguez 5a266bfaca Website: Update Microsoft proxy endpoint to support windows devices (#41780)
For: https://github.com/fleetdm/fleet/issues/39489

Changes:
- Updated the `update-one-devices-compliance-status` Microsoft proxy
endpoint to support compliance status updates for Windows devices
enrolled in Entra.

---------

Co-authored-by: Lucas Manuel Rodriguez <lucas@fleetdm.com>
2026-03-17 13:03:32 -05:00
f7c20c4731 Switch query generator to use Anthropic Sonnet on the backend (#41521)
## Summary

Closes #41466

- Adds Anthropic Claude API support to the `prompt.js` AI helper,
detecting `claude-*` model names and routing to the Anthropic Messages
API (`https://api.anthropic.com/v1/messages`) with proper authentication
headers
- Switches both LLM calls in the query generator
(`get-llm-generated-sql.js`) from OpenAI models
(`gpt-4o-mini-2024-07-18` for schema filtration, `o3-mini-2025-01-31`
for SQL generation) to `claude-sonnet-4-6-20260218`
- Adds `anthropicSecret` config placeholder in `custom.js` (set via
`sails_custom__anthropicSecret` env var in production)
- Updates the query generator UI to reference "Anthropic" instead of
"OpenAI"

### Changes

| File | What changed |
|------|-------------|
| `website/api/helpers/ai/prompt.js` | Added Anthropic API branch
alongside existing OpenAI logic; system prompts use Anthropic's
top-level `system` parameter |
| `website/api/controllers/query-generator/get-llm-generated-sql.js` |
Both model references changed to `claude-sonnet-4-6-20260218` |
| `website/config/custom.js` | Added `anthropicSecret` config
placeholder |
| `website/views/pages/admin/query-generator.ejs` | Updated copy from
"OpenAI" to "Anthropic" |

### Deployment notes

The `sails_custom__anthropicSecret` environment variable must be set
with an Anthropic API key before deploying this change.

---

Built for
[mikermcneil](https://fleetdm.slack.com/archives/D0AFASLRHNU/p1773278374183489?thread_ts=1773271495.702919&cid=D0AFASLRHNU)
by [Kilo for Slack](https://kilo.ai/features/slack-integration)

---------

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Eric <eashaw@sailsjs.com>
2026-03-16 11:48:33 -05:00
Mike ThomasandEric 63e6375c10 Renamed fleet-gitops => infrastructure-as-code (#41520)
- Renamed fleet-gitops => infrastructure-as-code
- Changed the URL (maintaining backwards compatibility)

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2026-03-12 12:54:17 +09:00
Eric bd9867c7b6 Website: update error handling in create-vanta-authorization-request (#41483)
Changes:
- Updated the create-vanta-authorization-request action to return a
`fleetInstanceNotResponding` response if requests fail with a 404 status
code.
2026-03-11 13:53:49 -05:00
Eric 46bc7dc880 Website: add whitepaper article template page (#41405)
Changes:
- Updated `build-static-content` to support a new article category:
`whitepaper`
- Added a new article template page: `basic-whitepaper.ejs`.
- Added `deliver-whitepaper-download-request`, an action that
creates/updates a contact and account in the CRM and creates a
historical event when a user submits a form to download a whitepaper.
- Updated the "News" link in the website's header navigation to be
"Resources / Blog", and changed the link to /articles
- Added a link to the whitepapers category page (/whitepapers) to the
side bar navigation on article category pages
- Added a whitepaper article: "Modern endpoint management: Managing
devices as code"
2026-03-11 12:37:23 -05:00
Eric 4101aa4b36 Website: Add note about using req.body in android proxy endpoints (#41186)
Closes: https://github.com/fleetdm/fleet/issues/39688

Changes:
- Added a note to android proxy endpoints that forward `req.body` to the
Android management API.
2026-03-06 18:06:25 -06:00
Isabell Reedy ddf7796229 Update receive-from-github.js (#41170) 2026-03-06 18:47:46 -05:00
Eric bafbc05f6d Website: Add support for new usage statistics (#40879)
Closes: https://github.com/fleetdm/fleet/issues/39836

Changes:
- Added `fleetMaintainedAppsWindows` and `fleetMaintainedAppsMacOS`
attributes to the HistoricalUsageSnapshot model
- Added `fleetMaintainedAppsWindows` and `fleetMaintainedAppsMacOS` as
inputs to the receive-usage-analytics webhook


Note: This pull request requires database migrations and should only be
merged after the website's database is updated while it is in
maintenance mode.
2026-03-06 07:41:50 -06:00
Eric 26e6331528 Website: update testimonials on customers page (#40872)
Closes https://github.com/fleetdm/fleet/issues/39906

Changes:
- Updated the testimonials shown on the /customers page
2026-03-03 13:10:52 -06:00
EricandAshish Kuthiala c6468b598d Website: add Linux management page (#40869)
Closes: https://github.com/fleetdm/confidential/issues/13312

Changes:
- Added /linux-management
- Updated the "Solutions" dropdown in the website's header navigation to
link to the new page.

---------

Co-authored-by: Ashish Kuthiala <53918208+akuthiala@users.noreply.github.com>
2026-03-03 12:17:37 -06:00
Martin Angers 53c48dea51 Website: implement android proxy endpoint for create webapp (#40059) 2026-03-03 08:23:19 -05:00
Eric 48029fa29f Website: Update redirects in basic article view action. (#40833)
Changes:
- Updated the behavior of the view-basic-article action to fix redirects
for article URLs with upper case letters.
2026-03-02 17:31:33 -05:00
EricandMike Thomas 84b9027148 Website: update case study articles (#40567)
Closes: https://github.com/fleetdm/fleet/issues/40161
Closes: https://github.com/fleetdm/confidential/issues/14508

Changes:
- Added support for a new meta tag (`<meta
name="useBasicArticleTemplate" value="true">`) that will be used to
determine which template case study articles use.
- Updated the build-static-content script to not require
`summaryChallenge`, `summarySolution`, `summaryKeyResults`, and
`companyLogoFilename` meta tags for case study articles with a
`useBasicArticleTemplate` meta tag.
- Updated the view-case-study action to display case study articles with
a `useBasicArticleTemplate` meta tag on the basic-article template page

---------

Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
2026-02-27 14:33:42 -06:00
Mike McNeil 6cd23c0ef1 Set to aware instead of intrigued (precursor for retiring "intrigued") (#40703) 2026-02-27 12:29:41 -06:00
Eric 08d3e57759 Website: add /deployment page (#40455)
Closes: https://github.com/fleetdm/confidential/issues/14327

Changes:
- Added a /deployment page
- Added a link to the page in the "Solutions" navigation dropdown.
2026-02-25 13:34:18 +09:00
Eric 274abc6cb0 Website: update android proxy error handling (#40140)
Related to: https://github.com/fleetdm/fleet/issues/40127

Changes:
- Updated errors logged by Android proxy endpoints to include more
information about the error.
- Added a `deviceNoLongerManaged` exit to the `delete-android-device`
endpoint that is used when the Google API returns a "Device is no longer
being managed" error.
- Added a `policyNotFound` exit to the `modify-android-policies` and
`modify-enterprise-app-policy` endpoints that is used when the Google
API returns a 404 response
- Added a `invalidPolicyName` exit to the `modify-android-device`
endpoint that is used when the Google API returns an error related to
the policy name sent in the request body.
2026-02-19 17:46:41 -06:00
Eric b83aed2537 Website: Create admin page for resetting Fleet Premium trials (#39980)
Changes:
- Added /admin/reset-trial, a page where website admins can reset local
Fleet Premium trials.
- Added a link to the reset trial page to the navigation on admin pages.
2026-02-17 11:59:30 -06:00
Eric baada0741f Website: Update GitHub webhook exits (#39940)
Changes:
- Added a new exit to the receive-from-github webhook that is used when
a provided `botSignature` does not match the `githubBotWebhookSecret`
config variable
2026-02-16 15:07:30 -06:00
Martin Angers 81b5d7b04e Website: return 404 if Android enterprise application is not found (#39935) 2026-02-16 15:14:29 -05:00
Martin Angers c2a2b0d62a Website: add remove enterprise apps Android proxy endpoint (#39633) 2026-02-16 13:17:31 -05:00
Eric 75ffd8b12f Website: Update login/register flow, add Fleet UI background to /try and /login (#39290)
Closes: https://github.com/fleetdm/fleet/issues/36465
Closes: https://github.com/fleetdm/fleet/issues/36467
Related to: https://github.com/fleetdm/confidential/issues/14254

Changes:
- Updated "Try it yourself" links to go to the `/try` page (Which
redirects users who aren't logged in to the /login page)
- Removed the `<signup-modal>` and `<signup-button>` components
- Removed the route for the /register page, and added a redirect to go
to /login
- Updated the /login page to have the signup form, and to match the
latest wireframes
- Updated the /try page to have a fake Fleet UI as a background
(previously an image)
2026-02-10 12:32:49 -06:00
Eric 9dd7419e12 Website: Update android proxy get-enterprise-applications endpoint (#38972)
Changes:
- Updated the `get-enterprise-applications` Android proxy endpoint to
use the `enterprises.applications.get` method (It is currently using the
enterprises.devices.get` method)
- Updated errors returned by the `get-enterprise-applications` endpoint
to include more information from the error returned by Google.
2026-02-09 17:25:56 -06:00
Isabell Reedy 3b62d76272 Update receive-from-github.js (#39504) 2026-02-07 00:04:17 -06:00
Eric 55f7c1a963 Website: Reduce noise from vpp proxy endpoint (#39490)
Changes:
- Updated the get-vpp-app-metadata endpoint to only log errors returned
from the Apple API related to authentication
2026-02-06 12:05:43 -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 2726843403 Website: Update deliver-gitops-workshop-request (#39333)
Closes: https://github.com/fleetdm/confidential/issues/13968

Changes:
- Updated the `deliver-gitops-workshop-request` action to create a
historical event record
- Added a new intent signal to the create historical event helper
2026-02-05 15:08:50 -06:00
Eric fbc1866c3f Website: Update exits and logged errors in create-vanta-authorization-request (#39405)
Closes: https://github.com/fleetdm/fleet/issues/39401

Changes:
- Added a new exit to the create-vanta-authorization-request action that
is used when a request to a Fleet instance fails with a `403 Forbidden`
response.
- Updated logged errors in create-vanta-authroization-request to include
more information about the request.
2026-02-05 12:18:07 -06:00
Eric b52b067ea2 Website: follow-up changes from website review session (#39200)
Changes:
- Updated the category for comparison articles (`compare` »
`comparison`)
- Updated article meta tag validation and how URLS of comparison
articles are built
- Updated the view action for comparison articles to set a meta title
and description
2026-02-02 17:46:35 -06:00
Eric ee8c122c4e Website: Update GitOps workshop request form (#39174)
Closes: https://github.com/fleetdm/confidential/issues/13993

Changes:
- Updated the GitOps workshop request form to request the user's work
email address, and updated the denylist of domains used by the
`deliver-gitops-workshop-request` action.
2026-02-02 17:29:05 -06:00
Eric 5acc897f8d Website: Update testimonials page layout and URL (#39114)
Closes: https://github.com/fleetdm/fleet/issues/38472

Changes:
- Updated the URL of the testimonials page to be /customers
- Added a redirect for /testimonials
- Updated the layout and content of the /customers page to match the
latest wireframes
- Updated links to the /testimonials page to go to /customers
- Changed the "Customers" dropdown in the website nav to be a link to
the /customers page.
2026-02-02 20:52:17 +09:00
Eric b3fcb2c7db Website: update clay webhook (#39068)
Changes:
- Updated the clay webhook to only trim LinkedIn URLs if one is
provided.
2026-01-30 10:33:45 -06:00
Eric 43cbf8d7ff Website: fix event times on GitOps workshops page (#39067)
Changes:
- Updated the view action for the /gitops-workshop page to use UTC
timestamps when building the event details for that page.
2026-01-30 10:15:06 -06:00
Sam PflugerandEric 54ba38716c Change linkedinUrl requirement to optional (#39033)
@eashaw trying to fire this when I don't have a LinkedIn. Any
objections?

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2026-01-29 18:01:24 -06:00
Eric cc865b2bcd Website: update sitemap and new pages (#39009)
Changes:
- Added new(/missing) pages to the website's sitemap
- Added the signup modal to comparison pages and the GitOps workshop
page.
2026-01-29 10:29:55 -06:00
EricandMike Thomas 5160095f78 Website: Add Fleet GitOps page (#38974)
Changes:
- Added a Fleet GitOps page (/fleet-gitops)
- Added a link to the new page in the "Solutions" dropdown to the
website's header navigation

---------

Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
2026-01-29 10:08:42 +09:00
Eric cf2411e40a Website: update article category name (#38900)
Changes:
- updated the name of the catch all article category on the website
(blogs » blog)
2026-01-28 10:01:57 -06:00
Jahziel Villasana-Espinoza 670f7dbdb5 fail gracefully when profile is invalid (#38899)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #35211 

# Checklist for submitter

- [x] QA'd all new/changed functionality manually
2026-01-28 10:57:27 -05:00
EricandMike Thomas e65035a5d9 Website: add comparison article template and comparison article (#38893)
Closes: https://github.com/fleetdm/confidential/issues/13291

Changes:
- Updated the `build-static-content` script to add support for a new
article category: `compare`
- Added a new template page for comparison articles
- Added a Fleet vs. Jamf comparison article

---------

Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
2026-01-28 22:04:09 +09:00
Eric cf8b461e5d Website: add GitOps workshop landing page. (#38812)
Changes:
- Added a landing page that has links to upcoming citops workshops, and
a link to a form where users can request a GitOps workshop.
- Updated the contact page to display a GitOps workshop request form for
users who are linked to it from the GitOps workshop landing page.
- Added `deliver-gitops-workshop-request`, an action that sends details
of GitOps workshop request submissions to Salesforce.
- Added a new helper that creates campaign member objects in Salesforce.
- Added two new config variables used to get event details from the
Eventbrite API.
2026-01-27 22:18:46 +09:00
Eric 8f1f42a5c9 Website: Update GitHub webhook reviews (#38780)
Closes: https://github.com/fleetdm/fleet/issues/38750

Changes:
- Updated the website's GitHub webhook to not attempt to approve pull
requests opened by fleet-release
2026-01-26 12:16:48 -06:00
Eric 4cae77302a Website: update article category page (#38707)
Related to: https://github.com/fleetdm/confidential/issues/13527

Changes:
- Changed the name of the /articles page to "Blogs"
- Updated the blogs category to exclude guides
- Added a link to /guides to the sidebar on article category pages
2026-01-23 16:48:43 -06:00
Eric c4f8ded657 Website: Update values to match CRM picklist values (#38734)
Changes:
- Updated the accepted `intentSingal` values in the receive-from-clay
webhook and the createHistoricalEvent helper to match the picklist
values in Salesforce
- updated a "most recent/source channel details" value set in the
updateOrCreateContactAndAccount helper to match the picklist value in
Salesforce.
2026-01-23 15:35:33 -06:00
Eric 40107d247c Website: Update deliver-contact-form-message (#38721)
Changes:
- Updated the `deliver-contact-form-message` action to run CRM helpers
and send the contact form email message in the background.
2026-01-23 15:31:30 -06:00