Karega Anglin, Author at Perficient Blogs https://blogs.perficient.com/author/kanglin/ Expert Digital Insights Wed, 19 Jun 2024 19:27:12 +0000 en-US hourly 1 https://blogs.perficient.com/files/favicon-194x194-1-150x150.png Karega Anglin, Author at Perficient Blogs https://blogs.perficient.com/author/kanglin/ 32 32 30508587 Using Rendering Parameters on a XM Cloud component https://blogs.perficient.com/2023/10/25/using-rendering-parameters-on-a-xm-cloud-component/ https://blogs.perficient.com/2023/10/25/using-rendering-parameters-on-a-xm-cloud-component/#respond Wed, 25 Oct 2023 19:16:54 +0000 https://blogs.perficient.com/?p=347722

What about Rendering Parameters?

I recently did a POC using rendering parameters in a component in XM Cloud. In this blog i will describe my approach, issues faced and how i overcame them.
Adding a rendering to a component, is relatively straight forward in Sitecore development, i.e.(https://doc.sitecore.com/xmc/en/developers/xm-cloud/walkthrough–building-a-simple-rendering.html).
However, there are some circumstances where things are a little bit more complex (than they need to be). The use-case for this particular POC is we want to add a background color to a Rich Text component. The aim is to apply this style as an extra parameter to the component in Sitecore and pass it along to the front-end.

Technologies:

Sitecore XM Cloud
Sitecore Pages Editor
Nextjs components

Create rendering parameters

For adding extra parameters to a component (e.g for things such as additional styles, data or anything custom), Sitecore provides a facility called “Standard Rendering Parameters”.  This is a Sitecore OOTB template for this specific purpose. We would derive our custom template from `/sitecore/templates/System/Layout/Rendering Parameters/Standard Rendering Parameters`. For this POC I created a parameter template that would be a DropLink pointing to a item list of “Colors” we can use for our background style. By doing so, would give the content authors the choice of colors to select from during editing.

Rp

The datasource for “textColor” is a directory of predefined “Text Color” items.

Rp2

*Note: One technical draw back with this approach is that selecting an item in a DropLink datasource field retrieves the item ID and not it’s value. More on how I overcame that issue further on.

Front-end Component

For the custom Rich Text component,
  1. In Sitecore I cloned the existing Rich Text rendering and renamed it Color Rich Text
  2. In the components folder under ../src/MySite/src/components, I copied “Rich Text.tsx” to “Color Rich Text.tsx
Then we change the code as follows:
import React from 'react';
import { Field, RichText as JssRichText } from '@sitecore-jss/sitecore-jss-nextjs';
interface Fields {
  Text: Field<string>;
}
export type RichTextProps = {
  params: { [key: string]: string };
  fields: Fields;
};
export const Default = (props: RichTextProps): JSX.Element => {
  const text = props.fields ? (
    <JssRichText field={props.fields.Text} />
  ) : (
    <span className="is-empty-hint">Rich text</span>
  );
  const id = props.params.RenderingIdentifier;
  return (
    <div
      className={`component rich-text ${props.params.styles.trimEnd()}`}
      id={id ? id : undefined}
    >
      <div className="component-content">
        {text}
        <style jsx>{`
          .component-content {
            background-color: ${props.params.textColor ? props.params.textColor.trimEnd() : '#FFF'};
          }
        `}</style>
      </div>
    </div>
  );
};
Here we are expecting the value of the parameter textColor to be sent in the props of the component as  props.params.textColor .
Now that these pieces are in place, I added this component to a page via regular Sitecore Experience Editor.

Connecting Pages Editor to your local

Next I connected the XM Cloud Pages Editor to my local environment by adding this entry in “Local Storage” in your browser and navigate to https://pages.sitecorecloud.io/
"Sitecore.Pages.LocalXmlCloudUrl": "https://xmcloudcm.localhost/"

Attachingpages

Now we refresh the pages editor

Pageseditor

As we can see the pages editor displays the items in the DropLink correctly, so i can select the color.  So the field shows up in pages editor, however the selected color is not applied. Lets check the graphQL playground to see what is data getting sent.
See in graphQL playground:

Graphql1

So we see the field “textColor” coming through as a parameter, however the value is the Item ID of the selected color item, not the value. How do we overcome this hurdle?

Research and solution

I found this article by from Any Paz
https://andypaz.com/2021/01/05/serializing-rendering-parameters-in-the-layout-service/ which led me in the right direction to  understand serialization of rendering parameters, however my desired result is not to get the serialized item as a string, but the actual value to be used for the background color, i.e. the Hex value stored in the value field. So after some research I realized this was actually a good start, but needed some modifications.
    1. I  created a data template that governs serialization of an item in Sitecore. This way I can determine what i want serialized.

      Rpstdv

    2. I created a custom pipeline processor and override the existing RenderJsonRendering.Initialize pipeline  to extend it to serialize only the item flagged in Sitecore to serialize.
I made these two modifications generic enough to apply wider use-cases for custom serializing custom rendering parameters.
using System.Collections.Generic; 
using Sitecore.Data; 
using Sitecore.Data.Items; 
using System.Web; 
using Sitecore.Abstractions; 
using Sitecore.LayoutService.Configuration; 
using Sitecore.LayoutService.ItemRendering; 
using Sitecore.LayoutService.Presentation.Pipelines.RenderJsonRendering; 
using Sitecore.XA.Feature.LayoutServices.Integration.Pipelines.TransformParameters; 
using System.Linq; 
using Newtonsoft.Json.Linq; 
using Sitecore.Mvc.Presentation; 
using System; 
using Sitecore.LayoutService.Serialization; 
namespace MySite.Foundation.LayoutService.PipelineProcessors 
{ 
    public class CustomInitialize : Initialize 
    { 
        IRenderingConfiguration _renderingConfiguration; 
        protected BaseCorePipelineManager PipelineManager; 
        public CustomInitialize(IConfiguration configuration, BaseCorePipelineManager pipelineManager)  
            : base(configuration) 
        { 
            PipelineManager = pipelineManager; 
        } 
        protected override RenderedJsonRendering CreateResultInstance(RenderJsonRenderingArgs args) 
        { 
            string componentName = base.GetComponentName(args.Rendering?.RenderingItem?.InnerItem); 
            _renderingConfiguration = args.RenderingConfiguration; 
            //Note: the constructor below is different for Sitecore 9.x and 10. The below will only work in Headless Services for Sitecore 10. 
            RenderedJsonRendering rendering = new RenderedJsonRendering 
            { 
                ComponentName = componentName ?? args.Rendering.RenderingItem.Name, 
                DataSource = ((!string.IsNullOrWhiteSpace(args.Rendering.DataSource)) ? args.Rendering.DataSource : args.Rendering.RenderingItem.DataSource), 
                RenderingParams = SerializeRenderingParams(args.Rendering), 
                Uid = args.Rendering.UniqueId 
            }; 
            TransformParametersArgs transformParametersArgs = new TransformParametersArgs 
            { 
                Rendering = rendering 
            }; 
            transformParametersArgs.CustomData.Add("SupportedParameters", GetAllKeys(args.Rendering.Properties["par"])); 
            PipelineManager.Run("transformParameters", transformParametersArgs); 
            return transformParametersArgs.Rendering; 
        } 
        protected virtual IDictionary<string, string> SerializeRenderingParams(Rendering rendering) 
        { 
            IDictionary<string, string> paramDictionary = rendering.Parameters.ToDictionary(pair => pair.Key, pair => pair.Value); 
            foreach (string key in paramDictionary.Keys.ToList()) 
            { 
                if (!ID.TryParse(paramDictionary[key], out var itemId)) continue; 
                Item item = rendering.RenderingItem.Database.GetItem(itemId); 
                //Check if serializable 
                if (item.Fields["SerializeItem"]!=null && item.Fields["SerializeItem"].Value == "1") 
                { 
                    paramDictionary[key] = JObject.Parse(_renderingConfiguration.ItemSerializer.Serialize(item, new SerializationOptions() { DisableEditing = true }))["Value"]?.Value<string>("value"); 
                } 
                
            } 
            return paramDictionary; 
        } 
        protected virtual string[] GetAllKeys(string par) 
        { 
            if (string.IsNullOrEmpty(par)) 
            { 
                return Array.Empty<string>(); 
            } 
            List<string> list = new List<string>(); 
            string[] array = HttpUtility.UrlDecode(par).Split('&'); 
            for (int i = 0; i < array.Length; i++) 
            { 
                string[] array2 = array[i].Split('='); 
                if (array2.Length != 0) 
                { 
                    list.Add(array2[0].Trim()); 
                } 
            } 
            return list.ToArray(); 
        } 
    } 
}

A quick patch into the pipeline

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
        <sitecore> 
            <pipelines> 
                <group groupName="layoutService"> 
                    <pipelines> 
                        <renderJsonRendering> 
                            <processor type="MySite.Foundation.LayoutService.PipelineProcessors.CustomInitialize, MySite" resolve="true" 
                                       patch:instead="*[@type='Sitecore.XA.Feature.LayoutServices.Integration.Pipelines.RenderJsonRendering.Initialize, Sitecore.XA.Feature.LayoutServices.Integration']"/> 
                        </renderJsonRendering> 
                    </pipelines> 
                </group> 
            </pipelines> 
        </sitecore> 
</configuration>
Now, when I look at the results coming back in the graphQL playground, we see the value returned

Graphql2

Now looking at the pages editor we see something interesting

Pageseditor2

Pages editor is a live editor, therefore we see the color change immediately once we select the parameter.
In the live site we see our desired result:

Liveurl

This was an interesting POC, and I hope to uncover more useful case-studies and POCs from the new offering of Sitecore XM Cloud.
Until next time, stay curious!
]]>
https://blogs.perficient.com/2023/10/25/using-rendering-parameters-on-a-xm-cloud-component/feed/ 0 347722
XM Cloud Deployments: Static site deployment using Netlify CLI https://blogs.perficient.com/2023/06/16/xm-cloud-deployments-static-site-deployment-using-netlify-cli/ https://blogs.perficient.com/2023/06/16/xm-cloud-deployments-static-site-deployment-using-netlify-cli/#respond Fri, 16 Jun 2023 20:42:17 +0000 https://blogs.perficient.com/?p=337975
In my previous post (XM Cloud Deployments: Static site deployment using Vercel CLI), I created a Sitecore XM Cloud deploy script to use the Vercel CLI. In this next challenge, I will be looking at doing the same in Netlify.
A little background:
Netlify and Vercel are two major competitors in the JamStack space. Both services are cloudbased  platforms that offer Server Side Rendering (SSR) and Static Site Generation (SSG) hosting  which has gained recent popularity. One can see close feature parity between the two platforms, which make them tough choices when deciding which JamStack platform to choose.
To get started, please make sure that you have access to:

