About
Early Days
Ever since I developed consciousness, I've always had a computer nearby. In early elementary school, my father set up a Java development environment on an old family computer with no internet access. From those early days of tinkering with code, poking around Windows XP's control panel, and designing dream houses in Punch! Professional Home Design Suite, I was hooked.
A few years later, my parents bought me my first computer, an old desktop with a copy of Ubuntu 12.04 LTS. I would spend hours on that machine. I broke it, I fixed it, I set up web servers, and wrote bash scripts to automate the annoying parts.
That led me to an education in computer science and eventually to a career in software development.
A2B2
In the early days of COVID-19, an aimless scroll through Twitter led me to discover one of my favorite artists, Andy Morin, was working on a new website.
I clicked the link to find a barebones Drupal site with an "under construction" banner. Bored and curious, I decided to use my pentesting skills to see if I could find any vulnerabilities.
I managed to gain access to the site and reached out to let him know, not expecting a response. He replied, thanking me for the heads-up and stating that he was "an artist and not a web developer." He asked if I would be interested in helping him build the site properly.
That turned into a few years of working with Andy on various projects, including a full redesign of A2B2's website, hosting and maintaining their infrastructure, running a livestreamed charity event, and even helping with an in-person live show.
A2B2 threw me into the deep end. I'd never deployed or maintained production systems before, and all of a sudden I was responsible for keeping a site with thousands of daily visitors online.
There were many late nights, frantic bug fixes, and learning experiences, but I came out of it with a much better understanding of web development, security, and infrastructure.
I parted ways with A2B2 in early 2025 as my life grew busier, but I won't forget those pandemic days locked at home playing Minecraft with the A2B2 community.
Shop Canadian
In early 2025, my longtime friend and coworker, Will, came to me with an idea. Canadians were increasingly interested in buying local products due to trade tensions with the United States. However, there was no easy way to identify Canadian-made products in stores.
Retailers scrambled to put up signage and "cash in" on the trend, but the labelling was inconsistent and often misleading. Will proposed a simple idea: an app that could scan a product's barcode and tell you if it was made in Canada.
We quickly got to work, building the first version of Shop Canadian in just a weekend. The app itself was simple, but it was missing one crucial component: data.
As it turns out, there was no comprehensive database of Canadian products available to the public. We used the data sources we could find to build a database of where companies were registered, but it wasn't enough. We needed product data. So, we turned to the community.
The interface was simple: scan a product, and if it's not in the database, submit a rating for whether it's Canadian or not.
We thought it would be pretty cool if it became a niche tool used around our local area. So, we posted about it on the Edmonton subreddit, expecting a few upvotes and maybe a handful of users.
It blew up.
Within hours, we had CBC News asking for a radio interview on the local morning show. The next day? CTV News. They wanted a national story.
Within a week, we were the #1 free app in the Canadian App Store, and tens of thousands of Canadians were using the app to check if products were Canadian. We weren't prepared for that kind of response. It was a simple idea, but it resonated with so many people. Downloads were increasing by the hour.
Luckily, my experience with A2B2 had prepared me for this kind of situation. The app handled tens of thousands of concurrent users during peak times without breaking a sweat. This helped Will and I keep up with the endless stream of emails we were getting.
Shop Canadian is still used by thousands of Canadians every week, and the database has grown to include tens of thousands of products.
Media
Languages, Frameworks, Libraries, and Tools
A non-exhaustive list of the languages, frameworks, libraries, and tools I use regularly. Listing everything I've ever used would be impractical, so I've focused on the ones that deserve a mention.
The Big Ones
- C#/.NET:
The language/framework I reach for first. I'm a big fan of the language's versatility and
the .NET ecosystem. So much so that it deserves a breakdown of how I use it:
- ASP.NET Core Web API: My go-to for building web APIs. It can be as simple or complex as needed. The out-of-the-box performance is excellent, and I seldom need to install third-party libraries.
- Blazor: I use it to spin up quick internal tools or full-fledged web applications. The ability to share code between client and server is a huge time-saver.
- Entity Framework Core: Probably the best ORM I've used. It's powerful, fast, and pairs perfectly with LINQ for data manipulation.
- ASP.NET Razor Pages: Nowadays, I mostly maintain legacy applications built with Razor Pages. While I prefer Blazor for new projects, Razor Pages is still a solid choice for server-rendered web apps.
- Scripting: That's right! .NET 10 introduced what Microsoft calls "file-based apps" that allows you to write C# scripts without the overhead of a full project. I've already used this feature to write scripts that speed up my file management tasks with multi-threading support.
- JavaScript/TypeScript:
My primary language for frontend web development. I prefer TypeScript for more maintainable code.
Frameworks and libraries I use include:
- React: I'm not the biggest fan of React, but it's widely adopted and has a massive ecosystem. I've used it to develop a few enterprise applications.
- Next.js: I've used Next.js for a few client projects. The server-side rendering and static site generation features are useful for SEO and performance.
- Astro: What this site was built on! I'm still learning the framework, but it seems perfect for my use case.
- Dart/Flutter: My go-to for cross-platform mobile development. Despite how massive the mobile app market is, there are surprisingly few sane options. React Native can be a pain to maintain, native development requires separate codebases, and MAUI is essentially pre-alpha software that Microsoft seems to have forgotten about.
- Docker: Containerization has made my life and my clients' lives so much easier. from simple web applications to deploy-on-demand SaaS platforms, Docker has become an essential part of my workflow.
The Not-so-big Ones
- Java: The first language I ever touched, and used frequently before I discovered Microsoft Java. These days, I mostly dust off the JDK to work on Minecraft mods, if that.
- Python: I used to use Python for scripting and automation tasks, but managing dependencies and virtual environments is a full-time job in itself. Call it a skill issue, but I much prefer actually writing code rather than trying to get my environment to cooperate.
- Go: I've dabbled in Go for a few small projects. It's a solid language with great performance, but I haven't found a use case that really excites me yet.
- PHP: I used PHP in high school to build simple web apps. It's not my favorite language, but it gets the job done for small projects.
The Rest
- Databases and SQL: I've used SQL extensively with various database systems. My go-to is Postgres, but I've also worked with Microsoft SQL Server, SQLite, MySQL, and even Oracle.
- WordPress: Sometimes all a client needs is a simple website or blog. I've built, hosted, and maintained several WordPress sites, customizing themes and plugins as needed.