# Eric Mutema: Full Stack Developer, WordPress Specialist and Technical Project Manager > Eric Mutema is a full stack developer, WordPress specialist and technical project manager with 9+ years of WordPress experience and 5 years in web-focused customer support. Eric builds custom WordPress themes and plugins, WooCommerce stores and API integrations, works with PHP, Laravel, Drupal, Next.js, React, React Native and TypeScript, and manages projects with Agile methods, from scoping through launch and support. Available for freelance and contract work: WordPress and WooCommerce builds, custom plugins, site migrations, performance optimization, maintenance, and web or mobile apps. ## Highlights - 40% average performance gain on client sites - 45% faster load times across 50+ client sites, at 99.9% uptime - 30% better team code quality after introducing code review - 60% organic traffic growth from SEO for a major African news platform - 98% client satisfaction rate ## Selected work - [Global Atlanta](https://www.globalatlanta.com): Migrated a 30-year-old international business publication from Newspack to a custom GeneratePress build. Stack: WordPress, GeneratePress, The Events Calendar, Paid Memberships Pro, Kinsta, Cloudflare. - [Safari AI](https://www.safariai.app): AI safari itinerary builder and travel CRM for tour operators, agents and travellers. Stack: Next.js, TypeScript, Firebase, Google Gemini, Stripe, Tailwind CSS, AI-assisted development. - [Drinkmates](https://www.drinkmates.co.ke): Social app for going out: find drinking buddies, join nearby events, share locations and split the bill. Stack: React Native, Expo, Next.js, Supabase, PostgreSQL, AI-assisted development. - [JFCS Adoption Connection](https://adoptionconnection.jfcs.org): Custom templates and structured content for the open-adoption agency of Jewish Family and Children's Services. Stack: WordPress, PHP, Elementor Pro, Meta Box, Kinsta. - [Heritage Hills](https://heritagehills.org): Membership, email and store work, plus an MCP server, for a historic district preservation nonprofit in Oklahoma City. Stack: WordPress, WooCommerce Memberships, WooCommerce Subscriptions, MCP, GoDaddy. - [WooCommerce Subscription Date Manager Pro](https://github.com/Erykko/WooCommerce-Subscription-Date-Manager-Pro): Plugin to bulk update WooCommerce subscription payment dates with filters and logging. Stack: WordPress, WooCommerce Subscriptions, PHP, JavaScript. - [Adriana Cowdin](https://adrianacowdin.com): Fixed subscription renewals and built cart recovery for an author and coach's WooCommerce store. Stack: WordPress, WooCommerce, WP Swings Subscriptions, PHP, SiteGround. - [Media Ace Advisors](https://mediaaceadvisors.com): Business website for a media advisory firm. Stack: WordPress, WooCommerce. - [Palacina](https://www.palacina.com): Website for a luxury hotel and serviced apartments in Nairobi. Stack: Laravel, PHP, Bootstrap, jQuery. - [Safari Game Portfolio](https://github.com/Erykko/Safari-Game-Portfolio): Game-style WordPress portfolio theme with custom blocks, post types and a JS game engine. Stack: WordPress, PHP, Gutenberg Blocks, JavaScript, WP-CLI. ## Case studies - [Global Atlanta](https://www.designnairobi.agency/case-studies/global-atlanta.md): Moved a 30-year-old international business publication off Newspack to a custom GeneratePress build, then stabilized its performance, data and security. Web page: https://www.designnairobi.agency/case-studies/global-atlanta.html - [Safari AI](https://www.designnairobi.agency/case-studies/safari-ai.md): My own product: an AI safari itinerary builder with a full travel CRM for the operators, DMCs and agents who sell those trips. Web page: https://www.designnairobi.agency/case-studies/safari-ai.html - [Drinkmates](https://www.designnairobi.agency/case-studies/drinkmates.md): A social app for going out: find drinking buddies, join nearby events, share locations with your group and split the bill. Web page: https://www.designnairobi.agency/case-studies/drinkmates.html - [JFCS Adoption Connection](https://www.designnairobi.agency/case-studies/jfcs-adoption-connection.md): Custom templates and structured content for Adoption Connection, the open-adoption agency of Jewish Family and Children's Services in the San Francisco Bay Area. Web page: https://www.designnairobi.agency/case-studies/jfcs-adoption-connection.html - [Heritage Hills](https://www.designnairobi.agency/case-studies/heritage-hills.md): Membership, email and store work for the nonprofit that protects Oklahoma City's Heritage Hills historic district, plus an MCP server so AI tools can manage the site. Web page: https://www.designnairobi.agency/case-studies/heritage-hills.html - [WooCommerce Subscription Date Manager Pro](https://www.designnairobi.agency/case-studies/woocommerce-subscription-date-manager-pro.md): An open-source plugin that moves the next payment date on many WooCommerce subscriptions at once, with filters to skip the ones that should not change. Web page: https://www.designnairobi.agency/case-studies/woocommerce-subscription-date-manager-pro.html - [Adriana Cowdin](https://www.designnairobi.agency/case-studies/adriana-cowdin.md): Fixed failing subscription renewals and blocked cancellations for an author and coach's WooCommerce store, and built a custom abandoned cart recovery plugin. Web page: https://www.designnairobi.agency/case-studies/adriana-cowdin.html - [Safari Game Portfolio](https://www.designnairobi.agency/case-studies/safari-game-portfolio.md): A game-style WordPress portfolio theme where visitors explore projects as wildlife sightings, earn XP and unlock achievements. Web page: https://www.designnairobi.agency/case-studies/safari-game-portfolio.html ## Contact - Website: https://www.designnairobi.agency/ - Email: emutema.mutema@gmail.com - GitHub: https://github.com/Erykko # Case studies in full ## Global Atlanta case study > Moved a 30-year-old international business publication off Newspack to a custom GeneratePress build, then stabilized its performance, data and security. - Role: Lead WordPress developer - Type: Client work, long-running engagement - Timeline: Ongoing. Migration launched in 2026 - Live site: https://www.globalatlanta.com - Stack: WordPress, GeneratePress, PHP, The Events Calendar, Paid Memberships Pro, Fluent Forms, Gravity Forms, Kinsta, Cloudflare - Web page: https://www.designnairobi.agency/case-studies/global-atlanta.html ### The Problem Global Atlanta has tracked Atlanta's rise as a global city for more than 30 years. The site carries regional news sections, an events calendar, paid memberships and a jobs board, and it ran on Newspack. Alongside the rebuild, live issues were hurting readers and staff: - Bots crawling event archives caused PHP-FPM upstream timeouts, so pages failed to load. - 29 native events widgets pushed pages into the PHP memory ceiling. - Forms failed because the edge cache served stale nonces. - Jetpack kept falling back into Safe Mode, and the firewall blocked Mailchimp's RSS crawler, so newsletters could not pull new posts. ### The Approach I planned the migration architecture before writing code: the content model, regional section templates, event views and which existing plugins to keep. I chose GeneratePress as a lightweight base with a custom child theme, instead of another full news theme with its own opinions. For performance, I traced the timeouts to bot crawling of event archives and fixed the traffic at the edge before touching server resources. ### The Solution The publication now runs on a custom theme, with the fixes below shipped during and after the move. - A GeneratePress child theme with block patterns, regional section templates and overrides for The Events Calendar. - A database repair for email addresses that a migration search-replace had corrupted by appending full URLs to usernames, across posts, options, postmeta, Gravity Forms entries and mail logs. - Cloudflare firewall rules and caching for event archives, database cleanup, tuned Kinsta caching and a Core Web Vitals review focused on CLS and TTFB. - 29 native Tribe Events widgets replaced with shortcode-based Custom HTML widgets to bring memory use back under the limit. - Fresh nonces for Fluent Forms behind Kinsta's edge cache, an end to Jetpack's Safe Mode loop, and Mailchimp's RSS crawler let through the firewall. - Removed unauthorized admin access, locked down wp-admin, and resolved DNS and SSL issues. ### The Why GeneratePress keeps the front end light and puts layout decisions in a child theme the client owns, so the site is not tied to one vendor's roadmap. Stopping bad bots at Cloudflare removes load before it reaches PHP, which is cheaper and more reliable than adding server capacity. The widget swap keeps the same events output at a fraction of the memory, instead of raising limits and hiding the problem. Repairing emails in place kept every member and form record intact, where restoring a backup would have lost newer data. ### The Result The publication runs on a theme the team controls, with section and event templates built for its content. Event archives no longer time out under bot load, forms submit reliably and newsletters pull new posts again. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## Safari AI case study > My own product: an AI safari itinerary builder with a full travel CRM for the operators, DMCs and agents who sell those trips. - Role: Founder and developer - Type: Own product - Live site: https://www.safariai.app - Stack: Next.js, TypeScript, React, Firebase, Firestore, Google Gemini, Genkit, Stripe, Tailwind CSS, Radix UI, Vercel, AI-assisted development - Web page: https://www.designnairobi.agency/case-studies/safari-ai.html ### The Problem Safari operators, DMCs and agents build itineraries by hand, then track leads, quotes, bookings and payments across spreadsheets, email and chat. Slow quotes lose bookings, and scattered records make it easy to miss a payment or an unconfirmed booking. Travellers planning alone face the same blank page with less local knowledge. ### The Approach I split the product by audience at signup. Travellers get the AI planner. Professionals get the planner plus a CRM built around trips. I used Google Gemini through Genkit for itinerary generation, and Firebase for auth and data, so I could ship as a solo builder without running servers. ### The Solution Safari AI is live at safariai.app. - Free-text trip requests, such as a 10-day honeymoon safari, become day-by-day itineraries that users can refine. Gemini also generates trip images. - A travel CRM with a lead and trip pipeline, quotes, payments, a bookings calendar, tasks tied to trips, suppliers, client records and a client portal. - A Copilot assistant inside the CRM, and a dashboard that flags overdue tasks, overdue payments, unconfirmed bookings and departures in the next 14 days. - Firebase Auth with email or Google sign-in, Firestore for data, and Stripe Checkout and the customer portal for subscriptions. - Plan tiers for travellers and teams, with org branding, team members, custom fields and white-label on higher tiers. ### The Why Firebase and Vercel keep operations close to zero, so my time goes into the product. Separate traveller and professional modes let one AI engine serve two markets without cluttering the traveller experience. A seeded Kenya sample pipeline means sales demos always show realistic data, never empty screens. ### The Result Safari AI is live and taking signups, with a free CRM trial for professionals. It is on show to operators at the Magical Kenya Travel Expo in Nairobi in October 2026. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## Drinkmates case study > A social app for going out: find drinking buddies, join nearby events, share locations with your group and split the bill. - Role: Founder and developer - Type: Personal side project - Live site: https://www.drinkmates.co.ke - Stack: React Native, Expo, Next.js, TypeScript, Supabase, PostgreSQL, PostGIS, Turborepo, Vercel, AI-assisted development - Web page: https://www.designnairobi.agency/case-studies/drinkmates.html ### The Problem A night out runs across too many apps: one to find people, one for events, a group chat to coordinate and another to settle the bill. People who are new to a city, or whose friends are busy, have no easy way to find others who want to go out. ### The Approach I built one Supabase backend for both the web app and the mobile app, in a Turborepo monorepo, so features ship to both from shared code. Core logic such as matches, groups and event invites lives in Postgres functions, which keeps the clients thin and the rules in one place. ### The Solution Drinkmates covers the whole night in one app. - Swipe discovery that matches people by bar preferences and location. - Group hangouts with realtime chat and location sharing, built on Supabase Realtime subscriptions to Postgres changes. - Nearby events with invites and RSVPs. - Bill splitting by scanning a receipt or entering items, also available as a free public tool at `/split-bill`. - Google and email sign-in through Supabase Auth, with location data stored only temporarily. ### The Why PostGIS runs nearby searches inside the database, so the app never pulls every user to the phone to filter by distance. Realtime subscriptions on table changes give live notifications and chat without a separate websocket server. Shipping Android first gets the app in front of real users before App Store review. ### The Result Drinkmates is live on Android and the web, with iOS coming soon. Public Nairobi events on the site already show RSVPs. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## JFCS Adoption Connection case study > Custom templates and structured content for Adoption Connection, the open-adoption agency of Jewish Family and Children's Services in the San Francisco Bay Area. - Role: WordPress developer - Type: Client work, nonprofit - Live site: https://adoptionconnection.jfcs.org - Stack: WordPress, PHP, Elementor Pro, Meta Box, Astra, Kinsta - Web page: https://www.designnairobi.agency/case-studies/jfcs-adoption-connection.html ### The Problem Adoption Connection is a licensed open-adoption agency that has built families for more than 40 years. Its site serves two very different visitors: expectant parents considering adoption and families hoping to adopt. Both need clear next steps and an easy way to reach a counselor. ### The Approach I split the work by what each part of the site needs. Elementor Pro handles pages that staff design and rearrange. Meta Box handles structured content. Custom PHP templates render anything that must look the same every time. ### The Solution The site gives each audience its own path, I'm Pregnant and I Want to Adopt, each with steps, FAQs and contact options. - Custom fields built with Meta Box, so staff fill in structured forms instead of editing page layouts. - Custom PHP templates that render that content consistently across the site. - Elementor Pro page layouts on the Astra child theme for the marketing and information pages. ### The Why Structured fields and PHP templates mean every profile or listing follows the same layout, and staff cannot break it by accident. Elementor stays where flexibility matters, on pages that change often. ### The Result Expectant parents and adoptive families each have a clear route to the right information and a counselor, and staff update structured content without touching layouts. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## Heritage Hills case study > Membership, email and store work for the nonprofit that protects Oklahoma City's Heritage Hills historic district, plus an MCP server so AI tools can manage the site. - Role: WordPress developer - Type: Client work, nonprofit - Live site: https://heritagehills.org - Stack: WordPress, WooCommerce, WooCommerce Memberships, WooCommerce Subscriptions, WP Mail SMTP, MCP, Cursor, GoDaddy Managed WordPress - Web page: https://www.designnairobi.agency/case-studies/heritage-hills.html ### The Problem Historical Preservation, Inc. has protected the Heritage Hills neighborhood since 1969. Its WordPress site on GoDaddy Managed WordPress sells memberships through WooCommerce Memberships and WooCommerce Subscriptions, along with home tour tickets, sponsorships and donations. Site email was not reliably reaching members because Brevo and the SMTP setup were in conflict. Shop products also displayed in the wrong order, which made the store harder to use. ### The Approach I traced the email failures to two mail systems competing to send the same messages, then settled on a single sending path. I also wanted the small team to manage routine content without waiting on a developer, so I connected the site to AI tooling through MCP. ### The Solution The work covered four areas. - Worked on the membership setup in WooCommerce Memberships and WooCommerce Subscriptions, which handles one-time and auto-renewing memberships. - Removed the Brevo and SMTP conflict so site email goes out through one configured mailer. - Fixed product display ordering in the WooCommerce shop. - Built a WordPress MCP server with `@automattic/mcp-wordpress-remote` and Cursor, so content and site management can run through AI tooling. ### The Why One mailer removes the guesswork about which system sent a message and makes failures visible. The MCP server lets a small nonprofit team handle routine content updates through plain-language requests, while WordPress permissions still apply. ### The Result Site email reaches members again and shop products appear in the intended order. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## WooCommerce Subscription Date Manager Pro case study > An open-source plugin that moves the next payment date on many WooCommerce subscriptions at once, with filters to skip the ones that should not change. - Role: Author and maintainer - Type: Open-source WordPress plugin - Timeline: January to June 2025 - Repo: https://github.com/Erykko/WooCommerce-Subscription-Date-Manager-Pro - Stack: PHP, WordPress, WooCommerce, WooCommerce Subscriptions, JavaScript, AJAX - Web page: https://www.designnairobi.agency/case-studies/woocommerce-subscription-date-manager-pro.html ### The Problem WooCommerce Subscriptions edits payment dates one subscription at a time. When a store needs to shift its billing cycle, that means hours of manual edits and a real risk of charging someone on the wrong day. ### The Approach I built an admin tool under the WooCommerce menu that goes through the WooCommerce Subscriptions API instead of writing to the database directly. That keeps dates, scheduled renewals and order notes consistent with what Subscriptions expects. ### The Solution Admins set a new payment date, an exclusion date and a list of customer emails to skip, confirm, and run. - A Date Manager screen under WooCommerce, limited to users with the `manage_woocommerce` capability, with every request nonce-checked. - Updates through `$subscription->update_dates()`, with an order note on each changed subscription. - Skips subscriptions paid after the exclusion date or owned by an excluded email, matched case-insensitively. - Configurable batches of 10 to 100 with a short pause between them to ease server load. - A log of the last 10 runs with who ran them, the dates used and updated, skipped and error counts, plus a `wcsm_subscription_updated` action for each change. ### The Why The Subscriptions API is slower than a bulk SQL update, but it keeps renewals scheduled correctly and leaves an audit trail on every subscription. The exclusion filters exist because bulk changes are only safe when recently paid and special-case customers stay untouched. The run log answers the first question after any billing change: who changed what, and when. ### The Result The plugin is public on GitHub under GPLv3, at version 1.0.2. It supports WordPress 5.8+, PHP 7.4+ and WooCommerce 5.0+ with WooCommerce Subscriptions. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## Adriana Cowdin case study > Fixed failing subscription renewals and blocked cancellations for an author and coach's WooCommerce store, and built a custom abandoned cart recovery plugin. - Role: WordPress and WooCommerce developer - Type: Client work - Live site: https://adrianacowdin.com - Stack: WordPress, WooCommerce, WP Swings Subscriptions, PHP, SiteGround - Web page: https://www.designnairobi.agency/case-studies/adriana-cowdin.html ### The Problem Adriana Cowdin sells her book, merchandise and The Collective, a group coaching membership, through a WooCommerce store on SiteGround. Subscription renewals were failing and some members could not cancel. Failed renewals lose recurring revenue, and blocked cancellations create support work and frustrated customers. ### The Approach I started with the billing issues and traced the renewal failures to broken cron jobs in the WP Swings subscriptions plugin, not the payment gateway. The cancellation blocks came from SiteGround's bot protection challenging legitimate requests. For cart recovery, I built a small custom plugin instead of adding a large marketing suite. ### The Solution Four changes, each scoped to one problem. - Repaired the scheduled renewal jobs so subscriptions renew on time. - Resolved the SiteGround bot protection conflict so members can cancel. - Built a custom abandoned cart recovery plugin under the `AAC` namespace, then audited it to confirm it contains no billing logic. - Removed the Kadence theme and its dependencies, leaving one theme stack to maintain. ### The Why Keeping cart recovery fully separate from billing means a bug in a reminder can never touch a payment. The audit after the build confirmed that line holds. Removing the unused theme cuts weight and update risk on a store that handles payments. ### The Result Renewals and cancellations work again, and abandoned carts now get a recovery path. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/) --- ## Safari Game Portfolio case study > A game-style WordPress portfolio theme where visitors explore projects as wildlife sightings, earn XP and unlock achievements. - Role: Designer and developer - Type: Personal project, open source - Timeline: March 2026 - Repo: https://github.com/Erykko/Safari-Game-Portfolio - Stack: WordPress, PHP, Gutenberg blocks, JavaScript, CSS, WP-CLI - Web page: https://www.designnairobi.agency/case-studies/safari-game-portfolio.html ### The Problem Most developer portfolios look the same, and visitors skim them in seconds. I wanted a portfolio people would explore, that still stays fully editable in WordPress. ### The Approach I split it into a classic theme for presentation and a bundled core plugin for content, so projects, skills and testimonials survive a theme change. Content lives in custom post types, and a small vanilla JS engine turns it into a game. No JS framework, and ACF is optional. ### The Solution The front page is a single safari console built from blocks. - Seven custom post types, including projects, skills, testimonials, achievements and easter eggs, with one global settings option. - Twelve server-rendered blocks under `safari/*`, with live previews in the block editor. - A vanilla JS game layer: a boot screen, a HUD, project encounters that award XP, five ranks from Day Tripper to Master Ranger, and achievement toasts. Progress saves in the browser. - Seed content from an admin page or `wp safari` WP-CLI commands, so a fresh install looks complete in minutes. - A static demo build that runs from plain HTML with fallback data. ### The Why Server-rendered blocks keep the content crawlable and editable, with the game layered on top. Content in a plugin means the work is not lost if the theme changes. WP-CLI seeding makes the theme quick to install and easy to test. ### The Result The full theme and plugin are public on GitHub. Author: Eric Mutema, Full Stack Developer, WordPress Specialist and Technical Project Manager (https://www.designnairobi.agency/)