Netlify UI deployment

Connect to XM Cloud environment

Let’s make a note of our chosen environment ID that contains the site we are going to deploy.
Next, we need to figure out the environment variables that we will use to deploy our site in Netlify. For this, we will need:
  • GRAPH_QL_ENDPOINT
    • – XM Cloud edge URL(i.e. https://edge.sitecorecloud.io/api/graph/v1)
  • JSS_APP_NAME
    • – the Site name in Sitecore
  • PUBLIC_URL
    • Value of this is will be the generated URL when you setup your site in Netlify below
  • SITECORE_API_KEY
    • Speaking of how to generate the access token (New-EdgeToken.ps1 script found in the repo above)

Create Netlify Account

Creating an account in Netlify is straightforward, and for this POC, I created a free account. Once the account is created, go ahead and create a site and select the option “Import an existing project”.

Netlify Exisiting Account

Select the GitHub repo for you XM Cloud instance you want to connect to. With this option we setup a CI/CD relationship:
  1. Netlify will pull the latest of that branch, when you trigger a deploy in Netlify or in the CLI.
  2. Deploys are triggered in Netlify from Github whenever changes are made to the selected branch

Build Settings

The build setting instructs Netlify what commands to issue when conducting the build.

Netlifybuildsettings

Environment variables

Next we will have to create the environment variables noted above

Netlifyenvironment Variables

*Since this is a free account I am not able to set the scopes/contexts these variables.
Once all is setup you will now have generated URL similar to  <sitename>.netlify.app, in my case https://sxastarter.netlify.app/.
This is also what we will use as our PUBLIC_URL variable
At this point, all things should be in place to “Trigger deploy” found under the deploy menu.

Netlifytriggerdeploy

If successful you should see a  deploy log similar to to the following.

Netlifydeploylog

If there were any issues, the log would report failed and a complete stacktrace of the error, which i find quite useful.

Local Deployment

For local deployment we will be doing most of our work in the static site folder, i.e. /src/sxastarter.
What basically happens here is that we will be using the Netlify CLI to manually build the local folder and assets, then push that build up to the Netlify cloud account for deployment.
  1. Install Netlify CLi by running this at command line
  npm install -g netlify-cli - netlify
  1. Connect to our account in netlify by running (you will be asked a few questions about your Netlify account, i.e. sites to use ..etc)
    ntl init or netlify init

    Ntlinit

  2. Build local folder and assets, which requires the same settings as mentioned above in the build settings on the Netlify website (you will maybe asked about what build command to use and the deployed folder, in my case it was
    npm run next:build  and .next  respectively.
    Build and deploy to Netlify account
    ntl deploy --build --prod or netlify deploy --build --prod

    NetlifybuildcliNtldeploy

Now you should be able to view your deployed website on the Netlify generated URL

Netlifyurl

A script for this type of deployment may look like this
$netlifyTOken="xxxxxxxxxxxxxxxx"

# Check if the Netlify CLI is installed
if (-not (Get-Command netlify -ErrorAction SilentlyContinue)) {
    # Install the Vercel CLI using npm
    npm install -g netlify-cli
}


# Deploy the project using the Netlify CLI
netlify deploy --build --prod  --auth $netlifyTOken

Note: the $netlifyTOken can be created in the Netlify UI in the instance you need to authenticate

Hopefully this was a useful walkthrough of creating local and cloud deploys in Netlify. As mentioned above, this was similar to my previous work with Vercel and it was pretty straight forward, given the feature parity between both platforms. Next I will be tackling XM Cloud deployment on the Amplify platform, till then, stay curious!
]]>
https://blogs.perficient.com/2023/06/16/xm-cloud-deployments-static-site-deployment-using-netlify-cli/feed/ 0 337975
XM Cloud Deployments: Static site deployment using Vercel CLI https://blogs.perficient.com/2023/03/22/xm-cloud-deployments-static-site-deployment-using-vercel-cli/ https://blogs.perficient.com/2023/03/22/xm-cloud-deployments-static-site-deployment-using-vercel-cli/#respond Wed, 22 Mar 2023 17:22:03 +0000 https://blogs.perficient.com/?p=331105
Perficient Xm
For the scenario of independent deployment of your NextJs static site, say in an automated deployment, one missing piece is a way to push the SSG site into Vercel.
Here I provided a simple deployment script using the Vercel CLI of the static site in the XM Cloud project.

