Commit graph

154 commits

Author SHA1 Message Date
kilo-code-bot[bot]
f47c0e5670
Add event UTM medium codes to source channel attribution (#43150)
## Summary

- Adds 9 event-related UTM medium codes (`mc`, `rc`, `le`, `ec`, `fe`,
`pe`, `se`, `wh`, `ws`) to the marketing attribution logic in
`update-or-create-contact-and-account.js`
- Maps these codes to the `'Event'` source channel, following the same
pattern used for Digital and Organic channels
- Adds friendly name mappings for each event code (e.g., `mc` → "Major
conference (MC)", `wh` → "Fleet hosted webinar (WH)")

### UTM Medium → Source Channel Mapping

| Code | Description | Source Channel |
|------|-------------|---------------|
| `mc` | Major conference | Event |
| `rc` | Regional conference | Event |
| `le` | Local event/meetup | Event |
| `ec` | Executive community | Event |
| `fe` | Field event/workshop | Event |
| `pe` | Partner event | Event |
| `se` | Speaking engagement | Event |
| `wh` | Fleet hosted webinar | Event |
| `ws` | Sponsored webinar | Event |

### Changes

The source channel determination logic now has three branches:
1. **Digital** — `ps`, `so`, `pm`, `cs`, `em` (unchanged)
2. **Event** — `mc`, `rc`, `le`, `ec`, `fe`, `pe`, `se`, `wh`, `ws`
(new)
3. **Organic** — everything else / no UTM medium (unchanged, remains the
default fallback)

Built for [John
Jeremiah](https://fleetdm.slack.com/archives/D0AGMBRKRR9/p1775584746996929)
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-04-07 18:11:38 -05:00
Eric
eed4fe1357
Website: Update CRM helper to set values on account (#42989)
Closes: https://github.com/fleetdm/confidential/issues/14516

Changes:
- Updated update-or-create-contact-and-account to set the number of
hosts on account records if it is provided.
- Updated the create-quote action to send details about the number of
hosts to the update-or-create-contact-and-account helper
2026-04-03 12:30:21 -05:00
Eric
addabc28bb
Website: Update self-service Fleet premium license form (#42488)
Closes: https://github.com/fleetdm/confidential/issues/14516 

Changes:
- Added inputs for individual platforms to the license form on
/new-license
- Updated contact descriptions set by the receive-from-stripe webhook
- Updated supported intentSignal values in the createHistoricalEvent
helper
- Updated the create-quote action to update contact descriptions and
create a historical event
2026-03-26 14:23:05 -05:00
Eric
7eb07b4d87
Website: Update accepted contactSource values in CRM helpers. (#41808)
Changes:
- Updated the accepted `contactSource` values in the
updateOrCreateContactAndAccount and
updateOrCreateContactAndAccountAndCreateLead helpers
2026-03-20 10:06:31 -05:00
Eric
80eec816b7
Website: Update descriptions set by CRM helper (#41917)
Closes: https://github.com/fleetdm/fleet/issues/41797

Changes:
- Updated the `updateOrCreateContactAndAccount` helper to include a date
timestamp (YYYY-MM-DD) and prepend updates to contact descriptions to
the existing description value.
2026-03-18 17:28:23 -05:00
kilo-code-bot[bot]
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
b4cd1d0425
Website: Update accepted intentSignal values in createHistoricalEvent helper (#41884)
Changes:
- updated the accepted `intentSignal` values in the
createHistoricalEvent helper
2026-03-17 14:32:11 -05:00
kilo-code-bot[bot]
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
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
68617804b2
Website: add script to report Render trial usage (#40830)
Closes: https://github.com/fleetdm/confidential/issues/13687

Changes:
- Added a new script: `send-trial-usage-information-to-crm`, A script
that reports the latest usage information for Render trial Fleet
instances created and assigned to users by the website.
- Updated the updateOrCreateContactAndAccount helper to accept a
`trialInstanceUsageDetails` input and set provided values on contact
records.
2026-03-03 12:10:28 -06: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
be54839d3c
Website: upgrade jsforce dependency (#39999)
Changes:
- upgraded the version of jsforce used by the website (`1.11.1` »
`3.10.14`)
- Updated the error handling in the updateOrCreateContactAndAccount
helper to work with the updated version of jsforce
2026-02-17 17:17:24 -06:00
Eric
9cb420b77c
Website: Update accepted contact source values (#39697)
Changes:
- Updated the accepted `contactSource` values in the
updateOrCreateContactAndAccount helper
2026-02-11 13:18:09 -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
df3ba51dab
Website: Update get-enriched helper (#39347)
Closes: https://github.com/fleetdm/fleet/issues/39332

Changes:
- Updated the get-enriched helper to not use a provided email address if
the domain is included in the `bannedEmailDomainsForWebsiteSubmissions`
config value, and to not attempt to parse `null` website values returned
from coresignal
2026-02-04 14:53:41 -06: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
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
65f313d153
Website: update clay webhook inputs and historical event helper (#38601)
Closes: https://github.com/fleetdm/fleet/issues/38500

Changes:
- Added support for a `relatedCampaign` input to the receive-from-clay
webhook.
- Updated the `create-historical-event` helper to set `relatedCampaign`
on new historical event records (if provided)
2026-01-21 16:11:57 -06:00
Eric
7759fa71f7
Website: Update values set in CRM helper (#38559)
Changes:
- Updated the "Source channel detail" and "Most recent channel detail"
values set in the update-or-create-contact-and-account helper to match
the updated accepted values
2026-01-20 18:47:18 -06:00
Sam Pfluger
b32681937c
Consolidate event types in Salesforce integration (#38466) 2026-01-17 21:44:11 -06:00
Eric
92c89f37d7
Website: Update CRM helper (#38374)
Changes:
- Updated a variable name to be correct in the
update-or-create-contact-and-account helper
2026-01-15 09:51:10 -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
Mike McNeil
0b0a81c2e6
Differentiate job applicants etc from demo requests (#38132)
Co-authored-by: Eric <eashaw@sailsjs.com>
2026-01-09 16:14:34 -06:00
Sam Pfluger
fc6da5c233
Fix sentence case (#34979) 2025-10-29 22:43:58 -05:00
Eric
b04ba96929
Website: Update enrichment helper queries when organization is provided. (#34949)
Changes:
- Updated the get-enriched helper to only send a single query for
organization name (if `organization` is provided).
2025-10-29 14:10:44 -05:00
Eric
11984cdf6f
Website: Improve results returned by get-enriched helper (#34896)
Closes: https://github.com/fleetdm/confidential/issues/12790

Changes:
- Updated the get-enriched helper to use a different Coresignal API to
search for company information.
2025-10-28 16:23:30 -05:00
Eric
351ac2b845
Website: Update created account record type (#34473)
Changes:
- Updated the `update-or-create-contact-and-account` helper to set a
`Type` on new account records created.
2025-10-17 16:40:21 -05:00
Sam Pfluger
b1943c2da7
Add 'Contributed to fleetdm/fleet' intent signal and contact source (#34421)
Introduces a new event type for GitHub contributions to the
fleetdm/fleet repository across webhook controller and Salesforce helper
modules. This enables tracking and handling of user contributions in
addition to existing GitHub events.
2025-10-17 00:00:15 -05:00
Sam Pfluger
e02563dbad
Add GitHub engagement types to activity lists (#34337)
Added 'GitHub - Stared fleetdm/fleet' and 'GitHub - Forked
fleetdm/fleet' to the activity type arrays in webhook and Salesforce
helper modules to track new forms of user engagement.
2025-10-15 23:33:09 -05:00
Eric
30abc992fb
Website: fix typo in error handler in create-historical-event helper (#33886)
Changes:
- Fixed a typo in an error returned by the create-historical-event
helper. (`inpsect` » `inspect`)
2025-10-06 14:50:59 -05:00
Eric
292c23497f
Website: Update Android Proxy endpoints to return 404 responses if an Android Enterprise are not managed by Fleet (#33816)
Related to: https://github.com/fleetdm/fleet/issues/33266

Changes:
- Added a new helper
`sails.helpers.androidProxy.getIsEnterpriseManagedByFleet`. This helper
returns `true` if a provided Android Enterprise ID is present in the
list of all Android Enterprises managed by Fleet, or `false` if it is
not in the list.
- Updated `create-android-enrollment-token`,
`create-android-signup-url`, and `modify-android-policies` to return a
404 response to the requesting Fleet instance if their Android
Enterprise is not managed by Fleet.
2025-10-06 12:50:42 -05:00
Sam Pfluger
9604e64f28
Create "Marketing-led" and "Sales-led" intent signals (#33845) 2025-10-04 19:57:05 -05:00
Sam Pfluger
e0d27a808d
Added intent signals (#33721)
Added intent signals for:
- Let's get you set up
- Talk to us
- Submitted contact form

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2025-10-01 14:28:23 -05:00
Sam Pfluger
84715f4b19
Update intentSignal (#33183) 2025-09-18 15:28:01 -05:00
Sam Pfluger
9fec274d5e
Add contact source (#33178)
Add "Event - Engaged with Fleetie at event" contact source
2025-09-18 14:05:22 -05:00
Eric
3c6baf142a
Website: Update CRM helper use global domain for new accounts (#32559)
Related to: https://github.com/fleetdm/confidential/issues/11892

Changes:
- Updated the update-or-create-contact-and-account helper to use the
prompt helper to get a global domain for a company, and to use that
global domain when searching for and creating new account records.
2025-09-08 12:47:49 -05:00
Eric
68005bd44f
Website: update get-enriched helper. (#32480)
Related to https://github.com/fleetdm/confidential/issues/12052

Changes:
- updated the get-enriched helper to use the coresignal's new search API
endpoints
- Updated the `intercept()`s in the get-enriched helper to log warnings
if an error is returned by the coresignal API
2025-08-29 18:29:08 -05:00
Victor Lyuboslavsky
a07f8f5344
Track SDLC metrics. (#31409)
Fixes #30483 

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

## Summary by CodeRabbit

* **New Features**
* Added a new webhook endpoint to track GitHub Projects v2 item status
changes and record engineering metrics.
* Integrated with Google BigQuery for storing and analyzing issue status
transition data.

* **Chores**
* Introduced a new POST API route for receiving GitHub Projects v2 item
events.
* Added configuration options for GitHub webhook secrets and Google
Cloud service account keys (commented out for future use).
  * Added a new dependency for Google BigQuery integration.

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

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2025-08-19 13:24:54 -05:00
Eric
de8bac0c4f
Website: Update returned value from create-historical-event helper. (#30003)
Changes:
- Updated the return value of the create-historical-event helper.
2025-06-13 15:15:25 -05:00
Eric
13eeebe548
Website: Add Microsoft compliance proxy endpoints. (#27403)
Changes:
- Created a new database model: `MicrosoftComplianceTenant`. A model
that stores information about complaince tenants
- Added `/policies/is-cloud-customer`: a policy that blocks requests to
microsoft proxy endpoints if a `MS API KEY` header is missing or does
not match a new config variable
(`sails.custom.config.cloudCustomerCompliancePartnerSharedSecret`)
- Added `microsoft-proxy/create-compliance-partner-tenant`: an action
that creates a database record for a new compliance tenant and generates
an API key that is used to authenticate future requests to microsoft
proxy endpoints for an entra tenant.
- Added `microsoft-proxy/get-compliance-partner-settings`: an action
that returns information about Fleet's complaince partner entra
application and the entra tenant's admin consent status (whether or not
a tenant's entra admin has granted permissions to Fleet's compliance
partner application)
- Added `microsoft-proxy/get-tenants-admin-consent-status`: an action
that updates the admin consent status of a compliance tenant record.
- Added `microsoft-proxy/setup-compliance-partner-tenant`: an action
that provisions a compliance tenant, creates a complaince policy for
macOS devices assigns the created policy to the built-in "All users"
user group on the tenants entra instance.
- Added `microsoft-proxy/update-one-devices-compliance-status`: an
action that receives information about a device on a compliance tenant's
Fleet instance, sends that information to their Entra instance, and
returns the messsage ID returned by the asynchronus Entra API.
- Added `microsoft-proxy/get-one-compliance-status-result`: an action
that returns the result of a compliance status update from the Entra
API.
- Added `sails.helpers.microsoft-proxy.get-access-token-and-api-urls` A
helper that gets an access token for a tenant's entra instance and the
URLs of the API endpoints the microsoft proxy actions use for a tenant.
- Added `scripts/send-entra-heartbeat-requests` A script that will run
daily to keep all microsoft compliance integrations provisioned.
-

---------

Co-authored-by: Lucas Rodriguez <lucas@fleetdm.com>
2025-06-11 13:01:36 -05:00
Eric
1929c77574
Website: update CRM helper. (#29811)
Changes:
- Fixed a bug in the create-or-update-contact-and-account help that was
causing the email value of contacts to be overwritten
2025-06-06 18:52:56 -05:00
Eric
6a70c31024
Website: Update CRM helper to handle duplicate record errors. (#29808)
Closes: https://github.com/fleetdm/confidential/issues/10697

Changes:
- Updated the update-or-create-contact-and-account helper to handle
duplicate record errors returned from the CRM. It will now use the first
duplicate record returned by the CRM and update it so it will be
correctly matched on subsequent runs of the helper.
2025-06-06 16:21:43 -05:00
Mike McNeil
d02fde22cf
Add ai.improvePrompt() (#29660) 2025-05-31 00:30:42 -04: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
Eric
9ef9dafbea
Website: Update supported contactSource values in update-or-create-contact-and-account helper. (#29371)
Changes:
- Added a new supported contactSource value to the
`update-or-create-contact-and-account` helper: `LinkedIn - Liked the
LinkedIn company page`
2025-05-21 17:38:39 -05:00
Eric
ae6f3788fd
Website: add receive-from-clay webhook (#29301)
ChangeS:
- Added a new webhook (`receive-from-clay`) that creates historical
event CRM records.
- Updated the update-or-create-contact-and-account helper to accept
three new contactSource values and a jobTitle input.
2025-05-20 15:29:30 -05:00
Mike McNeil
ee880d953b
Website: Trivial code shortening (#29231)
Just a nit

---------

Co-authored-by: Eric <eashaw@sailsjs.com>
2025-05-16 18:25:06 -05:00
Mike McNeil
94aa200424
More ai helpers (#29027)
I will upstream these ahead of next week into sails-hook-organics.
2025-05-12 17:01:43 -05:00
Eric
7ad72ad47c
Website: update enrichment helper to use new API routes (#28867)
Changes:
- Updated the HTTP requests in the get-enriched helper to use
Coresignals' new API routes and authorization method.
2025-05-06 12:19:25 -05:00