Drupal Module: However Publications Management

github.com/bixgomez/how2-drupal/tree/main/web/modules/custom/however_customizations

Please note: This module was created through an iterative process of learning and refinement, with support from the AI tools ChatGPT and Claude. These tools served as sounding boards and research aids and for basic scaffolding, not substitutes for thought or authorship. I’m proud to say that the final code reflects a healthy combination of human insight and the spirit of innovation AI can inspire.

This is a comprehensive custom Drupal 10 module built for the However project, managing the complex editorial workflows of two academic journals: How(ever) and How2. The module handles hierarchical publication content across volumes, issues, sections, and articles, automating relationships and streamlining the editorial experience.

This project demonstrates how I approach complex content architecture challenges: starting with core functionality, building incrementally, and maintaining clean code while the requirements evolve. The module emerged from real editorial needs: managing dozens of interconnected pieces of content across years of publication history. Rather than forcing editors into rigid workflows, I built systems that automate tedious tasks while preserving editorial control.

Important context:
This module handles production content for a live academic archive. It demonstrates my ability to work with complex, real-world content relationships while maintaining data integrity. The testing infrastructure shows I understand the importance of validation when dealing with irreplaceable scholarly content.

Key code to peruse:

  1. PublicationNavigationService src/PublicationNavigationService.php
    Handles intelligent prev/next navigation across the publication hierarchy. Demonstrates clean service architecture, complex database queries, and edge case handling (like jumping between volumes when reaching boundaries).
  2. Entity Auto-complete Enhancement src/EntityAutocompleteMatcher.php
    Extends Drupal core’s autocomplete to show contextual information (volume, issue, content type) in search results. Shows how to properly decorate core services while maintaining compatibility.
  3. Hook Implementations however_customizations.module
    The heart of the automation — hook_entity_presave() handles field synchronization and title generation, hook_form_alter() improves the editorial experience, and node CRUD hooks manage dependent content lifecycle.
  4. Drush Commands src/Drush/Commands/HoweverCustomizationsCommands.php
    Bulk maintenance commands using batch processing for large datasets. Essential for migrating legacy content and maintaining data consistency across hundreds of nodes.
  5. Test Coverage tests/src/Kernel/PublicationNavigationServiceTest.php
    PHPUnit kernel tests validating core service functionality. Shows I understand testing complex Drupal services with real database interactions and entity relationships.

The entire repository can be found at https://github.com/bixgomez/how2-drupal

WordPress Plugin: Grand Illusion Cinema

github.com/bixgomez/gicinema/tree/main/wp-content/plugins/gicinema-plugin

This custom WordPress plugin automates the import, synchronization, and management of films and screenings from Agile Ticketing into the cinema’s WordPress site. It maintains a dedicated screenings database table, supports scheduled synchronization via cron, and provides a suite of admin tools for data cleanup, deduplication, and maintenance.

Built with a clear separation of concerns (core logic in function__*.php files, admin UI in page__*.php files, and a central bootstrap) the plugin is designed for maintainability and safe operation in a live production environment. It empowers cinema staff and volunteers to keep showtimes accurate without deep technical intervention.

Important context:
Some maintenance tools are destructive by design (e.g., deleting all films or truncating the screenings table) and require careful handling. Other tools exist to address recurring but hard-to-trace data anomalies, such as time zone-related duplicate screenings.

Key code to peruse:

  1. Film Import Logic function__import_films_from_agile.php
    Handles fetching film metadata from Agile Ticketing, mapping it to WordPress film posts, and managing updates to existing entries.
  2. Screening Import Logic function__import_screenings_from_agile.php
    Retrieves and processes screening times, linking them to films and storing them in the custom screenings table.
  3. Deduplication function__dedupe_screenings_table.php
    Removes duplicate screening records based on film ID and start time.
  4. Delete Overnight Screenings function__delete_overnight_screenings.php
    Cleans up screenings with start times between 12:00 AM and 6:00 AM — often caused by a time zone offset issue (likely GMT vs Pacific Time) that can originate from multiple sources (Agile, WordPress, hosting, or plugin logic).
  5. Database Backup & Cleanup function__db_backup_and_cleanup.php
    Backs up the screenings table before maintenance tasks and clears outdated records.

