Blog

Push Fearlessly with Automated Testing

Move faster by moving slower

Conventional wisdom is that writing tests slows you down, because the alternative is that you don’t need to write tests. In fact, Meta (then Facebook) was famously lacking of automated test inline with it’s famous “move fast and break things” mantra. However, from what I’ve seen, I beg to differ. This is part of a series (The Opinionated Engineer) where I share my strong opinions on engineering practices. When to write tests? If you love something, put a ring test on it. ...

May 4, 2025

The Opinionated Engineer

Strong opinions about engineering practice

Historically, my personal blog has been mostly about “how to do x”, “guide on making y” but never about ideology or engineering practices. This new series intends to change that where I’ll explore the more opinionated side of myself especially around engineering practices instead of just the pure technical stuff. Topics I have not fully planned out the entire series but here are a few topics I have in mind (or have released) so far… ...

May 4, 2025

Self-Hosted GitHub Actions Runners

Turning your old laptops into GARs

This post will focus more on the “why” and some of the quirks around doing so instead of the “how” since GitHub already have a very comprehensive guide around it. Just wanted to take a bit of time to acknowledge that it’s been almost 3 years since I last wrote a blog post. It’s been a busy 3 years for sure but hopefully I’ll be writing more consistently moving forward. (I do have quite a few half-written drafts that I’ve never published which I can’t tell if it’s still relavant at this point.) ...

April 25, 2025

Automated Link Preview Image Card

Taking screenshots with Playwright

A while ago, I saw this tweet thread from Simon Willison about how he added social media preview cards to his TILs. He detailed how he did this through a combination of Puppeteer, Vercel, SQLite, and some other stuff I didn’t understand 😅. At that time, I was manually taking these screenshots by hand to be included as part of the commit, which is to say it’s not very efficient. Anyway, this stayed on my backlog of “things to explore” for a really long time until recently during this long weekend (where I also took additional PTOs), I had some free time and decided to look into this. The goal is simple, automate creating the preview images for a list of given / defined urls. ...

May 31, 2022

Rebuilding Personal Site from Scratch

Only HTML + CSS with no frameworks

As time goes on in my journey of experimenting with different technologies on building a web interface, I figured it’s time for my personal site to return to the fundamentals. So I decided to build it with only HTML + CSS with one of the goals being that it should work perfectly fine with JavaScript disabled. Before this, it’s built with Vue. You can still find the source here. Design Inspiration Skip this next paragraph if you’re not interested in my old site’s origin story. ...

January 31, 2022

Upgrading Vue TS Project (2.x -> 3.x)

Migrating from Parcel to vite

While Vue 3 has been out of beta for quite a while, (as noted on their website) a migration build is still a work in progress so the current advice is to stay with Vue 2 if it’s a non-trivial project. I procrastinated on this article for so long that a migration build has since been released. Feel free to check it out here. That said, as Parcel v1 is no longer maintained (and with v2 supporting only Vue 3), I figured it’s time to upgrade. ...

December 12, 2021

Ava with Vue (2.x) + TypeScript (and NYC)

Component and Unit Testing with Test Coverage

When working on a project with Vue (TypeScript), I faced a lot of roadblocks trying to get code coverage to work. The issue is largely covered in this issue thread. Most solutions / workarounds for that seems to revolve around changing the bundling flow with webpack. Considering my lack of familiarity with webpack (on top of my use of scss and pug in Vue files), putting together a webpack config that works for me turns out to be extremely challenging. That somewhat prompted me to move the build and test process away from vue-cli while starting to experiment with different tools that could work. One thing to note is that, I’ll be using babel to handle TypeScript compiling / transpiling instead of ts-node as recommended from Ava’s guide. ...

May 22, 2021

Multi-language Support Build Tool

Developing with Please

I recently started learning about Go to find out what’s all the hype about. So I figured what’s a better way than to build a project out of it? As I was setting up my machine and going through tutorials step-by-step, I was slightly annoyed by the fact that the development of Go projects are limited to inside the $GOPATH. Personally, I have all my side projects stored at the top level of the computer. It might not be the best way to do it but I’m liking that I can see all my projects at one glance. I guess one could argue that you can soft link the folder into the folder inside $GOPATH and I would pretty much achieve the same effect. But it didn’t quite feel right to me, sounds like a really hacky workaround that might not worth the maintenance cost as I switch to a separate machine only to have to do everything all over again. ...

August 7, 2019