Portfolio
Custom WordPress plugins for Resonate Health
A suite of custom WordPress plugins, written in PHP, that power Resonate Health's member platform: an AI assistant, personalized programs, on-site booking, and a member health profile.
AI Assistant
An on-site AI assistant that helps members find their way around the site, walks them through a guided self-assessment, and answers questions using the client's own library of 1,000+ articles.
The challenge
Resonate Health has published more than 1,000 posts over the years. That depth is valuable, but it is hard for members to know where to start or which resources fit their situation. The client also has a proprietary self-guided process that members follow to work out which resources they need.
What I built
I built an AI assistant that lives on the website and handles everything from simple navigation ("where do I find my programs?") to guiding a member step by step through the self-guided flow. When a question calls for the client's expertise, the assistant searches their article library and answers from that content rather than from generic knowledge.
Behind the scenes, a WordPress plugin connects the site to two Node.js services I built: an agentic assistant that decides how to respond, and a search pipeline it can call as one of its tools.
Technical highlights
- WordPress plugin as the integration layer between the site and two custom Node.js services.
- Agentic assistant that chooses which tools to use for each request, including the retrieval pipeline.
- Retrieval-augmented generation (RAG) pipeline over 1,000+ WordPress posts, embedded into a vector database hosted on Qdrant Cloud.
- Guided multi-step flow that keeps track of where a member is in the client's self-guided process.
- Powered by Claude as the underlying LLM.
Personalized Programs
A program-delivery system that lets staff build and assign personalized programs, and gives members a guided player to work through them and track their progress.
The challenge
A member's program used to be a single Formidable Form at the bottom of a WordPress post, and the form's entry history served as the program itself. Each member effectively had one program, with little room to track progress, take notes, or come back to earlier steps.
What I built
I replaced that form with a full program system. Members can now have multiple programs, each with its own name, items, completion state, notes, and choices. They work through each program in a custom player that shows the next step, linked resources, and suggested next actions.
Staff can create programs from scratch, build reusable templates, and assign programs to members. Programs can also be created from recommendations in the member's Health Profile.
Technical highlights
- Programs modeled as WordPress custom post types, covering consultant-created, self-guided, template, protocol, and recommended programs.
- Custom front-end player rendered through shortcodes, with progression steps, embedded guide content, linked resources, and suggested next steps.
- Per-member state (item completion, notes, selected options, repeat decisions) stored in WordPress user meta.
- Authenticated AJAX handlers with nonce checks and access checks for every member action.
- Integrations with Formidable Forms and Paid Memberships Pro, plus admin tools for assigning and fulfilling programs.
- WP-CLI commands for importing templates and progressions and auditing content.
Booking Integration
An on-site booking flow that takes members from choosing a time through intake and payment, then keeps their sessions in their account where they can view and join them.
The challenge
Booking used to run entirely through Calendly, separate from the website. Members couldn't see anything about their sessions when they logged in and had to rely on Calendly's emails to find their appointments and meeting links.
What I built
I moved the whole booking process onto the website. Members pick an available time, complete an intake form, and pay through the site's existing checkout. Once payment goes through, the booking is created automatically. Members can then log in to see upcoming sessions and join meetings directly from their account. Staff get an overview of every session and its status.
Technical highlights
- Shortcode-based two-step booking panel: date and time selection, then a configurable intake form.
- Custom WordPress REST endpoints that fetch live availability from TidyCal and create bookings.
- Hooks into Paid Memberships Pro checkout so the TidyCal booking is created only after payment succeeds.
- Custom session post type and taxonomy, with ACF settings for each session type's form, price, scheduler, and MailPoet emails.
- Booking status, confirmed time, timezone, meeting URL, and intake entry stored on each session for members and staff.
- Automatic lookup and retry when a booking type ID goes stale, with failures recorded so staff can reschedule.
Health Profile
A member dashboard that brings assessment history and test results into one place, with personalized recommendations for what to do next.
The challenge
Members' information was spread across separate assessments and test records, which made it hard to see their overall picture or decide on a next step.
What I built
I built a tabbed Health Profile dashboard that assembles everything about a member into a single view: assessment status, test history, charts, and an overview. A rules-based engine then suggests programs or assessments that fit the member's goals, skipping anything they've already completed or aren't ready for yet. Recommendations connect directly to the Personalized Programs system, so a member can go from a suggestion to an active program.
Technical highlights
- Repository classes that read assessment records from Formidable Forms and physical test history from separate sources.
- A snapshot builder that assembles each member's status, normalized fields, recommendations, and overview.
- A configurable rules engine that prioritizes recommendations by matching member goals and results.
- Prerequisite and fulfillment checks, so members only see recommendations that apply to them.
- Dashboard rendered through WordPress shortcodes, with Chart.js visualizations.
- Clean separation of services, repositories, builders, and rule configuration.
Let's work together
Interested in something similar? I'd be glad to talk.