RSSAmplifier

Blog

Paul Armstrong

Paul Armstrong is a senior web application developer, specializing in JavaScript, performance, and developer experience

paularmstrong.devRSS feed ↗37 posts

Latest posts

Bend Bike Rides

I’ve been looking for a way to give back to the cycling community of my town that I love so much for many years, and it’s finally coming together in the form of Bend Bike Rides: a site for the community to see and report trail conditions, gather on group rides, and more. Continue reading…

Code editors are very personal

I just spent far too long trying to bend Zed to my will. It reminded me of how I needed multiple weeks on and off configuring and reconfiguring VSCode to work for me. It is rare that the defaults provided in a code editor work for me. So I tried, and I’ve given up for a few very important (to me) reasons… Continue reading…

Introducing oneRepo: the JavaScript & TypeScript monorepo toolchain for safe, strict, & fast development

I am thrilled to announce the first major version of oneRepo. Many years of experience creating monorepo tooling for high performance frontend, JavaScript, and TypeScript teams at major organizations has led to the creation of this command-line interface, an API, and a toolchain for better, safer, and faster monorepos. Continue reading…

Rust-based JavaScript linters have a major issue

It cannot be denied just how fast Rust-based linters for JavaScript are. The major tools available now are Biome and Oxc , both running at nearly 100x the speed of ESLint. But they have one major drawback and I don’t think they’re going to take over ESLint without it… Continue reading…

There can be only one Array<T>

This little hill I will forever defend. The shorthand syntax for Arrays in TypeScript is unnecessary and unclear. Continue reading…

Review: Things I wanted to see in JavaScript and Frontend development in 2023

Taking a look back at the things I was hoping to see more of in 2023 for JavaScript and frontend development. Continue reading…

App Defaults 2023

Here’s a little trend for 2023 that’s going around: listing out the default apps (and tools!) that I’ve used in 2023. I enjoy this little go around, as I’ve been getting to discover new apps that I might want to try. Continue reading…

We use type safety not on preference, but because we want to make money

A short recounting of the thing that changed my mind forever on strict type checking for JavaScript. Continue reading…

Import path aliasing is a crutch for poor architecture

Path aliasing, sometimes referred to as import or module resolution, in the earliest and most naïve sense, is a method of overloading the Node Require Resolution Algorithm so that it first looks in some particular defined folders for modules of a given name before looking for installed modules of the same name in node_modules folders. While this seems handy at first glance, in practice, it’s is an…

The line between writing functions yourself and using open source modules

When was the last time you stopped to think about the cost of a new third-party package that you’re adding into your process? Where do you recommend balancing between “not invented here” syndrome and using packages just because they exist? I always come back to the “left-pad incident” as an extreme example to avoid the latter, but where should we be drawing the line between the two? Let’s take a…

A clean codebase is a happy codebase

How do so many people just ignore cruft in their projects and keep moving forward? I was fighting with a bunch of package.json files recently that had 10s of dependencies that were completely unused. Why was it left this way? Continue reading…

Why the frontend world ignores Web Components

The problem with Web Components has and always will be that they were designed for the browser and not for the developer. As many features as they get, they’re still ergonomically odd and difficult to maintain. Continue reading…

Things I want to see in JavaScript and Frontend development in 2023

We’re now nearly a month into the year 2023. I’ve started a new job and have been doing a lot of research for new projects and auditing old code. This process has given me time to reflect on what is and is not working – and what I’d like to see going forward this year. Continue reading…

Tips for healthy and useful meetings in tech

I’m a bit of a stickler about meetings. If I can, I like to instill a healthy meeting culture in teams I work with. Not all meetings are bad, but I have some rules that I like to follow to ensure that they don’t become that way. This is my list of tips for keeping meetings healthy and useful. Continue reading…

Lessons learned: how I’d rebuild a social web app like Twitter today

I’ve been thinking back to my time as a core member of the original team that built the Twitter web app. I learned a great many lessons there and thinking through them: How would I rebuild something similar to the Twitter web app today, like a Mastodon or Activity Pub web client? Continue reading…

My biggest technical mistakes (so far)

We all make mistakes in the technical planning process that bubble through to execution. Looking back over the past 10 years or so, these are the two biggest tech &#x26; development mistakes that I think I have made and the lessons that I’ve learned from them. Continue reading…

