NOTES AFTER HOURS

Practical notes on Linux, small servers, and the web, plus short pieces from after hours.

Recent writing
77 notesBrowse archive

A Code Block Label That Stays Put

Add a language label to Astro's Shiki code blocks with one pseudo-element, and keep it in place while long lines scroll sideways.

3 min read

CSS Columns Masonry Reads in the Wrong Order

A column-count masonry grid shuffles a newest-first post list down each column; a capped CSS grid keeps it in reading order without JavaScript.

4 min read

Tailwind Typography Lost Its Paragraph Spacing

An unlayered CSS reset quietly beat Tailwind Typography's prose styles; cascade layers explain why, and one @layer block fixes it.

4 min read

First Cool Night of the Year

On the first cool evening of autumn, every window in the building opens and the courtyard ends up following one neighbor's piano practice.

2 min read

fail2ban for SSH on Debian 13

Install fail2ban on Debian 13, understand the sshd jail the package already enables, tune bans in a local override, and check, test, and undo bans safely.

6 min read

ufw Without Locking Yourself Out

Set up ufw on a Debian or Ubuntu VPS with SSH allowed first, a timed rollback in case a rule is wrong, and a clear view of the Docker ports ufw cannot see.

6 min read

One Screw, Medium Length

A trip to the corner hardware store to replace a single cabinet screw turns into a careful matching session at the counter.

2 min read

Unattended Upgrades You Can Actually Check

Enable automatic security updates with unattended-upgrades on Debian and Ubuntu, see exactly what it will install, pick a reboot policy, and confirm it really ran.

6 min read

Add a Swap File to a Small VPS

Check memory first, create a swap file that survives reboots, set vm.swappiness with a sysctl drop-in, and remove it cleanly if you change your mind.

6 min read

The Browser Tab I Kept Open for 143 Days

A browser tab holding a walking-trail map survives 143 days of updates and restarts while the trail itself quietly changes.

2 min read

The Laundromat at 2:13 A.M.

A late-night laundry run comes with a washer that needs politeness, a dryer that counts upward, and two socks that belong to nobody.

3 min read

A Safe 90-Second Linux Disk Space Triage

A read-only sequence for finding what filled a Linux server before deleting logs, images, caches, or data you may still need.

3 min read