Big Walmart notes - huge, important meeting! Harri McDonalds template changes. Re-downloaded Luminate changes.

This commit is contained in:
Norm Rasmussen
2023-10-20 16:36:57 -04:00
parent cc0d192db2
commit bc6a785eb3
110 changed files with 653 additions and 36 deletions

Binary file not shown.

View File

@ -18,15 +18,22 @@
{{ course.instructor_names }}
</div>
<div class="np-card-content-footer">
{% if course.started? %}
<div class="course-details">
{% if course.started? %}
<div class="np-card-content-progress np-button-color">
{{ course.progress }}% Complete
</div>
{% else %}
<div class="np-card-content-progress np-button-color notstarted">
Not started
</div>
{% endif %}
<div class="np-card-content-progress np-button-color">
{{ course.progress }}% Complete
{% if course.properties.course_time > 0 %}
{{course.properties.course_time}} Min
{% endif %}
</div>
{% else %}
<div class="np-card-content-progress np-button-color notstarted">
Not started
</div>
{% endif %}
</div>
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
{% if course.has_to_restart? %}
{% include "course_version_outdated_popup", path: course_path %}

View File

@ -29,6 +29,10 @@
{% else %}
{% assign lp_progress = 0 %}
{% endif %}
{% comment %}
{% for group in current_person.groups %}
{{group.id}}
{% endfor %} {% endcomment %}
<div class="np-card np-no-horizontal-padding">

View File

@ -64,18 +64,23 @@
{% t .need_help %}
</div>
<div class="np-footer-support-item np-footer-support-email">
{% t .email %}
{% comment %} {% t .email %} {% endcomment %}
Contact ATOS at:
</div>
<a
{% comment %} <a
class="np-footer-support-item np-footer-support-link np-button-color"
href="mailto:{{ website_footer.school_customer_service_email }}"
>
{{ website_footer.school_customer_service_email }}
</a>
>
{{ website_footer.school_customer_service_email }}
{% endcomment %}
<a
class="np-footer-support-item np-footer-support-link np-button-color"
href="tel:18005153636" >
1-800-515-3636
</div>
{% endif %}
</div>
{% if current_person.signed_in? %}
{% if current_person.signed_in? %}
{% if current_person.properties.language == "es" %}
{% include "spanish_lang" %}
{% elsif current_person.properties.language == "fr" %}

View File

@ -0,0 +1,52 @@
{% styles default %}
{% styles colors %}
{% styles custom %}
{% unless current_person.email contains "preview" %}
{% assign group_count = 0 %}
{% assign is_in_all_group = false %}
{% if current_person.signed_in? %}
{% assign groups = current_person.groups %}
{% for item in groups %}
{% assign group_count = group_count | plus: 1 %}
{% if group_count <= 1 and item.id contains 'd8b83557-aad1-4a4e-85ee-ddbde5d1e507' %}
{% assign is_in_all_group = true %}
<script>
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
if (window.location.pathname !== '/app/second-login') {
window.location.replace('/app/second-login');
}
}, 1000);
});
</script>
{% endif %}
{% endfor %}
{% endif %}
{% if current_person.signed_in? %}
{% for item in current_person.groups %}
{% endfor %}
{% if current_person.groups.any? %}
{%else%}
<script>
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
if (window.location.pathname !== '/app/second-login') {
window.location.replace('/app/second-login');
}
}, 1000);
});
</script>
{% endif %}
{%endif%}
{% endunless %}
<script
src="https://code.jquery.com/jquery-3.5.1.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>

View File

@ -24,6 +24,12 @@
" style="margin-top: 10px;">
{{ course.progress }}% Complete
</div>
{% assign time = courses.enrolled | where: "id", course.id %}
{% if time.first.properties.course_time != blank %}
<div class="course-duration-lp">
{{time.first.properties.course_time}} Min
</div>
{%endif%}
</div>
<i class="fas fa-chevron-right np-learning-path-outline-icon"></i>
{% comment %} {% if course.optional? %}

View File