Code:

# Set up variables with your Vercel project and Sitecore XM Cloud environment details
$VercelProjectName = "POC Project"
$VercelToken = "xxxxxxxxxxxxxxx"


# Set up the path to the Next.js project subfolder
$nextjsSubfolderPath = "../src/sxastarter"


#Store current location
$currentDir = Get-Location


# Check if the Vercel CLI is installed
if (-not (Get-Command Vercel -ErrorAction SilentlyContinue)) {
# Install the Vercel CLI using npm
npm install -g Vercel
}
# Change to the Next.js project subfolder
cd $nextjsSubfolderPath


# Log in to your Vercel account
Vercel login


# Deploy the project using the Vercel CLI
Vercel deploy --prod --token $VercelToken


# Change back to the original directory
cd $currentDir

The script is really simple but accomplishes a lot utilizing the Vercel cli. To start you will need a Vercel auth token, which can be generated from your Vercel account

Vercelauthtoken

Next point of interest is actually using the Vercel cli to do the deployment (details of which can be found at https://Vercel.com/docs/cli/deploy), providing the deployment parameters and your token.
Script output is as follows
  1. Login to Vercel using Github or the other SSO participants

Vercelcli

  1. Confirmation of successful login to Vercel

Vercelloginsuccess

  1. Vercel Cli attempts to upload the current source code from the indicated directory

Vercelclideployprogress

  1. Successful upload and build

Vercelclideployend

  1. View the deployment on the Vercel site

Vercelclideployinterface

With this script, you can further automate you deployments of the static sites from your local XM Cloud into Vercel.

Key points to note:

  1. Environment Variables:- Remember to setup your Sitecore environment variables in Vercel
  2. Setup Github Repo:-  Connecting your Github repo to your Vercel project enables real-time builds on branch commits
]]>
https://blogs.perficient.com/2023/03/22/xm-cloud-deployments-static-site-deployment-using-vercel-cli/feed/ 0 331105
Deploying a Sitecore Instance on a “Local” Kubernetes (k8s) Setup Pt2 https://blogs.perficient.com/2023/02/20/deploying-a-sitecore-instance-on-a-local-kubernetes-k8s-setup-pt2/ https://blogs.perficient.com/2023/02/20/deploying-a-sitecore-instance-on-a-local-kubernetes-k8s-setup-pt2/#respond Mon, 20 Feb 2023 15:30:15 +0000 https://blogs.perficient.com/?p=327977
In the first blog of this series (here), I laid the foundation of why I chose this POC and my investigation into potential tools such as MiniKube and Kind, and why these did not work for me. I eventually settled on AKS Edge Essentials from Microsoft. Now I will take a slightly deeper dive into how I put things together.

