Available for remote work

Halleluyah Salako

I build custom WordPress plugins

// your site has 47 plugins. I can fix that.

Production systems and the internal tools that run them, custom plugins instead of plugin sprawl, payment and API integrations, and admin dashboards non-technical teams can actually operate without calling a developer.

Nine years of client work. Abuja, Nigeria (UTC+1), full overlap with Europe, mornings and afternoons with US Eastern.

9YEARS BUILDING
15+LIVE CLIENT SITES
11COUNTRIES SERVED
4OPEN SOURCE PLUGINS

Selected work

Live client sites I designed, built and still maintain, with the custom plugins and themes behind them. Where there is a link, it goes to the real thing.

๐Ÿฉบ

Veterinary Career Guide

Flagship
vetcareerguide.com โ†—

A subscription commerce and publishing platform carried entirely by one custom WordPress plugin I wrote from scratch, plus a theme built specifically for it. Elementor handles public pages only; the plugin drives everything else, and programmatically controls both Elementor and Formidable Forms.

  • Custom subscription billing, written directly against the Paystack, Flutterwave and Stripe APIs rather than their built-in subscription products, with WP Cron tracking each member's billing date and charging on schedule
  • Geo-routed payments, the gateway is selected automatically by visitor country
  • Multi-currency, prices held in Naira and converted from the visitor's detected location, with a manual override
  • Fulfilment, per-buyer ebook watermarking; hardcopy purchases redeemed through unique codes printed in the physical book
  • Member dashboard, progress tracker with calendar, to-do list, habit tracker and goal tracking
  • Discounting, standard, group and email-targeted coupons, early-bird pricing and stock management, each with an admin screen so non-technical staff run promotions without a developer
๐ŸŸ

AFIWEL, Africa Fish & Aquaculture Welfare

afiwel.com โ†—

Full site plus a Resources plugin now serving 59 publications across an 11-country programme. One plugin replaced four: it registers its own custom post type and fields in place of ACF, exposes itself as a custom Elementor widget so editors compose pages normally, and owns its query, filtering and pagination, which is why it survives Elementor updates and shifting post IDs. Every resource auto-generates its type badge, View and Download actions, and share links for eight platforms on publish.

๐ŸŒ

One Health & Development Initiative

onehealthdev.org โ†—

Full site for a global nonprofit working across human, animal, plant and environmental health. Its news archive ran on three or four stacked filter plugins; I replaced them with one I wrote, Year, Category and keyword filtering, available as both a shortcode and an Elementor widget, owning its own query, results and pagination.

๐ŸŒพ

AgrowSAFE

agrowsafe.com โ†—

Digital verification and market platform for sustainable agriculture across Africa, with three distinct audience paths, farmers seeking verification, buyers sourcing ethically, and partners or investors, plus a professional directory and framework pages. Includes a custom plugin handling structured data collection and custom post types, so submitted records become manageable content rather than form entries.

๐Ÿ“ก

Offline-first records platform

TypeScript

Built end to end: an API, a web application with five role surfaces, and a mobile app that works with no network at all, because the records are collected in places that have none. The offline storage was the easy half. The real problem was convergence, two people editing the same record while both disconnected, and making sure whoever reconnects second cannot silently overwrite the other.

An internal platform, so there is no public link.

๐Ÿš€

One Health Ventures

onehealthv.com โ†—

Corporate site for the ventures and innovation arm, technologies, corporate advisory and an entrepreneurship programme, built so the team maintains it themselves.

Open source

Code you can actually read, not screenshots you have to trust. Six public repositories. The WordPress work is GPL, ctrl-freak is MIT.

๐Ÿ›’

Inline Checkout for WooCommerce

Flagship
github.com/Halleluyahsalako/wc-inline-checkout โ†—

Buy Now and a one page checkout, with Paystack and Flutterwave collected in a modal instead of a redirect. The interesting part is what happens after the widget says "paid": the browser is not believed. The server checks the reference against the one it issued for that order, then calls the gateway API with the secret key to confirm status, currency and amount before anything is marked complete.

