diff --git a/website/api/controllers/save-questionnaire-progress.js b/website/api/controllers/save-questionnaire-progress.js index 0eec64d1a4..8805b2a7eb 100644 --- a/website/api/controllers/save-questionnaire-progress.js +++ b/website/api/controllers/save-questionnaire-progress.js @@ -21,6 +21,7 @@ module.exports = { 'what-does-your-team-manage-eo-it', 'what-does-your-team-manage-vm', 'what-do-you-manage-mdm', + 'cross-platform-mdm', 'is-it-any-good', 'what-did-you-think', 'deploy-fleet-in-your-environment', @@ -86,28 +87,25 @@ module.exports = { // 'how-many-hosts': Stage 4/5/6 // 'will-you-be-self-hosting': Stage 5/6 // 'what-are-you-working-on-eo-security' - // - no-use-case-yet: » Stage 2/3 (depends on answer from 'have-you-ever-used-fleet' step) // - All other options » Stage 4 // 'what-does-your-team-manage-eo-it' - // - no-use-case-yet: » Stage 2/3 (depends on answer from 'have-you-ever-used-fleet' step) // - All other options » Stage 4 // 'what-does-your-team-manage-vm' - // - no-use-case-yet: » Stage 2/3 (depends on answer from 'have-you-ever-used-fleet' step) // - All other options » Stage 4 // 'what-do-you-manage-mdm' - // - no-use-case-yet: » Stage 2/3 (depends on answer from 'have-you-ever-used-fleet' step) + // - no-use-case-yet: » Stage 3 // - All other options » Stage 4 - // 'is-it-any-good': Stage 2/3/4 (depends on answer from 'have-you-ever-used-fleet' & the buying situation specific step) + // 'is-it-any-good': Stage 3/4 (depends on answer from 'have-you-ever-used-fleet' & the buying situation specific step) // 'what-did-you-think' - // - host-fleet-for-me » Stage 4 - // - deploy-fleet-in-environment » Stage 4 + // - host-fleet-for-me » Stage 5 + // - deploy-fleet-in-environment » Stage 5 // - let-me-think-about-it » Stage 2 // FUTURE: Should the step about deploying fleet in your env be here? (For same reason is-it-any-good is here: when navigating back then forwards?) // 'how-was-your-deployment' // - up-and-running » Stage 5 - // - kinda-stuck » Stage 4 (...at best! Still got the use case.) - // - havent-gotten-to-it » Stage 4 (same as above) - // - changed-mind-want-managed-deployment » Stage 4 (same as above) + // - kinda-stuck » Stage 5 + // - havent-gotten-to-it » Stage 5 + // - changed-mind-want-managed-deployment » Stage 5 // - decided-to-not-use-fleet » Stage 2 // 'whats-left-to-get-you-set-up' // - need-premium-license-key » No change (Stage ??) @@ -124,17 +122,13 @@ module.exports = { } else if(currentStep === 'what-are-you-using-fleet-for') { psychologicalStage = '2 - Aware'; } else if(currentStep === 'have-you-ever-used-fleet') { - if(['yes-deployed'].includes(valueFromFormData)) { + if(valueFromFormData === 'yes-deployed') { // If the user has Fleet deployed, set their stage to 6. psychologicalStage = '6 - Has team buy-in'; - } else if(valueFromFormData === 'yes-recently-deployed'){ + } else if(valueFromFormData === 'yes-recently-deployed') { psychologicalStage = '5 - Personally confident'; - } else if(valueFromFormData === 'yes-deployed-local'){ - // If they've tried Fleet locally, set their stage to 3. - psychologicalStage = '3 - Intrigued'; } else { - // Otherwise, we'll just assume liu're only aware. Maybe liu don't fully grasp what Fleet can do. - psychologicalStage = '2 - Aware'; + psychologicalStage = '3 - Intrigued'; } } else { // If the user submitted any other step, we'll set variables using the answers to the previous questions. @@ -144,13 +138,7 @@ module.exports = { let hasUsedFleetAnswer = questionnaireProgress['have-you-ever-used-fleet'].fleetUseStatus; if(['what-are-you-working-on-eo-security','what-does-your-team-manage-eo-it','what-does-your-team-manage-vm','what-do-you-manage-mdm'].includes(currentStep)){ if(valueFromFormData === 'no-use-case-yet') { - // Check the user's answer to the previous question - if(hasUsedFleetAnswer === 'yes-deployed-local'){ - // If they've tried Fleet locally, set their stage to 3. - psychologicalStage = '3 - Intrigued'; - } else { - psychologicalStage = '2 - Aware'; - } + psychologicalStage = '3 - Intrigued'; } else {// Otherwise, they have a use case and will be set to stage 4. psychologicalStage = '4 - Has use case'; } @@ -160,12 +148,7 @@ module.exports = { // be selected, we'll check the user's previous answers before changing their psyStage if(questionnaireProgress['what-do-you-manage-mdm'].mdmUseCase === 'no-use-case-yet'){ // Check the user's answer to the have-you-ever-used-fleet question. - if(hasUsedFleetAnswer === 'yes-deployed-local') { - // If they've tried Fleet locally, set their stage to 3. - psychologicalStage = '3 - Intrigued'; - } else { - psychologicalStage = '2 - Aware'; - } + psychologicalStage = '3 - Intrigued'; } else { psychologicalStage = '4 - Has use case'; } @@ -177,27 +160,22 @@ module.exports = { // If the user selects "Let me think about it", set their psyStage to 2. if(valueFromFormData === 'let-me-think-about-it') { psychologicalStage = '2 - Aware'; - } else if (['deploy-fleet-in-environment','host-fleet-for-me'].includes(valueFromFormData)) { - psychologicalStage = '4 - Has use case'; + } else if (['host-fleet-for-me', 'deploy-fleet-in-environment'].includes(valueFromFormData)) { + psychologicalStage = '5 - Personally confident'; } else { require('assert')(false,'This should never happen.'); } } else if(currentStep === 'how-was-your-deployment') { if(valueFromFormData === 'decided-to-not-use-fleet') { psychologicalStage = '2 - Aware'; - } else if(valueFromFormData === 'up-and-running'){ + } else if(['up-and-running', 'changed-mind-want-managed-deployment', 'kinda-stuck', 'havent-gotten-to-it'].includes(valueFromFormData)){ psychologicalStage = '5 - Personally confident'; - } else if(['kinda-stuck', 'havent-gotten-to-it', 'changed-mind-want-managed-deployment'].includes(valueFromFormData)){ - psychologicalStage = '4 - Has use case'; } else { require('assert')(false,'This should never happen.'); } } else if (currentStep === 'whats-left-to-get-you-set-up') { // FUTURE: do more stuff (for now this always acts like 'no change') } else if(currentStep === 'how-many-hosts') { if(['yes-deployed'].includes(hasUsedFleetAnswer)) { psychologicalStage = '6 - Has team buy-in'; - } else if(['yes-recently-deployed'].includes(hasUsedFleetAnswer)){ - psychologicalStage = '5 - Personally confident'; } else { - // IWMIH then we want Fleet to host for us (either because we wanted that from the get-go, or we backtracked because deploying looked too time-consuming) - psychologicalStage = '4 - Has use case'; + psychologicalStage = '5 - Personally confident'; } } else if(currentStep === 'will-you-be-self-hosting') { if(['yes-deployed'].includes(hasUsedFleetAnswer)) { @@ -243,7 +221,7 @@ module.exports = { psychologicalStageLastChangedAt, }); // Return the JSON dictionary of form data submitted by this user. - return getStartedProgress; + return {getStartedProgress, psychologicalStage}; } diff --git a/website/api/hooks/custom/index.js b/website/api/hooks/custom/index.js index e82a6ba8ab..26e59b1089 100644 --- a/website/api/hooks/custom/index.js +++ b/website/api/hooks/custom/index.js @@ -289,8 +289,8 @@ will be disabled and/or hidden in the UI. // FUTURE: Only show this CTA to users who are below psyStage 6. // > The code below is so we don't bother users who have completed the questionnaire - // Determine if this user should see the CTA to bring them to the /start questionnaire using the user's last submitted questionnaire answer. - res.locals.showStartCta = !['how-many-hosts','will-you-be-self-hosting','managed-cloud-for-growing-deployments','self-hosted-deploy', 'whats-left-to-get-you-set-up'].includes(req.me.lastSubmittedGetStartedQuestionnaireStep); + // Show this logged-in user a CTA to bring them to the /start questionnaire if they do not have billing information saved. + res.locals.showStartCta = !req.me.hasBillingCard; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // If an expandCtaAt timestamp is set in the user's sesssion, check the value to see if we should expand the CTA. diff --git a/website/assets/images/cropped-fleet-cloud-city-504x784@2x.png b/website/assets/images/cropped-fleet-cloud-city-504x784@2x.png new file mode 100644 index 0000000000..3601679d52 Binary files /dev/null and b/website/assets/images/cropped-fleet-cloud-city-504x784@2x.png differ diff --git a/website/assets/images/cta-thumbnail-psystage-2-aware-128x128@2x.png b/website/assets/images/cta-thumbnail-psystage-2-aware-128x128@2x.png new file mode 100644 index 0000000000..6fb2c7197f Binary files /dev/null and b/website/assets/images/cta-thumbnail-psystage-2-aware-128x128@2x.png differ diff --git a/website/assets/images/cta-thumbnail-psystage-3-intrigued-128x128@2x.png b/website/assets/images/cta-thumbnail-psystage-3-intrigued-128x128@2x.png new file mode 100644 index 0000000000..4730d6c0f2 Binary files /dev/null and b/website/assets/images/cta-thumbnail-psystage-3-intrigued-128x128@2x.png differ diff --git a/website/assets/images/cta-thumbnail-psystage-4-has-use-case-128x128@2x.png b/website/assets/images/cta-thumbnail-psystage-4-has-use-case-128x128@2x.png new file mode 100644 index 0000000000..c453561deb Binary files /dev/null and b/website/assets/images/cta-thumbnail-psystage-4-has-use-case-128x128@2x.png differ diff --git a/website/assets/images/continue-thumbnail.png b/website/assets/images/cta-thumbnail-psystage-5-100x100@2x.png similarity index 100% rename from website/assets/images/continue-thumbnail.png rename to website/assets/images/cta-thumbnail-psystage-5-100x100@2x.png diff --git a/website/assets/images/psystage-1-unaware-558x680@2x.png b/website/assets/images/psystage-1-unaware-558x680@2x.png new file mode 100644 index 0000000000..43861261e5 Binary files /dev/null and b/website/assets/images/psystage-1-unaware-558x680@2x.png differ diff --git a/website/assets/images/psystage-2-aware-508x784@2x.png b/website/assets/images/psystage-2-aware-508x784@2x.png new file mode 100644 index 0000000000..f53e76f450 Binary files /dev/null and b/website/assets/images/psystage-2-aware-508x784@2x.png differ diff --git a/website/assets/images/psystage-3-intrigued-558x680@2x.png b/website/assets/images/psystage-3-intrigued-558x680@2x.png new file mode 100644 index 0000000000..dbb0de5d0a Binary files /dev/null and b/website/assets/images/psystage-3-intrigued-558x680@2x.png differ diff --git a/website/assets/images/psystage-4-has-use-case-508x784@2x.png b/website/assets/images/psystage-4-has-use-case-508x784@2x.png new file mode 100644 index 0000000000..c89edacbeb Binary files /dev/null and b/website/assets/images/psystage-4-has-use-case-508x784@2x.png differ diff --git a/website/assets/images/psystage-6-has-team-buy-in-504x784@2x.png b/website/assets/images/psystage-6-has-team-buy-in-504x784@2x.png new file mode 100644 index 0000000000..8168f75fc2 Binary files /dev/null and b/website/assets/images/psystage-6-has-team-buy-in-504x784@2x.png differ diff --git a/website/assets/js/pages/start.page.js b/website/assets/js/pages/start.page.js index e6f9514e05..08ec3abb33 100644 --- a/website/assets/js/pages/start.page.js +++ b/website/assets/js/pages/start.page.js @@ -18,6 +18,7 @@ parasails.registerPage('start', { 'what-does-your-team-manage-eo-it': {}, 'what-does-your-team-manage-vm': {}, 'what-do-you-manage-mdm': {}, + 'cross-platform-mdm': {stepCompleted: true}, 'is-it-any-good': {stepCompleted: true}, 'what-did-you-think': {}, 'deploy-fleet-in-your-environment': {stepCompleted: true}, @@ -25,6 +26,8 @@ parasails.registerPage('start', { 'how-was-your-deployment': {}, 'whats-left-to-get-you-set-up': {}, }, + + psychologicalStage: '2 - Aware', // For tracking client-side validation errors in our form. // > Has property set to `true` for each invalid property in `formData`. formErrors: { /* … */ }, @@ -89,6 +92,9 @@ parasails.registerPage('start', { this.formData['what-are-you-using-fleet-for'] = {primaryBuyingSituation: this.primaryBuyingSituation}; } } + if(this.me.psychologicalStage){ + this.psychologicalStage = this.me.psychologicalStage; + } if(window.location.hash) { if(typeof analytics !== 'undefined') { if(window.location.hash === '#signup') { @@ -126,11 +132,13 @@ parasails.registerPage('start', { handleSubmittingForm: async function(argins) { let formDataForThisStep = _.clone(argins); let nextStep = this.getNextStep(); - let getStartedProgress = await Cloud.saveQuestionnaireProgress.with({ + let questionanireProgress = await Cloud.saveQuestionnaireProgress.with({ currentStep: this.currentStep, formData: formDataForThisStep, }); - this.previouslyAnsweredQuestions[this.currentStep] = getStartedProgress[this.currentStep]; + + this.previouslyAnsweredQuestions[this.currentStep] = questionanireProgress.getStartedProgress[this.currentStep]; + this.psychologicalStage = questionanireProgress.psychologicalStage; if(_.startsWith(nextStep, '/')){ this.goto(nextStep); } else { @@ -140,6 +148,9 @@ parasails.registerPage('start', { }, clickGoToPreviousStep: async function() { switch(this.currentStep) { + case 'what-are-you-using-fleet-for': + this.currentStep = 'start'; + break; case 'have-you-ever-used-fleet': this.currentStep = 'what-are-you-using-fleet-for'; break; @@ -175,9 +186,12 @@ parasails.registerPage('start', { } else if(primaryBuyingSituation === 'vm') { this.currentStep = 'what-does-your-team-manage-vm'; } else if(primaryBuyingSituation === 'mdm') { - this.currentStep = 'what-do-you-manage-mdm'; + this.currentStep = 'cross-platform-mdm'; } break; + case 'cross-platform-mdm': + this.currentStep = 'what-do-you-manage-mdm'; + break; case 'lets-talk-to-your-team': this.currentStep = 'how-many-hosts'; break; @@ -274,6 +288,9 @@ parasails.registerPage('start', { nextStepInForm = 'is-it-any-good'; break; case 'what-do-you-manage-mdm': + nextStepInForm = 'cross-platform-mdm'; + break; + case 'cross-platform-mdm': nextStepInForm = 'is-it-any-good'; break; case 'is-it-any-good': @@ -300,7 +317,7 @@ parasails.registerPage('start', { } else if(this.formData['how-was-your-deployment'].howWasYourDeployment === 'kinda-stuck'){ nextStepInForm = '/contact'; } else if(this.formData['how-was-your-deployment'].howWasYourDeployment === 'havent-gotten-to-it') { - nextStepInForm = 'deploy-fleet-in-your-environment'; + nextStepInForm = '/contact'; } else if(this.formData['how-was-your-deployment'].howWasYourDeployment === 'changed-mind-want-managed-deployment'){ nextStepInForm = 'how-many-hosts'; } else if(this.formData['how-was-your-deployment'].howWasYourDeployment === 'decided-to-not-use-fleet'){ diff --git a/website/assets/styles/layout.less b/website/assets/styles/layout.less index d1be7f4a0a..94e56945a8 100644 --- a/website/assets/styles/layout.less +++ b/website/assets/styles/layout.less @@ -144,8 +144,27 @@ html, body { [purpose='banner-image'] { height: 80px; min-width: 80px; - background-image: url('/images/continue-thumbnail.png'); background-size: cover; + background-position: center; + border-radius: 12px; + &.stage-one { + background-image: url('/images/psystage-1-unaware-558x680@2x.png'); + } + &.stage-two { + background-image: url('/images/cta-thumbnail-psystage-2-aware-128x128@2x.png'); + } + &.stage-three { + background-image: url('/images/cta-thumbnail-psystage-3-intrigued-128x128@2x.png'); + } + &.stage-four { + background-image: url('/images/cta-thumbnail-psystage-4-has-use-case-128x128@2x.png'); + } + &.stage-five { + background-image: url('/images/cta-thumbnail-psystage-5-100x100@2x.png'); + } + &.stage-six { + background-image: url('/images/psystage-6-has-team-buy-in-504x784@2x.png'); + } } } [purpose='banner-body'].collapsed { @@ -656,7 +675,6 @@ body.detected-mobile { [purpose='banner-image'] { height: 54px; min-width: 54px; - background-image: url('/images/continue-thumbnail.png'); background-size: cover; } } @@ -667,7 +685,6 @@ body.detected-mobile { [purpose='banner-image'] { height: 54px; min-width: 54px; - background-image: url('/images/continue-thumbnail.png'); background-size: cover; } transform: none; diff --git a/website/assets/styles/pages/start.less b/website/assets/styles/pages/start.less index a63d512bb7..555ea77eff 100644 --- a/website/assets/styles/pages/start.less +++ b/website/assets/styles/pages/start.less @@ -2,6 +2,7 @@ background: linear-gradient(180deg, #E8F1F6 0%, #FFF 16.49%); a { color: @core-fleet-black-75; + text-decoration: underline; } h1 { font-size: 32px; @@ -14,6 +15,13 @@ font-weight: 800; line-height: 120%; } + ul { + margin-top: 32px; + padding-inline-start: 16px; + li { + margin-bottom: 24px; + } + } [purpose='logo-container'] { max-width: 524px; margin-left: auto; @@ -29,15 +37,66 @@ } } [purpose='form-container'] { - width: 528px; - margin-left: auto; - margin-right: auto; - } - [purpose='page-container'] { - padding-top: 64px; + min-width: 632px; + max-width: 632px; padding-left: 64px; padding-right: 64px; - padding-bottom: 64px; + padding-top: 32px; + margin-right: 20px; + } + [purpose='form-tip'] { + margin-top: 32px; + padding: 16px; + border-radius: 8px; + border: 1px solid #E6E3D0; + background: #FFFEF9; + p { + margin-bottom: 0px; + font-size: 14px; + line-height: 150%; + } + img { + height: 32px; + width: 32px; + margin-right: 12px; + } + } + [purpose='form-image'] { + width: 100%; + height: 680px; + max-width: 568px; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border: 1px solid @core-vibrant-blue-15; + border-radius: 16px; + &.stage-one { + background-image: url('/images/psystage-1-unaware-558x680@2x.png'); + } + &.stage-two { + background-image: url('/images/psystage-2-aware-508x784@2x.png'); + } + &.stage-three { + background-image: url('/images/psystage-3-intrigued-558x680@2x.png'); + } + &.stage-four { + background-image: url('/images/psystage-4-has-use-case-508x784@2x.png'); + } + &.stage-five { + background-image: url('/images/cropped-fleet-cloud-city-504x784@2x.png'); + } + &.stage-six { + background-image: url('/images/psystage-6-has-team-buy-in-504x784@2x.png'); + } + &.cloud-city { + background-image: url('/images/cropped-fleet-cloud-city-504x784@2x.png'); + } + } + [purpose='page-container'] { + padding-top: 20px; + padding-left: 20px; + padding-right: 24px; + padding-bottom: 24px; max-width: unset; display: flex; flex-direction: column; @@ -140,6 +199,9 @@ align-items: center; justify-content: start; user-select: none; + a { + text-decoration: none; + } } [purpose='submit-button'] { padding: 12px; @@ -208,6 +270,9 @@ } } + [parasails-component='logo-carousel'] { + margin-bottom: 0px; + } [purpose='quote'] { display: flex; padding: 32px; @@ -259,6 +324,16 @@ padding-right: 40px; max-width: 600px; } + [purpose='form-container'] { + padding: 0; + min-width: unset; + max-width: 504px; + margin-left: auto; + margin-right: auto; + } + [purpose='form-image'] { + display: none; + } } @media (max-width: 768px) { @@ -267,7 +342,6 @@ padding-left: 24px; padding-right: 24px; } - } @media (max-width: 575px) { [purpose='logo-container'] { diff --git a/website/views/pages/start.ejs b/website/views/pages/start.ejs index 0204d958ed..c350e13ed9 100644 --- a/website/views/pages/start.ejs +++ b/website/views/pages/start.ejs @@ -1,555 +1,664 @@
To see whether Fleet’s right for your team, let's have a look at your hosts and what you're trying to do.
-You can come back at any time and pick up where you left off.
-Fleet is a little different from some of the other MDMs you might have used.
+Including servers, containers, workstations, and other hosts.
-Including macOS, Windows, Linux workstations, Chromebooks, servers, and other hosts.
-Including computers, servers, OT/ICS, containers, and other hosts.
-If you’d like to chat with other customers about their experience with Fleet, just let us know.
+We don’t have a public sample environment, but you can try Fleet out locally on your computer.
+Including servers, containers, workstations, and other hosts.
+Including macOS, Windows, Linux workstations, Chromebooks, servers, and other hosts.
+Including computers, servers, OT/ICS, containers, and other hosts.
+Fleet is designed to simplify how you manage devices. Going 100% Mac, or 50/50 Mac and Windows? What about Linux devices, or having employees enroll their personal phones? It’s up to you.
+Fleet lets you work directly with data and events from the native operating system.
+It still exposes familiar concepts similar to smart groups and extension attributes, but for every platform’s “special” nuance, and in a way that lets you go all the way down to the bare metal.
+With Fleet you only need to manage Mac, Windows, and Linux; not Omnissa, Intune, and your anxiety.
+We don’t have a public sample environment, but you can try Fleet out locally on your computer.
+
+ Try Fleet locally on your device
+ + +
+ See what Fleet can do
+ +Got questions? Ask us anything.
+You can come back here any time to continue with your deployment.
+Now that you’ve seen what Fleet can do, what do you want to do next?
+Great, let’s jump on a call to talk more about your fleet.
- Try Fleet locally on your device
+ +Get support and training or schedule a personalized demo for your team.
- -
- See what Fleet can do
+ +Grab some time and ask us anything.
Got questions? Ask us anything.
-You can come back here any time to continue with your deployment.
-Now that you’ve seen what Fleet can do, what do you want to do next?
-- Exciting. This is a team that listens to feedback. -
-
- Erik Gomez
-Staff Client Platform Engineer
-- The visibility down into the assets covered by the agent is phenomenal. Fleet has become the central source for a lot of things. -
-
- Andre Shields
-Staff Cybersecurity Engineer, Vulnerability Management
-- When we look at vendors, we look for ones that are very receptive to feedback, where you’re just part of the family, I guess. Fleet’s really good at that. -
-
- Harrison Ravazzolo
-Lead platform and identity engineer
-- Something I really appreciate about working with you guys is that it doesn't feel like I'm talking to a vendor. It actually feels like I'm talking to my team, and I really appreciate it. -
-
- Chandra Majumdar
-Partner - Cyber and Strategic Risk
-Great, let’s jump on a call to talk more about your fleet.
-Get support and training or schedule a personalized demo for your team.
- - -Grab some time and ask us anything.
- -Learn how to deploy and roll out Fleet in your environment.
+Learn how to deploy Fleet
+ + +Ask Fleet’s community of helpful, knowledgeable people.
+ +You can come back any time to continue or get help.
+Learn how to deploy and roll out Fleet in your environment.
- You can come back any time to continue or get help.
Learn how to deploy and rollout Fleet in your environment, get a Fleet Premium license, or both.
Learn how to deploy Fleet
- -Ask Fleet’s community of helpful, knowledgeable people.
+ + +
+ Purchase a Fleet Premium license
+ +You can come back in any time to upgrade.
+Unfortunately, managed cloud hosting is not yet available for growing deployments of less than 700 hosts.
+Spin up a local demo or get your Fleet Premium license key.
+
+ Run a local demo of Fleet
+ + +
+ Purchase a Fleet Premium license
Come back at any time to pick up where you left off.
Learn how to deploy and rollout Fleet in your environment, get a Fleet Premium license, or both. You can come back in any time to upgrade.
-Learn how to deploy Fleet
- - - -
- Purchase a Fleet Premium license
- -Unfortunately, managed cloud hosting is not yet available for growing deployments of less than 700 hosts.
-Spin up a local demo or get your Fleet Premium license key.
-
- Run a local demo of Fleet
- - -
- Purchase a Fleet Premium license
- -Come back at any time to pick up where you left off.
-