The Solution

Putting things together, was relatively straight forward.. sort of
  1. AKS creates the infrastructure such as Clusters and the Linux and Windows Nodes
  2. Use the existing K8s deployment yaml files from the Sitecore deployment files of my choosing. Not all the files will be used and I created some Powershell scripts to help with the installation at each phase
  3. Verifying the installation by connecting to the CM/CD service to see the Sitecore landing page and attempt to login.

AKS Edge Essentials

Using the ASK Edge Essentials was relatively easy due to the comprehensive documentation in the How-to section on their site.
For installation ensure that the msi file for the AKS executable and the windows node files are extracted into the folder you are using for the deployment, then do:
msiexec.exe /i "AksEdge-kXs-x.xx.x.msi" ADDLOCAL=CoreFeature,WindowsNodeFeature

After installation we need to consider what type of machine deployment we are doing. For my setup I used a Single Machine Cluster with both Linux and Windows Node (mixed workload cluster). The tool has a command tool which generates a json config file based on the deployment type and node type you specify.

New-AksEdgeConfig -DeploymentType SingleMachineCluster -NodeType LinuxAndWindows -outFile .\aksedge-config.json | Out-Null
After this, the infrastructure setup is started using:
New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json

Sit back and watch the magic.

*Note*: A compatibility check will be executed which will verify your hardware resources during the setup, which may fail, so take note of the hardware requirements.
(Kubernetes Dashboard: By default the Kubernetes Dashboard is not enabled. See scripts in repo to install dashboard and create admin user to login.)