The entire repository can be found at
https://github.com/bixgomez/gicinema

Radio Localized Drupal Theme

This is a custom Drupal 10 theme for Radio Localized (radiolocalized.com), a weekly radio show on KBFG-FM in Seattle. The show itself can be heard at mixcloud.com/radiolocalized – this website is my ongoing project to create an interactive companion site that maps the geographic origins of songs featured in each episode.

This project demonstrates how I approach actual client work: starting with core functionality, building incrementally, and maintaining clean code while the project evolves. The to-do list in the README shows my planning process and how I prioritize technical debt vs. new features. The entire codebase is my work, built from scratch for this specific use case without frameworks or AI assistance. While incomplete, it’s been running reliably and demonstrates the kind of custom solutions I create for mission-driven projects.

Important context:
This is very much a work-in-progress! The site demonstrates my development approach when building incrementally – solving core technical challenges first, then iterating on UX and content architecture.

Key code to peruse:

  1. Interactive mapping script.js
    The JavaScript that processes coordinate data from Drupal and renders via Leaflet.js (visible on episode pages). Demonstrates data processing, API integration, and DOM manipulation
  2. Sass Function sass/00_functions/_base-font-size.scss This Sass function demonstrates problem-solving with limited tools. Written before clamp() and container queries existed, it creates fluid typography that scales proportionally between breakpoints. While modern CSS has better solutions now, this shows how I’ve approached complex problems by building custom solutions rather than waiting for better tools. Also it was great fun!
  3. CSS/Sass Architecture sass/04_layout (in particular _layout--page.scss) Demonstrates systematic thinking about complex layout problems

The entire repository can be found at https://github.com/bixgomez/radiolocalized

Grand Illusion Cinema

As general manager of this all-volunteer run nonprofit microcinema in Seattle, I took on the redesign and redevelopment of its public-facing site. I built a custom WordPress theme and architected a back-end integration with the Agile ticketing API to automatically populate our film calendar, dramatically reducing volunteer staff workload and minimizing human error. The site supports tight editorial control and ticketing flexibility, and I continue to maintain it as the cinema evolves.

You can explore the live site at grandillusioncinema.org or click on the images to view full-size screenshots.

Dean Sluyter

I’ve worked with author and speaker Dean Sluyter for over two decades. His current site, built in WordPress using Beaver Builder, evolved from earlier versions in ColdFusion and Drupal. It supports book promotion, media integration, and event updates with a streamlined editorial experience. Our collaboration remains ongoing.

Please visit the site at deansluyter.com, or click on the images at right to view enlarged screen shots.

Viewport Breakpoint Font Sizer

This is a Sass function I wrote to facilitate predictable viewport-based font sizes – back before container queries existed! I wrote it to accompany my conference session on viewport units.

It uses simple math to calculate what combination of settings would give us the font size we desire at a specific “threshold” breakpoint, with configurable scaling rates above and below that point. While container queries have largely solved this problem natively, this function demonstrates the mathematical approach we used to tackle responsive typography challenges in the pre-container query era.

View in GitHub

Experience it in action on CodePen!

Rainier Atlantic Neighborhood

I designed and built this interface in 2003 as part of my graduate thesis in Urban Planning at the University of Washington. It is a JavaScript-based tool for comparing historical maps of a specific neighborhood in Seattle, to facilitate analysis of change in the landscape over time.

I am currently in the process of expanding its functionality, including incorporating Google Maps.

When Money Is Moral

Built for David Mesenbring—author, nonprofit leader, and Episcopal priest—this site was migrated from Drupal 7 to WordPress to simplify content management and expand portability. I created a new design and WordPress theme while preserving key content and visual identity.

The site shares a technical foundation with Dean Sluyter’s, allowing for efficient hosting and maintenance.

Please visit the site at whenmoneyismoral.com, or click on the images at right to view enlarged screen shots.

