Introduction
I'm a full stack developer with 10+ years of experience shipping software, from payment platforms and customer portals to 3D marketing apps and hybrid mobile products.
Away from work I'm a game jam regular, always tinkering on a side project (and playing too much Age of Empires II: DE).
Work
Sonar SoftwareSoftware Engineer → Senior Software Engineer · Full-time
Full-stack and mobile engineer spanning three products over 5 years: sole developer of the field-technician mobile apps, payments/billing owner on the core web platform, and feature developer on the customer self-service portal.
Mobile: Field Tech (Flutter → React Native)
- Sole developer of Sonar's offline-first field-technician mobile app in Flutter (886 commits, versions 0.13→0.16), used by ISP installers to manage jobs, tickets, inventory, and provisioning
- Architected an offline-first sync engine (mutation queue with retry/backoff, connectivity detection, and a Drift/SQLite local database with a multi-version migration path), enabling technicians to work without connectivity
- Led a ground-up Flutter rewrite to Riverpod state management and a repository pattern, consolidating three data-mutation patterns into one documented standard
- Rebuilt the app from the ground up in modern React Native (RN 0.79, TypeScript, React Navigation 7, Apollo GraphQL, Redux Toolkit) with a redesigned UI and full light/dark theming across ~17 screens (2025–2026)
- Currently building white-label sales and customer-portal app variants for ISP clients on the same React Native foundation
- Shipped high-value field features: credit-card scanning for on-site payments, handwritten-signature contracts, iOS Live Activities for job tracking, global search, and a technician dashboard
- Integrated Calix SMx provisioning and Auth0 SSO with MFA; built the mobile CI/CD pipeline (Azure Pipelines + GitHub Actions, Fastlane, ConfigCat flags) and a Patrol end-to-end test suite with full internationalization
Core Platform: Payments & Billing
- Owned the SonarPay payments domain end to end: disbursements, disputes, AVS/CVV/3DS verification, and void/refund/reverse-payment workflows across multiple processors (Payrix, ProPay)
- Delivered Flexible / 30-Day Billing: configurable service-period offsets, bill-day vs. invoice-day logic, proration, and delinquency calculations, rolled out behind feature flags
- Drove a frontend de-globalization refactor converting 35+ global services to explicit imports/singletons, resolving circular-dependency and webpack memory issues and modernizing the unit-test suite
- Built a code-generation pipeline for type-safe enums (with translation integration) reused across the entire codebase, plus the mobile-app login backend (Auth0, FCM push notifications)
- Rebuilt the account overview into a permission-aware, user-customizable dashboard, and shipped RADIUS session tooling, SAML/Active Directory auth, and Print-to-Mail invoice batching
Customer Portal
- Overhauled the subscriber payment experience: billing summaries, auto-pay UX, multi-currency support, and Stripe integration updates
- Implemented NACHA compliance and Canadian bank-routing support, plus credit-card-processor gating and multi-language (French) localization
TS, Vue, PHP, Laravel, GraphQL, PostgreSQL, Flutter/Dart, Riverpod, Drift/SQLite, React Native, Redux Toolkit, Apollo, Auth0, Azure Pipelines, GitHub Actions, Fastlane, Docker
XelloFull Stack Web Developer · Full-time
- Maintained and evolved a micro-frontend shell application orchestrating web-component-based modules
- Migrated legacy AngularJS components, services, and unit tests to Angular and Jest
- Localized the product for the UK market, adapting flows to a different school system
- Improved performance of existing SQL queries and authored new stored procedures
TS, SCSS, Angular, NgRx, RxJS, .NET, SQL, Slack API, Jest, Jenkins, Octopus, Azure
WuzzalsFull Stack Web Developer · Contract
- Sole developer maintaining and extending the Laravel + Vue platform for a personalized children's-book company
- Automated the book-cover creation pipeline with Photoshop Action scripts and dynamic image resizing
- Refactored components for reusability and improved site-wide performance and design
- Launched comic books as a new product line and introduced a Trello workflow adopted company-wide
- Managed support for users, writers, artists, and teachers
Laravel, Vue, Photoshop scripting
TrailerworksFull Stack Web Developer · Contract
- Built the company's interim and final marketing sites in React
- Wrote technical estimates for client RFPs
- Managed the existing Magento e-commerce store
- Launched a Shopify storefront for honey produced on site
React, Magento, Shopify
GrassriotsFull Stack Web Developer · Contract
- Cut campaign delivery time from over a month to about ten days by streamlining the development workflow
- Rebuilt the Webpack configuration, improving build reliability, performance, and developer speed
- Added multilingual support with languages easy to add or remove
- Modernized the codebase from ES5 prototypes to ES6 classes
- Delivered campaigns for UNICEF Canada, World Vision, Ecojustice, and Cystic Fibrosis Canada
JS (ES6), Webpack, Babel
GEFrontend Developer · Contract
- Built interactive 3D marketing apps in Babylon.js for GE Healthcare, Energy, and Grid Solutions
- Prototyped and benchmarked modern frontend frameworks against GE's in-house Haxe stack to guide platform decisions
- Rebuilt a Flash-based conference showcase as an HTML5 Vue app shipping to web and desktop (Electron) with offline storage
Babylon.js, Vue, Electron, Haxe
IndegeneFrontend Developer · Full-time
- Developed Angular 2 components and themed an Ionic 3 hybrid web/Android app for the pharma industry
- Designed backend microservices in collaboration with the Java Spring team
- Implemented Redux state management and custom offline state handling for Android
- Internationalized the app and maintained support down to Android 3.0 tablets
- Interviewed and onboarded new hires
Angular 2, Ionic 3, Redux, Java Spring
Digital EchidnaFull Stack Web Developer · Full-time
- Delivered front-end themes and custom back-end modules across Drupal client sites
- Built Python scrapers for content migration and maintained a CodeIgniter application
- Represented the company at Drupal 8 code sprints in Ohio and Toronto
- Built sites to meet AODA accessibility standards
- Onboarded co-ops, interns, and new hires
Drupal 7/8, PHP, Python, CodeIgniter
ProjectsView all →
In developmentReality64
A cross-platform desktop editor and engine for making real Nintendo 64 games: author scenes, cutscenes, and UI on PC, then build a .z64 ROM that runs in an emulator or on original hardware.
Live SaaS · Free demoCondoPulse
Statuspage.io for condo buildings: tracks elevator uptime, amenity outages, and per-unit issues, giving residents, boards, and property managers a public accountability record.
Native N64 gamePandemonium
A souls-like boss-battle game for the Nintendo 64, built in C for the 2025 N64brew Game Jam. The making-of video has over a million views on YouTube.

