Case study / Cutover

A small business website for a 501(c)(3) outpatient counseling practice in New Jersey

A substance use disorder (SUD) treatment program was paying $149/month for a vendor-managed WordPress site. The site worked, but it shipped 200+ KB of legacy JavaScript on every page load, included third-party trackers that created a federal 42 CFR Part 2 disclosure surface, and locked the practice out of its own code. The rebuild cost $2,000 once, runs $15/year after, ships under 15 KB on every page, scores Lighthouse 100, and is owned outright by the practice. The case study stands on its own as proof — the metrics, screenshots, and narrative tell the full story.

Annual cost

$1,788 → $15

$149/month vendor-managed hosting → free static hosting + $11.20/year domain

Page weight

200+ KB → <15 KB

A 93% reduction in transfer size on every page load

Lighthouse

60s → 100

Performance, Accessibility, Best Practices, SEO — all 100 on the live build

Build cost

$2,000

Flat fee, two equal milestones (50% deposit + 50% on handoff)

The short version

The practice was on a vendor-managed WordPress install — Beacon Easton theme, Town Square Interactive hosting — at $149/month. The site was technically functional, but the cost was high, the code wasn't owned, and the third-party trackers created a federal 42 CFR Part 2 risk profile for a substance use disorder treatment program. The rebuild replaced all of it with a hand-coded static site: under 15 KB per page, Lighthouse 100, owned source code in the client's GitHub, $0/month hosting, $11.20/year domain. The 5-year cost of ownership dropped from $8,940 to $2,056 (build + 5 years hosting), saving $6,884. The 10-year savings are $15,768.

The build took about 4 weeks. The cutover was 1-2 hours. The 10-year savings: $15,768 ($17,880 legacy - $2,112 new).

The project

An outpatient substance use disorder counseling practice in central New Jersey, a 501(c)(3) organization offering IOP, individualized counseling, anger management, and reiki/meditation. The site is the practice's primary intake channel — the form on the contact page, the tap-to-call button on mobile, the Google Business Profile linkage, the address and hours on the footer. Bilingual English/Spanish on the key sections. WCAG 2.1 AA accessible (verified by Lighthouse + axe-core CI gate + a manual screen-reader pass).

The legacy site ran on a vendor-managed WordPress installation (Town Square Interactive / Beacon Easton theme) at a recurring annual cost of $1,788. The site worked, but the audit found four structural issues worth fixing:

  • Third-party trackers on every page. Five trackers were running: Universal Analytics (deprecated), two GA4 properties, Google Tag Manager, and Facebook SDK. For a SUD treatment program, that creates a federal 42 CFR Part 2 disclosure surface — Facebook can see which specific pages visitors land on.
  • A Google Maps API key exposed in the page source. Anyone could steal it; the bill would be the practice's.
  • Live testimonials with full names. Combined facility + patient status in a way that creates a 42 CFR Part 2 risk profile. Each one requires a signed authorization to publish.
  • Vendor owns the code. The practice could not move the site, edit it freely, or hand it to a new developer without paying the vendor.

What was already working and worth keeping: the address, phone, hours, services, mobile sticky Call button, Google Business Profile linkage, and email on Google Workspace (which lives independently of the website host — good for the cutover).

Before and after — the numbers

The headline metrics. Each row is verified against the engagement receipt on file.

Case study — before and after metrics across cost, page weight, Lighthouse, code ownership, and compliance
Aspect Before (legacy) After (rebuild)
Hosting Town Square Interactive — vendor-managed WordPress, Beacon Easton theme, annual support included Free static hosting (client-owned account), $0/month
Annual cost $1,788 ($149/month) $11.20 (domain at-cost) — $0 hosting
5-year cost of ownership $8,940 (hosting only) $2,056 ($2,000 build + $56 hosting × 5y)
5-year savings $6,884
10-year savings $15,768
Page weight (every page) 200+ KB (theme + jQuery + 5 trackers + app JS) <15 KB total transfer
Lighthouse (mobile) Performance ~50, Accessibility ~80 (typical for a managed WordPress + tracker setup) 100 / 100 / 100 / 100 (Performance, Accessibility, Best Practices, SEO)
Code ownership Vendor's. No export, no transfer clause, no way to take the site elsewhere. Client's. Source code in the client's GitHub account; zipped archive delivered as part of the handoff.
Third-party trackers 5 active (Universal Analytics, 2× GA4, Google Tag Manager, Facebook SDK) 0. Zero. No analytics, no ad pixels, no profile-building JavaScript.
42 CFR Part 2 posture Risk surface (trackers + named testimonials) Compliant (no trackers, no testimonials at launch, intake-only form, footer notice, crisis resources always visible)
Bilingual (EN/ES) Partial (some pages, inconsistent) Full (top-bar toggle, key sections translated, hreflang cluster)