@ -38,7 +38,7 @@
class="np-button-background-color np-card-progress-bar">
</div>
</div>
<div class="np-card-content-progress
<div class="np-card-content-progress
{% if learning_path.completed? %} np-color-success {% else %} np-button-color {% endif %}
">
{% t shared.progress, count: lp_progress %}
@ -46,25 +46,4 @@
</div>
{% endif %}
<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if learning_path.enrolled? %}
{% if learning_path.current_item.course? %}
href="{% route learning_path_course, id: learning_path.current_item.id, learning_path_id: learning_path.id %}"
{% elsif learning_path.current_item.training_event? %}
href="{% route training_session, id: learning_path.current_item.id %}"
{% endif %}
{% else %}
href="{% route learning_path_enrollment, code: learning_path.enrollment_code %}"
{% endif %}
>
{% if learning_path.enrolled? == false %}
{% t shared.enroll %}
{% elsif learning_path.started? == false %}
{% t shared.learning_path.start %}
{% elsif learning_path.completed? %}
{% t shared.learning_path.view %}
{% else %}
{% t shared.continue %}
{% endif %}
</a>
{% learning_path_next_step_button learning_path, class: "np-top-button np-button-font-color np-button np-button-big" %}

View File

@ -0,0 +1,55 @@
{% assign swapped_groups = 'd1cc8cb4-fc5b-48b3-8e85-2f4faaf982dd, 0ecc1170-5761-4b5b-9047-5992232ceff4, 172784c9-7c26-4ffd-891f-4dbe8fda324f, 13765f3c-f1ee-4196-b846-1f07f63b3b64, c2caaef8-bebf-46b7-857b-79934a667495, 33842d33-6e9d-4dd6-a07c-49f2ce62b752, 011e1a52-beeb-4369-b030-a9ee3a0efe21, 216f8729-c6c6-4708-ad2c-fc732ef2d505, c1862cc1-a933-42bd-81cc-ebab4ec8d3d2' %}
{% assign is_in_group = false %}
{% for group in current_person.groups %}
{% if swapped_groups contains group.id %}
{% assign is_in_group = true %}
{% break %}
{% endif %}
{% endfor %}
{% if is_in_group%}
<div class="np-learning-paths-resources">
{% if items.any? %}
{% for learning_path in items %}
{% if learning_path.name contains "Workforce"%}
{% include "cards_learning_path" with learning_path %}
{% endif %}
{% endfor %}
{% for learning_path in items %}
{% if learning_path.name contains "CoreHR"%}
{% include "cards_learning_path" with learning_path %}
{% endif %}
{% endfor %}
{% for learning_path in items %}
{% unless learning_path.name contains "CoreHR"%}
{% unless learning_path.name contains "Workforce"%}
{% include "cards_learning_path" with learning_path %}
{% endunless%}
{% endunless %}
{% endfor %}
{% else %}
<div class="np-learning-paths-resources-container">
<div class="np-zero-state-text">
{% t .empty %}
</div>
<img class="np-zero-state-learning-paths" alt="{% t .empty %}" />
</div>
{% endif %}
</div>
{%else%}
<div class="np-learning-paths-resources">
{% if items.any? %}
{% for learning_path in items %}
{% include "cards_learning_path" with learning_path %}
{% endfor %}
{% else %}
<div class="np-learning-paths-resources-container">
<div class="np-zero-state-text">
{% t .empty %}
</div>
<img class="np-zero-state-learning-paths" alt="{% t .empty %}" />
</div>
{% endif %}
</div>
{% endif %}

View File

@ -0,0 +1,60 @@
<main class="np-box-container np-open-access sign-up">
<div class="np-box">
{% include "header_minimal" %}
<div class="np-box-content-container">
<form class="np-form np-box-content" action="{{ form.url }}" method="get" novalidate>
{% form_authenticity_token %}
<div class="np-form-headline">
{% t shared.welcome_to_school, school_name: current_school.name %}
</div>
<div class="np-form-subheadline">
{% t .headline, key: current_school.course_vocabulary %}
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_first_name">
{% t shared.first_name %}
</label>
<input
class="np-input"
autofocus="autofocus"
type="text"
name="first_name"
id="learner_first_name"
value="{{ form.first_name }}"
/>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_last_name">
{% t shared.last_name %}
</label>
<input
class="np-input"
type="text"
name="last_name"
id="learner_last_name"
value="{{ form.last_name }}"
/>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_email">
Harri {% t shared.email_address %} <br>(Please enter the email address that you use, or
plan to use, to access your Harri account.)
</label>
<input
class="np-input"
type="text"
name="email"
id="learner_email"
value="{{ form.email }}"
/>
</div>
<input
type="submit"
name="commit"
value="{% t shared.enter %}"
class="np-button np-button-big np-form-action"
/>
</form>
</div>
</div>
</main>