Sitecore Deployment

For the Sitecore part of this installation, I reused the standard Kubernetes deployment package that comes with comes with the Sitecore 10.3 Container Deployment under the k8s folder. However, I did not use all the yaml files, as that setup was geared to an Azure AKS type of deployment. I had to do some modifications and basically remove anything Azure AKS related.
Ended up with a folder structure similar to the following:
external– (Linux deployed services)
    • MSSQL Server
    • Redis
    • Solr
helm– Streamlines installation of Kubernetes applications
ingress-nginx – Cluster Load Balancing goodness
init – To bootstrap Sitecore and solr databases
license – For you valid Sitecore license file
secrets – files to store passwords and secret information used by your kubernetes deployment
volumes – used to configure mount points
So to not make installation a pain, and having to run the  kubectl command to load each and every configuration, I created Powershell scripts to be run in the order they are named to ensure a smooth and predictable installation flow.

Kubernetesfolderstructure

At the end of the day I had a working Kubernetes Dashboard showing all my workloads, Pods and Services

Kubernetesdashboard

And with some bit of port forwarding and hacking for the CM/CD (will discuss in the next part of this series)

Sitecorelanding

Sitecore Launcher

Sitecoredashboard

 

Next post, I will go through the issues I faced getting things up, and certain caveats to look for.

