# Rob Earlam > Developer advocate, software developer, and speaker — writing on engineering, product execution, and lessons from building software. Rob Earlam is a developer advocate and software engineer with deep expertise in AI powered software development, Sitecore (SitecoreAI, XM Cloud, Content SDK), Next.js, ASP.NET Core, Docker, Kubernetes, and modern composable architecture. This site is his personal blog and portfolio. ## Sections - [Blog](https://robearlam.com/blog): Technical articles, tutorials, and insights on software development, AI, Sitecore, Next.js, Docker, DevOps, and cloud architecture. - [Videos](https://robearlam.com/videos): Conference talks, tutorials, and developer videos. - [Speaking](https://robearlam.com/speaking): Upcoming and past conference speaking engagements, workshops, and sessions. - [Contact](https://robearlam.com/contact): Social profiles and community links. ## Topics Covered - AI powered development, Harness Engineering, Agentic Workflows - Sitecore, SitecoreAI, XM Cloud, Content SDK, JSS - Next.js, React, ASP.NET Core - Docker, Kubernetes, DevOps, CI/CD - Composable architecture, headless CMS - Azure, Vercel deployments - Developer advocacy, conference speaking ## Machine-Readable Resources - [RSS Feed](https://robearlam.com/rss): Full blog content in RSS 2.0 format. - [Sitemap](https://robearlam.com/sitemap.xml): All indexed pages. ## Social Profiles - [BlueSky](https://bsky.app/profile/robearlam.com) - [Mastodon](https://mastodon.social/@RobEarlam) - [GitHub](https://github.com/robearlam) - [LinkedIn](https://www.linkedin.com/in/rob-earlam/) - [YouTube](https://www.youtube.com/playlist?list=PLmTNwpFzRErCW5ibZAkSO8HFSW0Rkiplj) - [Dev.to](https://dev.to/robearlam) ## Blog Posts - [Harness Engineering: Running the pipeline end-to-end](https://robearlam.com/blog/harness-engineering-running-the-pipeline-end-to-end): In this post I talk through one item out of the backlog that's been implemented, and show what prompts I used along the way, how I interacted with the LLM, and what artifacts were generated to give the completed feature in the end. - [Harness Engineering: Orchestration and execution tracking](https://robearlam.com/blog/harness-engineering-orchestration-and-execution-tracking): This post continues my series on Harness Engineering, this time I'm going to focus specifically on the Orchestrator Agent and Role to talk about how it is the workflow controller, ensuring that the artifacts the subagents create are generated successfully, then managing the following handoff as the execution flow continues. - [Harness Engineering: Artifacts, Inputs and Context](https://robearlam.com/blog/harness-engineering-artifacts-inputs-and-context): In this post I want to take a look at how the Artifacts from each Agent form the Input for other Agents, and how this form of Bounded Context helps to greatly improve accuracy in what your LLM is doing. - [Harness Engineering: Agents and Roles](https://robearlam.com/blog/harness-engineering-agents-and-roles): Carrying on from my recent post giving an Introduction to Harness Engineering, I want to start to dig a level deeper on the topics involved. First up we're going to look at the Agents and Roles that are defined in a setup like this. - [I upgraded the SUGCON sites to Content SDK v2 in under 1hr](https://robearlam.com/blog/i-upgraded-the-sugcon-sites-to-content-sdk-v2-in-under-1hr): Just a quick blog post about a win I just had. I blogged last month about the process of upgrading the SUGCON sites from JSS to the Content SDK, and how the sites had been a bit neglected and were running a super old version - [An Introduction to Harness Engineering](https://robearlam.com/blog/an-introduction-to-harness-engineering): So for a decent amount of time now I've been on the Vibe Coding bandwagon, like a large portion of the development community. When it works it really can seem like magic, the is the part 'when it works' though. - [New Site, Who Dis?](https://robearlam.com/blog/new-site-who-dis): Like the majority of the rest of the development community, I've spent the past couple of years both amazed and a little bit terrified about how AI powered development has taken over the industry. - [Upgrading the SUGCON sites from JSS to the Content SDK](https://robearlam.com/blog/upgrading-the-sugcon-sites-from-jss-to-the-content-sdk): Ok, so as the heading suggests, I want to start this blog post with a bit of a confession… We were bad developers and didn’t upgrade the SUGCON sites as the newer versions of JSS were released. - [XM Cloud - External Editing Hosts Revisited](https://robearlam.com/blog/xm-cloud-external-editing-hosts-revisited): With the shift to Pages Metadata editing mode, your external rendering host setup for Sitecore XM Cloud might need some love. Here’s how the Sitecore MVP site was updated to support the new flow of data. - [How to set environment variables for n8n running in Proxmox](https://robearlam.com/blog/how-to-set-environment-variables-for-n8n-running-in-proxmox): I setup a HomeLab last year running Proxmox and have been having fun running a variety of different workloads on it. This weekend I decided I wanted to get a local community instance of n8n running locally to test it out. - [ASP.NET Core SDK now supports MetaData Editing mode in XM Cloud](https://robearlam.com/blog/asp-net-core-sdk-now-supports-metadata-editing-mode-in-xm-cloud): This week we released an update to the ASP.NET Core SDK to support MetaData editing mode in XM Cloud - [Migrating the XM Cloud Introduction Repository to the new Starter Kit structure](https://robearlam.com/blog/migrating-the-xm-cloud-introduction-repository-to-the-new-starter-kit-structure): I recently wrote a blog post talking a new repository structure we are migration to for the XM Cloud Starter kits. As I mentioned in that post, my next task was to migrate our XM Cloud Introduction repository over to that new structure, and this post is going to over the tasks I needed to perform. - [Restructuring the Sitecore XM Cloud Foundation Head](https://robearlam.com/blog/restructuring-the-sitecore-xm-cloud-foundation-head): Anyone who watches the Sitecore XM Cloud Foundation head repositories would have seen this PR get approved on the dev repo recently. This has implemented a significant restructuring, aimed at providing a more logical and streamlined approach to building sites with XM Cloud. This update brings several key changes and benefits for developers. - [XM Cloud DevOps - Using the promote command with the Sitecore CLI](https://robearlam.com/blog/xm-cloud-devops-using-the-promote-command-with-the-sitecore-cli): I recently made a small change to the CI/CD process for the XM Cloud Introduction repository that we maintain. Since we first built the project it has been using GitHub Actions for its CI/CD processes, and leveraging the Sitecore CLI for the XM Cloud deployment elements - [Sitecore Search SDK - Breaking Change](https://robearlam.com/blog/sitecore-search-sdk-breaking-change): Recently my colleague Mark van Aalst was updating the package versions for the Sitecore Developer Portal. This also included updating the version of the Sitecore Search React SDK from v2.0.0 to v2.2.2, among other packages that were updated at the same time. Once this had been deployed, we got reports that faceting was no longer working on the search results page. We quickly rolled back and started to look into what had happened - [SUGCON India 2023 goes off with a bang 💥](https://robearlam.com/blog/sugcon-india-2023-goes-off-with-a-bang): Last week I had the pleasure of attending SUGCON India 2023 in Delhi, India. This was the first time we’d run a SUGCON in India since 2019 and it was great to be back once more, interacting with the local Sitecore community. There was a lot of effort in involved in pulling the event off, and I do want to start by thanking all of the organisers for the time they invested in making this event the success that it was. - [Migrating the XM Cloud Introduction Repo to a new Nuget feed.](https://robearlam.com/blog/migrating-the-xm-cloud-introduction-repo-to-a-new-nuget-feed): Today I had to go through the process of migrating the XM Cloud Introduction repository to a new Nuget feed. This was required as the old feed was no longer available, and we needed to move to a new one on short notice. This post will cover the steps I needed to complete to migrate the solution to the new feed - [Introducing the Sitecore Discover JavaScript SDK - Part 2 Components](https://robearlam.com/blog/introducing-the-sitecore-discover-javascript-sdk-part-2-components): This post is the second in a two-part blog series, introducing a brand-new JavaScript SDK for Sitecore Discover. In this second part, we'll dive into the component model provided by the SDK and show the different ways you can leverage Discover data in your React application. - [Introducing the Sitecore Discover JavaScript SDK - Part 1 Events](https://robearlam.com/blog/introducing-the-sitecore-discover-javascript-sdk-part-1-events): In this two-part blog series, I'll be introducing you to a brand-new JavaScript SDK for Sitecore Discover. In this first part, we'll dive into the different implementation options for Sitecore Discover, explore the JavaScript SDK, and discuss its eventing model. - [Upgrading the XM Cloud Introduction repository to Docker Compose v2](https://robearlam.com/blog/docker-compose-v2): In case you haven’t heard, Docker has slowly been pushing people to migrate the latest version of Docker Compose, which is `v2`. This has culminated in the end of life for `v1`, which means that the functionality will be removed from all Docker Desktop versions as of Jun 2023. - [Using Styled Components with NextJs](https://robearlam.com/blog/using-styled-components-with-nextjs): I've recently been working with a new JavaScript SDK for Sitecore Discover which is going to be released soon. This is a React library which provides a series of prebuilt components designed to enable people to up and running with Sitecore Discover as quickly as possible. - [How to implement the WebFinger Protocol on a NextJS site](https://robearlam.com/blog/webfinger-on-nextjs): With all the craziness that’s been happening over at Twitter recently, I’ve been taking a look at Mastodon. It’s similar to Twitter, but at the same time very different as well. One of the things that Twiter does well, which Mastodon struggles with a bit, is user discoverability. - [Migrating the Sitecore MVP site to XM Cloud – Part 4](https://robearlam.com/blog/migrating-the-sitecore-mvp-site-to-xm-cloud-part-4): In my last post, I talked about Custom Content Resolvers and how that functionality isn’t available with XM Cloud – but how you probably don’t need them for a large portion of the scenarios being created as you can get a long way with the OOTB Content Resolvers provided by the platform. What happens when you do need some complex functionality that they can’t provide though? Well, that’s what we’re going to be talking about here - [Migrating the Sitecore MVP site to XM Cloud – Part 3](https://robearlam.com/blog/migrating-the-sitecore-mvp-site-to-xm-cloud-part-3): In my last post, I talked about Custom Content Resolvers and how that functionality isn’t available with XM Cloud – but how you probably don’t need them for a large portion of the scenarios being created as you can get a long way with the OOTB Content Resolvers provided by the platform. What happens when you do need some complex functionality that they can’t provide though? Well, that’s what we’re going to be talking about here - [Migrating the Sitecore MVP site to XM Cloud – Part 2](https://robearlam.com/blog/migrating-the-sitecore-mvp-site-to-xm-cloud-part-2): One of the key differences between working headlessly in Sitecore XM 10.2 and Sitecore XM Cloud is the introduction of Experience Edge. When working against Edge, there is no Web Database and there are no Content Delivery (CD) servers. Instead, when you publish a snapshot of your layout data is stored in our Content Delivery Network (CDN), this enables super-fast, low-latency, globally scaled delivery of your content to your head. However, it does change how you must think about your development processes - [Migrating the Sitecore MVP site to XM Cloud – Part 1](https://robearlam.com/blog/migrating-the-sitecore-mvp-site-to-xm-cloud-part-1): The Developer Advocacy team here at Sitecore recently completed a project to migrate the existing Sitecore MVP site, built with Sitecore XM 10.2, to XM Cloud. - [Accessing Container Environment Variables using Sitecore PowerShell Extensions](https://robearlam.com/blog/accessing-container-environment-variables-using-sitecore-powershell-extensions): I recently had an issue where I needed to debug a Sitecore instance running in a Docker container. I needed to access the environment variables of the container, but didn't have access to the cluster to see the values. - [Setting up an external XM Cloud Rendering Host to work with Experience Editor and Pages](https://robearlam.com/blog/setting-up-an-external-xm-cloud-rendering-host-to-work-with-experience-editor-and-pages): We've recently been working on a migration project, moving, and rebuilding a series of sites to run against Sitecore XM Cloud. One of the key requirements was to ensure that all the sites could be edited in both Sitecore Experience Editor, and the next-generation editing interface included with XM Cloud - Sitecore Pages. This blog post will cover the steps we took to get this working. - [NETSDK1152 - Found multiple publish output files with the same relative path.](https://robearlam.com/blog/dotnet-6-view-imports-error): Our team have recently been working on a project to migrate the existing Sitecore MVP site, to run against XM Cloud. One part of this involved upgrading the version of the Rendering Host, which was previously built using ASP.NET Core 3.1 to the latest version - .NET6 - [Running OrderCloud Headstart on Docker](https://robearlam.com/blog/running-ordercloud-headstart-on-docker): Headstart is an example solution, showing you an opinionated method for building out a B2B shopping experience targeting your web channel, powered by Sitecore OrderCloud. You don’t have to follow Headstart when building your experiences using Sitecore OrderCloud, but it is meant show some example patterns that can be used to help you develop the functionality you need. - [Exclude specific routes from HTTPS redirect in .NET](https://robearlam.com/blog/exclude-specific-routes-from-https-redirect-in-dotnet): I’ve recently been working on a web project built using ASP.NET Core. One of the features we implemented was to automatically redirect all traffic coming in on HTTP over to HTTPS as it’s far more preferable for a heap of reasons. - [Configuring forwarding headers for ASP.NET Core Applications running behind a reverse proxy](https://robearlam.com/blog/configuring-forwarding-headers-for-asp.net-core-applications-running-behind-a-reverse-proxy): We’ve been working recently on an updated version of the Sitecore MVP Website. This site has been used for the MVP application process which has just been run, and we used an external federated authentication provider to allow people to create their accounts for the application process. - [Issues utilising the Sitecore CLI against a scaled Sitecore CM instance running in AKS](https://robearlam.com/blog/issues-utilising-the-sitecore-cli-against-a-scaled-sitecore-cm-instance-running-in-aks): I ran into an interesting issue this week when working on the rebuild of the Sitecore MVP site. To give a bit of background, this project is a rebuild of the MVP site using Sitecore’s DotNet rendering Host and is running on AKS. - [Nginx Ingress - Breaking change, Ingress.class now required](https://robearlam.com/blog/nginx-ingress-breaking-change-ingress.class-now-required): I hit an issue today attempting to install a clean Sitecore 10.1 XM instance into a new AKS cluster. I followed the steps & instructions just the same as before, but when I went to test the sites, they all gave me a 404. This led me down a bit of a K8s Ingress debugging hole! - [Nextjs v11 - ENOENT: no such file or directory when deployed to Vercel](https://robearlam.com/blog/nextjs-v11-enoent-no-such-file-or-directory-when-deployed-to-vercel): Earlier today I made a few updates to the site you're ready this blog on now. Nothing too major, but one of the things I decided to do was to bump my current Nextjs version from the version I was on previously v10.0.6 to the current latest version v11.1.2. This was super simple to do complete and everything fine in my local. I pushed it out to production, and it was then things got interesting. - [Building omni-channel experience with Sitecore Experience Edge & Mobile Blazor Bindings](https://robearlam.com/blog/building-omni-channel-experience-withsitecore-experience-edge-mobile-blazor-bindings): A few months ago, I read about a new release from Microsoft called Mobile Blazor Bindings and it sounded really interesting, a way to embed a Blazor application inside of a Xamarin Forms application, meaning you could leverage web tech in building out your mobile experiences, how cool is that! - [Working with the Commerce Engine & Docker in Sitecore Experience Commerce 10.1](https://robearlam.com/blog/working-with-the-commerce-engine-docker-in-sitecore-experience-commerce-10-1): Recently got to work with a developer who was new to working with Sitecore Experience Commerce on Docker. Now we have a lot of examples for how to work with Sitecore Experience Platform with Docker, things like - [Next.js Incremental Static Site Regeneration and Apollo GraphQL Caching](https://robearlam.com/blog/nextjs-incremental-static-site-regeneration-and-apollo-graph-ql-caching): I’ve recently been working on a project built using Next.Js & Apollo GraphQL to pull data out of Sitecore Experience Edge for Content Hub. I’ve really enjoyed working with these technologies but ran into something that stumped me for a while the other day. - [How to set the Experience Edge Auth Token with Apollo GraphQL](https://robearlam.com/blog/how-to-set-the-experience-edge-auth-token-with-apollo-graphql): So if you've been looking through the SDK provided with both Sitecore Experience Commerce 8.2.1 and new release Sitecore Experience Commerce 9 - [Multi-Environment deployments to Vercel](https://robearlam.com/blog/multi-environment-deployments-to-vercel): So this week I've been building a Sitecore Experience Commerce deployment in Azure. This is using mostly PaaS based resources, so WebApps, Azure SQL and all that jazz. However I wanted to try to keep the spend down a bit and the easiest way to achieve that is to switch out Azure Search for Solr - [.NET Core Rendering Host - Experience Editor 404 error](https://robearlam.com/blog/net-core-renderinghost-experience-editor-404-error): So we've been rebuilding the Sitecore MVP site currently, and you can see how were going as the repository is Open Source, meaning you can see how we're progressing right here... - [Sitecore Identity Service - Max Client Secret Length](https://robearlam.com/blog/sitecore-identity-service-max-client-secret-length): So in the process of developing the new MVP site, we ran into a couple things that other developers might encounter. So I wanted to start covering some of them here. The first of those are the rules about the Identity Server Client Secret. - [Running HashiCorp Vault on WSL2 secured with LetsEncrypt](https://robearlam.com/blog/running-hashicorp-vault-on-wsl2-secured-with-letsencrypt): I've recently being getting my head around HashiCorp Vault. A great product for securing your secrets, certificates, passwords and much more besides. Vault can be enabled in 'dev' mode to allow you to test out its features, but I wanted to use this on an actual project so I needed to setup a properly secured instance - [Sitecore Experience Commerce 9.3](https://robearlam.com/blog/sitecore-experience-commerce-9-3): Last week we launched version 9.3 of Sitecore Experience Commerce. This builds upon our previous releases to not only expand the functionality available to customers but also to improve the performance of the product - [Rob.Commerce 9.2](https://robearlam.com/blog/rob-commerce-9-2): This week I finally got around to upgrading my Rob.Commerce solution to Sitecore Experience Commerce 9.2. The software was released around a month ago and was looking forward to seeing the new version in action - [Content Path Already Exists Error](https://robearlam.com/blog/CtxMsg-Error-ContentPathAlreadyExists-error): This week I've finally found some time to start upgrading my Rob.Commerce solution to Sitecore Experience Commerce 9.2 which was released last month. Now this was the easiest XC installation that I've been through to date however when I came to bootstrapping and initializing my custom environment data into the engine, I ran into a problem that troubled me for a while - [SUGCON ANZ 2019](https://robearlam.com/blog/SUGCON-ANZ-2019): Last week marked the first ever SUGCON ANZ, it was run in Sydney with one and half days of amazing Sitecore content. We had sessions covering topics as varied as DevOps, JSS, Commerce, Experience Forms, SBOS, Marketing Automation and anything you can think of in between. We had speakers local to Sydney presenting alongside speakers who travelled interstate and others who travelled internationally - [Using VSCode to debug a .NET Core application running inside a Docker container](https://robearlam.com/blog/using-vscode-to-debug-a-netcore-application-running-inside-a-Docker-container): I have recently been creating a new .NET Core application, which I've been running inside of a Docker container. I've been creating this using VSCode so had to spend some time linking the IDE to the container so that I could use the debugging features. I wanted to document the process here for anyone else who wants to work with this setup - [Building an Ubuntu VM in Azure running Solr, with a trusted LetsEncrypt certificate - Part 4](https://robearlam.com/blog/building-an-ubuntu-vm-in-azure-running-solr-with-a-trusted-letsencrypt-certificate-part-4): So this is the fourth and final part in my series walking you through how to setup an Ubuntu VM in Azure running Solr secured using LetsEncrypt. In the first three parts we used the Azure CLI to create the VM, we installed Java and Solr then finally we secured the solr instance using a certificate from the awesome LetsEncrypt service. In this series we're going to finish setting this service up by creating the cores that we need to run Sitecore - [Building an Ubuntu VM in Azure running Solr, with a trusted LetsEncrypt certificate - Part 3](https://robearlam.com/blog/building-an-ubuntu-vm-in-azure-running-solr-with-a-trusted-letsencrypt-certificate-part-3): So this is part 3 in my series walking you through how to setup an Ubuntu VM in Azure running Solr secured using LetsEncrypt. In the first two parts we used the Azure CLI to create the VM, we installed Java and Solr then finally opened port 8983 so we could access the Solr dashboard remotely. In this post we're going use LetsEncrypt to generate a certficate to allow us to secure our communication with Solr over HTTPS - [Building an Ubuntu VM in Azure running Solr, with a trusted LetsEncrypt certificate - Part 2](https://robearlam.com/blog/building-an-ubuntu-vm-in-azure-running-solr-with-a-trusted-letsencrypt-certificate-part-2): So this is part 2 in my series walking you through how to setup an Ubuntu VM in Azure running Solr secured using LetsEncrypt. In the first part we used the Azure CLI to create the VM, then opened an SSH connection to server to test it had completed successfully - [Building an Ubuntu VM in Azure running Solr, with a trusted LetsEncrypt certificate - Part 1](https://robearlam.com/blog/building-an-ubuntu-vm-in-azure-running-solr-with-a-trusted-letsencrypt-certificate-part-1): So this week I've been building a Sitecore Experience Commerce deployment in Azure. This is using mostly PaaS based resources, so WebApps, Azure SQL and all that jazz. However I wanted to try to keep the spend down a bit and the easiest way to achieve that is to switch out Azure Search for Solr - [Sitecore Commerce Id Generation Helper Methods](https://robearlam.com/blog/sitecore-commerce-id-generation-helper-methods): If you've been working Sitecore Experience Commerce, the chances are you've using code like to generate an entity id in the correct format - [Sitecore Entity Composer, End-to-End: Part 3 - The Storefront](https://robearlam.com/blog/sitecore-entity-composer-end-to-end-part-3-the-storefront): This is the third and final part in my blog series demonstrating a complete end-to-end scenario for Sitecore Experience Commerce and the Entity Composer - [Sitecore Entity Composer, End-to-End: Part 2 - Data Flows](https://robearlam.com/blog/sitecore-entity-composer-end-to-end-part-2-data-flows): This is the second part in a blog series demonstrating a complete end-to-end scenario for Sitecore Experience Commerce and the Entity Composer - [Sitecore Entity Composer, End-to-End: Part 1 - Extending the Entities](https://robearlam.com/blog/sitecore-entity-composer-end-to-end-part-1-extending-the-entities): Sitecore Experience Commerce includes a feature called the Entity Composer which allows you to use the Commerce Business Tools to edit the structure of the entities stored in the system. This makes it much easier to do things like adding fields to products or customers - [Rob.Commerce](https://robearlam.com/blog/rob-commerce): So I’m happy to say that I can finally release something that I’ve been working on for a while. A sample Sitecore XC solution that also contains all of the Plugins - [SUGCON India 2018](https://robearlam.com/blog/sugcon-india-2018): Last month I had the pleasure of talking at the very first SUGCON India, being hosted in Bangalore. This was a great event which I really enjoyed, it was - [SxA Storefront Security Settings](https://robearlam.com/blog/sxa-storefront-security-settings): Hopefully you've all been having fun with XC9 since it was released back in January, well this post is going to cover something you'll need to look at if you're using the Storefront generated by SxA Storefront - [Sitecore XConnect Xdb Collection Unavailable Exception, urgh!](https://robearlam.com/blog/sitecore-xconnect-xdbcollectionunavailableexception-urgh): So I had a bit of a head scratcher today trying to setup a clean instance of XC9, something I've done many times since it was released back in January. Everything went fine during the installation, but - [Sitecore XC9, Data Isolation & Artifact Stores](https://robearlam.com/blog/sitecore-xc9-data-isolation-artifact-stores): If you've installed XC9 and started to take a look into what gets installed, you should have by now noticed there there a number of different environments that get setup for you out of the box, these are - [So what is the Sitecore Commerce ServiceProxy](https://robearlam.com/blog/so-what-is-the-sitecore-commerce-serviceproxy): So if you've been looking through the SDK provided with both Sitecore Experience Commerce 8.2.1 and new release Sitecore Experience Commerce 9 - [Working with OData Connected Services in Visual Studio 2017](https://robearlam.com/blog/working-with-odata-connected-services-in-visual-studio-2017): I've recently been working with a .NET core 2 application, which makes use of OData Connected Services - [Setting up HTTPS on RobEarlam.com, so easy!](https://robearlam.com/blog/setting-up-https-on-robearlamcom-so-easy): So last weekend I finally got around to something I'd been meaning to tackle for a while, setting up HTTPS for my site robearlam.com - [Editing Sitecore Azure ARM Templates - Part 4 - Executing the deployment](https://robearlam.com/blog/editing-sitecore-azure-arm-templates-part-4-executing-the-deployment): Hopefully this series has helped to demystify Azure ARM Templates and how the different elements interact with each other during the deployment process. The complete ARM templates are all available as - [Editing Sitecore Azure ARM Templates - Part 3 - Editing the ARM Template](https://robearlam.com/blog/editing-sitecore-azure-arm-templates-part-3-editing-the-arm-template): This is the third post in my series on Editing Sitecore Azure ARM Templates, if you haven't read the others you might want to head back to the beginning and start from there, you can find it at - [Editing Sitecore Azure ARM Templates - Part 2 - Building the WebDeploy package](https://robearlam.com/blog/editing-sitecore-azure-arm-templates-part-2-building-the-webdeploy-package): This is the second post in my series on Editing Sitecore Azure ARM Templates, if you haven't read the first one you might want to head back and read that one first, you can find at Editing Sitecore - [Editing Sitecore Azure ARM Templates - Part 1 - Introduction](https://robearlam.com/blog/editing-sitecore-azure-arm-templates-part-1-introduction): With the release of Sitecore 8.2 Update-1 support for Azure WebApps was introduced. The recommended deployment strategy was to make use of Azure Resource Management (ARM) templates and Sitecore - [List all Sitecore contacts that have completed a goal](https://robearlam.com/blog/list-all-sitecore-contacts-that-have-completed-a-goal): I was recently asked whether it was possible in Sitecore to list all of the contacts who had completed a certain goal. This seemed like a fairly straight forward request, but i couldn't find a way to - [Customsing the Sitecore HTML cache clearer](https://robearlam.com/blog/customsing-the-sitecore-html-cache-clearer): The default Sitecore CacheClearer can be a bit heavy handed, dumping all of the HTML cache for a site every time an item is published. This isn't always what is required, sometimes there are certain - [Sharing a Reporting & Processing role in Sitecore 8.0](https://robearlam.com/blog/configuring-a-shared-reporting-processing-instance-in-sitecore-8-0): I have recently been working with a client to set up an new Sitecore 8.0 implementation. Their architecture included a shared Reporting / Processing instance, and so we looked for documentation on how - [Extending Sitecore Revolver to bulk update placeholder names](https://robearlam.com/blog/extending-sitecore-revolver-to-bulk-update-placeholder-names): While doing some re-factoring of Sitecore Layouts recently I wanted to rename some placeholders. This caused an issue as the old names were heavily referenced within the CMS, both in standard values - [Extending Sitecore Revolver to remove old versions](https://robearlam.com/blog/extending-sitecore-revolver-to-remove-old-versions): I recently worked on a rebuild of an existing Sitecore site. This involved us doing a completely fresh build, then importing the existing items into the new solution. As the existing solution was live - [Sitecore Multisite 404, 500 & Robots.txt](https://robearlam.com/blog/sitecore-multisite-404-500-robots-txt): After working on many multisite Sitecore configurations, it's always surprised me that Sitecore doesn't provide the ability to specify different 404, 500 & robots.txt's for each site. In the past I've