Skip to main content
My site follows your system default or browser color scheme preferences (using prefers-color-scheme @media query). To switch between light and dark mode, change the appearance configuration:
Operating System
  • macOS: System Preferences > Appearance > Appearance
  • Windows: Settings > Personalization > Colours > Mode
  • Linux: Distro dependent; but for example, in Ubuntu: System Settings > Appearance > Style
  • Android: Settings > Display
  • iOS: Settings > Display & Brightness
Browser
  • Firefox: Settings > General > Appearance > Web Site Appearance
  • Safari: Follows system default
  • Chromium: Settings > Appearance > Theme
BurgeonLab.com logo of a light bulb shaped as a flower in a pot. Naty S (she/her). A tech enthusiast who enjoys blogging with SSGs, tinkering on her computer, and promoting IndieWeb principles. (Elsewhere: Mastodon)

A note is a common IndieWeb post type, akin to a microblog (which you might know as a “tweet” or “toot”). This page displays a feed of these short, title-less entries, which usually feature brief entries like quick thoughts or replies presented in reverse chronological order (newest first). Notes are managed via Indiekit and are syndicated to Mastodon as indicated on the /⁠firehose page. Likes are on a separate /⁠likes feed.

Each note entry has a permalink accessible via the date link where you can upvote and make comments.

This is work in progress.

Follow the blog with RSS/Atom feeds Follow with your feed reader!

Subscribe to the dedicated microblog feed or discover other feeds.

Badge button for BurgeonLab's microblogs feed

Microblogs

Writing Break and WP Migration

Writing Break and WP Migration

I’m still mentally recovering from Blaugust. 😅 During this writing break, instead of writing words, I’m writing HTML, CSS, JS and even some TypeScript/React Components (that’s for Quartz, which is confusing as hell TBH!)

Site Updates

On this site, last week I fixed:

  • Word count calculation mistake on the statistics page
  • Dreaded FOUC issue (not the first time)
    • Fixed by removing the media="print" onload="this.media='all'" trick
  • New SVG image shortcode (used to add the two SVGs in my Blaugust 2026 recap post)
    • This SVG image highlighted a XML bug I had which cut my full-text content short—which is fixed now!
    • And another XML bug (thanks Chris for reporting) fixed for full-content disappearing after <figure> code blocks.
  • Refreshed the RSS/Atom feeds table on /⁠subscribe
  • Saved the KeepAndroidOpen banner script (trimmed unused styles) locally, so it doesn’t require third party access.
  • Fixed date parsing error in JSON-LD schema
  • Updated my beloved heatmap calendar rather significantly:
    • Instead of just including content over 300 words, it now include all activity
    • Days with multiple entries are depicted with a circle
    • Moved the calendar to the homepage
    • New group for very short content (under 100 words)

Heatmap Calendar

The calendar feature is one of my absolute favorite things on BurgeonLab. ⁂ I actually need to update my guide and share the docs + source code which got abandoned part way. Definitely something I want to accomplish but I have too many things I want to do! 😅

Quartz Digital Garden Updates

A big task I’m working on in the last few days is to deploy my Quartz digital garden secondary site, as my Hostinger WordPress plan has expired yesterday. I have to admit I left it a bit late; I was ironing out the final kinks.

It is taking longer than expected with my complete lack of experience with TS overrides and custom .TS and .TSX files to automate OG images, for example. I don’t really like how heavy the backend is with Quartz and as Lesley (a fellow Indieweb blogger who also uses Quartz) pointed out, it is not as customizable compared to other static site generators and can lead to repeated headaches from Git merge conflicts every time updates are fetched upstream.

Possible Downsides of Quartz

This is indeed wise advice as I find both statements very true—I already had one of those Git merge nightmares having not updated for two months… But alas, I am going to push on because I already changed my mind three times (!?) after deciding to leave WordPress; I was set on ClassicPress (with SemPress theme) at first, then went to Zensical, and now Quartz.

Obsidian Prep

