Technologies

Technologies

Here are some of the technologies I work with, though I am always open to working with new (or new to me) technologies!

Showing all technologies

HTML

Extensive experience with HTML since the early 2000's and how to use HTML and CSS features to improve the performance of JavaScript applications.

  • Using the power of HTML to simplify complex, bloated, and poor-performing JavaScript applications
  • Thorough understanding of semantic HTML principles to optimize markup for search engines—portfolio entries in my personal sites often outperform client websites (I didn't work on) in search engine rankings.
  • Search Engine Optimization techniques to improve ranking on Google and other search engines
  • Developing HTML markup to optimize for accessibility including screen readers and Web Content Accessibility Guidelines (WCAG) compliance

CSS

Extensive expertise with CSS including SCSS, Less, Stylus and Styled Components syntaxes to build scalable and maintainable CSS.

  • Technical Leadership with CSS including establishing and enforcing best practices for CSS
  • Building custom grids in CSS to offer the highest amount of flexibility without requiring developers to hack existing grid systems
  • Building Design Systems to support teams in building UI functionality faster
  • Implementing CSS methodologies and aspects of them to support a variety of CSS problems including custom grid layouts, white labeling, dark mode support, etc.
  • Applying CSS methodologies like BEM and SMACCS to build maintainable CSS and prevent specificity-related bugs and tech debt
  • Experience with a variety of CSS libraries including Bootstrap, Material UI, Foundation, Chakra
  • Expertise in troubleshooting large and difficult CSS code bases
  • High attention to detail to implement pixel-perfect CSS layouts with designer Figma and Sketch files
  • Mobile-first, Responsive Web Development to build web layouts that follow best practices and are optimized for a variety of device screen sizes including desktop, and tablets and phones in portrait and landscape orientations
  • Working with designers to ensure their web layouts are designed in a way that allows developers to build maintainable CSS and reduce tech debt
  • Building CSS animations and migrating animations to use CSS where appropriate to improve animation-related performance

JavaScript

Building interactive web applications with JavaScript including the use of HTML5 canvas.

  • Built several customizer/configuration-related applications to allow users to drag and drop elements to customize an image they can export
  • Expertise in JavaScript and a variety of libraries like React, Vue, Svelte, Handlebars, AngularJS, jQuery
  • Building fully functional applications in vanilla JavaScript without the usage of frameworks
  • Writing scripts to automate build processes with Node.js
  • Using JavaScript to write user scripts to augment third-party websites via script runners like GreaseMonkey, TamperMonkey, etc.
  • Building my own static site generation scripts in Node.js
  • Working with a variety of build tooling and bundlers including Webpack, Parcel, Rollup, Grunt and Gulp
  • Working with Protobuf and Server-Side Events (SSE) on web

Ruby on Rails

Extensive experience working with Ruby on Rails to build API's, and limited experience building server-rendered apps.

  • Technical leadership in Ruby on Rails
  • Building API's using REST and GraphQL
  • CI/CD setup on a variety of CI platforms to support running unit tests and automating deployments including database migrations with Postgres
  • Leveraging Ruby on Rails features including ActiveRecord to quickly build apps that need to manage a large amount of data
  • Building authentication for both server-rendered and API Rails projects, including working with JWT tokens (symmetrical and asymmetrical signing)
  • Developing and setting up the infrastructure to run asynchronous tasks with Sidekiq
  • Building custom clients to work with Firebase Authentication, Firebase Storage, and other Google services that are not officially supported in Ruby
  • Generating documentation for API's including Entity Relationship Diagrams (ERD) graphs

React

A library for building complex single page applications in JavaScript and TypeScript.

  • Technical Leadership in React to ensure teams build maintainable, testable React applications
  • Presentational-Container component architecture to separate presentational and functional concerns, as well as to leverage the team based on competencies.
  • Building custom hooks and context providers to power a variety of functionality
  • Unit testing of utility functions, presentational components, functional components, and custom hooks
  • Automated UI testing with libraries like Cypress, Selenium, and Protractor
  • Working with Redux for global state management
  • Improving performance bottlenecks with regards to rendering concerns in React and Redux applications
  • Setting up CI/CD for React projects on a variety of CI platforms
  • Setting up and using Storybook to help developers develop UI quickly, as well as to allow developers with higher attention to detail to focus on building UI components and others to focus on functionality to ensure a polished UI.
  • Building multiple component libraries (with Sass and Styled Components) to build a library to support teams to build React UI's quickly.

Android

Native Android development in Kotlin and Java.

  • Technical leadership on native Android projects
  • Expertise in developing for the Android user experience including best practices for permissions, notifications, back button behaviour, and other UX
  • Building Design Systems that support both light and dark appearance modes to support teams in building out views
  • High attention to detail with regards to UI implementation and striving for pixel-perfect layouts on Android
  • Building Android apps that support multiple flavours and build variants, e.g. Development, Staging and Production app flavours.
  • Extensive experience with Android SDK versions and have been building functionality to support down to Lollipop (and previously Jellybean)
  • Building support for deep link functionality including deferred deep linking
  • Working with a variety of libraries and API's including Firebase, error trackers, networking libraries, etc.
  • Working with push notifications and allowing users to configure notifications based on type
  • Networking, including REST with JSON, web sockets, gRPC, and Protobuf
  • MVVM architecture with LiveData and architecture components
  • Reactive programming with Kotlin flows and LiveData with experience in Rx
  • Data persistence in SQLite with Room database
  • Implementing asynchronous worker tasks with WorkManager
  • Building location-based functionality including "near me" functionality and working with maps
  • Building custom UI for audio/video recording
  • Building web view applications and enabling communication between the web view and native layer
  • Unit testing in Java and Kotlin, including with coroutines, JUnit (4 & 5), Mockk
  • Automated UI testing with Espresso and Appium
  • Setting up Android lint and Kotlin lint to ensure code style consistency in the project
  • CI/CD setup for running tests, lint and other tasks for Git workflows, as well as automating deployments and code signing for Firebase App Distribution and the Google Play Store
  • I prefer to work primarily with views Android (XML) but can also work with Jetpack Compose

iOS

UIKit and SwiftUI experience in Swift and Objective-C.

  • Familiar with code signing
  • Ability to build views for UIKit programmatically and with Interface Builder
  • Limited SwiftUI and Combine experience
  • Knowledge and understanding of the Human Interface Guidelines
  • Working with SF Symbols to speed up the development of apps without designers
  • Building WebView applications and enabling communication between the web view and native layer
  • Unit testing with XCTests and UI testing with XCUITests and Appium
  • Working with a variety of package managers including Cocoapods, Carthage, and Swift Package Manager

macOS

Experience building for macOS, mostly with SwiftUI but also AppKit.

  • Experience developing an app as a Safari extension
  • Experience working with AVFoundation packages including Speech Synthesis API's to build text-to-speech functionality
  • Experience working with IRC (Internet Relay Chat) networking to connect to and parse IRC chat messages
  • Knowledge and understanding of the Human Interface Guidelines
  • Working with SF Symbols to speed up the development of apps without designers
  • Managing dependencies with Swift Package Manager

Go / Go lang

I build backend web services and cross-platform command line interfaces (CLI tools) in the Go programming language for macOS, Linux, and Windows.

  • Interactive terminal user interfaces (TUI apps)
  • Cross-platform CLI apps to support functionality on macOS, Linux, and Windows
  • Unit testing, including test-driven development (TDD) where appropriate
  • REST API development with experience in the native http package, chi, and gin
  • Working with SQL using SQLx
  • Building web socket servers
  • Working with goroutines, channels and context
  • Shipping CLI apps over Git using GoReleaser

Kotlin and Java

I have extensive experience in Kotlin and Java, building native Android apps in both languages, as well as backend web API's. The capacity at which I work with Kotlin and Java at companies includes either Tech Lead roles, or as the resident Java/Kotlin expert on smaller teams.

  • REST API development
  • Web socket servers
  • Building complex SDK's in Java
  • Distributing libraries over Git using Jitpack
  • gRPC on Android
  • Unit testing and integration testing in Kotlin using JUnit and JUnit Jupiter, including test-driven development (TDD) where appropriate
  • Frameworks I work with include Spring Boot and Ktor, depending on the project
  • Using profiling tools to test for memory leaks

Next.js

Building robust applications in Next.js with TypeScript that support either Static Site Generation (SSG) or Server-Side Rendering (SSR) depending on the problem.

  • Leveraging infrastructure on serverless infrastructure platforms to host Next.js apps and reducing costs
  • Supporting multiple environments (staging, production) for CI/CD workflows
  • Generating static sites at build time to limit the cost of infrastructure by allowing websites to be hosted in object storage buckets or on the free plan of many infrastructure-as-a-service providers.
  • Leveraging server-side rendering to optimize dynamic websites for search engines and sharing links to social media sites, including Facebook and Twitter As Next.js is a framework that is built on top of React, all React skills apply to Next.js.

Node.js

Extensive experience building backend API's in JavaScript and TypeScript.

  • Working with web frameworks like Express and Hapi
  • Unit testing and integration testing
  • Writing middleware for Express.js applications
  • Creating and distributing TypeScript-supported NPM modules and libraries for Node.js applications
  • Designing and developing authentication solutions including JWT and OAuth flows for a variety of providers
  • Building for serverless environments including Vercel, Netlify, Amplify, Google Cloud Functions, Firebase Functions, and Cloudflare Workers
  • Serving realtime content via web sockets and server-side events (SSE)

SQL

Extensive experience working with Postgres, MySQL, and SQLite both on the back-end and front-end, including migrations.

  • Experience setting up SQL environments on macOS and Linux, as well as with Docker and third-party database-as-a-service platforms
  • Setting up automated migrations to deploy SQL schema changes when a new version of a service is deployed to production
  • Troubleshooting and fixing failed migrations in production
  • Working with a variety of GUI and CLI tools for working with different dialects of SQL locally and remotely on a server
  • Using Flyway to automate database migrations in backend Java and Kotlin apps

React Native

Experience working with React Native to build new apps, maintain existing apps, and migrate away from React Native.

  • Improving legacy, sluggish, buggy React Native code bases
  • Adding unit testing to legacy React Native code bases to improve code quality
  • Building custom plugins in React Native to support better functionality on Android
  • Helping teams incrementally migrate away from React Native
  • Using Storybook for the quick development of UI components
  • Setting up Redux and Redux Dev Tooling to support debugging state management in React Native
  • Implementing Firebase API's including Realtime Database, Firestore, Firebase Authentication As React Native is a framework that is built on top of React, all React skills apply to React Native.

Chrome Extensions

Extensive experience building browser extensions for Google Chrome, including the distribution of several Chrome extensions in the Google Play Store.

  • Augmenting the functionality of existing websites via Chrome extension API's
  • Building embeddable applications via the Chrome extension API's, e.g. tools that can be embedded in Gmail
  • Building productivity tooling as a Chrome extension
  • Leveraging a number of Chrome extension API's
  • Implementing web messaging to support interprocess communication between content and background scripts
  • Overwriting and augmenting CSS styles via Chrome extension API's
  • Building options/configuration pages, browser action popups, content scripts, and background scripts to augment a user's experience across the web
  • Upgrading Chrome extensions to manifest version 3
  • Thorough understanding of Chrome Web Store guidelines and review process

Chromecast

Developing video streaming functionality for Chromecast end-to-end including Android, iOS, and web.

  • Familiarity with interprocess communication between the Chromecast web host and mobile devices
  • Building functionality to reliably stay connected to the Chromecasting experience, and properly syncing state between mobile devices and the Chromecast
  • Led a team to build a Chromecast app that streams video from an existing mobile app in a day. I was the leader and core contributor for this hackathon project.

Kotlin

Experience working with the Kotlin programming language in a variety of contexts including backend development with Ktor as well as Kotlin Multiplatform Mobile.

  • Building real-time web and mobile applications with server and client web sockets
  • Building backend REST API's
  • Setting up and working with dependency injection frameworks including Dagger2, Hilt, Koin, and Kodein
  • Setting up and working with ORM's and similar database libraries like Room database, SQLDelight, and Exposed
  • Unit testing in Kotlin, including with coroutines, JUnit (4 & 5), Mockk
  • Networking with gRPC, Protobuf, Retrofit, OkHttp, and Ktor HttpClient (with CIO and OkHttp engines)
  • Leveraging Kotlin to generate TypeScript code
  • Building productivity tools and chatbots to support interactivity for live-streaming content creators
  • Using profiling tools to test for memory leaks

Rust

I have experience building CLI tools and web apps in Rust with various libraries:

  • Implementing OAuth with various providers
  • Web apps with Rocket and Axum
  • Working with SQL using SQLx
  • Unit testing
  • Working with JSON with serde_json
  • Building for WASM targets
  • Building CLI apps with libraries like ratatui and clap

Redis

Experience working with Redis for a variety of applications including caching, key-value storage, asynchronous worker tasks, as well as building event-driven, real-time applications.

  • Using Redis in Ruby on Rails and Node.js contexts for caching and key-value storage
  • Building event-driven functionality using Redis Pub/Sub
  • Building real-time functionality using Redis Streams

Vue.js

Experience working with Vue 2, Vue 3, and Nuxt with Webpack and Vite build systems. Experience debugging Vue apps with the Vue dev tools to troubleshoot state management and rendering issues. Experience working with the composition API and VueX.

Firebase

Experience building with, and helping companies migrate away from a variety of Firebase products, including but not limited to AppEngine, Functions, Authentication, Storage, Dynamic Links, Cloud Messaging, Realtime Database, Firestore, Analytics, App Distribution, Crashlytics, and setting up local emulation of Firebase infrastructure to speed up development.

MongoDB

Using MongoDB for storing data that needs more flexibility with regards to its schema. Leveraging MongoDB geospatial queries to power location-related services in API's I build, including "near me within X kilometres" functionality.

AngularJS

Versions 1.x of one of the first single-page application JavaScript frameworks.

  • Building functionality in Angular using MVC patterns
  • Building custom directives
  • Unit testing controllers, directives, and services
  • Migrating code bases from AngularJS to more modern libraries and frameworks, including the use of micro-frontends

Third-Party API's

Extensive experience leveraging third-party API's to build out functionality faster and cheaper than building in-house, depending on the problem and client's budget. I often leverage third-party API's for the following (but not limited to):

  • Content management
  • Performance, uptime and error monitoring
  • Embeddable functionality, e.g. chat, video, etc.
  • Authentication
  • Integrating into third-party services and platforms by either implementing their API's or building embedded extensions
  • Augmenting the functionality of existing websites

PHP

Experience in Drupal, WordPress, ProcessWire, and vanilla PHP to build websites for clients and internal tooling.

  • Theme development in Drupal, WordPress and CakePHP
  • Using ProcessWire to quickly build content management system (CMS) websites that require more advanced content modelling for a variety of clients
  • Plugin development in WordPress
  • Developing custom themes for WordPress including custom post types and custom fields to allow WordPress to be used like a CMS

Web Hosting & Infrastructure

I have extensive experience working with a variety of hosting providers including but not limited to Amazon Web Services, Google Cloud Platform, Firebase, Heroku, Digital Ocean, shared hosting providers, Vercel, and Netlify. I can work with infrastructure-as-a-service providers as well as provision bare metal servers, if needed. I also automate deployment processes for this infrastructure. I can work with Docker as a consumer as well as to Dockerize applications (Node.js, Ruby on Rails). I also have experience using Vagrant to enable local development for LAMP stack environments. Limited experience with Ansible.

Windows Presentation Framework

Limited experience working with Windows Presentation Framework to write a Windows desktop application in C#. Experience working with the Speech Synthesis API's on Windows to develop a text-to-speech app for Windows.