Purple Turtle Creative

Mailgun Subscribe Form with Security Features to Limit Costs

While Twitter was becoming X and Meta was releasing Threads, Purple Turtle Creative decided to offer a reliable, platform-independent way to keep interested users informed: good ol’ fashioned email. Purple Turtle Creative is a bootstrapped business that keeps costs low by foregoing expensive CRM service subscriptions, though. This meant that I needed to implement a re-usable mailing list subscription form by using our API-based email service provider, Mailgun.

Since Mailgun uses volume-based pricing, security was a top priority for the mailing list subscription forms to protect Purple Turtle Creative from exorbitant surprise fees. As the first layer of protection, I implemented Cloudflare’s new CAPTCHA solution called Turnstile on the client side. An advanced bot might still slip through, though, and humans sometimes make mistakes. That’s why I also decided to implement a double opt-in process to ensure the integrity of the mailing list and protect Purple Turtle Creative’s sender reputation.

Using a double opt-in process means that subscribers must click a verification link in a confirmation email to actually subscribe to the mailing list. That costs one email in Mailgun’s volume-based pricing, so I created a database table to track email verification requests and impose rate limits. There is a cooldown period to prevent rapid repeat requests, a maximum number of permitted retries per email address, and a weekly limit of total API usage. Atomic database access is essential to ensure there is consistency between all rate limit trackers and concurrent email verification requests.

To optimize the user experience, the subscription forms submit asynchronously via JavaScript and a custom WordPress REST API endpoint. Form interactions are tracked via Google Analytics on the frontend for conversion performance reporting, and the backend is tracked via Google’s Measurement Protocol API for site reliability monitoring and further insights on system behavior.

Proven Digital Marketing

SMS Marketing Suite with CRM Integration Using Twilio and Keap

Keap is a SaaS CRM, sales, and marketing automation platform that also offers text message marketing. However, it costs over twice as much as using Twilio, the leading API-based cloud communication platform. To keep messaging costs low, I wrote a WordPress plugin to integrate Keap and Twilio.

The primary feature within this plugin is a WordPress admin page for sending an SMS message to a group of Keap contacts. The recipients are determined by chosen Keap tags via a multi-select combobox within the “SMS Blast” form. Below that, there is a text area field to compose the SMS message. Keap contact field variables can be included in the message template with an optional fallback value like %%Contact.FirstName%% or %%Contact.City|your area%%.

Since the goal of this WordPress plugin is to keep marketing costs low, data validation and confirmation are essential. After submitting the SMS Blast form, the system processes and stores the data for review. The review screen shows Keap contacts vs. planned Twilio messages followed by potential alerts of discrepancies. This may include the number of duplicate phone numbers, contacts missing required template variables, and contacts not opted in to receive text messages. Lastly, the review screen offers buttons for sending to a test group and final submission.

This plugin also includes various custom WordPress REST API endpoints to further integrate Twilio and Keap. Some endpoints create, tag, and update Keap contacts while others send texts and trigger flows via Twilio. Within Keap campaigns and Twilio Studio flows, these WordPress endpoints facilitate more engaging and personalized customer experiences.

The Holistic Psychologist

ActiveCampaign Contact Record Cleanup with Bulk Deletion Plugin

After running a successful online business for some time, stale contact records eventually pile up. This means costs consistently increase when using a CRM with volume-based pricing, such as ActiveCampaign. However, there is no quick way to purge these cold contacts within ActiveCampaign!

To help businesses reduce their CRM costs and clean up their records, I created a WordPress plugin. It registers a new WordPress admin page with a quick, multi-step process. Since it is quick to tag contacts within ActiveCampaign in bulk, I decided to mark contacts for deletion with a tag. Then the business can apply the “Marked for Deletion” tag to all ActiveCampaign contact records that they’d like to delete.

In the WordPress admin page, the user first clicks a button to start the process. API requests to ActiveCampaign then retrieve all contact records with the “Marked for Deletion” tag. The WordPress admin page then displays the number of contact records, asking the user to confirm the bulk deletion process. Once confirmed, all contact records are then deleted from ActiveCampaign. Since this process can take a while depending on the number of contacts, I used benchmark tests to also show the WordPress user an estimated end time.

Food & Water Action

WordPress Theme Refresh with Interactive Map and Animations

To prepare for the upcoming elections in 2022, Food and Water Action wanted to refresh some areas of their WordPress website. After the web designer and backend developer finished their work, I implemented the frontend styles and interactivity.

The Endorsements page features an interactive SVG map. Different regions of the map become highlighted on hover and, when selected, filter the grid of candidates listed below. The candidate items feature a fun, stylish look with additional hover effects of their own. Fixed at the bottom of the viewport is an interactive donation component that smoothly transforms its layout when expanded. As the user slides between various donation values, the data points dynamically update to inform the donor on the impact of their contribution.

Additionally, I themed the single Endorsement template, the News & Opinions archive template, the Volunteer Stories archive template, and the Victories archive template. Across these templates, I implemented various other frontend features such as masonry grids, sliders, hover animations, animated counters, and scroll effects.

COS Brews

Video Upload Optimizations via Mux API on BuddyBoss Theme

