Marvin Case Study
Three and a half years, in-house, guiding one platform through a full site re-design, a complete platform migration, and a CMS stack modernization project.
I was Marvin's senior software engineer from June 2022 to November 2025: three and a half years in-house on the team behind Marvin.com and its multi-brand digital experiences. The platform ran on Sitecore XM Cloud, with editorial workflows and component patterns still shaped by legacy Sitecore assumptions, and both content editors and engineers were paying for it in friction. I guided the move from those legacy patterns to a composable architecture built on Storyblok and Next.js, leading the modernization planning and execution across multiple teams while staying hands-on in the code.
Back end: C# and ASP.NET Core
Front end: TypeScript
Scope: multi-brand digital experiences, editorial workflows, component patterns

The conservative option was to keep the existing content model and rebuild only the front end. We rejected it: the legacy template patterns were the friction, and carrying them forward would have modernized the paint while keeping the plumbing. A big-bang cutover was rejected too, because a live dealer-driven brand site has no appetite for a broken launch. Instead I built the Storyblok and Next.js foundations first and moved surfaces onto them incrementally. The riskiest integrations got dedicated rebuilds instead of lift-and-shift.
Foundations: content models, component structures, editorial workflows, environment strategy
Front end: RSC, ISR, TypeScript, a Mantine-based design system with WCAG-compliant UX patterns
Dealer and product search: rebuilt on Google Maps API, Algolia, and internal APIs
Lead capture: Salesforce integrations

The platform moved onto the composable stack, with editors working in Storyblok and engineers shipping through improved CI/CD and automated Vercel deployments.
The dealer and product search runs as its own rebuilt surface, not a page welded into the CMS render path
PostHog and Google Analytics instrumentation shipped with the rebuild, so impact could be measured, not asserted
I am deliberately not quoting engagement or throughput figures here; those numbers belong to Marvin. What I can point to is what the move removed: the legacy template assumptions that made every edit, and every feature built on top of them, slower than it needed to be.

Next.js
Front end and rendering
Storyblok
Headless CMS and content model
Sitecore XM Cloud
The legacy platform being migrated off
Microsoft Azure
Prior hosting environment
Vercel
Deployment and CI/CD
Three and a half years inside one platform teaches things a short engagement can't.
The integrations are the project. The dealer search, Salesforce, and the editorial workflows consumed the judgment calls; treating each as its own deliverable with its own acceptance criteria kept the migration boring in the best way.
Modernization across multiple teams is change management as much as engineering. The foundations stuck because the content models and workflows were designed with the editors who had to live in them, not handed down.
If I did it again, I would freeze the content model earlier. The model is what every component and editorial workflow builds on, and changes to it get more expensive the later they land.
Learn more on combining experience with frontier models: How I build with AI agents.