Using client hints to prevent FARTs with website auto dark mode themes

I originally wanted to avoid using any sort of server-side code for my site, getting around the FART completely is not currently possible when you have a statically generated site. In this post, I’ll walk through how I got rid of the flash of inaccurate color themes for Tailwindcss dark mode (with auto media query support!), building off of some others’ examples using Netlify Edge Functions.…

CSS box-sizing: border-box

I can’t think of any scenario when I do not want box-sizing: border-box; set on every element on my page by default. In fact, I can’t think of the last time that I wanted to use the default content-box method. However, I’ve just come across a major company’s design system that does not use border-box across all elements. Continue reading…

The case for Astro

I built my website with Astro, without having intended to. I often use my own personal site as a test-bed for learning new frameworks and tech. In testing out Astro, it just sort of stuck. As I continued, it became clear why – but the reason isn’t what I thought it would be. Continue reading…

Mourning the loss of Twitter

It is odd to feel this way, I admit. But with Twitter’s new management, I feel like I’m mourning the loss of something that was near and dear to me. Continue reading…

DIY Photo Booth: the nerdy details

I created my own Photo Booth application with Electron, Node.js, React, and Tailwindcss and used a GoPro as a webcam for my wedding instead of renting a commercial booth. It was fun to build and even more fun to use. Continue reading…

Current tool chest

This is a collection of tools and things that I use on a daily basis that I just want to have written down somewhere. Maybe they’re useful for you too. Continue reading…

Technical design starter template

As teams grow, become distributed, and not everyone is able to be involved in every decision, it becomes more important to record what’s happening and why decisions are and were made. From a technical standpoint, “Tech Designs” are a great way to structure this information and keep around long-term for posterity. Continue reading…

Creating a modern wedding website in 2022 Part 2: Setting up the repository and frameworks

Don’t go with those junk off-the-shelf websites with all the upsells on them. Make your wedding website yourself. Continue reading…

New site, who dis?

I needed an escape while stressing about my (previously) upcoming wedding. Having some personal annoyances with how difficult it would be to personalize Docusaurus, I sat down and hacked at Astro for a day and a half. I came up with a fully working static website &#x26; blog in no time. Continue reading…

DIY photobooth

I created my own photobooth application with Electron, Node.js, React, and Tailwindcss and used a GoPro as a webcam for my wedding instead of renting a commercial booth. It was fun to build and even more fun to use. Continue reading…

Hacking express middleware to automatically capture request timeouts

When needing to run a highly available Express server with Node.js and a lot of middleware, it’s important to ensure that you don’t have any runaway processes blocking other requests. In this post, I share an easy wrapper for Express applications to always ensure every middleware is captured in a timeout loop. Continue reading…

Mass shootings

There was a shooting in my town last night. Continue reading…

Creating a modern wedding website in 2022 Part 1: Choosing the tools

This part of the modern wedding website series will cover tools chosen to satisfy requirements of creating a modern wedding website in 2022. Continue reading…

Creating a modern wedding website in 2022: Introduction

Multi-part series documenting how to create a modern realtime RSVP-enabled wedding website using Google Firebase, React, Tailwindcss, and Parcel. Continue reading…

Nine years sober

Continue reading…

Abandoning AMP

Resigning from the AMP Technical Steering Committee Continue reading…

Taking a break from open source

I’ve been sitting on this decision for a long time. It’s not easy to abandon something I have poured a lot of thought, care, time, and effort into. It’s almost like quitting a job… except I never got paid for the job. Open source was, is, and will continue to be the gateway for my entire skillset. Without it, I don’t think I would have ever learned how write software, let alone ever have become a…

Safe Express.js HTML responses without a templating engine

Safely template HTML responses from Node.js and Express.js servers using JavaScript’s built-in templating functions, not giant libraries. Continue reading…

Rubber Ducky Twitch Bot

I was having too much fun playing with Twitch and wanted viewers to be able to help me with “rubber duck debugging”. Continue reading…

Git helpers that I can no longer live without

Working with git can be hard, verbose, and repetitive. I’ve been using this small collection of sh/zsh functions for a few years now and I don’t think I could work without them anymore. Continue reading…

Twitter Lite and High Performance React Progressive Web Apps at Scale

A look into removing common and uncommon performance bottlenecks in one of the worlds largest React.js PWAs, Twitter Lite. Continue reading…