I proceeded to creating a fresh new Obsidian vault for my public digital garden site. Starting from scratch was very refreshing, with no plugins and default settings for everything! It wasn’t long before I reinstalled Templater though as I find the ‘Create note from template’ hotkey indispensable. I made two new templates with Quartz in mind, where I am trying to create a path of least resistance so that publishing to it will be as simple as possible.

Deploying Quartz

What remains is how the site will be deployed. I might rely on SourceHut Builds like how I deploy this site (on git push) or on some sort of crontab so that it is automated. The Obsidian vault (Markdown content) will likely be synced to my Android mobile device via Syncthing so that I can access the notes and write anywhere.

But Deployment and CI/CD is not yet the main issue as I’m facing some hosting/routing issues which I shared in yesterday’s note after migrating the “live” domain to Bunny.net Storage.

Anyhow, I hope I can sort it out soon and get into writing mode, as I really look forward to making notes for my new digital garden!

Screenshot of the about page at Naty's Eclectic Passions. Left sidebar shows directory, center shows About page title with dithered image of the author, right sidebar shows table of contents. The page has a general Quartz layout, with dark mode turned on (with a green/orange/yellow theme).
A peek of what it looks like

Bunny Edge Rules for Quartz and New Supporter

Bunny Edge Rules for Quartz and New Supporter

Thank you, kind stranger, who used my Bunny.net referral code on August 30, 2026! You’re my second successful referral to one of my favourite web services. Appreciate you supporting my web hosting fees.

Screenshot of a line graph showing 1 conversion on August 30 2026
Hope you like it as much as I do! 🥰🙏

Quartz SSG with Bunny Storage

I actually just migrated my secondary WordPress site from Hostinger to Bunny Storage and working on getting the routing working because Quartz outputs its HTML files a particular way which I am not used to (it is in two different formats):

  1. Flat .html files for everything e.g. public/about.html
  2. Directory index.html for all folder pages e.g. public/blog/index.html

Since I’m not hosting the site on a web server with Nginx or Caddy, this means that I have to rely on Bunny Edge Rules to add some functionality. Edge Rules was always (and still is to be honest) a bit confusing to me, but they’re super useful as they can do things like Override Origin URL (an action) that is triggered by different filters (aka condition).

For example, an Edge rule I have is to add .html suffix to the Origin URL <origin-url>{{path}}.html when it’s any page that doesn’t have a file extension AND NOT the homepage.

This works for everything except folder directory pages. In the case of the link to the blog archive, going to .com/blog with the above Edge Rule, it will apply the override origin URL and it becomes .com/blog.html which leads to a 404 page not found. The page is actually at .com/blog/index.html.

At the moment, I have only two folder directory pages: /notes and /blog, which is easy enough to add as a Edge Rule first (priority matters) before the “Add .html suffix rule”. It does the same Action of “Override Origin URL” but adds /index.html suffix instead of just .html, <origin-url>{{path}}/index.html when the Request URL is either <hostname>/blog or <hostname>/notes.

The problem is that if I eventually develop the digital garden, I will have more than just two directory / folder pages. I wouldn’t want to keep modifying the rule just to make sure the directory pages don’t 404.

I actually sent a support ticket to see what the Bunny team suggests. Perhaps they will say Middleware scripts (which I have zero experience in) or some wildcard directory filter? I certainly hope it can be worked around somehow!

Update

I’ve written a guide on how to fix this issue, with indeed a Middleware Edge script, in the end. Hope it’s helpful for future Quartz users.

D2 Diagrams Lives On

D2 Diagrams Lives On

One of my favorite open source tools, D2: Declarative Diagramming, is now under Hack Club! This makes D2 a fully open source and non-profit project. Thank you Alex for making this awesome tool available for everyone in the long run.

I’m really thrilled because there was some concern about whether or not this amazing project is still alive over at GitHub discussions (similarly on Discord). Sometime last month(?), I remember seeing Alex respond on Discord that he’s in the final stages of getting D2 into Hack Club… and it’s finally complete! I appreciate Alex’s take on AI in relation to D2 too that he mentions in the announcement (link below). Hope the codebase stays a “healthy dose of human”.

