Blog

I've been writing in various genres for many years, and this blog is specifically for software development.

In total, I've written 28 articles for The Grand Rapids Developer blog. Use the search below to filter by title.

Most Popular

Deploying Next.js to GitHub Pages

Deploying Next.js to GitHub Pages

Next.js is easy to get into using its own getting started guide, however in this post we’re interested in getting a Next.js website deployed to GitHub Pages. I’m going to share my lessons learned and what they don’t tell you about the deployment process.

React Custom Hooks vs. Local State

React Custom Hooks vs. Local State

There’s plenty to be said about Hooks vs. Classes, but this post is going to be hyper-focused on “why” and “when” you should use Custom Hooks instead of Local State.

Atomic and Domain Driven React-Native Development

Atomic and Domain Driven React-Native Development

Atomic and Domain Driven development are two practices that seek to decouple, modularize, and create easy to maintain software projects. In this post, I want to share how I’ve combined the spirit of these two methodologies, by taking their best and simplest traits, and apply them to React Native.

All Posts

Automatic Artifact Downloads Inside PR Comments

Automatic Artifact Downloads Inside PR Comments

This post shows how to automate the process of commenting on a PR with a download link to the artifacts produced by a Github Action workflow.

Why Network at Conferences?

Why Network at Conferences?

Conferences are where you can make a choice to learn not just from the conference talks, but from the participants themselves. This post shares some things I learned from some very interesting people I met at a Conference.

Fulfill Google Plays Data Safety Requirements in 20 Minutes

Fulfill Google Plays Data Safety Requirements in 20 Minutes

This post shows a quick way to fulfill the Google Play Store's updated Data Safety policy that requires a website form to request account deletion. This solution can be ready to deploy in 20 minutes!

2 Tricks for Audio Management

2 Tricks for Audio Management

This post covers two ways to improve audio when dealing with repetitive sounds, and volume control

Improve Unity3D Compile Times with Assembly Definitions

Improve Unity3D Compile Times with Assembly Definitions

This post covers one way you can speed up editor compile times in Unity3D using assembly definitions.

The 5 Minute Accessibility Strategy

The 5 Minute Accessibility Strategy

We discuss how you can make a plan in just 5 minutes to provide accessibility in your mobile app.

The Overwhelming Power of Culture

The Overwhelming Power of Culture

When you are maturing and are looking for ways to hone your existing culture, or you believe that there is a problem and are looking for ways to improve, the post-job culture is one extremely impactful place to look.

Make an AI Art Generating Slack Bot in 10 Minutes

Make an AI Art Generating Slack Bot in 10 Minutes

My post this month for Michigan Software Labs covers getting your own AI art generator bot running in a Slack workspace. Using this method, you can get something running that you have 100% control over quickly, as long as you have a computer with an average GPU.

Why I Use NextJS

Why I Use NextJS

My first blog post for Michigan Software Labs is about a tech stack that I use on almost all of my personal website projects: NextJS. I wanted to share the three main reasons why I use it.

Why Have a Blog Strategy?

Why Have a Blog Strategy?

In this post, I wanted to talk about the value a blog can add to your business, and what type of work this can involve. A company blog is a powerful marketing tool that extends not just to clients and prospective candidates, but to the employees as well.

Atomic and Domain Driven React-Native Development

Atomic and Domain Driven React-Native Development

Atomic and Domain Driven development are two practices that seek to decouple, modularize, and create easy to maintain software projects. In this post, I want to share how I’ve combined the spirit of these two methodologies, by taking their best and simplest traits, and apply them to React Native.

Advanced Typescript - Practical Uses for the Compiler API

Advanced Typescript - Practical Uses for the Compiler API

This post seeks to provide a simple, practical use of the Compiler API using native Typescript, and fulfill a specific need I have in my own work through a small project.

Deploying an AWS Lambda Function with Multi-Factor Auth

Deploying an AWS Lambda Function with Multi-Factor Auth

Ive been working more on backend projects after earning my AWS Cloud Practitioner certification, and heres the first of many posts walking through some interesting things Ive learned about AWS Lambda deployments with MFA via the CLI specifically. Thank you to Justin Wheeler for collaborating on this with me!

How to Stop Rambling and Communicate Effectively