In the meantime feel free to check out the project Github repo here.
]]>
https://blogs.perficient.com/2023/02/20/deploying-a-sitecore-instance-on-a-local-kubernetes-k8s-setup-pt2/feed/ 0 327977
Deploying a Sitecore Instance on a “Local” Kubernetes (k8s) Setup https://blogs.perficient.com/2023/02/14/deploying-a-sitecore-instance-on-a-local-kubernetes-k8s-setup/ https://blogs.perficient.com/2023/02/14/deploying-a-sitecore-instance-on-a-local-kubernetes-k8s-setup/#comments Tue, 14 Feb 2023 17:33:22 +0000 https://blogs.perficient.com/?p=327795
Have you ever wondered about having a local Sitecore instance on a local deployment of k8s?
I was curious and decided to dive headfirst into the unknown world of k8s virtualization on a local setup. In this blog series I will be sharing the details my journey, my findings the mistakes/successes, and the final state of my discovery.

The Idea

Having experience with developing/deploying Sitecore with Docker Containers, I was curious as to the possibility of doing the same using Kubernetes. So the idea was have a POC of a local environment on my Windows 10/11 PC, with full blown Kubernetes, running Sitecore.

The Research

So my research took me to various tools, from Minikube, Kind to the recently released AKS Edge Essentials Preview from Microsoft TechCommunity. I will go through each and briefly discuss them

Minikube

Minikube seemed a likely solution, as it offered running k8s on a windows pc. The setup was a bit involved and I had to research a fair bit on running kubectl commands to get my cluster up and individual Pods running.
However, the limitations of not being able to run mixed PODs of Linux and Windows, cancelled it as an option. The Sitecore CMS is a ASP.NET application and would need a windows node to operate.

Kind

Similar to Minikube, Kind offers to spin up local kubernetes cluster on a windows pc. However, the setup and pre-requisites were just too overwhelming for a simple POC. Also getting a windows node in operation was not a straight forward thing. If anyone else is up for the challenge, I’d be interested in your approach

AKS Edge Essentials