View File

@ -0,0 +1,341 @@
{% assign group_count = 0 %}
{% assign groups = current_person.groups %}
{% for item in groups %}
{% assign group_count = group_count | plus: 1 %}
{% if group_count >= 2 and item.id contains 'd8b83557-aad1-4a4e-85ee-ddbde5d1e507'%}
<script>
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
if (window.location.pathname == '/app/second-login') {
window.location.replace('/app');
}
}, 1000);
});
</script>
{% endif %}
{% endfor %}
{% include "header" %}
<main class="np-main np-box-container">
<div class="np-box">
<div class="np-box-content-container">
<form id="register-form" class="np-form np-box-content" novalidate>
<div class="np-form-title text-center"> Welcome! </div>
<div class="np-form-subtitle"> Please choose the option that best matches your current role to enroll in the
appropriate learning path. </div>
{% form_authenticity_token %}
<div class="np-form-field">
<label class="np-input-label" for="learner_role">
</label>
<select
class="np-input"
type="text"
name="learner[role]"
id="learner_role"
required
>
<option class="default-option" disabled selected id="default-option">Your role</option>
<option value="General Manager">General Manager</option>
<option value="Kitchen Manager">Kitchen Manager</option>
<option value="People Manager">People Manager</option>
<option value="Guest Services Manager">Guest Services Manager</option>
<option value="Swing/Shift Manager">Swing/Shift Manager</option>
<option value="Manager Trainees">Manager Trainees</option>
<option value="Supervisor">Supervisor</option>
<option value="Supervisor/Role Assigment">Supervisor w/Role Assignment</option>
<option value="Org Admin">Org Admin/Back Office Admin</option>
<option value="Owner Operator">Owner/Operator</option>
<option value="Crew Trainer">Crew Trainer</option>
<option value="Corporate/Field Staff">McDonalds Corporate/Field Staff</option>
</select>
</div>
<div class="np-form-subtitle">Please provide your store number</div>
<div class="np-form-field">
<label class="np-input-label" for="store_number">
</label>
<input
class="np-input"
type="text"
name="store[number]"
id="store_number"
placeholder="Store Number(NSN)"
required
>
</div>
</form>
<button id="send_button" class="np-button np-button-big np-button-large-font np-form-action">
Update Information
</button>
</div>
</div>
</main>
{% include "footer" %}
<style>
@media (min-width: 1440px) {
#password-too-short-alert {
position: absolute;
right: 25.5%;
bottom: 23%;
color: salmon;
font-size: 13px;
}
#passwords-dont-match-alert {
position: absolute;
right: 23%;
bottom: 14.5%;
color: salmon;
font-size: 13px;
}
}
@media (min-width: 769px) and (max-width: 1024px) {
#password-too-short-alert {
position: absolute;
right: 24%;
bottom: 23%;
color: salmon;
font-size: 13px;
}
#passwords-dont-match-alert {
position: absolute;
right: 21.5%;
bottom: 14.5%;
color: salmon;
font-size: 13px;
}
}
@media (min-width: 426px) and (max-width: 768px) {
.np-box-content-container {
align-items: center;
}
}
@media (min-width: 376px) and (max-width: 425px) {
.np-input {
padding: 0 0.75rem;
}
}
@media (min-width: 326px) and (max-width: 375px) {
.np-input {
padding: 0 0.75rem;
}
}
@media (max-width: 325px) {
.np-input {
padding: 0 0.75rem;
}
}
.np-main {
margin: 25px 0;
}
.np-box {
display: flex;
flex-direction: row;
width: unset !important;
box-shadow: none;
}
.np-box-container {
height: unset !important;
background: none;
}
.hero-image-left-desktop {
width: 60%;
}
.hero-image-left-mobile {
width: 100%;
display: none;
}
.np-box-content-container {
margin-top: 0;
margin-bottom: 0;
padding: 2rem;
display: flex;
flex-direction: column;
}
.np-form-subtitle {
margin-bottom: 1.25rem;
}
.np-input {
background-color: #FFF6F0;
border: none;
border-radius: 4px;
}
.np-input::placeholder {
color: #6F7277;
font-size: 16px;
}
#default-option {
color: #6F7277;
font-size: 16px;
}
.selection-option {
font-family: Inter;
}
.body {
height: 100%;
}
#learner_role {
color: #1B1C1D;
text-align: left;
}
@media only screen and (min-width: 1190px) {
.hero-image-left-desktop {
min-width: 60%;
}
}
@media only screen and (max-width: 768px) {
.np-box-content-container {
padding: 2rem 2rem 2.25rem;
}
.hero-image-left-desktop {
display: none;
}
.hero-image-left-mobile {
display: block;
}
.np-box {
flex-direction: column;
margin: 0;
}
.np-main {
margin: 0;
}
.np-box-content-container {
margin-left: 0;
}
}
#send_button {
pointer-events: none;
background: #6F7277;
}
.loader {
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #00bf8f;
border-bottom: 16px solid #00bf8f;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<style>
.np-box-container {
background: none;
}
</style>
<script>
function checkIfInputsExist (){
window.setTimeout(function(){
if ($("#store_number")[0].value.length > 0 && $("#learner_role")[0].value != "Your Role") {
$("#send_button").css("background-color","#de352a");
$("#send_button").css("pointer-events","auto");
}
else {
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
}, 500)
}
document.addEventListener('keydown', checkIfInputsExist);
document.getElementById("learner_role").addEventListener('change', checkIfInputsExist);
document.getElementById("send_button").addEventListener("click", function() {
var selectedRole = document.getElementById("learner_role").value;
var groupUuid ="";
switch (selectedRole) {
case "General Manager":
groupUuid = "0f977347-6e60-4de1-bad3-f6b413ab7eef";
break;
case "Kitchen Manager":
groupUuid = "df0b4cea-fac6-4991-8902-b2202b9c71c5";
break;
case "People Manager":
groupUuid = "ed4ae611-ed12-41c1-b1ff-03d339813f70";
break;
case "Guest Services Manager":
groupUuid = "df0b4cea-fac6-4991-8902-b2202b9c71c5";
break;
case "Swing/Shift Manager":
groupUuid = "9b5674c8-e5f1-47ad-a380-cc9fb1a73c02";
break;
case "Manager Trainees":
groupUuid = "1bed05ca-c5e6-4874-8e14-e2815ccdba7f";
break;
case "Supervisor":
groupUuid = "1e63de54-0676-427a-a3f8-da2625f47ce5";
break;
case "Supervisor/Role Assigment":
groupUuid = "1e63de54-0676-427a-a3f8-da2625f47ce5";
break;
case "Org Admin":
groupUuid = "007d0b66-092d-4fda-a706-6b34cf1dddf4";
break;
case "Owner Operator":
groupUuid = "bbd256f2-48e2-407d-85b6-d016010c9649";
break;
case "Crew Trainer":
groupUuid = "afc4049d-7363-4301-a729-527cfbe5ef61";
break;
case "Corporate/Field Staff":
groupUuid = "bbd256f2-48e2-407d-85b6-d016010c9649";
break;
};
console.log("Selected Role: " + selectedRole);
console.log("Group UUID: " + groupUuid);
SendInfos(selectedRole, groupUuid);
});
function SendInfos(role, groupUuid) {
var xhr = new XMLHttpRequest();
url = "https://webhooks.workato.com/webhooks/rest/aa37cb7d-653d-43fe-a7b0-e4f9c2d6bd1e/harrimc-collect-learner-information"
xhr.addEventListener("load", e => {
window.sessionStorage.propertiesAdded = 'true';
window.location.replace('/app');
});
xhr.open("POST", url, true);
xhr.send(JSON.stringify({
user_id: '{{ current_person.id }}',
mc_d_role: role,
store_number_nsn: $("#store_number")[0].value,
group_uuid: groupUuid
}));
};
</script>

View File

@ -35,4 +35,16 @@
.green-text,
.green-status{
color: green;
}
.course-duration-lp {
color: #de352a;
font-size: .75rem;
font-weight: 900;
text-transform: uppercase;
margin-top: 5px;
}
.text-center {
text-align: center;
}

View File

@ -291,3 +291,10 @@ Questions and Topics are mostly around Aaron's workflow.
* Full launch decision - how do we get all 10k people in?
* Practical Question: T3 domains and laundry list of items.
* Master Domain & Workflows: can Amit make a GUI to do the master domain list?
## 10/20/2023
### Email, Design, and Amit
* Manager permissions issues - when a manager creates a course, they don't have access to it. How to automate it?
* Rachel and design to discuss search results page and requested changes.

View File

@ -786,3 +786,92 @@ Cassie and Krystal
* Patrick Duffy on today's tech call. Joined for 1 minute and then dropped.
* Wasn't discussed: deep linking to the categories is going to take a much longer time than expected.
* Cassie to work on content for MyMetrics and glossary.
## 10/20/2023
### Spark/Gainsight Roadmap Meeting
Leonardo - Marketing enablement platform for Spark
Rafi - Driver experience and driver journey team
Background:
* Spark - started 4 years ago
* Additional fulfillment channel for Walmart
Key goals:
* How do we become the most trusted platform
* Great earnings experience
* Engaging learning content
* Communicating with drivers at every leg of their journey
* Trust leads to retention
* How can they become the best low cost delivery provider
* Partnerships with sephora, apple, autozone, etc.
* Conversion - early tenure buckets to more tenured buckets
* Lose 35% in the first 90 days
* How to get to a "defectless" platform
* Remove friction and pain points
* How to deliver the right content at the right moment?
* Gamification and loyalty program for 2024
* Perks and awards - leaderboards, points, badges, etc
Questions:
Joris Question: What kind of content are you thinking of?
Rafi - two large categories:
* Driver learning (earnings, care about new functionality, etc)
* Engagement - timely content, contests, promotions, perks, etc
Joris Question: Proactive content - in-app experience? Email? SOmething else?
Rafi - Both, but driver portal is also important.
* Out-of-app content experience that _feels_ like an in-app experience.
**Every time we are pushing a feature or dealing with a crisis, Northpass is what powers that communication**
Tracking:
* Milestone tracking, percentages (content efficacy metrics), if the content is correct, it should push metrics (like CPO).
* Contact rate is the greatest single indicator of churn propensity for Spark.
* Support is a churn deterrent.
* Level of friction at each phase - behavior from humans turn drivers away (cashiers, walmart associates, etc)
* Total: 9m contacts / year
* 47% of those contacts are either education or technical support (check on that last one).
Contacts:
* Frequency of contact rate also indicates churn - 122%. Contact rate is a percentage of total orders. Over 100% means multiple
calls about the same offer/order. Average contact rate is 1.7%.
Fun fact - activation rate without RC - 50-60%
Activation rate with RC - 93%
**Analytics:**
* Are they improving activation rates?
* Analytics feel like a black box for them
* Numbers exponentially shrink as we move through the driver funnel
App & Portal:
* Driver portal is outside of the app -
* Onboarding experience happens on the website, NOT on the app. Future roadmap item.
* Rafi worked with a previous content partner that had more interactive features and content delivery.
* AE Program starts November 15th. --> What is AE?
* Resolve "that" with analytics. What does that mean? Seems like old distrust of analytics is still present.
* Rafi showed example from deck of long search descriptions. This is not accurate and current design.
* Long descriptions are not intuitive search, discuss how to improve search capabilities in Northpass.
Travis & Product team:
* Broader Product Roadmap
* Customer Success & discuss how other Customers are extracting the most value
* (Krystal) - What sort of content creation tools are other people using?
Other Notes:
* Exponential growth next year. Expecting rapid expansion.
TODO: Roadmap session - schedule some time with same team for Allyson and Joris to lead.
* Krystal - Enhancement of video capabilities. Wants to double-down.
* Travis - Track all tasks across - Monday.com access?

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More