Alex Lockwood Contact me

Case Study • Stem Cell for Life

Stem Cell for Life

A full website redesign and migration from WordPress to Astro + Sanity. See it live.

Role
Designer & Developer Discovery • UI • UX • QA
Duration
3 months July 2026 - September 2026
Company
Stem Cell for Life Client
Platform
Web Astro + Sanity + Resend + Cloudflare

Background

About the project

Stem Cell for Life is a physician-led stem cell therapy clinic. I was already managing its Google Ads, and I took on a full rebuild of its WordPress site as the next step. I handled design, development, content structure, SEO, and deployment.

The Problem

What wasn't working

The old WordPress site had three issues:

  • Compliance risk. Google classifies stem cell therapy as “Speculative and Experimental Medical Treatment,” so site copy had to stay educational, with no efficacy claims or booking language. WordPress made it hard to enforce that consistently.
  • Hard to maintain. Content, templates, and plugins were tangled together, so even small edits risked breaking something.
  • Weak search foundation. There was no structured data, and no content shaped for AI answer engines as well as traditional search.

The Solution

The approach

I rebuilt the site on Astro, with Sanity for content, Resend for forms, and Cloudflare for hosting.

Tools & workflow

  • Astro · Frontend
  • Sanity · CMS
  • Resend · Forms
  • Cloudflare · Hosting

Process

How it came together

  • Architecture: I chose Cloudflare for its generous free tier since the client is a small business, along with having to use a D1 database for form submissions, so it just made sense. The site is server-rendered so new posts publish without a rebuild.
  • Content modeling: I designed Sanity schemas for condition pages and reusable content sections, so the clinic can add and edit pages without code.
  • Forms: The contact form posts to an Astro API route. It writes to D1 first, and a failed write is a hard failure so no submission is lost. It then sends an email through Resend, and a failed email is a soft failure that doesn’t block the submission.
  • SEO and AEO: I wrote a spec covering canonical tags, Open Graph and Twitter metadata, author bylines, alt text, internal linking, and JSON-LD for Article, FAQPage, BreadcrumbList, and MedicalWebPage. I also wrote short direct-answer summaries for the major blog posts, plus meta descriptions for the condition pages.

Challenges

Bumps along the way

This was not a one-to-one move from WordPress. Between the new architecture, content modeling, and SEO/AEO requirements, there were a lot of moving parts to get right, while still keeping the site fast and accessible.

  • This was my first time using Sanity for a migration from WordPress and it also involved adding new content.
  • The client wanted to be able to edit and create pages similar to WordPress, which involved setting up Sanity's presentation mode along with custom blocks.
  • Since the client wanted to be able to make edits, I had to make sure the entire site is server-side rendered vs static because otherwise there would be daily deployments.

Final Product

The finished site

  • A live Astro site on the clinic's own domain, replacing WordPress.
  • Sanity CMS with structured condition and content schemas.
  • Forms backed by D1 and Resend.
  • JSON-LD across the site.
  • A fast, accessible, and maintainable site that meets the client's needs.

Results

The impact

No more clunky PHP. No more plugin conflicts. A modern, fast, and accessible site that the client can edit without fear of breaking anything.

Speed and accessibility were of the utmost importance, and we pulled it off with the new framework.

Updated October 27, 2026

Learnings

What I learned

This was the first project where I went all in with Astro, Sanity, Cloudflare and Resend. I think the end result is excellent and I am very happy with how it performs, all while staying within the client's budget and allowing them to make their own site edits.

I had never used Resend before, and I was impressed with how easy it was to set up and integrate. I will definitely use it for future projects.

I believe Sanity is a huge upgrade from WordPress. It came with a learning curve for this project, but it was well worth it and I would also use it again.