U.S. House of Representatives

As lead themer on this CivicActions engagement, I implemented a fully custom responsive Drupal 7 theme for the House’s public-facing site. I translated high-fidelity comps into semantic, accessible templates while collaborating with back-end and UX specialists. Accessibility compliance and cross-device testing were core to the project.

Having Fun (but not too much fun) with vw and vh Units

I presented my first conference session at the 2018 Pacific Northwest Drupal Summit in Portland and at WordCamp Vancouver in 2019. This video is long (it was a 45 minute session + Q&A), but if you are able to at least skim through it, it will give you a good feeling for the sort of work that excites and inspires me.

View the video of my presentation on YouTube

View in GitHub

Experience it in action on CodePen!

Junk Drawer Photos

A long-running personal photo series and minimalist web project. I built this from scratch using vanilla PHP, HTML, CSS, and jQuery—no CMS. Visitors can explore a curated collection of literal junk drawers via a lightweight custom image slider. The site reflects my interest in documentary-style storytelling and digital ephemera.

Please click on the images at right to view enlarged screen shots.

GlobalNET

At CivicActions, I worked as either lead or sole front-end developer on several secure federal and local government websites. GlobalNET was one of the most visible of these projects, though much of the content remains protected or internal.

I contributed to the project for nearly two years, handling everything from UX planning through site building and theming. The site was built in Drupal 7, using the Zen base theme and a custom grid system to create a fully responsive layout. I’m proud to have played a central role in bringing this complex, security-sensitive site to life.

MTA Countdown Clocks

CivicActions partnered with Acquia to deliver the first countdown clocks in decades for the New York City Subway. I was the lead themer for the visual interface of these signs, which display real-time arrival data throughout the system.

This work required precision: I built pixel-perfect layouts for multiple display formats, ensuring historical fidelity and modern accessibility. I used Sass with viewport units and flexbox, and picked up a fair amount of ReactJS along the way.

Oikocredit Northwest

Oikocredit Northwest is a regional affiliate of Oikocredit UA, a global cooperative that provides fair credit to underserved communities.

Fezziwig helped Oikocredit Northwest establish a full online presence, including brand design, Drupal development, and a CiviCRM-integrated membership system. The site allows volunteers and staff to manage contacts, send newsletters, and maintain an event calendar, all within a user-friendly framework.

SCA Web Site

The Society for Commercial Archeology is a membership organization devoted to preserving the 20th-century roadside landscape—everything from diners and drive-ins to neon signs and motor courts.

I built the SCA’s Drupal site to support both member engagement and public access. It includes a CiviCRM-powered membership database with support for event registration, renewals, and structured editorial content. A visual timeline and archival integration help bring the organization’s mission to life online.

John Oates

Musician John Oates launched Good Road To Follow, a yearlong series of monthly song releases, and needed a web presence to match.

I designed and developed a WordPress-based landing page for the project. The site integrated media players, mailing list tools, and ecommerce options, all wrapped in a design that aligned with John’s branding and album art.

Kurt Baker Music

Kurt Baker is a pop artist based in Portland, Maine. I was brought on to build a Genesis Framework child theme to support the release of his album Rockin’ for a Living.

Working from StudioPress’s “Child” theme as a baseline, I customized the layout and styling to reflect Kurt’s playful, high-energy brand. The site features streaming music, video embeds, and tour updates in a mobile-friendly, fan-focused design.

The Movings Label

Movings is a Chicago-based, all-digital music label launched in early 2011. I was hired to create both the label’s visual identity and its web presence.

I designed the logo and developed a Genesis Framework child theme based on StudioPress’s Amped theme. The resulting site is clean and flexible, with support for music promotion, video embeds, and blog-driven updates.

Music Geek Services

Music Geek Services is an artist services firm based in Nashville and Chicago, providing marketing, management, and digital infrastructure to musicians.

Fezziwig was brought in to update the company’s logo and develop a new WordPress theme. Working closely with the MGS team, I implemented a customized Genesis child theme that highlights client projects, consulting services, and digital media expertise.