Handles the things that are easy to get wrong: Paystack quotes NGN in kobo, so a subunit amount compared against a major unit total passes for anything over one naira. References are bound to their order so a valid one cannot be replayed against another. Flutterwave settlement is net of fees, so comparing against it would reject every real payment.

๐Ÿ“š

Resource Library

WordPress plugin
github.com/Halleluyahsalako/wp-resource-library โ†—

A filterable library of downloadable documents. One plugin instead of a custom post type plugin, a custom fields plugin, a filter plugin and a search plugin all owning a piece of the query and none owning the whole thing. Type and subject are taxonomies rather than a hardcoded list, so the vocabulary belongs to whoever installs it. No jQuery, cards built with createElement, assets loaded only where the shortcode runs.

๐Ÿ”

Cascading Post Filter

WordPress plugin
github.com/Halleluyahsalako/wp-cascading-post-filter โ†—

An AJAX archive filter with search, year, and a parent taxonomy select that reveals a child select on demand. Works with any post type and any hierarchical taxonomy. It owns its own WP_Query rather than reaching into a page builder's markup to swap results, which is why it keeps working when the builder updates.

๐Ÿ›’

Cartel

In development
github.com/Halleluyahsalako/Hal-Cartel โ†—

A lightweight, security conscious eCommerce plugin for WordPress, built as a free alternative to WooCommerce plus its paid extensions. One page checkout, a pluggable payment gateway architecture, Stripe PaymentIntents with signed idempotent webhooks, an abandoned order cron that restocks stale orders, signed expiring download tokens, multi currency and per zone shipping.

๐Ÿ”ง

WordPress snippets

Toolbox
github.com/Halleluyahsalako/wordpress-snippets โ†—

Single purpose solutions from client work. A recurring event date engine that handles the rules events plugins cannot express, like "the last day of the month if it is a Saturday, otherwise the first Saturday of the next month". And a way to point a theme's existing hamburger at your own menu panel without forking the theme.

๐Ÿ“‹

ctrl-freak

Android ยท Kotlin
github.com/Halleluyahsalako/ctrl-freak โ†—

Syncs clipboard, notes and files between phone and computer, because emailing yourself a link is not a workflow.

Stack

What I reach for, and what I've shipped with.

๐Ÿงฉ WordPress
Plugin architectureCustom themesCPTs & metaCustom Elementor widgetsWP CronREST endpointsWebhooksWooCommerceDokanFormidableACF migrationPHP 8 upgradesMultisite
๐Ÿ’ณ Payments
StripePaymentIntentsWebhooksPaystackFlutterwave
โŒจ๏ธ Languages
PHPTypeScriptJavaScriptSQLKotlinPython
โš™๏ธ Backend
NestJSNode.jsPrismaPostgreSQLMySQLMongoDBBullMQ / RedisJWT
๐ŸŽจ Frontend
Next.jsReactVueTailwind CSS
๐Ÿ“ฑ Mobile
ExpoReact NativeOffline-first SQLite
๐Ÿ”’ Security
HardeningMalware remediationStaging โ†’ productionLive debugging

About

I hold a degree in Agricultural Economics, which qualifies me to tell you the current price of yam and nothing else whatsoever. I have spent the nine years since building software, and the yam knowledge has not come up once.

Open almost anything I have written in that time and my name is in it. A class called hal-something. A file called hal-phone.util.js. A repository called Hal-Cartel. This was not my idea. I was doing the CSS on ileoja.ng while a colleague built the system around me, and whenever two buttons needed to behave differently, rather than wrestle a selector he would simply add a class called hal-whatever and move on with his life. I adopted it. So another man's shortcut from a decade ago is now my digital signature, and should I ever find myself in a dispute about authorship, discovery will be brief.

Things I have built, with the relevant confession attached

An entire subscription business living inside one WordPress plugin. Memberships, three payment gateways, multi-currency, per-buyer watermarked ebooks, and hardcopy codes printed in the physical book. I wrote the billing engine directly against the Paystack, Flutterwave and Stripe APIs rather than use their subscription products, because a member in Lagos and a member in London should not be two different kinds of person in your database. Whether this is good engineering or a cry for help is a question I have stopped putting to myself.