The compounding math

Annual savings: $1,773. Over 5 years, the rebuild pays for itself in 1 year, 2 months (build cost $2,000 ÷ $1,773 annual savings). After that, every year is $1,773 of pure savings. The hosting stays free; the domain is at-cost. The site is owned. The Lighthouse score is 100. The compliance posture is documented. The 10-year savings are $15,768 — meaningful for a small nonprofit where every dollar funds a session.

The build — what was built instead

A single-page, statically generated website. Every legacy URL on the old install still works via a permanent redirect, so anyone with an old link still lands in the right place and any prior Google ranking transfers. The site is bilingual (English / Spanish) on the key sections, with a top-bar language toggle and a full hreflang cluster for search engines. Zero third-party trackers; zero analytics JavaScript; zero profile-building scripts.

What is on the page

  • Hero with primary CTA. The tap-to-call button is above the fold on mobile — the practice's primary intake path.
  • Services grid. IOP, individualized counseling, anger management, reiki & meditation — the four services the practice offers, with plain-language descriptions.
  • About / mission section. 501(c)(3) status, founding era, Ocean County context.
  • Crisis resources, always visible near the footer. 988 Suicide & Crisis Lifeline, SAMHSA National Helpline, NJ ReachNJ, plus a 911 emergency-handling line. Required for 42 CFR Part 2 — within two taps from any viewport state.
  • Contact form + map + hours. The map is OpenStreetMap (no Google Maps API key, no third-party tracker on the page).
  • FAQ section. The intake team's top 10 most-asked questions, in plain language, with structured FAQPage JSON-LD for search engines.
  • 42 CFR Part 2 footer notice. The required language for SUD treatment programs.

What is NOT on the page (intentional)

  • No live testimonials. Federal 42 CFR Part 2 requires a signed authorization for each one. The existing 7 testimonials need a quick legal review before re-publishing. The section is scaffolded and ready; content lands when the practice has time.
  • No third-party trackers. No Google Analytics. No Facebook Pixel. No Tag Manager. The site ships zero profile-building JavaScript. (Cookieless analytics is available if the practice wants it later — but turned off by default for compliance.)
  • No online booking or appointment scheduling. The contact form + tap-to-call are the intake path. A HIPAA-compliant scheduling tool is a separate engagement.
  • No donations or payment processing. The practice does not currently accept online donations; if they want to later, that's a small additional engagement.
  • No social media embeds. Facebook and Instagram stay the practice's responsibility on their own channels.

The process — 4 weeks from deposit to launch

The engagement ran on a phased cutover. The site was built on a separate host (so the legacy WordPress site stayed live the whole time), reviewed at the demo, then cut over at the DNS change. The practice was never offline.

Week 01

Pre-build + design

The client delivered: an authorizing email (used to create the client-owned accounts), the current DNS records, the top 10 most-asked intake questions, and sign-off on the engagement agreement. The build started the same day the deposit cleared. Page design (hero, services grid, about, FAQ, contact) was approved in a single 30-minute review.

Week 02

Build + bilingual copy

The static site went up on a separate host (so the legacy WordPress install stayed live). Services, about, FAQ, contact form, map, crisis resources, footer notice — all built. The bilingual copy was drafted, the tap-to-call button was tuned for mobile, the contact form was wired to the intake inbox with cookieless spam protection.

Week 03

Compliance + accessibility review

The 42 CFR Part 2 audit was run end-to-end: every script on every page checked against the third-party-tracker list, every URL in the page source checked for tracker domains, every form submission flow reviewed for what data leaves the page. Accessibility: Lighthouse + axe-core CI gate + a manual screen-reader pass. The 301 redirects for the legacy URLs were configured so old links still work.

Week 04

Demo, DNS cutover, handoff