Personally, I was a tad bit concerned about the future of this project that I have become dependent on. I would have hated if I had to change tools because I’ve invested time to learning how D2 works and got my workflow all set up. That’s the underlying risk I guess for relying too heavily on any single tool…

In case you didn’t know, there is a VSCodium / VSCode extension and also an Obsidian plugin that is handy when testing different styles and working on .D2 files as it generates the image in real-time. Coming from Mermaid JS which is perhaps the more popular diagramming language, I was grateful that both apps I use daily (Obsidian and VSCodium) both have official D2 plugins.

All my Open Graph images on this site are created with D2 and I’ve started using it instead of Mermaid for flow chart diagrams in posts that benefit from a visual representation (⁂ will convert existing diagrams when I have time). I think it is a better tool than Mermaid (especially when Mermaid is pushing AI straight in your face). Not to mention the syntax is easier to grasp! Highly recommend playing around with it if you’re looking for a diagramming language.

Blaugust 2026: Final Word

Blaugust 2026: Final Word

James, a fellow blogger and friend, kindly offered me a chance to guest post on his blog: with words, wonder, so that I could tick off one more task in the Community Builder award list. This means I achieved the goal! I will try to contribute more to the Blaugust community next year for sure. Thank you, James for the opportunity!

If you want to read my guest post, it’s on James’s site now: Chinese Idioms (Guest post by Naty). Do check out all the great writing on his blog while you’re there!

This note is definitely the last post of Blaugust2026! Good night y’all.

Some Thoughts on Advice

Some Thoughts on Advice

This post is in response to Blaugust2026 Week 5’s Group Project:

What is the best piece of advice you’ve ever been given? What is the best advice you’ve ever given to someone else?

Best Advice Received

It’s hard to think of a single piece of advice that overrules all the rest, but here are some that I follow:

  • “This too shall pass.”
    • Try to zoom out and look at the big picture once in a while.
  • “You can’t rush life; everyone is running on their own individual timeline.”
    • Also, try not to compare yourself to others.
  • “The most trustworthy and reliable friend is yourself.”
    • If you need to vent about someone or something; try writing it down in a journal and reviewing it once you’ve calmed down. You never know if one day your “best friend” might no longer be a friend and now they know all your “secrets”.
  • “Don’t be dependent on others.”
    • Learn to be happy being alone, stay independent, and try to solve your own problems (but ask for guidance when you genuinely need it).
  • “Great achievements come in tiny steps.”
    • Break down big tasks into bite-sized ones and make completing tasks a habit to achieve your goals.

Best Advice Given

I wouldn’t call my advice the “best” by any means, but I’ve given it to more than one person, so I’ll share it here:

  • “Instead of putting things you want to do in a bucket list, time block them into your calendar.”
    • Seeing the task in your calendar can help motivate you to complete the task.
  • “Make everything important a habit.”
    • Humans are creatures of habit. If you want to accomplish something long term, make it a routine. Use a habit tracker to help you get started with reminders; after about a month, it should become ingrained in your daily routine.
  • “Listen and think before you speak.”
    • Personally, I am more of a listener and I believe the act of listening and thinking is more important than the actual expression.
  • “Step out of your comfort zone often.”
    • It gives us a chance to grow, toughen up, challenges us to problem-solve, and improve as a person.
  • “Remember to love yourself.”
    • Some people (especially carers) forget to look after themselves after giving all their energy loving others.
  • “Check what free resources are available at your local library.”
    • In HK, the public library is free for all citizens and I find the e-resources to be super useful. It is perfect for self-improvement and learning, or even just casual reading. Taking all those short moments in the day, where nothing too productive can be done like queuing or commuting, to read is a great use of time in my opinion! Never stop learning. 📚

Thoughts on Advice in General

Both giving and taking advice is an art in itself. A giver of advice needs to be mindful of the situation of the receiver, not being forceful, ensuring the advice isn’t bad which might make matters worse. A receiver of advice needs to know how to adapt it to their own circumstances, understand that not every piece of advice applies to them, and not to follow advice blindly.

