Technologies

Technologies

You'll see a lot of technologies on this page, and that's because I've been working professionally since 2011 (and as a hobby well before that when I taught myself how to code in high school when playing an online game).

I strongly believe that my experience in a vast amount of technologies (while narrowing in on key technologies) helps me make the right decisions for product companies. It's also a huge benefit to the company when I can move them forward in unexpected ways by building the software they need in another language that their specialized team doesn't know, enabling them to sell in a space they previously weren't able to.

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 36 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 / TypeScript

Building interactive web applications with JavaScript and TypeScript.

  • 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 HTML5 canvas including building interactive canvas applications (example)
  • Working with Protobuf and Server-Side Events (SSE) on web

Ruby and 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
  • Scripting with Ruby to improve productivity
  • Working with Sinatra, a lighter-weight framework similar to Rails
  • Working with RBS and adding RBS support to company Ruby SDKs

React

A library for building complex single page applications in JavaScript and TypeScript. I have been working with React since 2014.

  • Single page app development using React with 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
  • Micro-frontends with React, when appropriate
  • 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.
  • Working with existing component libraries and frameworks like Material UI, Chakra UI, Tailwind, shadcn, Boostrap, etc.

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
  • Most of my experience is working with XML views, but I have also built projects using Jetpack Compose, as well as worked in apps that use both
  • Building apps that use Kotlin Multiplatform Mobile to build apps in Kotlin for both Android and iOS

iOS

UIKit and SwiftUI experience in Swift and Objective-C as well as multiplatform technologies.

  • 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
  • Working with multi-platform technologies like React Native, Kotlin Multiplatform Mobile, and Cordova to build apps for both Android and iOS

REST API, GraphQL and SDK development

I develop REST APIs and GraphQL APIs for companies to use internally, as well as for them to sell as a product and service.

I use tools like OpenAPI and Swagger, as well as custom scripts, to quickly and efficiently develop SDKs and documentation, reducing error and effort.

I build real-time APIs with various technologies, including websockets, Redis, and gRPC.

As a polyglot developer, I can program and build in various programming languages, and use this competency to support the companies I work with in building their SDKs so they can sell their product for more technology stacks.

I engage with the community of developers integrating the SDKs and APIs, and build tooling to support them, including coding editor extensions and CLI tools so they can more easily integrate usage of the APIs into their workflows and scripts.

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

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

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

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

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.

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.

Realm database (Atlas Device SDK)

Realm database (now known as Atlas Device SDK), is a cross-platform object database that is used on Android and iOS, among other platforms.

I have experience working with Realm on Android.

Angular

I've been working with Angular since version 1.x since 2013 and have kept up with the framework, where I most recently built internal tools in Angular version 18.2. Angular is an excellent enterprise-level JavaScript framework for building robust and testable single page apps.

  • Responsive web apps in Angular to provide an excellent user experience for mobile users
  • 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
  • Leveraging Angular 18.2 and Tailwind to quickly build internal tooling

Third-Party APIs

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

Low Code tools

Sometimes it makes sense to use a low-code/no-code platform to build internal tools. These can be cloud-based or self-hosted.

Low-code tools help you save development time and are great for a variety of tasks:

  • analytics dashboards
  • performing content moderation for user-generated content
  • helping your users manage their accounts
  • other important tasks where you need a real human involved

Low-code tools I primarily work with include Metabase and Retool, but I'd be happy to help out if your team has a different preferred option.

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.

WordPress

WordPress is a powerful blogging engine that can also be used as a content management system for server-rendered apps, as well as a headless CMS for more modern front-ends like staticallyl generated websites (SSG) with technologies like Next.js and Vue.js.

Drupal

Drupal is a PHP-based content management system that is often leveraged for larger content sites. I have expertise in Drupal theme development.

ProcessWire

ProcessWire is a great, light-weight, easy-to-use PHP-based content management system. It's lesser known than Drupal and WordPress and definitely doesn't get the recognition it deserves, but it's a great alternative to these technologies. In my opinion, it's easier to use than both, and offers more flexibility than WordPress for custom content types, and is generally much simpler to theme for compared to Drupal. ProcessWire is quite mature, having been around for almost 2 decades, and is a great choice for my clients who want to update the content on their website.

Strapi

Strapi is a Node.js-based headless content management system. It has a slick admin dashboard that is quick and enjoyable to use as a content creator.

Strapi has a well-documented plugin development API, making it easier for developers to inject UI elements into the default CMS to extend functionality, for example, generating PDF's from content.

I use Strapi to build content-focused websites and internal tools, including my own invoice management software.

One of the benefits to Strapi over more traditional PHP-based content management systems is that it can be hosted on ephemeral infrastructure-as-a-service platforms.

Swift / Objective-C

I have experience using Swift and Objective-C to build iOS and macOS apps.

  • Swift UI for mobile iOS and desktop macOS development
  • Working with various Apple APIs in Swift for macOS and iOS
  • Custom iOS keyboard extension development
  • Making network requests client-side using gRPC in Swift
  • Working with UIKit including nibs, xibs and storyboard
  • Localization including automation for localization

Continuous Integration / Continuous Deployment (CI/CD)

I set up CI/CD pipelines for various technologies including back-end, front-end, and mobile.

I've worked with various CI/CD providers:

  • Github Actions
  • Circle CI
  • Bitbucket Pipelines
  • Gitlab Pipelines
  • Heroku Pipelines
  • Travis CI

CI/CD workflows I generally create include (but are not limited to) performing the following tasks:

  • Unit tests
  • Integration tests
  • UI end-to-end tests
  • Lint tasks
  • Automated deployment of binaries for native Android and CLI apps in Node.js and Go lang
  • Managing releases

Design software

Working with design software like Figma, Sketch, and Illustrator to read and create design documents.

  • Using guides and rulers in design software to ensure high attention to detail when implementing pixel-perfect web and mobile layouts with designer-provided Figma and Sketch files
  • Exporting assets, including creating any additional frames or converting to outlines as needed
  • Design mobile and desktop app icons, separating foreground and background as needed on some platforms (e.g. Android)
  • Leveraging community plugins to optimize productivity
  • Leveraging community design assets to design better and faster, e.g. icon packs, device renderings, etc.
  • Creating simple designs in Figma, including using auto-layout where appropriate

On teams, I prefer to work with designers rather than create my own designs, but I often help out bootstrapped teams without designers, in which case I am happy to help create designs influenced by an existing style or colour palette. I create all the designs and branding for my own websites and apps.

While I'm a full stack web and mobile software developer, Figma is one of the tools I often reach for to help deliver high-quality web and mobile apps.