Code is (geek) love!

My name is Joni Halabi and I am a web developer in Washington DC. I create websites for large and small organizations, specializing in WordPress themes and plugins, as well as Javascript applications.

Say hello!


Georgetown University Medical Center (2018)

WordPress, ReactJS, Sass, HTML

I currently work full-time for Georgetown University as a Senior Javascript front-end developer in our University Information Services department. I worked with a team of developers, designers, and product managers to create a flexible and responsive themes for the University's school websites.

This site is part of a larger WordPress installation that includes individual sites and sites on a multi-site network. We are in the process of migrating our sites from Drupal and refactored that old theme to work with WordPress 5. I led the development of a series of custom core editor blocks, using ReactJS and the Gutenberg API, to meet our specific content needs. These blocks includes card decks, expandable content, custom list formats, and dynamic news blocks.

View Site

Board Game Innovation (May 2017)

WordPress, WooCommerce, HTML 5, CSS, Bootstrap 4 (alpha), jQuery

BGI reached out to me in early 2017 to redesign and replatform their website. I created a new site design based on their logo and existing style guide standards. I also helped them evaluate several ecommerce platforms, including Shopify and WooCommerce, to determine which platform would best fit their needs.

I implemented the design in WordPress with WooCommerce. The site also includes custom functionality, including integration with Braintree for payment processing, integration with to provide shipping options, and support for international pricing and checkout.

View Site

Whitehaven Code Playground @ Georgetown (2016)

Jekyll, jQuery, HTML 5, CSS, Bootstrap 4 (alpha)

This site is also part of my work at Georgetown University. I created this site as part of our documentation efforts to encourage Drupal content editors be familiar with Bootstrap code supported in our website themes.

Users can insert commonly used code blocks and immediately see what they will look like in our Drupal 7 theme. (The theme's stylesheet is included on this page.) Users are also encouraged to play around with the code to update classes and add their own HTML as part of their training on the theme and Bootstrap.

View Site

SemanticClarity (February 2016)

Drupal 7, Sass, CSS, HTML 5

SemanticClarity reached out to me in late 2015 about relaunching their website in parallel with an initiative to refocus their business strategy.

I worked with them to create a new design based on their current branding and develop a flexible, responsive Drupal theme based on that design. The new site was on the Acquia platform. This site launced in early 2016, but the company no longer has a website, so this work is no longer available.

Chicago Community Trust (May 2015)

Wordpress, Javascript, SASS, CSS, HTML 5

I led the development of this project while working at AMS. Our team of developers collaborated with the designer, managers, and content editors during the course of the project. The site won the 2015 OMMA award for website excellence in the charity/non-profit space.

View Site

Macy's Internal Application (2014)

Backbone.js, Marionette, jQuery, Jasmine, CSS

At Optaros, I was the lead front-end developer on a team that re-platformed the UI of Macy's internal product management application as a Backbone application, using Marionette, Require, Jasmine, jQuery, and a custom light-weight CSS grid framework. We are created a library of core UI components to be used by us throughout this application, as well as by other Macy's teams.

My primary function on this team was to create component designs for each section of the application in development. These component designs included the Backbone model structure, necessary REST calls for a given section, and payloads for those REST calls.


See What I Mean?: Data Visualization in WordPress

Data visualizations are graphical representations of large and small datasets. Usually, they are charts or graphs that make patterns in these datasets easier to understand. This developer-focused talk demonstrates how to use Google Sheets and SVGs to create a custom Gutenberg block that will display data in a responsive and accessible way.

This talk was given at The Javascript for WordPress Conference 2020 (July 2020). A lightning talk version was also given at WPCampus Online 2020 (July 2020)

See slide deck

Customizing Gutenberg: Lessons Learned at Georgetown

The new Gutenberg editor comes with so many great content blocks. However, what if your editors have special use cases for their content that cannot be easily created with Gutenberg’s out-of-the-box blocks? At Georgetown, we have created a series of custom Gutenberg blocks in an effort to address our editors’ unique content needs.

This talk was given at WPCampus Online 2019 (January 2019).

See slide deck

Accessible Web Development

We develop websites for everyone to use, so why not make sure that everyone is able to use our sites? We as developers need to plan for accessibility before we write our first line of code.

This talk was given at NoVA CodeCamp (April 2017) and ConvergeSE (June 2017). A shorter version of this talk was given at edUi (September 2017).

See slide deck

Accessible Development Class

In addition to my Accessible Development conference talk, I have also lead a class for fellow Georgetown staff members about how to develop web sites in an accessible manner.

See slide deck

Design Tools

Slide deck from my mini class for new web developers on different design tools.

See slide deck

Introduction to SVG

Notes and example code for my introductory lecture about creating and using SVGs.

See notes

Introduction to Ember

Notes and example code for my introductory lecture about using Ember.js.

See notes

CSS Navigation

Video lecture tutorial on how to create a multi-level website navigation with only HTML and CSS.

View on YouTube

WordPress Plugins.

Besan Block Plugin

WordPress plugin that adds a post editor block to create charts from Google sheets.

Docs Download

Color Palette Plugin

WordPress plugin that adds a Color Palette block to the post editor.

Docs Download

Gutenberg Autocomplete Component

The existing OOTB Autocomplete component in the Gutenberg API is broken. This is a simple substitute.

Github Gist

ThreePM Block Controller

This WordPress plugin provides site administrators with the ability to turn on and off specific post editor (Gutenberg) content blocks.

Docs Download

WC Tiered Shipping Plugin

This WordPress plugin adds a tiered flat rate shipping option for the WooCommerce plugin.

Docs Download

Tools and Projects.

Accessible Calendar

HTML and CSS-only accessible and responsive calendar.


Backbone Recursive Navigation

This component is a Backbone.js model and view that can be used to construct an infinitely deep navigation or nested list.


Backgrid Cell Extensions

This library contains a series of Backgrid cell extensions.


Character Counter

Character counter written in jQuery.

Github Gist

Color Sequencing Dialog

This color sequencing widget was developed as a proof of concept to reorder large numbers of content blocks inside a YUI dialog box.


CSS Mega Menu

This simple mega navigation menu is inspired by the many mega menus on retail and other websites.

Github Gist

CSS-Only Menu

This simple navigation menu demonstrates how to create a main navigation menu with drop down sub-menus using just CSS.

Github Gist

CSV to JSON Converter

This script will convert a CSV file to JSON. That's it!

Github Gist

Flickr Place Image

Script that uses the Flickr API to provide placeholder images for web developers and designers.


GitHub to Trello Migration

This page/script allows you to migrate GitHub tickets into Trello.

Live Preview


A node module to copy boilerplate code for new projects, cloned from other personal Github repos.



Facebook profile picture generator app that adds an image of the Earth over your existing profile picture.


Phone Number Conversion

A quick tool to convert plain phone numbers into accessible phone number links.

Live Tool

Prototype Helper

A utility site that lists and loads all of my favorite prototyping tools.

View Site

Static Website Base

My personal standard base code for static websites.


Text Area Limit using YUI

This text area limit widget was developed as a proof of concept for implementing a character limit inside a text area.


Word Counter

Simple word counter in jQuery.

Github Gist

const thatDevGirl = {

'Joni Halabi',
'Senior web developer and instructor',
'Washington DC',
'Hunkering down with my very active and curious toddler. OK for chatting.'


Send me something geeky!