Website: Update pricing page (#11910)
Changes: - Updated the pricing page to match the latest wireframes. - Updated the features in `pricing-features-table.yml` - Updated `build-static-content.js` to remove support for the Ultimate tier in `pricing-features-table.yml` --------- Co-authored-by: Mike Thomas <mthomas@fleetdm.com>
This commit is contained in:
@@ -18,6 +18,9 @@
|
||||
- name: Zero-touch setup for macOS computers
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
- name: Safely execute remote scripts
|
||||
tier: Premium
|
||||
comingSoon: true
|
||||
- name: End-user macOS update reminders (via Nudge)
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
@@ -50,9 +53,6 @@
|
||||
- name: Phone and video call support
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
- name: Platinum support
|
||||
tier: Ultimate
|
||||
comingSoon: false
|
||||
- categoryName: Inventory management
|
||||
features:
|
||||
- name: Secure REST API
|
||||
@@ -90,9 +90,6 @@
|
||||
- name: Scope transparency
|
||||
tier: Free
|
||||
comingSoon: false
|
||||
- name: Multiple teams
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
- categoryName: Security and compliance
|
||||
features:
|
||||
- name: Single sign on (SSO, SAML)
|
||||
@@ -107,9 +104,12 @@
|
||||
- name: Role-based access control
|
||||
tier: Free
|
||||
comingSoon: false
|
||||
- name: Audit log
|
||||
tier: Premium
|
||||
- name: Ship logs to Splunk, Snowflake, and more
|
||||
tier: Free
|
||||
comingSoon: false
|
||||
- name: Programable audit log
|
||||
tier: Premium
|
||||
comingSoon: true
|
||||
- name: Just-in-time (JIT) provisioning
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
@@ -164,7 +164,7 @@
|
||||
comingSoon: false
|
||||
- categoryName: Deployment
|
||||
features:
|
||||
- name: Self-managed
|
||||
- name: Self-hosted
|
||||
tier: Free
|
||||
comingSoon: false
|
||||
- name: Deployment tools (Helm, Terraform)
|
||||
@@ -173,15 +173,15 @@
|
||||
- name: Configure osquery startup flags remotely
|
||||
tier: Free
|
||||
comingSoon: false
|
||||
- name: Autoupdate osquery agents
|
||||
- name: Auto-update osquery agents
|
||||
tier: Free
|
||||
comingSoon: false
|
||||
- name: Self-managed autoupdate registry
|
||||
- name: Self-managed auto-update registry
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
- name: Manage osquery extensions remotely
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
- name: Managed Cloud
|
||||
tier: Ultimate
|
||||
comingSoon: false
|
||||
tier: Premium
|
||||
comingSoon: false
|
||||
-25
@@ -3,11 +3,7 @@ parasails.registerPage('pricing', {
|
||||
// ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣
|
||||
// ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
|
||||
data: {
|
||||
formData: {},
|
||||
estimatedCost: '', // For pricing calculator
|
||||
estimatedUltimateCostPerHost: 7,
|
||||
displaySecurityPricingMode: false, // For pricing mode switch
|
||||
estimatedUltimateCostPerHostHasBeenUpdated: false,
|
||||
},
|
||||
|
||||
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
|
||||
@@ -29,26 +25,5 @@ parasails.registerPage('pricing', {
|
||||
window.HubSpotConversations.widget.open();
|
||||
}
|
||||
},
|
||||
updateEstimatedTotal: function() {
|
||||
let total =
|
||||
(7 * (this.formData.macos ? this.formData.macos : 0)) +
|
||||
(7 * (this.formData.windows ? this.formData.windows : 0)) +
|
||||
(2 * (this.formData.linux ? this.formData.linux : 0)) +
|
||||
(2 * (this.formData.other ? this.formData.other : 0));
|
||||
let totalNumberOfDevices =
|
||||
(1 * (this.formData.macos ? this.formData.macos : 0)) +
|
||||
(1 * (this.formData.windows ? this.formData.windows : 0)) +
|
||||
(1 * (this.formData.linux ? this.formData.linux : 0)) +
|
||||
(1 * (this.formData.other ? this.formData.other : 0));
|
||||
this.estimatedCost = Number(total);
|
||||
if(totalNumberOfDevices < 1){
|
||||
this.estimatedUltimateCostPerHost = 7;
|
||||
this.estimatedUltimateCostPerHostHasBeenUpdated = false;
|
||||
} else {
|
||||
this.estimatedUltimateCostPerHost = this.estimatedCost / totalNumberOfDevices;
|
||||
this.estimatedUltimateCostPerHostHasBeenUpdated = true;
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
+251
-189
@@ -1,12 +1,5 @@
|
||||
#pricing {
|
||||
|
||||
[purpose='page-content'] {
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
color: #192147;
|
||||
max-width: 1024px;
|
||||
}
|
||||
|
||||
background: linear-gradient(180deg, #E8F1F6 0%, #FFFFFF 5.79%);
|
||||
h1, p {
|
||||
color: #192147;
|
||||
}
|
||||
@@ -15,15 +8,6 @@
|
||||
font-size: 32px;
|
||||
line-height: 38px;
|
||||
}
|
||||
h3 {
|
||||
|
||||
}
|
||||
[purpose='subtitle'] {
|
||||
color: #8B8FA2;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
}
|
||||
h4 {
|
||||
color: #515774;
|
||||
font-weight: 500;
|
||||
@@ -31,6 +15,7 @@
|
||||
line-height: 24px;
|
||||
}
|
||||
p {
|
||||
color: #515774;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
@@ -41,13 +26,20 @@
|
||||
.btn {
|
||||
color: #fff;
|
||||
}
|
||||
[purpose='page-content'] {
|
||||
padding-left: 40px;
|
||||
padding-right: 40px;
|
||||
color: #192147;
|
||||
max-width: 1120px;
|
||||
}
|
||||
[purpose='pricing-switch'] {
|
||||
width: 280px;
|
||||
cursor: pointer;
|
||||
border: 1px solid #E2E4EA;
|
||||
border-radius: 28px;
|
||||
background: #F9FAFC;
|
||||
background: #EBF2F5;
|
||||
position: relative;
|
||||
box-shadow: inset 0px 2px 4px rgba(0, 0, 0, 0.1);
|
||||
[purpose='pricing-tier-switch'] {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
@@ -71,73 +63,194 @@
|
||||
.security-selected {
|
||||
transform: translateX(140px);
|
||||
}
|
||||
|
||||
}
|
||||
[purpose='features'] {
|
||||
padding-top: 80px;
|
||||
|
||||
}
|
||||
|
||||
[purpose='pricing-tier-card'] {
|
||||
[purpose='free-tier-card'] {
|
||||
padding: 40px;
|
||||
border-radius: 15px;
|
||||
margin-right: 12px;
|
||||
margin-left: 12px;
|
||||
|
||||
[purpose='pricing-tier-title'] {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
h2 {
|
||||
font-weight: 700;
|
||||
font-size: 24px;
|
||||
line-height: 20px;
|
||||
color: #192147;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
h3 {
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
color: #8B8FA2;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
p {
|
||||
color: #ff5c83;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
font-size: 12px;
|
||||
vertical-align: super;
|
||||
color: #ff5c83;
|
||||
}
|
||||
.show-estimated-price {
|
||||
color: @core-vibrant-blue;
|
||||
}
|
||||
}
|
||||
|
||||
margin-right: 6px;
|
||||
width: 380px;
|
||||
strong {
|
||||
color: #192147;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
[purpose='premium-and-cloud-cards'] {
|
||||
width: 66%;
|
||||
}
|
||||
[purpose='premium-tier-card'] {
|
||||
padding: 40px;
|
||||
border-radius: 15px;
|
||||
// margin-right: 12px;
|
||||
margin-left: 6px;
|
||||
strong {
|
||||
color: #192147;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
[purpose='premium-cloud-card'] {
|
||||
border-radius: 15px;
|
||||
margin-top: 12px;
|
||||
margin-left: 6px;
|
||||
[purpose='cloud-banner-image'] {
|
||||
width: 100%;
|
||||
height: 217px;
|
||||
background: url('/images/homepage-fleet-cloud-banner-600x340@2x.png');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
border-top-left-radius: 15px;
|
||||
border-bottom-left-radius: 15px;
|
||||
}
|
||||
}
|
||||
[purpose='premium-cloud-text'] {
|
||||
padding: 40px;
|
||||
border-left: 1px solid #E2E4EA;
|
||||
h3 {
|
||||
font-weight: 700;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
p {
|
||||
margin-bottom: 14px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
[purpose='animated-arrow-button-red'] {
|
||||
display: inline;
|
||||
line-height: 24px;
|
||||
padding-right: 40px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
width: fit-content;
|
||||
min-width: 125px;
|
||||
font-weight: bold;
|
||||
user-select: none;
|
||||
transition: 0.2s ease-in-out;
|
||||
-o-transition: 0.2s ease-in-out;
|
||||
-ms-transition: 0.2s ease-in-out;
|
||||
-moz-transition: 0.2s ease-in-out;
|
||||
-webkit-transition: 0.2s ease-in-out;
|
||||
color: @core-fleet-black;
|
||||
text-decoration: none;
|
||||
&:after {
|
||||
content: url('/images/arrow-right-red-16x16@2x.png');
|
||||
transform: scale(0.5);
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 75%; // <--- here
|
||||
transition: 0.2s ease-in-out;
|
||||
-o-transition: 0.2s ease-in-out;
|
||||
-ms-transition: 0.2s ease-in-out;
|
||||
-moz-transition: 0.2s ease-in-out;
|
||||
-webkit-transition: 0.2s ease-in-out;
|
||||
/* opacity: 0; */
|
||||
}
|
||||
&:hover:after {
|
||||
left: 82%; // <--- here
|
||||
transition: 0.2s ease-in-out;
|
||||
-o-transition: 0.2s ease-in-out;
|
||||
-ms-transition: 0.2s ease-in-out;
|
||||
-moz-transition: 0.2s ease-in-out;
|
||||
-webkit-transition: 0.2s ease-in-out;
|
||||
/* opacity:1; */
|
||||
}
|
||||
}
|
||||
}
|
||||
[purpose='pricing-tier-title'] {
|
||||
text-align: left;
|
||||
h1 {// Price e.g., $0
|
||||
font-weight: 700;
|
||||
font-size: 32px;
|
||||
line-height: 45px;
|
||||
color: #192147;
|
||||
}
|
||||
h2 {// Tier name
|
||||
font-weight: 700;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
color: #192147;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
h3 {// for "Unlimited hosts"
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #515774;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
h4 { // "Starting at"
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
color: #192147;
|
||||
vertical-align: baseline;
|
||||
margin-bottom: 0px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
strong { // "/host/month"
|
||||
padding-left: 4px;
|
||||
font-weight: 700;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
color: #192147;
|
||||
}
|
||||
p {
|
||||
color: #ff5c83;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
[purpose='contact-sales-link'] {
|
||||
text-align: center;
|
||||
margin-top: 8px;
|
||||
margin-bottom: 32px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
a {
|
||||
text-decoration: underline;
|
||||
color: #ff5c83;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
}
|
||||
[purpose='fleet-community-card'] {
|
||||
max-width: 570px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
[purpose='features-list'] {
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
margin-bottom: 12px;
|
||||
text-indent: -24px;
|
||||
padding-left: 24px;
|
||||
color: #515774;
|
||||
}
|
||||
p::before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
background: url('/images/icon-checkmark-green-16x16@2x.png');
|
||||
background-size: cover;
|
||||
margin-right: 8px;
|
||||
height: 14px;
|
||||
width: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[purpose='card-button'] {
|
||||
font-size: 16px;
|
||||
padding: 15px;
|
||||
margin-top: 8px;
|
||||
max-width: 540px;
|
||||
margin-bottom: 32px;
|
||||
color: #FFF;
|
||||
}
|
||||
[purpose='chat-button'], [purpose='card-button'], [purpose='table-button'] {
|
||||
[purpose='chat-button'], [purpose='card-button'] {
|
||||
position: relative;
|
||||
}
|
||||
[purpose='card-button']::before, [purpose='chat-button']::before, [purpose='table-button']::before {
|
||||
[purpose='card-button']::before, [purpose='chat-button']::before {
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0) 100%);
|
||||
opacity: 1;
|
||||
content: ' ';
|
||||
@@ -154,68 +267,16 @@
|
||||
left: 160px;
|
||||
width: 110%;
|
||||
}
|
||||
input[type='number'] {
|
||||
-moz-appearance: textfield;
|
||||
-webkit-appearance: none;
|
||||
appearance: textfield;
|
||||
line-height: 1;
|
||||
}
|
||||
[purpose='enterprise-calculator'] {
|
||||
background: #F9FAFC;
|
||||
border: 1px solid #E2E4EA;
|
||||
border-radius: 8px;
|
||||
margin: 24px 0 32px;
|
||||
|
||||
input::-webkit-outer-spin-button, input::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
[purpose='features-table'] {
|
||||
padding-top: 80px;
|
||||
}
|
||||
[purpose='enterprise-calculator-row'] {
|
||||
p {
|
||||
font-size: 14px;
|
||||
margin-bottom: 0px;
|
||||
line-height: 20px;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
[purpose='enterprise-calculator-input'] {
|
||||
padding: 8px;
|
||||
width: 80px;
|
||||
border-radius: 4px;
|
||||
height: 36px;
|
||||
text-align: end;
|
||||
margin-bottom: 8px;
|
||||
border: 1px solid #E2E4EA;
|
||||
-moz-appearance: textfield;
|
||||
-webkit-appearance: textfield;
|
||||
appearance: textfield;
|
||||
}
|
||||
[purpose='exterprise-calculator-result'] {
|
||||
margin-top: 24px;
|
||||
padding-top: 24px;
|
||||
border-top: 1px solid #E2E4EA;
|
||||
h3 {
|
||||
font-weight: 700;
|
||||
font-size: 18px;
|
||||
line-height: 20px;
|
||||
}
|
||||
p {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[purpose='mobile-feature-table-section'] {
|
||||
margin-bottom: 16px;
|
||||
h4 {
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
color: #192147;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
@@ -243,17 +304,9 @@
|
||||
}
|
||||
|
||||
}
|
||||
[purpose='table-button'] {
|
||||
padding: 4px 26px;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
border-radius: 4px;
|
||||
background-color: @core-vibrant-red;
|
||||
border: none;
|
||||
margin-bottom: 8px;
|
||||
margin-top: 4px;
|
||||
[purpose='premium-price-linebreak'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[purpose='checkmark'] {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
@@ -309,86 +362,88 @@
|
||||
}
|
||||
}
|
||||
|
||||
[purpose='features-list'] {
|
||||
min-height: ;
|
||||
p {
|
||||
margin-bottom: 16px;
|
||||
text-indent: -24px;
|
||||
padding-left: 24px;
|
||||
color: #515774;
|
||||
}
|
||||
p::before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
background: url('/images/icon-checkmark-green-16x16@2x.png');
|
||||
background-size: cover;
|
||||
margin-right: 8px;
|
||||
height: 14px;
|
||||
width: 14px;
|
||||
}
|
||||
}
|
||||
[purpose='faq-list'] {
|
||||
padding-left: 20px;
|
||||
li {
|
||||
margin-bottom: 16px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
[purpose='cta-button'] {
|
||||
color: #192147;
|
||||
.btn-animated-arrow-red();
|
||||
&::before {
|
||||
left: 84%;
|
||||
}
|
||||
&:hover::before {
|
||||
left: 87%;
|
||||
}
|
||||
}
|
||||
[purpose='pricing-table-category']:not(:first-of-type) {
|
||||
margin-top: 48px;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
|
||||
@media (min-width: 1400px) {
|
||||
// > 1400px width: the page has no left or right padding
|
||||
[purpose='page-content'] {
|
||||
padding-left: 40px;
|
||||
padding-right: 40px;
|
||||
max-width: 1160px;
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
[purpose='fleet-community-card'] {
|
||||
max-width: 100%;
|
||||
margin-left: unset;
|
||||
margin-right: unset;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
[purpose='table-button'] {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
[purpose='pricing-tier-card'] {
|
||||
padding: 32px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[purpose='animated-arrow-button'] {
|
||||
color: #192147;
|
||||
.btn-animated-arrow-red();
|
||||
}
|
||||
|
||||
@media (max-width: 575px) {
|
||||
// >992 width:
|
||||
// - The pages padding is reduced to 24px
|
||||
// - Tier cards shift to a column view and have 100% width;
|
||||
[purpose='page-content'] {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
}
|
||||
.contact-msg {
|
||||
max-width: 300px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
[purpose='free-tier-card'] {
|
||||
width: 100%;
|
||||
margin-right: 0px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
[purpose='premium-tier-card'] {
|
||||
margin-left: 0px;
|
||||
}
|
||||
[purpose='premium-cloud-card'] {
|
||||
margin-left: 0px;
|
||||
}
|
||||
[purpose='premium-and-cloud-cards'] {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media (max-width: 575px) {
|
||||
// >575px:
|
||||
// - The Premium Cloud card switches to a column layout
|
||||
// - The picing tier cards have their padding reduced to 24px
|
||||
[purpose='hero-text'] {
|
||||
padding-right: -5px;
|
||||
padding-left: -5px;
|
||||
}
|
||||
[purpose='pricing-tier-card'] {
|
||||
padding: 32px;
|
||||
[purpose='page-content'] {
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
}
|
||||
[purpose='enterprise-calculator-input'] {
|
||||
width: 60px;
|
||||
[purpose='free-tier-card'] {
|
||||
padding: 24px;
|
||||
}
|
||||
[purpose='premium-tier-card'] {
|
||||
padding: 24px;
|
||||
}
|
||||
[purpose='premium-cloud-card'] {
|
||||
height: unset;
|
||||
[purpose='cloud-banner-image'] {
|
||||
border-top-right-radius: 15px;
|
||||
border-bottom-left-radius: 0px;
|
||||
}
|
||||
}
|
||||
[purpose='premium-cloud-text'] {
|
||||
border-left: none;
|
||||
padding: 24px;
|
||||
}
|
||||
[purpose='pricing-categories-table'] {
|
||||
margin-bottom: 40px;
|
||||
@@ -397,7 +452,7 @@
|
||||
color: #192147;
|
||||
font-weight: 700;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
line-height: 21px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
tr {
|
||||
@@ -420,5 +475,12 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 355px) {
|
||||
// At < 355 px width we add a linebreak to the Premium price per host.
|
||||
[purpose='premium-price-linebreak'] {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -683,7 +683,7 @@ module.exports = {
|
||||
}
|
||||
if(!feature.tier) { // Throw an error if a feature is missing a `tier`.
|
||||
throw new Error('Could not build pricing table config from pricing-features-table.yml. The "'+feature.name+'" feature is missing a "tier". To resolve, add a "tier" (either "Free" or "Premium") to this feature.');
|
||||
} else if(!_.contains(['Free', 'Premium', 'Ultimate'], feature.tier)){ // Throw an error if a feature's `tier` is not "Free", "Premium", or "Ultimate".
|
||||
} else if(!_.contains(['Free', 'Premium'], feature.tier)){ // Throw an error if a feature's `tier` is not "Free" or "Premium".
|
||||
throw new Error('Could not build pricing table config from pricing-features-table.yml. The "'+feature.name+'" feature has an invalid "tier". to resolve, change the value of this features "tier" (currently set to '+feature.tier+') to be either "Free" or "Premium".');
|
||||
}
|
||||
if(feature.comingSoon === undefined) { // Throw an error if a feature is missing a `comingSoon` value
|
||||
|
||||
Vendored
+126
-164
@@ -11,188 +11,152 @@
|
||||
<div purpose="pricing-switch-option" :class="[displaySecurityPricingMode ? 'selected' : '']">Security</div>
|
||||
<div purpose="pricing-tier-switch" :class="[displaySecurityPricingMode ? 'security-selected' : '']"></div>
|
||||
</div>
|
||||
<h4 class="pb-4 mb-4 text-center" v-if="displaySecurityPricingMode">Always cross-platform, always secure. You will always have control over read/write privileges.</h4>
|
||||
<h4 class="pb-4 mb-4 text-center" v-else>You will always have control over your machines regardless of platform.</h4>
|
||||
<div purpose="pricing-tiers" class="d-flex flex-column justify-content-center">
|
||||
<div class="d-flex flex-md-row flex-column card-deck justify-content-center align-items-center align-items-md-stretch p-0 w-100 mx-auto">
|
||||
<%// Fleet Premium %>
|
||||
<div purpose="pricing-tier-card" class="card ml-md-0 mb-4 w-100 w-md-auto">
|
||||
<div purpose="pricing-tiers" class="d-flex flex-column flex-lg-row justify-content-center">
|
||||
|
||||
<%// Fleet Free tier card %>
|
||||
<div purpose="free-tier-card" class="card d-flex flex-column">
|
||||
<div purpose="pricing-tier-title">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<div class="d-flex flex-column justify-content-start">
|
||||
<h2>Free</h2>
|
||||
<h3>Unlimited hosts</h3>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<h1>$0</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto" href="/try-fleet">Get started free</a>
|
||||
<p class="mb-4 mt-4 pt-1"><strong>Includes:</strong></p>
|
||||
|
||||
<%// IT features (free) %>
|
||||
<div purpose="features-list" v-if="!displaySecurityPricingMode">
|
||||
<p>Opt-in macOS MDM</p>
|
||||
<p>REST API and webhooks</p>
|
||||
<p>YAML configuration</p>
|
||||
<p>Enforce device configurations</p>
|
||||
<p>Run MDM commands via CLI</p>
|
||||
<p>End user transparency</p>
|
||||
<p>Community support (MacAdmins Slack)</p>
|
||||
<p>Self-hosted</p>
|
||||
</div>
|
||||
|
||||
<%// Security features (free) %>
|
||||
<div purpose="features-list" v-else>
|
||||
<p>Manage osquery at enterprise scale</p>
|
||||
<p>Monitor query performance</p>
|
||||
<p>REST API and webhooks</p>
|
||||
<p>YAML configuration</p>
|
||||
<p>Detect vulnerabilities</p>
|
||||
<p>Software inventory</p>
|
||||
<p>Device health report</p>
|
||||
<p>Ship logs to Splunk, Snowflake, and more</p>
|
||||
<p>Self-hosted</p>
|
||||
</div>
|
||||
</div>
|
||||
<div purpose="premium-and-cloud-cards" class="d-flex flex-column">
|
||||
|
||||
<%// Fleet Premium tier card %>
|
||||
<div purpose="premium-tier-card" class="card d-flex flex-column">
|
||||
<div purpose="pricing-tier-title">
|
||||
<h2>Fleet Premium</h2>
|
||||
<h3>For orgs with multiple compliance standards</h3>
|
||||
<p>Up to 500 hosts<a href="#additional-hosts">†</a></p>
|
||||
<h2>$3500/month</h2>
|
||||
<div class="d-flex flex-sm-row flex-column justify-content-between">
|
||||
<div class="d-flex flex-column justify-content-start">
|
||||
<h2>Premium</h2>
|
||||
<h3>Unlimited hosts</h3>
|
||||
</div>
|
||||
<div class="d-flex flex-row align-items-center">
|
||||
<div class="d-flex flex-row align-items-center ">
|
||||
<h4>Starting at </h4><h1 class="mb-2">$7.00</h1><strong>/ host <br purpose="premium-price-linebreak">/ month</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p><strong>Includes</strong></p>
|
||||
<%// Premium security features%>
|
||||
<div purpose="features-list" v-if="displaySecurityPricingMode">
|
||||
<p>Single-Sign On (SSO)</p>
|
||||
<p>Audit log</p>
|
||||
<p>24 hour support for PO</p>
|
||||
<p>Unlimited device groups (teams)</p>
|
||||
<p>Employee/device mapping</p>
|
||||
<p>Organizational GitOps</p>
|
||||
<p>Versionable queries and config</p>
|
||||
<p>JIT provisioning</p>
|
||||
<p>Vulnerability scores (CISA)</p>
|
||||
<p>Query performance monitoring</p>
|
||||
<p>Vulnerability automation destination</p>
|
||||
</div>
|
||||
<%// Premium IT features%>
|
||||
<div purpose="features-list" v-else>
|
||||
<p>macOS MDM</p>
|
||||
<p>Windows MDM*</p>
|
||||
<p>Automatic enrollment (zero touch)</p>
|
||||
<p>Safely execute remote scripts</p>
|
||||
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto mb-0" href="/customers/register">Get started</a>
|
||||
<p purpose="contact-sales-link">For organizations with large deployments, <a @click="clickOpenChatWidget()">contact sales</a>.</p>
|
||||
</div>
|
||||
<p class="mb-4"><strong>All of Free plus:</strong></p>
|
||||
|
||||
<%// IT features (Premium) %>
|
||||
<div class="d-flex flex-sm-row flex-column align-items-around" v-if="!displaySecurityPricingMode">
|
||||
<div class="w-sm-50 w-100 mr-3" purpose="features-list">
|
||||
<p>Zero-touch MDM for macOS</p>
|
||||
<p>Windows MDM with Autopilot*</p>
|
||||
<p>Safely execute remote scripts*</p>
|
||||
<p>Programmable remediations*</p>
|
||||
<p>Disk encryption key escrow</p>
|
||||
<p>macOS update via Nudge</p>
|
||||
<p>Remote lock and wipe</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="justify-self-end mt-auto">
|
||||
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto" @click="clickOpenChatWidget()">Talk to sales</a>
|
||||
</div>
|
||||
</div>
|
||||
<%// Fleet Ultimate %>
|
||||
<div purpose="pricing-tier-card" class="card mr-md-0 mb-4 w-100 w-md-auto">
|
||||
<div purpose="pricing-tier-title">
|
||||
<h2>Fleet Ultimate</h2>
|
||||
<h3>For orgs with large deployments</h3>
|
||||
<p>Over 500 hosts<a href="#additional-hosts">†</a></p>
|
||||
<h2>$<span :class="[estimatedUltimateCostPerHostHasBeenUpdated ? 'show-estimated-price' : '']">{{ estimatedUltimateCostPerHost.toFixed(2) }}</span>/host/month</h2>
|
||||
</div>
|
||||
<div>
|
||||
<p><strong>All of Premium plus</strong></p>
|
||||
<%// Ultimate security features %>
|
||||
<div purpose="features-list" v-if="displaySecurityPricingMode">
|
||||
<p>Platinum support</p>
|
||||
<p>Granular role-based access</p>
|
||||
<p>Self-hosted or managed-cloud</p>
|
||||
</div>
|
||||
<%// Ultimate IT features %>
|
||||
<div purpose="features-list" v-else>
|
||||
<p>24/7 support</p>
|
||||
<div class="w-sm-50 w-100" purpose="features-list">
|
||||
<p>24x7 support</p>
|
||||
<p>Dedicated Slack channel</p>
|
||||
<p>IDP integration</p>
|
||||
<p>Managed software library</p>
|
||||
<p>Migration Pro Plan</p>
|
||||
<p>Daily use assistance</p>
|
||||
<p>End user sign-in with Okta, AD, or any IDP</p>
|
||||
<p>Integrate with Munki, Chef, and Puppet</p>
|
||||
<p>Enterprise-ready MDM migration</p>
|
||||
</div>
|
||||
</div>
|
||||
<div purpose="enterprise-calculator">
|
||||
<div class="d-flex flex-column px-4 py-3">
|
||||
<p><strong>Ultimate calculator</strong></p>
|
||||
<div purpose="enterprise-calculator-row">
|
||||
<p>macOS devices</p>
|
||||
<input purpose="enterprise-calculator-input" class="form-control" min="0" type="number" placeholder="0" v-model.trim="formData.macos" @input="updateEstimatedTotal()">
|
||||
</div>
|
||||
<div purpose="enterprise-calculator-row">
|
||||
<p>Windows devices</p>
|
||||
<input purpose="enterprise-calculator-input" class="form-control" min="0" type="number" placeholder="0" v-model.trim="formData.windows" @input="updateEstimatedTotal()">
|
||||
</div>
|
||||
<div purpose="enterprise-calculator-row">
|
||||
<p>Linux devices</p>
|
||||
<input purpose="enterprise-calculator-input" class="form-control" min="0" type="number" placeholder="0" v-model.trim="formData.linux" @input="updateEstimatedTotal()">
|
||||
</div>
|
||||
<div purpose="enterprise-calculator-row">
|
||||
<p>Servers, containers (k8s), IoT devices</p>
|
||||
<input purpose="enterprise-calculator-input" class="form-control" min="0" type="number" placeholder="0" v-model.trim="formData.other" @input="updateEstimatedTotal()">
|
||||
</div>
|
||||
<div purpose="exterprise-calculator-result" class="d-flex flex-end flex-md-row flex-column align-items-md-center align-items-end justify-content-between">
|
||||
<p class="mb-2">Estimated cost:</p>
|
||||
<h3>${{estimatedCost ? estimatedCost.toFixed(2) : ' --- '}}/month</h3>
|
||||
</div>
|
||||
|
||||
<%// Security features (Premium) %>
|
||||
<div class="d-flex flex-sm-row flex-column align-items-around" v-else>
|
||||
<div class="w-sm-50 w-100" purpose="features-list">
|
||||
<p>GitOps-ready</p>
|
||||
<p>CIS for macOS and Windows</p>
|
||||
<p>Custom vulnerability reporting</p>
|
||||
<p>Phased rollouts (canaries)</p>
|
||||
<p>Single-Sign On (SSO)</p>
|
||||
<p>Version history for queries and config</p>
|
||||
<p>Granular role-based access</p>
|
||||
<p>Target and configure specific device groups</p>
|
||||
<p>Programable audit log</p>
|
||||
<p>Vulnerability scores (EPSS and CVSS)</p>
|
||||
<p>CISA known exploited vulnerabilities</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="justify-self-end">
|
||||
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto" @click="clickOpenChatWidget()">Talk to sales</a>
|
||||
<div class="w-sm-50 w-100" purpose="features-list">
|
||||
<p>24x7 support</p>
|
||||
<p>Sync user roles from Okta, AD, or any IDP</p>
|
||||
<p>Just-in-time (JIT) provisioning</p>
|
||||
<p>Aggregate insights for groups of devices</p>
|
||||
<p>Agent auto-updates</p>
|
||||
<p>Manage osquery extensions remotely</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<%// Fleet Community edition %>
|
||||
<div purpose="pricing-tier-card" class="card mx-md-auto">
|
||||
<div purpose="fleet-community-card" class="d-flex flex-column justify-content-between">
|
||||
<div purpose="pricing-tier-title">
|
||||
<h2>Fleet Community Edition</h2>
|
||||
<h3>For small teams</h3>
|
||||
<p>Unlimited devices</p>
|
||||
<h2>Free forever</h2>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mx-md-auto d-flex flex-row justify-content-md-center justify-content-start">
|
||||
<div purpose="bottom-card-features" class="d-flex flex-column justify-content-center align-items-start">
|
||||
<p class="text-left align-self-start"><strong>Includes</strong></p>
|
||||
<%// Community edition security features %>
|
||||
<div purpose="features-list" class="d-flex flex-md-row flex-column justify-content-between" v-if="displaySecurityPricingMode">
|
||||
<div class="pr-0 pr-md-5">
|
||||
<p>Manage osquery</p>
|
||||
<p>Detect vulnerabilities</p>
|
||||
<p>Software inventory</p>
|
||||
<p>Device health report</p>
|
||||
<p>Scheduled queries</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>Community support (Slack)</p>
|
||||
<p>Standard query library (SQL)</p>
|
||||
<p>YAML config and GitOps included</p>
|
||||
<p>Additional log destinations</p>
|
||||
</div>
|
||||
</div>
|
||||
<%// Community edition IT features %>
|
||||
<div purpose="features-list" class="d-flex flex-md-row flex-column justify-content-between" v-else>
|
||||
<div class="pr-0 pr-md-4">
|
||||
<p>Manual enrollment</p>
|
||||
<p>Support for BYOD</p>
|
||||
<p>Enforce device configurations</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>Native OS updates</p>
|
||||
<p>macOS commands via CLI</p>
|
||||
<p>Audit transparency</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto" href="/try-fleet/register">Try it out</a>
|
||||
</div>
|
||||
|
||||
<%// Fleet Premium Cloud card %>
|
||||
<div purpose="premium-cloud-card" class="card d-flex flex-sm-row flex-column">
|
||||
<div class="w-sm-50 w-100" purpose="cloud-banner-image"></div>
|
||||
<div purpose="premium-cloud-text" class="w-sm-50 w-100 d-flex flex-column justify-content-between">
|
||||
<h3>Premium Cloud</h3>
|
||||
<%// IT pricing mode text%>
|
||||
<p v-if="!displaySecurityPricingMode">Focus on device management, and leave your Fleet server management to us.</p>
|
||||
<%// Security pricing mode text%>
|
||||
<p v-else>Focus on reducing your risk, and leave your Fleet server management to us.</p>
|
||||
<a purpose="animated-arrow-button-red" @click="clickOpenChatWidget()">Talk to sales</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<p style="color: #515774; font-size: 14px; scroll-margin-top: 200px;" class="mt-4" id="additional-hosts"><span style="vertical-align: super;">†</span> Additional hosts beyond the contracted quantity will be invoiced at the agreed upon per-host rate as specified in a contract or order form.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div purpose="features" class="d-flex flex-column justify-content-center mx-auto px-0">
|
||||
|
||||
<%// Features table %>
|
||||
<div purpose="features-table" class="d-flex flex-column justify-content-center mx-auto px-0">
|
||||
<h2 class="text-center pb-3 mb-4">Compare plans</h2>
|
||||
<div class="d-flex flex-column flex-sm-row flex-wrap justify-content-center p-0">
|
||||
<div class="d-flex flex-column flex-wrap justify-content-center p-0">
|
||||
<%// Desktop features tables %>
|
||||
<div class="d-none d-sm-block">
|
||||
<table purpose="pricing-categories-table" class="table" v-for="(category, index) in pricingTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<td><h4>{{category.categoryName}}</h4></td>
|
||||
<td v-if="index === 0">
|
||||
<strong>Community</strong>
|
||||
<a purpose="table-button" class="btn btn-info d-none d-sm-inline-block" href="/try-fleet/register">
|
||||
Try it out
|
||||
</a>
|
||||
<td class="text-center" v-if="index === 0">
|
||||
<strong>Free</strong>
|
||||
</td>
|
||||
<td v-else></td>
|
||||
<td v-if="index === 0">
|
||||
<td class="text-center" v-if="index === 0">
|
||||
<strong>Premium</strong>
|
||||
<a purpose="table-button" class="btn btn-info d-none d-sm-inline-block" @click="clickOpenChatWidget()">
|
||||
Talk to sales
|
||||
</a>
|
||||
</td>
|
||||
<td v-else></td>
|
||||
<td v-if="index === 0">
|
||||
<strong>Ultimate</strong>
|
||||
<a purpose="table-button" class="btn btn-info d-none d-sm-inline-block" @click="clickOpenChatWidget()">
|
||||
Talk to sales
|
||||
</a>
|
||||
</td>
|
||||
<td v-else></td>
|
||||
</tr>
|
||||
@@ -202,13 +166,13 @@
|
||||
<td purpose="feature-name" class="w-50">{{feature.name}}{{feature.comingSoon ? '*' : ''}}</td>
|
||||
<td v-if="feature.tier === 'Free'"><img class="mx-auto" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
|
||||
<td v-else></td>
|
||||
<td v-if="feature.tier !== 'Ultimate'"><img class="mx-auto" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
|
||||
<td v-else></td>
|
||||
<td><img class="mx-auto" purpose="checkmark" alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
|
||||
<td><img class="mx-auto" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p style="color: #515774;" class="mb-0 w-100">* Coming soon</p>
|
||||
</div>
|
||||
<%// Mobile features tables %>
|
||||
<div purpose="mobile-feature-table-section" class="d-block d-sm-none" v-for="(category, index) in pricingTable">
|
||||
<h4>{{category.categoryName}}</h4>
|
||||
<div purpose="mobile-features-table" class="d-flex flex-column" v-for="feature in category.features">
|
||||
@@ -216,22 +180,19 @@
|
||||
<strong>{{feature.name}}{{feature.comingSoon ? '*' : ''}}</strong>
|
||||
</div>
|
||||
<div class="d-flex flex-row justify-content-between align-items-center">
|
||||
Community Edition
|
||||
Free
|
||||
<img class="d-block" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png" v-if="feature.tier === 'Free'">
|
||||
</div>
|
||||
<div purpose="striped-row" class="d-flex flex-row justify-content-between align-items-center">
|
||||
Premium
|
||||
<img class="d-block" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png" v-if="feature.tier !== 'Ultimate'">
|
||||
</div>
|
||||
<div class="d-flex flex-row justify-content-between align-items-center">
|
||||
Ultimate
|
||||
<img class="d-block" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p style="color: #515774;" class="mb-0 w-100">* Coming soon</p>
|
||||
<p style="color: #515774;" class="d-block d-sm-none mb-0 w-100">* Coming soon</p>
|
||||
</div>
|
||||
</div>
|
||||
<%// FAQ %>
|
||||
<div style="color: #192147;" class="d-flex flex-column justify-content-center pt-5 px-0 mx-auto">
|
||||
<h2 class="text-center mb-4">FAQ</h2>
|
||||
<div style="max-width: 800px;" class="px-0 d-flex flex-column justify-content-center mb-5 mx-auto">
|
||||
@@ -335,13 +296,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%// Bottom call to action %>
|
||||
<div purpose="bottom-cta" class="d-block mx-auto">
|
||||
<h2 class="text-center">Still have questions?</h2>
|
||||
<div class="d-flex flex-column flex-sm-row flex-nowrap btn-toolbar justify-content-center" style="text-align: center" >
|
||||
<a purpose="chat-button" style="max-width: 250px" class="mx-auto justify-self-center btn btn-block btn-md btn-primary my-3 mx-sm-2" href="https://fleetdm.com/company/contact">
|
||||
Ask us anything
|
||||
</a>
|
||||
<a style="max-width: 250px" class="btn btn-block btn-lg btn-white my-3 mx-sm-2 mx-auto" purpose="animated-arrow-button" @click="clickOpenChatWidget()">
|
||||
<a style="max-width: 250px" class="btn btn-block btn-lg btn-white my-3 mx-sm-2 mx-auto" purpose="cta-button" @click="clickOpenChatWidget()">
|
||||
Talk to an expert
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user