The demo: a working URL the practice could review on real devices, not screenshots. The DNS cutover: a 1-2 hour operation, the domain moved to the new host, the legacy WordPress site was decommissioned. The handoff package: source code archive, editing guide, Loom walkthrough, the compliance audit trail, the engagement walkthrough PDF. A 30-day post-launch support window started.

Screenshots

Desktop and mobile views, before and after. (Screenshots are added by the dev when the page is personalized — these slots mark where the desktop / mobile / before / after shots go.)

Desktop · After

The current live desktop view — hero, services, about, FAQ, contact, crisis resources, footer.

Mobile · After

The current live mobile view — tap-to-call button always visible, services stacked, crisis resources at the bottom.

Desktop · Before

The legacy WordPress desktop view — Beacon Easton theme, vendor-managed, five trackers in the page source.

Mobile · Before

The legacy WordPress mobile view — slow load, modal popup trapping the bilingual intake info behind a click.

The handoff — what the client owns

The site is owned by the client. The hosting account is the client's. The domain is in the client's registrar. The source code is in the client's GitHub (or as a zipped archive if GitHub is too much). The handoff package is six things:

  1. Source code in the client's GitHub account, plus a zipped archive as a fallback. Every file is editable in any text editor; no Git knowledge required for 95% of content updates.
  2. A non-technical editing guide (markdown document + 30-minute Loom walkthrough) for routine content updates: editing service descriptions, FAQ items, blog posts, the last-reviewed date, the crisis resource numbers.
  3. The hosting account in the client's name. The client can log in, see the deploy history, and roll back to any prior version.
  4. The domain in the client's registrar account. The client can transfer it to any registrar, point it at any host, or sell it — none of those require permission from anyone else.
  5. The compliance audit trail (a markdown document, generated as a PDF for the Board) — every third-party-tracker decision, every accessibility fix, every 42 CFR Part 2 verification, with the date and the rationale.
  6. A 30-day post-launch support window — anything that needs a fix or adjustment after the cutover, no charge. After the 30 days, the client is fully self-sufficient and can hire any developer to work on the site.

The compliance angle — 42 CFR Part 2, in plain language

Substance use disorder (SUD) treatment programs are governed by 42 CFR Part 2 — a federal confidentiality rule stricter than HIPAA. The rule says: a patient's status as a patient in a SUD program cannot be disclosed without their written authorization, with limited exceptions. For a website, the practical implications are:

  • No third-party trackers that can see which specific pages a visitor lands on. A tracker that reports "user X visited the IOP page" is a disclosure surface — the tracker company now knows the visitor is researching intensive outpatient programs. The rebuild ships zero profile-building JavaScript.
  • No testimonials with patient names at launch. Each one requires a signed authorization specifying what can be said, where, and for how long. The existing 7 testimonials on the legacy site need a quick legal review before re-publishing.
  • Crisis resources always visible. 988 Suicide & Crisis Lifeline, SAMHSA National Helpline, NJ ReachNJ, plus a 911 emergency-handling line — within two taps from any viewport state.
  • A 42 CFR Part 2 footer notice. The required language stating that information collected is governed by the federal rule.
  • Intake-only contact form. The form is for general inquiry only — never clinical, never insurance, never substance-use data. (A HIPAA-compliant intake form is a separate engagement with a BAA-covered form provider.)
  • No Google Maps. The legacy site exposed a Google Maps API key in the page source. The rebuild uses OpenStreetMap instead — no API key, no third-party tracker, no profile-building JavaScript.

The compliance audit trail documents every decision, the date it was made, and the rationale. The practice can hand it to their attorney, their Board, or an auditor and the trail is complete.

What I learned

Two things stand out about this engagement that I'll carry into the next one.

The 5-year cost of vendor lock-in is the headline number, not the page load. Every prospective client I've talked to since this engagement has been more interested in the $1,773/year savings than the Lighthouse 100. The page load is the proof that hand-coded is better, but the cost is the reason a small business owner picks up the phone. For a 501(c)(3) where every dollar funds a session, the $1,773/year is not a small number — it's a meaningful portion of the operating budget. The break-even math ($2,000 build ÷ $1,773 annual savings = 1 year, 2 months) is the line that closes the deal.