Poor video performance often leads BuddyBoss site owners to use third-party video embeds via YouTube or Vimeo. However, this requires the user to upload and host their videos from another platform—a platform they do not own nor have control over. This is an unacceptable solution for site visitor-uploaded content, which occurs directly on the business’s BuddyBoss WordPress website.

Using the Mux API, I was able to bring video optimizations to WordPress, including normalized audio tracks. I developed a custom WordPress plugin that uploads new videos to Mux and caches the Mux asset data to the site. To ensure the cached asset data is always current, I implemented a custom REST endpoint to process Mux webhook events. The endpoint is secured by verifying each request’s signature.

To achieve a seamless frontend experience, I implemented JavaScript that collects video source URLs that are not hosted via Mux. The video posters are replaced with a “Processing Video” loader gif image while the JavaScript continuously checks each Mux asset’s status. Once the static renditions are ready, the JavaScript sets the video source to the Mux playback URL and removes the “processing” poster.

Hearst (Houston Chronicle)

Beauty Deals Finder ReactJS Application and Custom Sailthru Email Alerts

Beauty Deals Finder is a custom application built with ReactJS + Redux Toolkit and SCSS modules. It is configured and hosted on Houston Chronicle’s local commerce website (aka “Chron Shopping”) via WordPress.

Users may search for deals by selecting various brands and then save their selections as preferences. When a user saves their brand preferences, they are added to an email mailing list in Sailthru to receive automated, personalized daily alerts. The email notifies the user how many new deals have been added for their chosen brands, if any at all, within the past 24 hours. Clicking a link in the email takes the user to the Beauty Deals Finder application, automatically signing them in to review their latest deals.

All deal data displayed in the application and the Sailthru emails is requested from a separate internal service.

Hearst (Houston Chronicle)

Deal of the Day Countdown Timer & Post Template Refresh

“Deal of the Day” (aka DOTD) is a promotional program that features a business’s product across The Houston Chronicle’s websites. The goal of the feature was to inspire urgency for site visitors to claim the deal within a limited timeframe.

Using JavaScript, I built the eye-catching countdown timer component and displayed it throughout notable areas of Chron Shopping. The Chron.com homepage, which receives thousands of site visitors every day, also featured the countdown timer component.

Lastly, I implemented the refreshed design for the Deal of the Day post template. The countdown timer was prominently featured at the top of these pages as well.

Hearst Newspapers

Google Sheets-Powered Custom Post Type Plugin with Mailchimp and Other Integrations

Upon joining the Local Commerce team at Hearst, I was asked to overhaul our map article custom post type. Each map article post features a custom Google Maps instance with scroll event interactions and animations.

To streamline the curation team’s efforts, I implemented the ability to import their collected merchant listing data from Google Sheets. The data is stored as metadata for each map article post, effectively caching the data in WordPress and serving as the posts’ main content.

With our team’s designer, I then updated the frontend styles and functionality to improve the map articles’ sales appeal. Additional features were implemented to make sponsored listings stand out from the regular listings. In particular, I custom-coded asynchronous email signup form modals which submitted to the Mailchimp and Sailthru APIs. To ensure proper security, I also implemented custom WordPress REST API endpoints to proxy the form submission requests to the third-party APIs. My custom implementation of the Google ReCaptcha v3 API also validated the form submissions to reduce spam signups.

Hearst

Sailthru Email Template Local Development Toolkit and Process Improvements

While working full-time as a Software Engineer with Hearst, I took on additional responsibilities by becoming our team’s Sailthru email template engineer. We did not have a very good development process in place to work with Sailthru’s custom templating language (Zephyr), so I also took it upon myself to implement a toolkit.

Since the email templates contain Zephyr markup, I used Sailthru’s API endpoint for previewing Zephyr email templates. That allowed me to edit the templates on my local machine and then render the email in my web browser. For further testing, I could simply tick a checkbox to send a test email of my changes instead.

Additionally, I wrote two other scripts for downloading Sailthru email template contents and “include” template parts respectively. We use Sailthru in advanced ways at Hearst with custom Data Feed configurations, so I architected the toolkit to support that. Synching the template code locally from Sailthru provided a lot of key benefits:

  • Version control and code backups via Git (which also facilitates proper code review process)
  • Easily make changes to existing email templates using the developer’s own code editor
  • Code searchability via terminal commands such as grep (which also means easier code auditing)
  • Ability to mix custom code with Sailthru’s WYSIWYG editor to reduce custom code burden
  • Detailed template error messaging via the Preview endpoint’s response

PETA Germany

Microsite WordPress Gutenberg Theme with ACF-Powered Custom Blocks

PETA Germany had rebranded their Veganstart mobile application and needed to update the promotional website to match. They worked with a web designer to create and publish the layouts in Adobe XD. I then developed a new WordPress Gutenberg theme based on the design compositions.

The site build notably included a custom SlickJS slider, GDPR compliance with CookiePro, custom blocks via ACF Pro’s acf_register_block_type() method in PHP, and adequate accessibility features. The differences between the desktop and mobile styles required quite a bit of finesse to achieve a smooth degradation in screen size. My goal was to use as few markup differences as possible between desktop and mobile to optimize performance and DOM tree simplicity.