E-Ink Image Converter
A browser-based tool that converts images into dithered BMP files ready for e-ink displays.

Image Comparison Tool
A simple web tool for visually comparing before-and-after images with drag-and-drop support, plus an MCP server for AI-driven workflows.

Lightbox Quote Checker
Check whether your message will work within the constraints of a letterboard lightbox.
- Reality64 — A cross-platform desktop editor and engine for making real Nintendo 64 games: author scenes, cutscenes, and UI on PC, then build a .z64 ROM that runs in an emulator or on original hardware.
- CondoPulse — Statuspage.io for condo buildings: tracks elevator uptime, amenity outages, and per-unit issues, giving residents, boards, and property managers a public accountability record.
- Pandemonium — A souls-like boss-battle game for the Nintendo 64, built in C for the 2025 N64brew Game Jam. The making-of video has over a million views on YouTube.
- E-Ink Image Converter — A browser-based tool that converts images into dithered BMP files ready for e-ink displays.
- Image Comparison Tool — A simple web tool for visually comparing before-and-after images with drag-and-drop support, plus an MCP server for AI-driven workflows.
- Lightbox Quote Checker — Check whether your message will work within the constraints of a letterboard lightbox.
Skills
My core stack
Also experienced with
Education
Interactive Media Specialist
Fanshawe College · 2014–2015
3D Character Design & Animation
Fanshawe College · 2013–2014
Interactive Media Design
Fanshawe College · 2011–2013