A resources library for a programme across eleven countries. Four plugins went in. One came out. I do not take questions.

A records platform in TypeScript, built end to end: an API, a web application with five role surfaces, and a mobile app that works with no signal at all, because the people using it collect data in places with no network, which in this country is a generous number of places. The hard part was never the offline bit. It was deciding what to do when two people edit the same record while both disconnected, and refusing to let the one who reconnects second quietly erase the other.

A payment verification plugin I did not plan to write. I opened a client's checkout for a completely unrelated reason and found that it would mark any order in the shop as paid if you asked it politely from the browser console. The one security check present had been wrapped in a try/catch that caught the failure, wrote it to a log nobody read, and carried on. I rebuilt it properly, published it, and then wrote ninety-five pages about it, which tells you something about how well I took it.

And ctrl-freak, which I am proudest of and which is the smallest thing here. An Android app and browser extension that moves my clipboard, my notes and my files between my phone and my computer. It solves a problem that, as far as I can establish, only I had. I use it every day and I am not finished with it.

The rest of it

I am largely self taught, in the sense that I learned by breaking things and then having to explain to somebody why their website was down. Not entirely: one person taught me HTML and CSS, another taught me PHP, and every other thing I know I took from source code written by strangers who had no idea they were teaching. Which is why mine is public. It seems only fair.

What I eventually want the money for is dull. I would like to put a great many children through school and teach as many of them as will sit still how to build things with a computer. I have been mentoring at Django Girls since the first Ogbomoso workshop in 2016, and the lesson keeps being the same: almost nobody is bad at this. They were just never shown.

I do not believe in doing unto others as I would have them do unto me. What I can shrug off, the next person may find unbearable, and the reverse holds just as firmly. I try to take people as they actually are rather than as I imagine I would be in their shoes. I am also reliably kind to waiters, bikemen and handymen, which is not a philosophy so much as the price of admission.

For play

I am a considerably better footballer on a console than on grass, a gap I have made my peace with.

I will defend Cristiano Ronaldo well past the point where it is socially advisable.

I do not have a club. I support whoever is playing Manchester United that week, with my whole chest, and on the weeks they are not playing I find myself somewhat adrift.

I dress to disappear. Dark colours, plain cuts, nothing that invites a conversation. Then I chose a career where strangers read my code and form opinions about me. Nobody has explained this to me either. The hair is the one place I decline to cooperate.

I keep an unreasonable appetite for equipment I do not need: binoculars, a telescope, a lab-grade microscope, drones, cameras, anything that makes a house cleverer than the people in it. No interest at all in a supercar, though I will happily lose an entire afternoon thinking about cars I do not want. If money ever arrives in quantity it is going on a Mercedes EV camper and not on doors that open upward.

I have read Atomic Habits, The Psychology of Money and The Subtle Art of Not Giving a F*ck, and most recently Jimi Disu's For Sam, a collection of his interviews and the finest argument I know for asking better questions. Fiction when I can get away with it.

Three things reliably undo me: bad network, no light, and heat. I eat my food cold on purpose. I have put swallow in the fridge and then eaten it with hot soup. I understand this to be an abomination. I have made my peace with the Nigerian people and I await theirs with me.

As a child I searched Google hard enough that it stopped and asked me to prove I was not a robot. I passed, which I have occasionally wondered about since.

I am an introvert among strangers and completely insufferable among friends. Both are true and neither is negotiable.

Email is the best way to reach me: halleluyaholuwapelumi42@gmail.com
Code: github.com/Halleluyahsalako

How I work

I work on staging before production, document what I changed, and send short written progress updates by default. I take ownership of a codebase end to end, schema, API, interface and deployment.

I'll also tell you when an off-the-shelf plugin would genuinely be cheaper than hiring me to build one. It costs me a job occasionally. It has never cost me a client.

Django Girls mentor since the first Ogbomoso workshop in 2016; Abuja chapter through 2022.