Ivim Health
WordPress Developer
Turning a messy spreadsheet into a self-sustaining provider system
The Problem
When I came into this project, Ivim Health had a spreadsheet. A big one. Over a hundred medical providers with their credentials, education history, career highlights, expertise areas, all of it crammed into rows and columns that nobody had standardized. Some entries used bullet points, some used dashes, some used asterisks, and some people just wrote freeform paragraphs where a list was expected.
The question was simple: how do we get all of this onto the website? They were running WordPress, and they knew they didn’t have time to manually create a page for each provider. That’s where I came in.
How I Approached It
The first thing I noticed was that this needed to be a custom post type. Not a page builder layout, not a bunch of manually created pages. A proper system with structured fields that could scale and stay organized as they added more providers over time.
But here’s what mattered most to me: I wanted this to be completely detachable. WordPress projects can get messy fast when custom functionality gets tangled into the theme. If the theme updates, things break. If they switch environments, things break. I’ve seen it happen too many times.
So I built it as a standalone plugin. They sent me their theme so I could match the design, but the plugin installs its own templates, its own field groups, its own post type registration. You activate it, run the installer, and it works. You deactivate it, and the theme keeps running like nothing happened. Production, staging, a local copy with changes, it doesn’t matter. It plugs in and out cleanly.
The Data Pipeline
This was probably the most interesting part of the whole project. You can’t just take a messy spreadsheet and dump it into WordPress. The data needed to be cleaned first.
I built a Node.js utility that reads the exported CSV and normalizes everything. It handles all the formatting inconsistencies: numbered lists with periods, numbered lists with parentheses, bullet points, dashes, those long separator lines some people used. It parses education entries to separate degrees from institutions. It strips out information that doesn’t belong or doesn’t make sense in context.
This went through multiple iterations. Each round got smarter about edge cases. The final version got really good feedback from the client because it was catching things that would have taken hours to fix by hand.
Once the data is clean, it exports to JSON. The WordPress plugin reads that JSON and creates all the provider posts automatically, complete with ACF fields for expertise, education history, career highlights, and everything else. Over 50 providers imported in one run.
SEO That Writes Itself
Every provider page needed proper SEO metadata. Doing that manually for 100+ pages would be painful, so the importer handles it. It detects whether the site is running Yoast or AIOSEO and generates titles, meta descriptions, and focus keywords automatically for each provider. The descriptions pull from the provider’s experience summary and get trimmed to the right length. If there’s no summary, it falls back to combining their name, title, and expertise areas.
The Provider Pages
The archive page shows all providers in a grid with pagination and sorting. Department leaders get featured placement at the top. Each provider has their own detail page with sections for their career highlights, experience, education, and even a blog slider if they have published articles on the site.
Everything on the archive page, the hero text, the team description, the CTA at the bottom, it’s all editable through ACF fields on a hidden settings page. The client’s team can update all of that without touching code.
How It Went
I gave them access for ongoing maintenance. They told me they never needed it. They followed the process I documented, and they were completely fine on their own. For me, that’s the best outcome. When something works so well that it just disappears into the workflow, that’s the goal.
I don’t see this as just a plugin. It’s more like a small gear inside a bigger machine. Well designed, carefully fitted, and connected in a way where everything runs smoothly. Like those screws on an airplane that are so precisely made that nobody thinks about them, but they’re absolutely critical.
Working on something similar?
I'd love to hear what you're building. For me, the best projects start with a good conversation, so feel free to reach out.
Let's Talk