About Me

Hi, my name is Jonathan.

I am a developer educator from Cape Town, South Africa with a passion for open-source software.

Picture of me speaking at WordCamp Europe contributor day in 2023
Profile photo courtesy Nilo Vélez

Developer Educator at Automattic

In May 2022 I joined Automattic as a full-time sponsored contributor to the WordPress project, working with the Training team on Learn WordPress. We create educational content for the WordPress community, and my focus is on developer-related content.

Joining the dotorg team at Automattic was a “coming home” of sorts, as I’ve made many friends in the WordPress space who work at Automattic, and now I get to be part of the open-source team that works on the WordPress open-source project full time.

Senior Technical Writer at Delicious Brains

In 2021 I decided to take my love of writing, my experience as a software developer, and my interest in the fields of education and developer communities and accepted a position as Developer Educator at Delicious Brains. About halfway through my time there the role changed to Senior Technical Writer.

Delicious Brains is a dedicated team of experts who love making software for their fellow WordPress developers. My job is to help them build amazing technical documentation and insightful developer-focused content that informs and delights our developer community.

Development Lead at Castos

From 2017 to 2020, I was Development Lead at Castos. Castos is a podcast hosting and analytics service that powers and supports the Seriously Simple Podcasting plugin for WordPress

When I left, Castos had grown from just Craig and me to a distributed team of 12, the plugin was used by over 20,000 podcasters around the world, and over 10,000 active customers using the Castos service.

Expert at Codeable

From August 2016 to September 2020, I solved technical problems for clients from around the world through Codeable. I focused on plugin development (both custom plugins and plugin extensions) and theme development, specifically adding custom functionality to themes via child themes or plugins. As of the 1st of October 2020, I left active freelance development to focus solely on Castos.

Writer, Blogger, and Podcaster

Besides this blog, I have also written for the WordPress.com Go blog, the Jetpack blog, as well as Smashing Magazine, and WP Tavern.

In my spare time, I host a small WordPress focused podcast where I interview folks from all over doing interesting things with WordPress. If this is you, let’s chat.

Speaker

Whenever the opportunity provides itself, I try and speak at local events about various topics, including development, freelancing, PHP, WordPress, and Laravel. So far, I have spoken at WordCamp Europe (2019, 2023), WordCamp Cape Town (2016, 2018), WordCamp Johannesburg (2018, 2019), PHP South Africa (2017), and DevConf (2022).

WordPress contributor

WordPress has given me so much, so I do what I can to give back. I’m a community deputy, and I’ve been on or led the WordPress Cape Town organising team for three years. In September 2020, I stepped down from organising local WordPress meetups to focus on the WP Notify project.

Get in Touch

If you want to chat, feel free to find me on any of the following networks.

Alternatively, email me if you want to discuss a project, have a question, or want to say hi.

If anything you’ve found on this site was useful to you, and you want to say thanks, you can always buy me a coffee. I generally order an almond milk flat white because I like the steamed milk texture but get a stronger taste of the espresso.

Latest Posts


  • PHP Advent 2009

    I had no idea something like this existed but what a great idea. 24 days of worth of PHP articles to keep the Christmas Blues away. Today’s article is something very close to my heart and discusses the topic of Comprehensible Code. Go, read, expand your minds….

  • Ambit Recruitment website goes live

    Personal experience will always advise our actions. So, the objective is to ensure positive experiences are repeated as often as possible, to encourage further positive outcomes. That’s the simple premise on which Ambit Recruitment operates the business of fitting the right people into the right positions. The Ambit Recruitment website is a bit of a…

  • South African HTML image map

    I recently had to create an image map of South Africa, displaying each of the provinces with links to content for each province. As it took me most of the day to complete I thought it might be handy for someone else too. So in true open source fashion here it is for you to…

  • Migrating from Drupal to WordPress

    Well, it finally happened. After months of frustration with Drupal as a blog tool, I gave up and decided it was time to move over to WordPress. I’m sure as a CMS system Drupal can be quite wonderful, but for running and managing a simple blog site, I have yet to come across a better…

  • Riding on Rails

    I’ve decided to spend less of my free time on blogging and more on learning new things. I had planned to change this site to run on WordPress, but have decided instead to learn Ruby on Rails. From what I can see it is (in many ways) similar to CakePHP (which I love) but with…

  • Developing with CakePHP: Creating a simple admin control panel

    If you are like me, you prefer to have a specific url mapped to your applications control panel/backend etc. This is usually something along the lines of www.url.com/admin or www.url.com/cms. Normally during the CakePHP “bake” process, the system will ask you what you want your admin route to be (default “admin”). Once this has been…

  • Create an array containing the days of the week

    You could simply code: but thats the “noob” way, a real coder creates a function… Update: 13/05/2018 Sigh What was wrong with me back then, this would have been so much better. Keep it simple, stupid!

  • PHP.js

    This is something I came across a while ago, but it has really come in handy. It is a project that attempts to make many php functions available in javascript. As most php developers will at some point have to write some javascript, it is a very handy library. You can find it over at…

  • MySQL: filtering results from a list of id's

    A short while ago I posted about testing if a variable exists in a list and I spoke about the MySQL “IN” keyword. I realised this week that not everyone knows about the MySQL “IN” keyword, so I’ve decided to explain this very handy SQL keyword. Lets say you have a user table with the…