Projects
ClickClinicals
2026Next.js CRUD app built on Azure infrastructure.
- Next.js
- Tailwind
- Stripe
- Azure
- API
View details →
- ▸Authentication against Entra, using signed JWT stored client-side (custom, no library used)
- ▸Login support using One Time Passcode
- ▸Protected routes handled via middleware auth checks
- ▸Custom checkout flow using `stripe-js` library
- ▸Custom React forms and elements using dynamic data from various microservices
- ▸Context hooks to handle various pieces of data across distinct components
Dynamic Branding of SPA
2026This was a solution to providing branding assets and data to a Next.js app in order to dynamically brand the app.
- Drupal
- Next.js
- Azure
- Redis
- Key Vault
- Function App
- Blob Storage
- Front Door
- App Service
View details →
- ▸Drupal Form API used for the branding configuration form
- ▸Uses Drupal Queue Worker on form save to enqueue the Guzzle HTTP request to the Function App's webhook
- ▸OAuth used to authenticate Function App with Drupal instance
- ▸Drupal custom RESTful API to provide endpoint for Function App to ingest data
- ▸Binaries are stored in Blob Storage, the rest in Redis
Study Next
2024Drupal site built around Algolia search for 1300+ online courses.
- Drupal
- Algolia
- Pantheon
- API
View details →
- ▸Uses Algolia's JavaScript integration within a custom Drupal module
Melbourne Business School
2023Drupal site built for Melbourne Business School in Australia using Drupal Commerce to accept payments.
- Drupal
- Drupal Commerce
- Pantheon
View details →
Saint Joseph's College of Maine
2021Drupal 10 (soon to be 11) site for a college in Maine. Custom theme and module development, zip code qualification and 3rd party integrations.
- Drupal
- API
- Pantheon
View details →
- ▸Custom theme development
- ▸Custom module development
Batch Update Script
2021- Golang
- Git
View details →
- ▸
Network UPS Tools (NUT) Controller
2026Using a Raspberry Pi 3+ with Debian lite installed, it serves as the controller and communicator with the UPS and attached devices
- Bash
- Debian
- Raspberry Pi
- Home Assistant
View details →
- ▸RPi runs this script as a service with a USB connection to the UPS for driver control
- ▸When power outage occurs, wait 60 seconds before initiating power down of devices
- ▸After 60 seconds start shutting devices down using SSH `shutdown` command
- ▸RPi stays running along with the UPS until UPS reaches 50%. Script will shut down UPS when under 50% charge
- ▸Power restored, RPi starts up and checks the status of the UPS, polling current charge and how long power has been restored
- ▸After 10 minutes of stable power and the UPS charged to 90%, start to power on devices
- ▸Integrated with Home Assistant to provide notifications and check UPS state
Drupal 7 Migrations
2021Migrated 25+ Drupal 7 sites to Drupal 9 creating an easier editing experience, providing more configuration and unifying the underlying codebase.
- Drupal
- Drupal Migrate
- Pantheon
View details →
- ▸Led planning meetings across departments to gather requirements, pain-points of the current D7 sites and understand the business model
- ▸Developed a component-based, drag-n-drop editing system using Paragraphs and Layout Paragraphs
- ▸UI components are highly configurable from the edit area
- ▸Custom migration scripts to bring over unique content
- ▸Created an upstream repo that all migrated sites are based on. Core updates, composer package updates, general scaffold files, etc are managed here, then this upstream is merged into individual sites
- ▸Various custom configuration areas were created where they were hardcoded in D7
- ▸Included theming kit was provided to developers to rapidly start theming new sites using the new component-based system
Magento 1 Migrations
2017- Magento
- Data Migration Tool
View details →
- ▸
Warelight
2026Very bare-bones site that I was brought into to assist with easing the page editing process
- WordPress
- Elementor
- Google Tag Manager
View details →
- ▸Three custom plugins to replace Elementor functionality with native Gutenberg blocks
- ▸Custom theme development to match the existing design
- ▸Various content updates and adjustments to ensure a smooth transition from Elementor to Gutenberg
- ▸Migrated hosting and domain management for easier client access and control
Warehouse Lighting
2026Provided basic maintenance to existing site, front-end changes and checkout updates
- Shopify
- Google Tag Manager
View details →
- ▸Converted to a 1-step checkout page
- ▸Migrated custom checkout JavaScript code to Custom Pixels
- ▸Maintained and updated 3rd-party form integration (Jotform)
- ▸Various template updates
- ▸Custom events via dataLayer along with Google Tag Manager configuration/setup
Luxor Workspaces
2018Luxor Workspaces, a division of EBSCO,
- Magento
- API
- Google Tag Manager
View details →
- ▸Data migration from the old website into Adobe Commerce (Magento 2)
- ▸Various theme updates to support new content
- ▸Imported and configured all products
- ▸Custom module to provide dealer support for product assets
ClickClinicals
2026This app provides students with a secure account that they can use to seek placement in a clinical setting. CRUD actions are handled using server-side API routes that communicate with the microservice endpoints.
Dynamic Branding of SPA
2026Branding data lives in 30+ distinct partner Drupal sites. The goal was to have a single Next.js app branded accordingly based on the request path. To accomplish, I created a decoupled sync tool using an isolated worker model Function App written in C# on Azure. This Function App listens for a webhook request from Drupal when branding data is changed on the Drupal site. When triggered the Function App then creates a secure connection using OAuth with the Drupal site and ingests the branding data to then be stored in Blob Storage (binary assets) and Redis. Next.js can then consume the proper branding data.
Study Next
2024This sites purpose is to be a resource to potential students looking for specific online courses. Courses are stored in a headless Drupal instance and are synced to this site via OAuth and JSON:API to be subsequently indexed and used by the Agolia-powered search.
Saint Joseph's College of Maine
2021This site was built from the ground up to support the college's online ABSN program. Certain unique requirements made for interesting work. One example is that only prospective students from the region could apply, so they needed a way to validate by zip code. Leverage the client-side validation library using remote validation to an API we created to validate the users entered zip code against the region restrictions defined in the Term for the given course. If outside an acceptable region, field level validation errors and the user is presented with a modal explaining the issue.
Batch Update Script
2021Network UPS Tools (NUT) Controller
2026While native NUT provides acceptable configuration, it does not provide finer grain control such as waiting until the UPS recharges to a certain percentage before powering devices back on. That is what this script was meant to solve.
Drupal 7 Migrations
2021Magento 1 Migrations
2017Warelight
2026The WARELIGHT brand and product line was established as a high quality, high-value, energy efficient, lighting fixture source for industrial, commercial, architectural, municipal and residential applications. This project involved a re-theme (no redesign) along with the removal of Elementor in favor of native Gutenberg blocks. The goal here was not to change the design, but to make the site easier for the client to manage on their own. They did not like the Elementor interface being separate from the WordPress native editor, so the plan was to re-theme the site to replace Elementor with native Gutenberg blocks. This was successful and the client is now able to manage the site on their own without any issues.
Warehouse Lighting
2026Warehouse Lighting is a national supplier of commercial and industrial lighting solutions. Handled on-going maintenance, bug fixes, theme updates, new feature development and third-party integrations for their Shopify store.
Luxor Workspaces
2018Luxor is a Chicago-based manufacturer of AV carts, mobile furniture, and workspace solutions. We assisted in the development and launch of their Adobe Commerce (Magento 2) B2B eCommerce solution. The project involved deep Adobe Commerce (Magento) customization — dealer-specific pricing modules, a custom B2B quote workflow, and REST API integrations with their ERP system to keep inventory and pricing in sync across thousands of SKUs.
