Working at Norex was my first exposure to WordPress. After about three years, myself and other developers and landed on a pretty solid toolset for WordPress development. For me, the next step was obvious, automation. I developed my first set of WordPress automation tools starting in 2015.
Taylor was a tool that handled a lot of the bootstrapping tasks of starting a new WordPress project. Taylor read a manifest JSON file and handled tasks such as downloading a specific (or the latest) version of WordPress, downloading and activating specific plugins, creating a database and database user, creating a custom theme with custom menus, and custom post types; all determined by the manifest file.
Binford was a companion tool to Taylor which read standard and custom fields (using Advanced Custom Fields) from the WordPress database and automatically created Smarty templates populated with those fields. The combination of Taylor and Binford allowed a developer to write a manifest file, run Taylor, configure custom fields, run Binford and be in a position for the site template to be passed to a Front End Developer while the Back End Developer is now free to implement any custom functionality.
Borland was a compiler tool for Taylor. Customizations could be made to Taylor's core and be recompiled for distribution using the Boarland compiler.
Tim Taylor, Al Borland, Binford Tools. There was absolutely a Home Improvement theme.
While Taylor and Binford served us well for a while, after about two years I'd rolled out a new toolset for WordPress automation. As the WordPress CLI continued to mature and evolve, it became a more usable and viable solution outside of writing from scratch and maintaining a separate PHP library.
cm-cli was built on the WordPress CLI and named for my company at the time, Code and Mortar. cm-cli solved most of the problems that Taylor and Binford solved, but in a more interactive CLI interface that no longer required the developer to write an entire manifest file from scratch. cm-cli also broke out each component (creating post types, creating menus, etc) into their own commands, giving developers more freedom to automate what makes sense for them while using custom development where it makes sense
Source Code: cm-cli
As Code and Mortar moved to more Web and Mobile Application Development projects, and as I was continuing to lead efforts like API development in my role as Director of Product and Innovation, we were presented with a new set of challenges. Just as things like installing WordPress, setting up a database and installing the same plugins had become a productivity drain so too were things like spinning up new app and database containers, installing SSL certificates, and setting up local networking. Enter App Server, my automated solution to configuring all of the security, deployment, and networking requirements for a scalable and flexible Web Application and API.
Appserv Tools was and is part suite-of-commands-and-utilities and part Linux image and networking templates. The architecture was designed for and implemented on Digital Ocean, a cloud container provider that offers servers all over the world. The basis of the architecture is two unique Unbuntu images, one running a MariaDB server, one running the Laravel application server, both connected via a local/private network. The private networking allows all communicaiton between the database and application server to happen much more quickly and without sending sentive credentials and other information out over public network infrastructure.
The command line utilities are built primarily with Laravel and some bash scritping to help out when needed. The command line automates a lot of things like setting up you application source code directory, setting up a secure database and database connection, configuring nginx, SSL certificates with auto-renewal (Let's Encrypt and Certbot), and configuring Envoyer integration for zero-downtime, web-hooked based automated deployments.
Source Code: Appserv Tools
In late 2017, I was contracted by Manifold to build out their custom Laravel PHP package. Manifold is a web service for connecting and intergrating multiple web services and acts as a marketplace. Among its features, Manifold securely stores credentials and other variables in the cloud which are exposed via their secure API. I developed a Laravel package enabling developers to automatically populate their Laravel application's environment variables with their credentials and variables stored in their Manifold account.
Source Code: manifold-laravel
Packagist: manifoldco/manifold-laravel
With some down time in October of 2019 I created a handful of PHP and Laravel packages.
Laravel Crud is a tool for rapid application prototyping. By simply generating a model, its corresponding database table and registering it with Laravel Crud you instantly have your full CRUD (Create, Read, Update, Delete) functionality with default views, controllers, and routes (for both web and api). This lets you get a workable interface up and running quickly having only designed the database schema.
Lara-Graph is a Dockerized Laravel install template that utilized the aforementioned Laravel Crud along with a Laravel GraphQL package. Where Laravel Crud gets your web interfaces and REST apis up in a jiffy, Lara-Graph performs the same feat with a GraphQL API. Just as with Laravel Crud, create your model and schema, register the model, and you now have the model exposed to a GraphQL API.
Clico (command line interface colour output) is a PHP package for styling your command line output with colour, tabular data and basic text formatting, all in an expressive, functional programming interface.
Source Code: Laravel Crud | Lara-Graph | Clico
Packagist: Laravel Crud | Clico
joolbox is a new side project started in October of 2020 which will provide developers with an array of network-focused development and debugging tools. Initial offerings will include HTTP response simulator tools, webhook testing tools, and programmable dynamic DNS resolution. The tools (called jools) will allow developers to test network-focused features like HTTP and DNS without having to setup a myriad of "real" servers just to test and debug.
~ Joe Uttaro, Senior Software Engineer & Web Team Lead