How to Stop Rambling and Communicate Effectively

Rambling is a problem I have sometimes when Im uncertain of the goal, or lack confidence in the details. Do you wish you were better at verbal communication? Thank you to Missy Jackson from The Vantage Group, Inc. for contributing her excellent tips for my latest post about communicating more effectively!

Why Wont My Computer Sleep?

Why Wont My Computer Sleep?

This week I had a problem - my computer wouldnt go to sleep, even after shutting the lid. My battery was draining like crazy. There are several reasons this could happen to anyone, and this post is a deep, technical dive into WHY it happens, and HOW to fix it!

How Were Apps Made 40 Years Ago?

How Were Apps Made 40 Years Ago?

What was the first computer you ever used? Mine was a hand-me-down Mac SE 30, and I recently booted it up again to work on it. When I was a kid, I only cared about writing funny stories, playing Mavis Beacon, or trying to get past Oregon Trail demos. But today I wanted to see how people made apps back when this computer was the flagship.

Why Should I Care About Bun?

Why Should I Care About Bun?

Have you heard about Bun in the Node.js world and wanted to try out its touted benefits quickly? Ive got an easy and super fast way to evaluate it via a React app.

Diagnosing Unknown Google Account Linking Errors

Diagnosing Unknown Google Account Linking Errors

This topic came about during a project I was working on with David Whitters, an Embedded Software Engineer at Bissell. David Whitters and I share a great dynamic where his expertise is in the embedded and IoT side, and mine is with the cloud and frontend. Account linking is a special flow for if you need to interact with an IoT device using Google Assistant and a custom backend.

Deploying Next.js to GitHub Pages

Deploying Next.js to GitHub Pages

Next.js is easy to get into using its own getting started guide, however in this post we’re interested in getting a Next.js website deployed to GitHub Pages. I’m going to share my lessons learned and what they don’t tell you about the deployment process.

Solving the Cover Letter Puzzle

Solving the Cover Letter Puzzle

Do you feel like your cover letters are boring, repetitive, or missing something that would help you really stand out from other applications? You can very well go through your cover letter “template” and change a couple key terms and names per company and be happy with that. But if you’re the type of person who sweats the details, wants to be more genuine, and desires to write compelling cover letters, this post is for you.

React Custom Hooks vs. Local State

React Custom Hooks vs. Local State

There’s plenty to be said about Hooks vs. Classes, but this post is going to be hyper-focused on “why” and “when” you should use Custom Hooks instead of Local State.

Why You Should Use the React.FC Type for Components

Why You Should Use the React.FC Type for Components

One of the beauties of Typescript is its strong emphasis on static typing. However, in some areas, this feature gets thrown out in favor of inference. Components are a great example of this—with types often being neglected.

SonarQube + Docker + M1

SonarQube + Docker + M1

Combining all three of these technologies is the reason this post exists. It wasnt super straightforward, because SonarQube has a Docker guide that doesnt work on M1 Macs. This post goes over how to do it.

Soft Productivity for Contractors

Soft Productivity for Contractors

Do you feel like it’s hard to keep track of five email accounts, Slack, Discord, Teams, and whatever that next tool is called that someone convinced your company to use? I have a solution to help out.

Making Discord Bots for the Professional World

Making Discord Bots for the Professional World

Haven’t heard of Discord? It’s the de facto communication tool of the next generation, especially for video games, a myriad of growing communities. This post goes over some ways you can make a practical bot for your community Discord server.

Generate Index Can Save Your Sanity

Generate Index Can Save Your Sanity

When dealing with a complex code base, especially with Javascript, you likely have an index file that just contains a million exports. This post goes over one way to deal with dynamic code generation.

How to Adopt a Continuous Improvement Culture

How to Adopt a Continuous Improvement Culture

Have you ever failed your client, and want to do better? Do problems tend to build up until that final reveal where everyone must account for what went wrong? Do you ever feel like people should communicate better on a project? In this post, I wanted to dive into what a culture of continuous improvement really means, and how to get there.

How to Combine HomeKit with React Native in 10 Minutes

How to Combine HomeKit with React Native in 10 Minutes

This post goes over how to combine HomeKit with React Native in 10 minutes. It covers creating a HomeKit accessory, a HomeKit bridge, and a native module for React Native.