I was almost at the point of calling it a day in my pursuit, when a quick google search lead me to a publication from the Microsoft TechCommunity on a preview of Azure Kubernetes Service Edge Essentials (https://techcommunity.microsoft.com/t5/internet-of-things-blog/taking-azure-arc-and-kubernetes-to-the-edge/ba-p/3650599?WT.mc_id=modinfra-0000-thmaure) or Project Haven as introduced during build 2022. Reading through the article, I picked up on the products ability to:
  1. Run both Linux and Windows container applications
  2. Light-weight Kubernetes distribution-both K3s and K8s
  3. Deployable on any Windows PC class device with windows 10/11 Enterprise and Pro.
It was then I realized I had found my answer.
I reached out to the project team to give me early access to the preview to start building out my solution. It took a few weeks, but I got back a reply and was given access to the public preview and started building out my POC.
In my next blog (The Solution) I will go through the build process and challenges I faced such as:
  1. What version of Sitecore I decided to use
  2. Hardware requirements
  3. What K8s configurations I used and modified
  4. How easy it was to spin-up the deployment
In the meantime feel free to check out the project Github repo here.
]]>
https://blogs.perficient.com/2023/02/14/deploying-a-sitecore-instance-on-a-local-kubernetes-k8s-setup/feed/ 2 327795
My Journey with the Sitecore MVP Mentor Program Part 1 https://blogs.perficient.com/2022/11/09/my-journey-with-the-sitecore-mvp-mentor-program-part-1/ https://blogs.perficient.com/2022/11/09/my-journey-with-the-sitecore-mvp-mentor-program-part-1/#respond Wed, 09 Nov 2022 13:44:15 +0000 https://blogs.perficient.com/?p=321628
So you want to be a Sitecore MVP? Welcome to the Sitecore MVP Program.
The MVP mentor program provides guidance to those in the Sitecore Community who want to become an MVP. Join this program and gain new experiences, skills, knowledge, support and more. – https://mvp.sitecore.com/Mentor-Program
I’d like to share my experience with the program so far and, hopefully, continue sharing my journey as I progress toward the goal of becoming a Sitecore MVP.
Like most fellow Sitecore Platform Engineers (using the term “engineers” to cover the spectrum of technical, non-technical, newbie, and experts of the platform), my goal is to eventually be recognized as a Most Valuable Professional in the Sitecore Platform. Someone who loves the Platform and Community to the extent of contributing their knowledge and time to helping both developers and clients utilizes the full potential of what Sitecore has to offer. And like most of us, I find it hard to find the space and time to actually do what is required to qualify for being elected an MVP while juggling the many other responsibilities on our plate.
So, to me, the MVP Mentor initiative by Sitecore is really a progressive push to help ones such as myself along to road.

Getting Started in the Sitecore MVP Mentor Program

For me, getting started as a Mentee was as easy as sending an email to mvp-program@sitecore.com . Kudos to the Sitecore team (special shoutout to Nicole) for promptly responding to me within a few days. Although it took a few weeks to pair me up with my current mentor, the team periodically let me know that they were working on pairing me with a Mentor close to my time zone.

Getting Connected to my Mentor

Finally, within 2 months, I was paired up with my current mentor Jean-Nicolas Gauthier. Again the team did an excellent job of connecting us in an introductory email and brief Mentor/Mentee notes about the program and expectations. We quickly connected via LinkedIn and started talking. Jean-Nicolas was a perfect fit for me as someone who was well-connected in the MVP community and who heads the Montreal and Quebec SUGs. He works hard to push me to get stuff done (more on that later)
Expectations must be set, agreed and followed between yourself and the Mentor. Remember, this is a voluntary exchange of time and effort, and is not to be taken for granted. The effort is really on you, so make the best of it.

Getting to Work

Now that we have an agreed time and schedule, the real work starts. Jean-Nicolas was very upbeat about getting me to do things. Doing a presentation, writing blogs on something you found interesting in the platform. Many of us have heard that prolific blogging and helping out on Sitecore Slack is how MVPs are made. I would definitely agree with that and more. He was adamant about getting me in front of people.
Our scheduled weekly meetings (about 15min -1hr) often resulted in key action items to work on for the next meeting.
That being said, we’ve only been meeting for a few months so far, and most of our agreed-on items are work-in-progress.

Professional Development in the Sitecore MVP Program

One of the things I appreciate about the Mentor Program is the benefits to my professional and career growth. Conversations with my mentor are not just about becoming a Sitecore MVP; we also shoot the breeze about life, current events, and what’s happening in the technology space. We also discuss challenges faced in our current jobs, and my mentor was instrumental in offering very good professional advice at the right time.

Next Steps in the Sitecore MVP Program

So that’s my experience so far in a nutshell. Looking forward to doing presentations at Sitecore User Groups and getting a few blogs in before the MVP application period closes. Hopefully, in part 2 of this blog series, I’ll share some of the presentations I did and the lessons learned.
Till next time, keep engineering
]]>
https://blogs.perficient.com/2022/11/09/my-journey-with-the-sitecore-mvp-mentor-program-part-1/feed/ 0 321628