Adding Date Validation Logic when Creating an Event in Craft CMS 3
I have a Craft CMS site with two Date/Time fields. One field is called calStartTime and the other is calEndTime. The goal is to check that calEndTime does not happen before the calStartTime. To do this, I have a custom module. Head over to pluginfactory.io to scaffold out a module. You could also do this in a plugin, but a module is probably easier. Listen for the Entry::EVENT_BEFORE_SAVE event and then make sure the… + read on
A critical error: Chromium revision is not downloaded.
I have been trying to get critical to work on my Mac but kept getting the following error when my webpack configuration hit the point where it was trying to configure the Critical CSS. Error: Chromium revision is not downloaded. Run “npm install” or “yarn install” at Launcher.launch (/Users/john/Sites/craft-w-webpack/node_modules/puppeteer/lib/Launcher.js:119:15) I tried fixing this by following the instructions, npm install, but the error continued to happen. The path to getting this fixed had several steps… + read on
Installing Imagick in Valet
Whenever I update to new versions of PHP in my local installation, I need to reinstall Imagick. Since I look up these steps every time, I’m documenting them here so future me can remember this. Is Imagick really not installed? First you might have it installed on your machine. Does this return a version number? convert ‑version If so, you have it installed but it might not be wired up for your PHP version.… + read on
Fixing a MariaDB database that has a corrupted root user password.
In one terminal window I did this: echo $(brew –prefix MariaDB) That gave me the path to my MariaDB of: /usr/local/opt/mariadb Then I ran this in that same window: /usr/local/opt/mariadb/mysqld_safe That started MariaDB successfully. Then I opened a 2nd terminal window. sudo $(brew –prefix mariadb)/bin/mysqladmin ‑u root password I followed the prompts to reset the password to ”, i.e. blank. Then I killed the MariaDB current running by entering (in the same window I… + read on
Synology, Plex, ports and missing URLs
I’ve had a Synology for many years, and the interface has changed over time, obscuring useful information for installed apps. One of my favorite apps to run on it is Plex. In the Synology interface, it used to be easy to open Plex. The URL was shown in the “Package Center” when looking up the app. Below is a screenshot of how the interface used to look. This is not a screenshot I created.… + read on
Setting up Laravel Forge and DeployBot.
I’ve used Laravel Forge for quite a while in my workflow. It’s a convenient way to set up servers, quickly add security certificates, and deploy sites. I’ve got a number of my own sites and client sites using it and I’ve been very pleased with it. The Laravel Forge deployment process The piece of the process I’ve been thinking about recently is the deployment method I’m using in Forge. The deployment method built into… + read on
Yeoman generators, the file system and symlinks.

I write and maintain a Yeoman generator called “Build A Banner”, aka BAB. As you might guess from the title, the generator helps in developing animated display ad banners. It creates a directory with customized HTML, JS and CSS starter files, builds a small development server with live-reloading, and has workflows for optimizing and delivering banners to a media company. We use it all the time at JMX2. Although I’ve been maintaining this repo… + read on
Removing Craft CMS plugins that you can’t uninstall

I was recently updating my site and decided to use Michael Rog’s Wordsmith plugin for some text manipulation. His Wordsmith plugin included some features that I liked that my own custom plugin, a simple port of Hacksaw, didn’t include. I had created this plugin when Craft 3 was early in development, a time when there were many fewer plugins available and no plugin store at all. Installing plugins through Craft 3’s Plugin Store makes… + read on
Using aliases on the command line.
If you use the command line and you’re lazy, this is for you. I’ve picked up a lot of tips in customzing my command line over the course of many years. Most of them I abandon after the “new” wears off, but a few stick around. Specifically, I have some aliases that I find useful enough that they’re part of the set up process when I get a new Mac. (Yes, these are Mac… + read on
A Checklist for the Craft Plugin Store

Like many of my posts here, this is another note to myself to help me when I have questions about getting things done. I recently finished Pic Puller for Craft 3, available in finer Craft 3 plugin stores everywhere. But the point of this post is how it actually got there. The conversion of the plugin from its Craft 2‑compatible version to Craft 3 was the first step of the process. Andrew Welch’s Pluginfactory.io… + read on