Case study: state government website

1,500+ pages to Umbraco, weeks early.

Modern Logic moved the South Dakota Department of Transportation’s website off an aging, vendor-hosted CMS and onto Umbraco and Azure, and launched it ahead of a fixed go-live date.

South Dakota Department of Transportation logo

At a glance

A new public website for the South Dakota Department of Transportation.

Built for the South Dakota Department of Transportation (SDDOT), with the South Dakota Bureau of Information Technology.* The new site is live at dot.sd.gov.

Pages migrated
1,500+
From the start of development to go-live
2½ months
Launched weeks ahead of the deadline, on budget
Early

*References to work performed for the South Dakota Department of Transportation are provided for informational purposes only and do not constitute or imply an endorsement, sponsorship, or recommendation of Modern Logic or its services by the State of South Dakota or any of its agencies.

The challenge

An aging CMS and a fixed deadline.

SDDOT’s website ran on a custom CMS hosted by a vendor. The hosting contract was ending, and the department needed a technology partner to move its content to a modern platform.

What we were up against

  • Content locked in a legacy system. Our starting point was raw SQL Server dumps of the old CMS.
  • A deadline that could not move. Two and a half months from the start of primary development to go-live.
  • More content than anyone expected. The estimate was 600 pages. The real number was more than 1,500.
  • State infrastructure. The new site had to run on Azure, set up together with the South Dakota Bureau of Information Technology.

Copying pages by hand was never going to work.

We treated the migration as a software problem and built the tools to do it.

What we built

Migration tools, a new site, and a place to run it.

  • Clean data export Exported the old CMS tables to JSON with no truncation, and converted the UTF-16 text to UTF-8.
  • Python migration tools Command line tools that read the exported content and create it in Umbraco through its REST API: pages, contacts, media, menus and other content types.
  • Incremental moves Content moved one page or one site section at a time, so migration ran while the new site was still being built.
  • Umbraco site Templates, partial views and document types designed and built for SDDOT’s content.
  • Azure hosting Staging and production Umbraco instances on Azure, set up with the Bureau of Information Technology.
  • Integrations and deployment Custom code for Microsoft Entra sign-in, search and outbound email, deployed with GitHub Actions.

The approach

Build the site and move the content at the same time.

We studied how the old CMS stored its content across its SQL Server tables, then wrote software to carry that content into Umbraco instead of retyping it.

While the migration tools moved content section by section, the rest of the team designed and built the Umbraco templates and document types it would land in. When the page count turned out to be more than twice the estimate, the tools absorbed it and the schedule held.

  • Raw SQL Server dumps exported to JSON
  • Python tools that call Umbraco’s REST API
  • One page or one section at a time
  • Templates and document types built in parallel

Before and after

What changed for SDDOT.

What changed for SDDOT.
Area Before After
Platform A custom CMS hosted by a vendor. Umbraco, a widely used open source CMS.
Hosting A hosting contract at the end of its life. Staging and production on Azure, set up with the state’s IT bureau.
Content Rows in SQL Server tables. More than 1,500 pages in structured Umbraco content types.
Releases Managed by the hosting vendor. Deployed with GitHub Actions.

The result

Live early, and on budget.

SDDOT’s new website launched several weeks before its go-live date and on budget, with more than two and a half times the content in the original estimate.

  • Launched several weeks early
  • Delivered on budget
  • More than 1,500 pages migrated

FAQ

Frequently asked questions.

How do you migrate a large website to Umbraco?

For SDDOT, Modern Logic exported the old CMS’s SQL Server tables to JSON, then wrote Python command line tools that read that content and create it in Umbraco through its REST API. The tools move pages, contacts, media, menus and other content types one page or one site section at a time.

How long does a CMS migration take?

It depends on the amount of content and how it is stored. SDDOT’s migration of more than 1,500 pages took two and a half months from the start of primary development to launch, and the site went live several weeks early.

Can you migrate content when all you have is a database dump?

Yes. SDDOT’s content came to us as raw SQL Server dumps. We analyzed how the old CMS structured its content across its tables and built the migration around that structure.

Can Umbraco run on Azure with Microsoft sign-in?

Yes. SDDOT’s Umbraco staging and production instances run on Azure, and Modern Logic built custom integrations for Microsoft Entra sign-in, search and outbound email.

What happens if there is more content than estimated?

Automated migration scales with the content. SDDOT’s site was estimated at 600 pages and turned out to have more than 1,500, and the project still launched early and on budget.

Stuck on an old CMS? Let’s move it.

Whether your content lives in a legacy CMS, a database dump or thousands of hand-built pages, Modern Logic builds the tools to move it and the site to hold it.

Flip the bits

Every letter on this page is ones and zeros underneath. We like knowing how things work.