Sometimes though, when a friend comes to you for “advice”; they might just need a safe space for you to listen empathetically and can work it out themselves. At the end of the day, advice is a very subjective thing, and the quality can be extremely variable based on the amount of life experiences one has had—which is why I tend to err on the conservative side of giving advice: give it only when explicitly asked.

Starting Over With the Pi

Starting Over With the Pi

Since Oct of last year, I haven’t had time to reinstate my self-hosted apps like Calibre, Miniflux, Navidrome, etc on my little Pi homelab. During this time, I missed using Navidrome the most (I resorted to listening only on my Mac); with the only thing running on it being Indiekit with Docker.

Neater Installs

But that changed yesterday! After chatting with a new sysadmin friend online, I got a huge surge of motivation to fix my home server to at least what I had before. My previous setup was pretty horrendous to be honest, I didn’t know any better, and the whole Pi was in a disarray of software installed either by:

Docker Management

This time, I am setting up everything in containers with compose files. I am also dropping Portainer for just Lazydocker in the meantime. Portainer felt too heavy for me. TBH, I want to try using Dokploy but not sure if it’s an overkill doing beginner homelab things on my 8GB Pi (it only requires 2GB RAM and 30GB storage which my Pi meets). Arcane is also on my radar.

I can’t find much on people using Dokploy with Raspberry Pis except for this post by Mariano (but they didn’t specify what spec Pi they have). They also run DietPi so that’s nice to know!

Homelab Start Page

My choice of dashboard will remain with Homer as I already had the config set and don’t want to waste time customizing. I still have about four more services I have to restore—but everything is going well so far. I now know how to use Caddy to manage the services with ports mapping to the individual containers and everything will be available within my Tailnet.

When I tried working on this headless Pi project the first time, I didn’t know how to access the server outside from home. With Tailscale and Caddy this time round, I’m very happy to get access when I’m not home!

Restoring Files on the Pi

Back in the day, when I first started messing with the Pi 4B, I was hoping to transfer files directly via USB onto the USB SATA SSD boot drive from my Mac (my primary computer). But super newbie me didn’t realize that ext4 is not compatible on Macs. Rsync saves the day! With my much better Internet connection now (LAN directly from my Mac Mini to the Pi), I can very easily copy directories over with no hassle. For example, my top-level music folder was copied over from my Mac to the Pi using: rsync -avz --progress -e "ssh -p <custom_port_num>" "/mac/path/to/music/" username@<pi_IP_address>:/mnt/dietpi_userdata/music/.

Remember to always add an -n (dry run) flag to double-check before running such tasks. Last night, I let it run overnight, and it copied around 200GB of music over—no problem! I was too excited and forgot to check when it finish / how long it took in total though. :P

Other than using rsync I also like using Syncthing. So I got the Pi and folders setup again so that I have a “dropbox” folder on my Mac that can quickly share files to the Pi and vice versa.

Closing

Self-hosting is a great way to learn and I personally find it extremely rewarding. Being able to run things on hardware you own (or a subscription to a VPS) and having full access and control of where your data lives is incredible. That’s the reason I got into it in the first place.

Nowadays, with the RAMpocalypse, it doesn’t really make sense though to buy a Pi to tinker with since everything is so expensive now. But if you have existing hardware though, I highly recommend you playing with some Docker containers, or even Kubernetes / Ansible if you like that kinda stack more (I don’t know much about those, but one day I want to try!) My favourite place to discover services to self-host is this awesome-list.

If you want to read about my beginnings with homelabbing, see my first post in the Homelab Beginner series: Booting a Pi with SSD.

That’s all the updates I have on my homelab situation. I will finish setting up the rest of the services soon and the next thing will probably to try either Arcane or Dokploy to see if the Pi can cope with the extra burden. A nice monitoring app would be nice too, but there are so many to choose from (Grafana, Prometheus, Uptime Kuma)? What is your favourite monitoring dashboard?

Mac Mini 2018 i7 Hand-me-down

Mac Mini 2018 i7 Hand-me-down

I’m really excited because a mutual friend said they’re willing to give me their retired 2018 Mac Mini (which was originally used for music production). What’s extremely exciting is the fact it’s a maxed out model with 64GB DDR4 RAM (I’ve never owned a computer with over 16GB of RAM!) with 2TB SSD. Feeling extremely grateful for his generosity. 🥰

