Node • Deno • Fastify & Express • Vue • Quasar • Angular • React
PostgreSQL • SQL • MongoDB • Redis & ValKey
JavaScript & TypeScript • HTML • CSS/SASS/Stylus
PHP • .NET / C++ • GIT • MySQL • PM2 • NGINX & Apache • Photoshop • Illustrator
I am a passionate full-stack developer that uses every opprotunity to learn and build software. I enjoy building teams, teachng and mentoring developers especially with the increased rise in AI enhanced workflows. I have worked in several industries and have built software still used nation wide and gobally. Please feel to reach out if you'd like to learn more or talk technology!
Favourite Activites 🏒 Hockey • 🚶♂️ Hiking • 🚲 Spin Class
skikrumb was created to help families keep track of loved ones at ski resorts. Child safety is very important to me, being a father of two and as a family of skiers as well, this was a very passionate startup to be involved with. skiKrumb uses custom TekTelik hardware installed at ski resorts alongside a small key fob sized tracking device. My initial role at skiKrumb was to build a web and mobile application that would be capabale of showing your skiKrumb trackers in real-time on a map using custom map layers. The app features in app purchases of skiKrumb devices, yearly subscription renewals and the ability to share locations and skiKrumb access with friends and family.
I had the opportunity to plan the infrastructure and made sure it would be scalable as more devices came online as we were storing large amounts of data. SkiKrumb uses a custom MQTT server to manage all IOT realtime data messaging along side a partitioned time series database. Data is also stored in ValKey to provide microservices a fast and efficient way to subscribe to changes. Skikrumb features realtime alerts and can detect hardware buttons to send SOS alerts directly to the mobile and web app to alert if someone is in trouble.
A custom activity processor was built with custom, exclusive, map data that provides more accurate run tracking and statistics that features more accuracy never bfore seen in similar trcking apps. Using spatial GIS queris on top of this layer, we are able to provide accurate feature detection for realtime run updates for all shared devices across apps.
Created a React Native SDK that any app can consume to gain access to all the great mapping, sharing, activity and realtime tracking and statistic skiKrumb has to offer. Added leaderboards to add more fun and gamification into the app.
Managed a small team of 3 to work on a new version of the skiKrumb app, ski school management software and the SDK.
Vue & Quasar - TypeScript
Node, Deno & Fastify
PostreSQL & Valkey
Supabase & Firebase (Push Notifications)
Social Login
MQTT Real-time IOT Data Messaging
TekTelik Hardware Integration
ArcGIS, Mapbox and Leaflet variations
iOS and Android apps
Local Storage / Offline Map Capabilities
IOT Alerts handled by custom Typescript microservices
Custom statistic processing for accurate run, vertical, speed and completion status
Spatial queries to determine closest resort, features (run) and amenities
Swagger Documented API
Stripe payment integration
React Native SDK
12,000,000+
6500+
Polar Bear offers ski resorts a way to fully manage classes and online registrations for students and adults taking various lessons across ski, snowboard, mountain biking and various resort activities. WIth an easy to use drag and drop interface, operations can easily updated
Custom built Android scanner companion apps to scan and organize students in lessons and associate to tracking hardware
Cordova / Xcode
Uses QR code and barcode scanning technology
Generates barcodes for students
Vue & Quasar & Supabase
Node & Fastify
ArcGIS and MapBox Maps
Websocket connectivity for realtime location updates
Custom iframe creator for public shuttles or embeddable maps
Ability to create boundaries and customize alerts
Fully manage skiKrumb hardware inventory
Import school groups to easily manage tracking of large groups
Full student sign in and out module to manage daycare hours and student attendance
Custom de-duplication logic
API integrations created to directly connect to the resorts POS / Online Sale vendors
Ignite is a truly efficient and multi purpose internal application. It starts with Okta built in authentication connected to Active Directory and the NetSuite ERP system. Utilizing Okta for 2FA and NetSuite for roles and employee information, it is used for multi subsidiary login and separation of data. Ignite is comprised of several microservices to make employees day to day tasks easier. Each microservice is tied into the user roles to control access and features available. These microservices include:
Campfire. A social platform for posting company wide messages and attachments. Pulls in latest blog posts from company websites via the API and also includes features to display Instagram posts via the Instagram API.
Product E-Catalog. A VCDB & BCI (Vehicle Data) lookup tool that allows employees and external resources to look up available products, based on several applications, using the custom built API. Once an application vehicle is selected, the results are then pulled via the API using a database that is synced in real-time with the NetSuite ERP system. The catalog can also be set to iframe mode, via a query string, to allow external resources and sites to embed the catalog in any website. The catalog features a very simple to use data import form. Supply Chain simply uploads the latest VCDB/BCI file, in the provided excel format, and the API will process the individual worksheets, over 250,000 rows of data, and update the catalog database for all internal and external applications using the API or embedded iframe.
Point Of Sale. Ignite has a full featured point of sale system which was developed to make over the counter sales incredibly efficient as opposed to entering all data directly into the ERP system. The average sale was taking anywhere from 5 to10 minutes to complete due to amount of forms required in the ERP system. Ignite consolidates this to one form that quickly provides a receipt to get the customer out the door, while in the background handling all form creation and inventory requirements automatically in NetSuite reducing the workload for the branches. The POS system provides an easy to read dashboard to break down the days transactions and provides quick access to NetSuite to fix any inventory errors that require manual adjustments. The POS system also respects all custom pricing set in NetSuite and allows quick customer creation for new transactions. PDF receipts are dynamically created and the ability to email receipts is available to save paper.
Files & Forms. Multi purpose area used for route truck drivers to complete various forms in a mobile friendly application. Also used for internal forms for employees. Some examples are marketing requests and trade show requests. Some forms are powered via Hubspot to allow marketing the control over editing, updating the fields directly in Hubspot, and for tracking and statistics.
Reporting. This area allows for custom searches and reports in NetSuite to be shared in the application to be viewed and exported to CSV. Since these are pulled via the API the reports always contain the latest data.
Support. This page embeds YouTube and Microsoft Stream videos with tutorials on how to use Ignite. This also includes a quick support request button to quickly and easily report a bug or feature request.
Admin Settings. The admin settings features a heads up view of the API connectivity and Quasar upgrade status. If API connectivity fails, the application will trigger an offline mode to make sure no POS transactions are lost. Once connectivity is restored, the data will be nudged to resend to the API. It also features two tabs with additional settings. The general tab allows you to change subsidiaries to trigger changes in the app based on the subsidiary chosen. It also features a complete user selector. The user selector allows you to login as any user on this list for troubleshooting and to get a full view into the users access and role selection. It is very helpful for when you need to make sure you are looking at the same screens a user is seeing. Some additional cache clearing can be triggered as well to reset the Redis cache. The second tab controls internal or third-party API keys. You may create new API keys that may interact with Ignites API, copy existing keys, or mark keys inactive.
Vue & Quasar
Node & Fastify
MongoDB & Redis
Netsuite Integration
Okta Authentication
MQTT Real-time Messaging using Mosquitto
Hubspot Integration
Instagram API
HTML2PDF
Local Storage / Offline Capabilities
Automatic Deployment of Master & Development Branches
NGROK Tunnels
Charts.js / Apex Charts
Swagger Documented API
PM2 & NginX
146,000+
300,000+
400,000+
Server side rendered, responsive website. Discover Battery is an API driven site that uses a custom built CMS integrated in to the companies ERP system called NetSuite.
Vue & Quasar
Node & Fastify API
MongoDB & Redis Cache
NetSuite Integration
Okta Authentication
Algolia Search
Hubspot Integration
Custom Components
Dynamic PDF Datasheet Generation
Swagger Documented API
Express Front-end Server
PM2 & NginX
Natively installed iPad application managed through MDM with the ability to deploy in both English and French to Princess Auto stores.
Works Completely Offline
Cordova / Xcode
Built in Application Updating using Pusher
SQLite Database
Vue & Quasar
Node & Fastify
API Connectivity
Natively Installed on the iPad
Website backup
MDM Management via Meraki
Funded by the Digital Museums Canada, The Irish Famine Migrant Stories in Ontario project explores one of Canada’s first public health and refugee crises, when desperate and often disease-stricken immigrants fled Ireland during the Great Hunger of 1847.
Laravel / PHP
Tachyons Accessibility CSS Framework
ARIA / WCAG 2.0
Contentful Headless CMS / API
Custom built accessible components
HTML / SCSS
Custom JavaScript
Multilingual Site
Google Search API