Case study · Sole designer and developer
A Houston nonprofit run club was running on agency-managed WordPress hosting that had already gone down and was hard to maintain — the technical lead had to wait on the agency whenever something broke, and analytics installation was unreliable. The fix was replacing a fragile, externally dependent website with lightweight, measurable infrastructure the organization actually owns.
Short answerA Houston nonprofit run club had to wait on an agency every time its website broke. Rebuilding on hosting the organization controls cut ongoing cost to near zero, moved mobile Lighthouse performance from 65 to 94, reduced image payload from about 14MB to about 1MB, and left content controls plus documentation a volunteer can actually run.
The problem
The organization didn't need a prettier site. It needed to stop being at the mercy of a third party for uptime and basic changes, and it needed analytics that actually worked. Any fix had to solve that root cause, not just redecorate the surface.
Architecture
Ismael controls the domain on the organization's behalf, and the source lives in a version-controlled, organization-owned GitHub repository — not an agency's private system.
Near-zero ongoing hosting cost, no server to maintain, and no downtime risk of the kind that motivated the migration. The old WordPress markup was left behind entirely rather than ported.
A written README, a short screen recording, and one supervised practice update mean the organization can lose its technical volunteer without losing its website.
Performance
Desktop was already scoring 99, but mobile — where most visitors land — was stuck at 65. Root cause: a 5.9MB unoptimized hero image and render-blocking font loading. Both were fixed and the site was re-tested against the live result, not assumed fixed.
Adding width/height attributes to images without also setting
height: autoin CSS caused visible stretching on some mobile browsers — a regression that's invisible in review and only shows up on a real phone.
Analytics
A single GTM trigger plus one GA4 event (cta_click with a cta_name parameter) covers every call-to-action, present and future — a new button just needs a data-cta attribute, no new GTM configuration.
Publishing the GTM container auto-added its own pageview tag alongside an existing hardcoded gtag.js snippet, silently doubling every pageview count. Caught before it distorted a single report.
SEO
Titles and meta descriptions rewritten against the phrase people
actually search locally, plus a previously-nonexistent
sitemap.xml and robots.txt, with Search
Console connected immediately so results were observable instead of
assumed. The target local phrase was generating real clicks within
24 hours — measurable, rather than a "give it six months" promise.
A resource-constrained nonprofit doesn't need to choose between "no website support" and "locked into an agency." Lightweight, organization-owned infrastructure — built with established external services rather than custom systems — can cost less to run and be more reliable at the same time, and can survive a change in who's volunteering.