Did a quick search to see some issues about the T2 security chip maybe affecting the installation of Linux though so I need to research a lot more. It won’t be in my hands until October, so I have some time. I installed Linux Mint on my old 2012 Macbook Air 13" (maxed out spec) with no issues but that one doesn’t have the T2 chip.

Running Linux on Mac hardware has been a wonderful experience on the MBA; although the battery is dead (need to use it plugged in at all times), there’s no bulging physically and the system runs super smoothly. Sure there’s some fan noise and it gets a bit warm, but if I’m just doing some basic web dev stuff like IDE + browser + hugo server, I don’t feel any throttling whatsoever with the 8GB RAM.

The Mac Mini M1 2020 I’m using for the last few years with 16GB RAM is often hitting yellow memory limits. Perhaps it is the way Apple Silicon works, but I feel 16GB is not enough for me to do photo editing and sometimes my many tabs (hundreds) causes it to hit memory swap. This “new” 2018 Mac Mini should feel extra powerful with 64GB RAM!

This gift is a dream come true for a person interested in self-hosting; I can’t wait to learn and do much more than the little Raspberry Pi 4B 8GB since the journey started (TBH it’s been very good for me and I’ve never hit limits). I really like reviving and using old tech hardware because it makes me feel like I’m pushing the boundaries of what it is designed to do and reducing e-waste is always a good thing!

Of course, when it arrives, I’ll be blogging about it! I’m thinking what distro to install/dual-boot… I am most familiar with Linux Mint (Ubuntu-based) and DietPi OS (Debian-based). Is it worth trying a new distro like Arch/CachyOS or completely different like NixOS?

Just a few weeks ago I was tempted to subscribe to my first VPS (again), but I think with this little powerhouse coming; I will refrain. Do you use any of these or have a preference of distros for running a home server? If you had such hardware, what would you want to self host? I’m all ears! 🙏

Resources

About the Revamp

About the Revamp

If you’ve been to my site before—you may have noticed a bit of a change since yesterday.

Last night, I pushed a lot of features and stylistic changes to my site (over 100 commits?!) It was long overdue and I’m feeling happy I got it done (but not too happy it was done in the month of August when I should have been focused more on writing for Blaugust). The style choices takes from some of the decisions made at the beginning of the year. I want to remain true to the current theme because I’ve grown to love it.

Even though I didn’t get to work the 100% CSS rewrite I keep meaning to do (it’s horribly messy & override hell due to previously not forking the Hugo theme), I did manage to cut out a lot of wrong use of selectors, simplify rules, and also worked on repeating myself less in the HTML partials used around the site.

I think everything should be working but if anything is broken, I’ll be super thankful if you’d let me know!

Features and Style Changes

The changelog will be updated soon with before / after screenshots. In the mean time, here are most of the changes, in no particular order:

  • Completely revamp the top section of pages: link to return to previous section, H1, and metadata. Date, tags, word count and read time is now hidden in a details element (with the table of content also in there if the page has TOC turned on)
  • New arrow icons with pixelated design by Pinhead
  • Remove JS dependency for light/dark mode! This was a big change. Now using prefers-color-theme
  • Remove drop down menu on top navigation; use an anchor link instead, that opens a details element on the home page which acts like a quick menu
  • Improve look of sparklines on the stats page
  • New 404 page
  • New layout (2x2 grid) for latest weeknotes and blog section on homepage
  • New ‘Cite this page’ link popover instead of distracting share buttons inside the page metadata details element or at the start of the footer (if the page doesn’t have have a metadata section)
  • New simplified admonition styles (reduced a lot of redundant CSS!)
  • Improve a11y by reducing the colour contrast overall on the site (both themes), from 12 to ~7 contrast ratio
  • Simplify ‘Responses’ and ‘Support’ sections
  • Use page template for single notes (example)

