A nonprofit funding pediatric cardiac innovation came to us with a website she couldn’t change and a date she couldn’t move.
The site sat on WordPress.com. No hosting plan on the account, just domain registrations and a free page builder that WordPress.org can’t install onto. She had a fundraising event on June 29 and needed a real site before it. And she’d told us exactly what she disliked about other nonprofit sites: too many clicks between a visitor and the thing they came to do. Donate. Get in touch. Read the story.
She also runs the organization herself. Whatever we built, she had to be able to edit it without calling a developer.
Full-site scan before the rebuild and after the final round of fixes
| Accessibility issues | 427 | ~143 |
| Issues resolved | 0 | 280+ |
| Pages affected | 93% | 85% - |
We built a flat HTML prototype first, before touching WordPress.
Prototyped in HTML, then rebuilt in WordPress. Eight pages, licensed brand typefaces, anchor navigation, embedded donation form. Client review reshaped it into ten pages: Home, About, Funding, Get Involved, Our Impact, Events, Donate, Contact, plus privacy and terms.
Fixed the friction the client had complained about. Every contact button on the prototype was a dead end at first review. We built a contact form and pointed all of them at it. The Donate button in the nav scrolled to the section above the donation form rather than the form itself — a small miss that costs real donations. We anchored it straight to the embed. Then we went through every button label on the site and rewrote anything that didn’t say where it was about to take you.
Tuned the motion down, twice. The first pass had bounce, zoom, and scale. The feedback was that it read campy. We stripped it to fade and slide-up. The next review flagged the horizontal slides as still too much on desktop — except in one section, where the boxes were large enough that the movement worked. We removed the rest and kept that one.
Ran accessibility as a tracked workstream. Scanned against WCAG 2.2 Level A/AA, then worked the count down across four sessions. Alt text, heading hierarchy, form labels, landmark roles, duplicate titles, link text, contrast.
Migrated off WordPress.com onto self-hosted WordPress. Built on a staging subdomain so the live site never went dark. Pointed the domain over, issued SSL, configured DNS and MX so the organization’s Microsoft 365 email kept flowing through the cutover.
Built the archive the site would need at scale. After launch, the Our Impact page became a searchable post archive: keyword search, filtering across four tags, date sorting, scroll position held on reload. The client expects hundreds of entries eventually, and had asked us to keep the site free of paid plugin dependencies, so we built it custom on free ACF, then put the tradeoffs on the table — what a paid plugin would buy, what custom code would cost, where each one breaks on future updates — and let the client decide with real information rather than a recommendation dressed up as a fact.
Optimized after launch, not instead of it. Stripped unused plugins, compressed assets, cleaned up what the builder left behind.
Handed over something she could run. Visual editor, dashboard walkthrough, reusable post template, admin access, full backup.
PageSpeed 95 on mobile, 98 on desktop. Largest Contentful Paint at 2.7s mobile and 1.0s desktop. Total Blocking Time at zero on both. Cumulative Layout Shift of 0.026 and 0, which is the part you actually feel: nothing jumps under your thumb while the page loads.
Mobile is the number that counts here. A parent looking up a pediatric cardiac program is doing it on a phone, frequently on a hospital connection, frequently at 2am. A site that stalls at that moment doesn’t get a second visit.
427 accessibility issues down to 143. A 67% reduction. Pages carrying at least one issue fell from 93% to 85%. Empty links, empty headings, redundant link text, redundant alt text, and duplicate page titles all hit zero. Images missing alt text dropped from 60 to 10. Heading-order errors went from 16 to 5, and we got there without changing a single page design.
Screen-reader users can now reach the funding details and the contact form without hitting dead ends. And a nonprofit soliciting public donations sits squarely in the category where ADA web complaints get filed. This closes most of that exposure.
About 20 of the remaining 143 are scanner false positives or defensible under WCAG: a focus outline that already clears contrast at roughly 5.8:1, plugin-generated cookie and reCAPTCHA markup we don’t control, mailto links the scanner reads as documents. Each one is logged with a reason rather than quietly ignored.
Two open items belong to her, not to us. Seventeen notices trace to the cookie plugin’s advertising layer, which can be switched off entirely if the site never runs programmatic ads. Two contrast failures come from the brand coral on white — a slightly darker coral clears AA, but changing a brand color is her call.
Ten pages, zero downtime, live on the date that mattered. Site up June 26. Event June 29.
Tools & technologies
verified