Migrating an Enterprise Website to Sitecore XP Headless

Q3 2024—Q2 2025 · Full-Time · EdTech Company

Sitecore XP · Sitecore JSS · C# · TypeScript · React/Next.js · GraphQL · REST APIs · Sitecore PowerShell

The company's primary website had been built on an aging ASP.NET MVC architecture that was becoming difficult to maintain. Performance had declined over time, and the publishing service crashed frequently, creating problems for both content editors and the development team.

The organization decided to move the site to Sitecore XP Headless, creating a new architecture that would separate the CMS from the frontend and give the team a better foundation for the future.

At a Glance

 

Role: Web Developer

Experience: 2 years of traditional Sitecore experience when the migration began

Environment: Sitecore XP Headless, Sitecore JSS, C#, React, Next.js, TypeScript, REST APIs, GraphQL, Sitecore PowerShell

Focus: Sitecore development, structured content, templates, renderings, backend development, frontend development, production support

Status: Migration completed and site launched in Q2 2025.

Where I Started

When the migration began, I had about two years of experience with traditional Sitecore XP and had just earned my Sitecore certification. My work up to that point had been entirely on the backend and CMS side, primarily using C# to build and configure templates, renderings, and rendering contents resolvers.

The new platform introduced several technologies I had never worked with before, including React, Next.js, TypeScript, and Sitecore JSS.

I had to learn enough of that ecosystem quickly to contribute to a large migration that was already moving under tight deadlines.

My Contributions

  • Learning the new stack

    At the beginning of the migration, we did not have a design system to work from, but the project was already on a tight deadline.

    To keep development moving, me and the other backend developers built the backend functionality for each rendering and then created simple frontend implementations to display the data and visual elements it required.

    This gave me my first hands-on experience with React, Sitecore JSS, and Next.js while I was still primarily focused on the Sitecore and C# side of the migration.

  • Rendering configuration

    Because the new site required its renderings to be rebuilt, I contributed to the Sitecore and C# development needed to create them from scratch.

    This involved writing the rendering contents resolver in our codebase, creating a new rendering contents resolver item for that code in Sitecore, creating the new rendering in Sitecore, and finally hooking that rendering up to the rendering contents resolver item.

  • Importing Sitecore content items

    In order to save the content editors’ time, some content items from the legacy system needed to be imported over to the new headless environment. This included items such as Press Releases, which required new template fields in the new system.

    I packaged up the items from the legacy system, created new templates for them with the additional fields, imported the items into the new system, and configured the items to work with the new templates.

  • Custom buttons for generating links

    The legacy system had a lot of custom functionality, including buttons in the Content Editor ribbon that allowed editors to generate links for pre-filtering content libraries. The editor would click these buttons and a modal would pop up, giving them options to create a pre-filtered library link.

    I created Sitecore PowerShell scripts to generate the modal and the link, and also created the custom buttons for each of these libraries in order to restore the functionality of the old system.

  • REST APIs

    I also contributed backend work for the REST APIs supporting the site's content libraries. The initial API architecture was established by the principal backend developer and senior frontend developer, and I used that foundation as development continued.

    I worked on the C# backend files, including the repository that queries, filters, sorts, and paginates the data; and the code that defines the indexed results.

  • GraphQL

    The migration also gave me my first experience with GraphQL. I wrote queries used by some of the site’s blog renderings, including:

    • a query that returned blog posts based on the topic selected from the site's All Topics page, and

    • a query that returned all of the blog’s authors for the Author List page

What Came Next

As the new platform became established, my role grew beyond the initial migration work. I became responsible for a significant amount of the backend and CMS development assigned to our team, including new functionality and renderings, changes to existing rendering behavior, updates to templates and rendering fields, bugfixes, and production support.

I also took on more reporting work using Sitecore PowerShell.

Over time, the technologies that were completely new to me at the start of the migration became part of my day-to-day development work.

What I Gained

This migration taught me that I can become productive with unfamiliar technology even when the learning curve is steep and the pressure is high.

I would not describe myself as an expert in every part of the headless Sitecore stack. However I learned a lot, contributed to a complicated migration, and grew from a backend-only Sitecore developer into someone who could work across a much broader part of the platform.