Bug Fixes

  • Bullet point now shows at the first row of multi-line list items
  • ‘Phantom’ hover styles on mobile fixed with @media (hover: hover) and (pointer: fine)
  • Content layout shift (CLS) reduced for iine upvote button partial by setting height explicitly

Pending

  • After removing the JS light/dark mode, I noticed a bit of FOUC; which will take me some time to figure out the cause

Closing

What triggered me do do this much change? I gather it was mainly because 1) the drop down menu getting overly long and 2) the great eye opening page Chris created about HTML. I think the 404 page is my favourite change and the second being the minimal metadata + table of contents. What do you like or dislike? Let me know! 😉

Now that this is done and dusted, I better get back to Blaugust and catch up before the end of the month!

Re: The Loss of Links Continues

Came across Trevor’s post about link rot last week. The topic of fixing broken links on our websites is pops up occasionally at Homebrew Website Club meetings. I never really investigated how I could check every link efficiently on my Hugo site locally (not relying on third-party services). Since I have a Python script that checks for orphan pages (internal site pages that are unlinked, which I have written about before), I had an idea.

Since the orphan page checker Python script is doing something similar (scraping all links and analyzing them), I decided to tweak it to check if any pages lead to a 404 (or in fact, anything other than 200). Happy to report that I’ve got a local workflow now to check for link validity on my site!

The script visits all external links on my site, outputs a .txt file with all the problematic links; for example here, Pablo updated his URL slug pattern which caused the 404:

Screenshot of some text saying a link has a 404 error code and which page the problem link is located.
Seems like Pablo has changed his URL slug pattern!

I went through each 404 error (about 40 or so), searching for the new permalink, and updated all of them. If a page wasn’t live any more, I tried going to the Internet Archive for a snapshot, and use a link to that instead (with a footnote about making the change and on what date). There were also a lot of 403 errors which were Cloudflare’s CAPTCHA solver / “confirm you’re not a bot” pages. I don’t think is necessary for me to know this, so I might just focus on 404 and 301 (permanent redirect) and update the script for a cleaner output.

Quite happy with this relatively easy way to keep links alive on my site! If I do it routinely (once every month), it should be a low effort task. Perhaps I should do what Trevor did and do some data collection over the years… How do you keep your links from rotting?

Resources

Hot Weather Effects

Hot Weather Effects

The temperatures are stifling, with an ongoing record-breaking heatwave due to the effect of nearby typhoons with temperatures reaching 38°C in some areas of HK. Indoor temperature when the AC is off reached 39°C in my room despite cross airflow from fans and opened windows.

Air Conditioning

I’ve always been a person who tries to reduce air-con use when I can, inspired by the infamous HK meteorologist and environmentalist, the ex-Hong Kong Observatory Director Lam Chiu Ying, who uses only fans to keep his home cool.

Because I tend to get cold easily, being in an air conditioned place for long periods doesn’t exactly feel good to me. Fans, windows, and the dehumidifier are my friends. If only lüften would bring in some cooler fresh air in the mornings… because it doesn’t in this kind of weather; the temperatures overnight remain high.

There are huge, undeniable consequences of global warming and climate change. Persistent, unrelenting high temperatures cause damage to the wel-being and health of everyone—both physically and mentally. I hope everyone stays cool, hydrated, and aware of the dangers of the scorching heat!

General Tips

  • Make use of evaporation to cool down by misting
  • Try to get some crosswind air flow going
  • If possible, use a dehumidifier to dry the environment as it helps with evaporation of sweat, cooling the body
  • Get some reusable ice packs to help the body cool down initially when going to sleep, around the neck, forehead, or under armpits
  • A fan near the end of the bed that oscillates can help cool the feet/lower extremities
  • Consider getting some window films that help block heat from entering the home and close the blinds/curtains
  • Turn off unused electrical appliances as they generate heat
  • Have a few more cold water showers during the day
  • Get some isotonic sport drinks or oral rehydration salts for when sweating becomes excessive to replenish salts lost
  • If you start to have symptoms of heat stroke, please get help immediately—it can be life threatening.

Further Reading


Read about upvotes.

Sparkline data: note posting velocity (learn more).

Enter keyword (use "quotes" to find exact term):