42 CFR Part 2 is a structural constraint, not a feature. It is not optional, not adjustable, and not "we'll add it later." For SUD treatment programs, the compliance posture is the table-stakes requirement — and most page builders are not designed for it. Universal Analytics and Facebook SDK are on by default. Testimonials are presented as a "feature" to turn on. The trap is that a SUD program can ship a Squarespace or Wix site and be non-compliant on day one, without realizing it. The rebuild was an opportunity to build the compliance posture into the architecture, not bolt it on at the end.

If you're reading this and your business has a regulated compliance posture (HIPAA, 42 CFR Part 2, GDPR, PCI, attorney-client privilege) and a page-builder site, the question is not "is the site working" — it is "is the site compliant, and would an audit show that." The rebuild is the right time to answer that question.

FAQ

How much did this project cost?

The build fee was a flat $2,000, invoiced in two equal milestones (50% deposit, 50% on handoff). The hosting after handoff is $0/month for static hosting plus $11.20/year for the domain at-cost. The total cost of ownership over 5 years: $2,000 build + $56 hosting (5 × $11.20) = $2,056. The legacy WordPress setup was $149/month = $1,788/year = $8,940 over 5 years. 5-year net savings: $6,884. 10-year net savings: $15,768 ($17,880 legacy − $2,112 new).

What was the timeline for a similar cutover?

4-6 weeks from deposit to launch for a single-page, 42 CFR Part 2-compliant site. The actual engagement here was on the faster end of that range (about 4 weeks). The cutover itself — DNS change, content freeze, handoff — takes 1-2 hours. The bulk of the time is the build (page design, content migration, compliance review, accessibility audit). For larger sites (multi-page, custom features, custom forms), 6-10 weeks is the realistic range.

What compliance was required?

Federal 42 CFR Part 2 — the confidentiality rule for substance use disorder (SUD) treatment programs. The compliance posture required: (1) no third-party trackers (Google Analytics, Facebook Pixel, etc.) that could see which specific pages visitors land on; (2) no testimonials with patient names at launch (each one requires a signed authorization); (3) crisis resources (988, SAMHSA, ReachNJ) always visible near the footer; (4) a 42 CFR Part 2 footer notice; (5) intake-only contact form (no clinical or insurance data collected). The compliance audit trail is documented in the engagement handoff and is part of the deliverable.

Can you work with nonprofit rates?

Yes. For 501(c)(3) and other tax-exempt organizations, the rate is meaningfully below the standard project rate. The discount is documented in writing per engagement (the agreement specifies the rate, the hours estimated, and the discount). What does not change: the work is the same quality, the deliverables are the same, the source code is owned by the client, and the handoff package is the same. The discount applies to both the project fee and any post-launch follow-on work.

What's included in the handoff?

Six things: (1) the source code in the client's GitHub account (or as a zipped archive if GitHub is too much); (2) a non-technical editing guide (markdown doc + 30-minute Loom walkthrough) for routine content updates; (3) the hosting account in the client's name; (4) the domain in the client's registrar account; (5) a compliance audit trail (for regulated verticals — 42 CFR Part 2, HIPAA, GDPR); (6) a 30-day post-launch support window. After the 30 days, the client is fully self-sufficient and can hire any developer to work on the site.

How is this different from Squarespace / Wix / GoDaddy?

Three structural differences. (1) Code ownership — the source code lives in the client's GitHub, not on a vendor's server. They can move it, edit it, or hand it to a different developer. Page builders do not export code. (2) No recurring platform tax — Squarespace is $23/month, Wix is $32/month, GoDaddy is $15-30/month, and the costs add up. Static hosting is $0/month. (3) Performance — page builders ship 200-500 KB of template + app JavaScript. Hand-coded static sites ship under 15 KB total transfer. For Lighthouse scores and Core Web Vitals, this is the difference between a 60-80 mobile score and 100. The trade-off: page builders are "live in an hour" and require no developer; hand-coded is a 1-3 week build that requires working with a developer.

Have a similar project?

15-20 minutes is all it takes to get a real quote. Tell me about the site you have now — what platform, what you pay, what's working, what's not, what compliance posture you need — and I'll come back with a scope, a fixed price, and a timeline. Usually within 1 business day.

Reading the math first? The small business website cost guide walks through the 5-year TCO breakdown that produced the numbers above.