
I back up my Nextcloud AIO and Immich services with local Borg repositories, then sync those repositories to Backblaze B2 with rclone and systemd timers.
Welcome to my blog, a place where creativity and technology come to life. Here, I share my journey through coding, problem-solving, and the stories behind the projects I create.

I back up my Nextcloud AIO and Immich services with local Borg repositories, then sync those repositories to Backblaze B2 with rclone and systemd timers.

I interviewed for a job, poked around their legacy PHP system out of curiosity, and found a decade of security disasters hiding in plain sight.
I turned an old Android phone into a Wake-on-LAN relay. WOLE is an Expo + React Native app that runs a tiny HTTP server as a foreground service, so you can wake your homelab machines from anywhere.
TailwindCSS v4 changed the setup flow. AI coding agents still reach for old config files and deprecated commands, so developers need to check the official docs before accepting setup code.
Disable a laptop's built-in keyboard on Fedora 41 or 42 with a udev rule, so an external keyboard can sit on top without triggering random keypresses.

Find the DPI value behind the MX Master 3 pointer-speed percentage in Logi Options+.

Hide controls when users cannot use them. Disable controls when users need to understand that an action exists but is not available yet.
A guide to asynchronously load Google Fonts in Gatsby using gatsby-plugin-web-font-loader
Quick reference guide for installing and using Terminator terminal emulator on Ubuntu
Fix Ubuntu workspace keybinding conflicts with VSCode by customizing your keyboard shortcuts
Install MongoDB 4.4 on Ubuntu 21.04 and create an administrative database user.
How to fix Google fonts not loading in Nuxt static sites deployed on Netlify
This article describes how to upgrade Gatsby starter blog (or any other gatsby starter template)