Under the hood: the tech behind the site.

Because how it's made matters.

This site is part portfolio, part personal sandbox—every decision here is mine, for better or worse. I built it to show how I think through structure, design, and functionality—not just to talk about my skills, but to demonstrate them. From stack choices to deployment flow, nothing was outsourced, templated, or left to chance. This page is here to pull back the curtain and walk through what’s under the hood, and why it’s there. If you’re here to see how I build, you’re exactly where you should be.


Quick Look

This site is built on Drupal 10 and hosted on AWS Lightsail, with Cloudflare handling CDN and DNS for performance and reliability. The domain runs through Porkbun, and the codebase lives on GitHub, with GitHub Actions powering a streamlined DevOps workflow that utilizes Composer and Drush from commit to deployment. It’s lean, fast, and fully under my control.

6

Platforms integrated

167

total lines of JS

6

automated GH actions

∞ 

ideas to come


The Details

  • MySQL database (8.0.41)
  • 1 GB RAM, 2 vCPUs, 40 GB SSD 
  • LAMP
  • PHP 8.3
  • 512 MB RAM, 2 vCPUs, 20 GB SSD
  • Drupal 10
  • Local stack: Lando, Docker, VSCode, Git

The Stack

A lot of thought went into how I wanted to build this. The goal was to balance speed to market with hands on control and the opportunity to demonstrate my skills & thought process. 

 

Infrastructure

With a wealth of Acquia experience already, I looked into AWS Lightsail, Pantheon.io and AWS EC2 as my options. Splitting the difference in terms of features vs initial config lift, I decided on the flexibility but lighter initial load of Lightsail.

 

Version Control

As a longtime Github user, I gave thought to switching to GitLab to expand the skillset, but sometimes it just feels good to stick with old faithful. 

 

Work flow

The selection of Github allowed me to utilize Github Actions to automate my merge process and code deploys. Triggered on merges into my main branch, GH Actions connects to my lightsail instance, utilizes rsync to copy files over while excluding my files directory as well as my settings.php and settings.local.php files. It then runs Composer install to account for the exclusiion of /core and /vendor directories in the repo before finally clearing cache. 

 

CMS

I went with Drupal given my near decade of experience with it, but also for the flexibility it will afford me to build and grow my skillset moving forward. This site is built on the foundation of Layout Builder with additional features added on via preprocessing and custom Twig templating. 100% sustainable via Drupal best practices. In the future, utilizing Drupal's REST & JSON API will allow me to experiment with different frameworks, specifically React, while maintaining a solid foundation to build off of. 

 

Analytics & SEO

Every site needs a strong analytics foundation, otherwise how will I know if people outside of my dad are looking at the site? This site employs a standard stack of Google Tag Manager which is used to deploy a GA4 tag. Additionally, because heatmaps are cool to look at, among it's other features, I have included Microsoft Clarity for additional insights. SEMRush is also incorporated in order to assure a clean, crawlable site.


THE TECH

Rocking with the best in the business.
 


FAQs

Why did I do this?

I wanted to have a real world example of capabilities as well as a place to further explore some of the technologies out there that interest me. It also just gave me something to do.

Why did I make some of my decisions?

Even though the scale of this site is much smaller than I've worked on during my career, the decision making process was strikingly similar. It still comes down to a few basic questions:

  1. What do I need it to do?
  2. What will I need it to do in the future?
  3. How can I balance both needs with the timeline I have in front of me?

From there it's a trade-off of features vs time. For example, I have a section in my GitHub Actions automation that will perform DB backups on job execution. However, I chose not to include it initially in order to remove variables from the automation's initial implementation. The fewer elements you have to account for, the easier bug remediation is. This was something that was a 'nice to have' out of the box, a more important element down the road but not something that I considered worth the potential delay in getting live.

How did I come up with the color palette?

Simple, I used a coolors.co to build out the palette based on color codes I provided by grabbing them off of the Saquon Barkley reverse hurdle photo. Kelly Green from the jersey, silver from the uniform pants and the darker black from the Jacksonville Jaguar's helmet.

What's next?

You'll be shocked to hear that an engineer has a thousand ideas for their site. Well, I do have some ideas for sure. I'd like to utilize Drupal REST and JSON API to start to mess around with React. I have an idea for a game that I would like to build based off a sports game I used to play with friends when we'd sleep out on the steps of the Fenway Park box office waiting for tickets to go on sale. Yes, I'm aware I seriously just dated myself. Outside of that, I'll eventually move off the simple email address and add a form to allow for more user-friendly submissions as well as eventually add some e-commerce just to show that I can and to flex a muscle I haven't used in a bit.

Like what you've heard? I'm happy to connect and talk.

Shoot me an email: [email protected]