MC.
Migration case studyBack to résumé
Websites · migration · preservation

From a pile of pages to a living library.

How Nancy Stewart’s music and literacy websites were rebuilt, rescued, and made maintainable without losing the songs, stories, and resources people came for.

A reconstruction from the project’s commit history and live-site captures

This was a preservation project disguised as a redesign.

Nancy’s sites are more than brochure pages. They are a deep, hand-built archive: songs, lyrics, sheet music, recordings, activity guides, books, literacy resources, and years of material for families, teachers, librarians, and community programs.

That meant the job was not simply to make two new home pages. It was to bring an old web estate into a form that could be searched, repaired, edited, and hosted on ordinary infrastructure—while keeping the accumulated knowledge intact.

2connected websites
240+Nancy Music song pages
100+Sing With Our Kids songs
0database servers required

The migration happened in layers.

The work unfolded in layers: first finding a workable shape, then rebuilding the sites, rescuing the archive, and finally making the whole system easier to maintain.

A Next.js beginning

The repository began as a Create Next App experiment. That established a place to work, but the final hosting target was an older GoDaddy-style PHP environment.

Build, then deploy

The first complete site was assembled quickly enough to put real content in front of people and expose the problems that needed solving.

From prototype to PHP

The project moved away from Next.js, referenced the existing resources, separated nancymusic into its own directory, and added the first version of Sing With Our Kids.

A full two-site overhaul

Navigation, page templates, content structure, styles, and the two site identities were brought into a more coherent system.

The sites became maintainable

Song creation, image uploads, file uploads, CMS hardening, Song of the Month improvements, documentation, and upload limits turned a one-time rebuild into an editable website.

The archive was rescued

Lyrics were brought onto song pages, then cleaned, normalized, and linked. Broken links and missing resources became explicit engineering work instead of invisible drift.

Verification became part of the build

A crawler and link audit found failures across the archive. Fixing them made content quality measurable.

Restoration continues after launch

Missing downloads were restored, Song of the Month blurbs were reviewed and sourced, Global Village files were mirrored, and books and family-literacy content continued to evolve.

Before and after: the content stayed, the experience changed.

The “before” images below are captures of the live sites at nancymusic.com and singwithourkids.com. The “after” images are captures of the current main branch, rendered locally for comparison.

Nancy Music

same archive · clearer hierarchy · responsive layout
Live Nancy Music site before migration
Before · live siteThe live archive is rich and familiar, with a dense, image-led layout and a distinctly older web vocabulary.
Nancy Music after migration
After · current mainThe same core identity is easier to scan, with cleaner spacing, stronger sections, and a more legible path into 240 free songs.

Sing With Our Kids

resource project · families · educators · community partners
Live Sing With Our Kids site before migration
Before · live siteThe live project presents a large, colorful resource map with many paths for families, educators, and community partners.
Sing With Our Kids after migration
After · current mainEditorial cards, featured resources, imagery, and audience paths make the breadth of the project visible at a glance.
A migration succeeds when the new interface makes the old work easier to find—not when it makes the old work disappear.

New enough to maintain. Simple enough to host.

The final implementation deliberately fits the hosting reality: Apache, PHP, ordinary files, and no database dependency. The content model is understandable by a person who may need to recover it years from now.

File-based CMS

  • Pages render through small PHP wrappers.
  • Editable HTML lives in cms/content/.
  • Saving a page writes directly to disk.
  • No database migration or ORM is needed.

Preserved media

  • Images, MP3s, PDFs, and fonts remain ordinary assets.
  • Uploads have type and size checks.
  • Azure storage mirrors selected legacy downloads.
  • Local paths are rewritten for subdirectory hosting.

URL continuity

  • Apache rewrite rules support extensionless URLs.
  • Legacy redirects preserve old paths.
  • Links were audited instead of assumed correct.
  • The two sites remain independently deployable.

Editorial workflow

  • In-browser editing for nontechnical updates.
  • Song of the Month has a dedicated editor.
  • New songs can create their page and content.
  • Usage and deployment guides document the handoff.
One important operational detail: because the CMS writes files directly, deployment must pull live CMS content before syncing code. Otherwise a routine upload could overwrite edits made in the browser.

The hard part was not the framework.

Inventory before aesthetics

Old sites hide their value in volume. Count pages, find media, trace redirects, and locate the content before deciding what can be simplified.

Fix links as data

A crawler, an audit script, and focused commits made broken resources visible. “It looks fine” is not a test for an archive this large.

Make the handoff real

The migration is not finished when the homepage looks good. It is finished when someone else can edit a page, upload a file, and recover the site.