<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>field notes on Sean Wong</title><link>https://seanwong.xyz/notes/</link><description>Recent content in field notes on Sean Wong</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 28 Jul 2026 09:00:00 -0700</lastBuildDate><atom:link href="https://seanwong.xyz/notes/index.xml" rel="self" type="application/rss+xml"/><item><title>The part of my RAG project that refuses to answer</title><link>https://seanwong.xyz/notes/refusing-to-answer/</link><pubDate>Tue, 28 Jul 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/refusing-to-answer/</guid><description>&lt;p&gt;Everyone building with LLMs right now is optimizing for the confident, helpful answer. I spent the last few weeks optimizing for the opposite: getting my system to shut up when it doesn&amp;rsquo;t actually know.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Refusal is a first-class result&lt;/strong&gt;, not an error path — build your system to say &amp;ldquo;no good match&amp;rdquo; instead of forcing a weak one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your threshold is probably a guess&lt;/strong&gt; — a 9-pair eval set moved my refusal accuracy from 62% to 89%&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A perfect score you can&amp;rsquo;t reproduce is luck, not proof&lt;/strong&gt; — non-deterministic generation means single-run metrics can mislead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ship the negative result&lt;/strong&gt; — a failed experiment with a known mechanism is still knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="a-retrieval-system-always-has-an-answer-for-you"&gt;A retrieval system always has an answer for you&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://seanwong.xyz/projects/research-bridge/"&gt;ResearchBridge&lt;/a&gt; is a side project that matches pre-med students to research and volunteer opportunities by semantic similarity, then writes a grounded explanation of why each one fits. It&amp;rsquo;s not a medical system. The &amp;ldquo;health&amp;rdquo; part is just that the users are pre-med. Underneath, the engineering is the same shape as any RAG problem: given a query and a corpus, when do you trust the match?&lt;/p&gt;</description></item><item><title>Adding Remote Access to a Home Server, Carefully</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-15/</link><pubDate>Mon, 27 Jul 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-15/</guid><description>&lt;h2 id="reaching-the-server-from-outside-without-opening-the-front-door"&gt;Reaching the server from outside, without opening the front door&lt;/h2&gt;
&lt;p&gt;The whole point of this series has been a quiet, LAN-only home server. Everything lives on my local network, nothing is exposed to the internet, and that&amp;rsquo;s a feature, not a limitation. But there are a few honest moments where I want my photos or documents while I&amp;rsquo;m away from home, and I don&amp;rsquo;t want to drive back to grab them.&lt;/p&gt;</description></item><item><title>Backing Up a Home Server Before You Trust It</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-14/</link><pubDate>Wed, 22 Jul 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-14/</guid><description>&lt;h2 id="when-the-server-stops-being-a-toy"&gt;When the server stops being a toy&lt;/h2&gt;
&lt;p&gt;For the early parts of this series, my home server was basically a sandbox. If it broke, I&amp;rsquo;d shrug, rebuild it, and learn something. That attitude was fine while everything on it was replaceable. It stopped being fine the moment Immich held the only copy of some phone videos and Paperless held scanned documents I&amp;rsquo;d shredded the originals of.&lt;/p&gt;
&lt;p&gt;A home server becomes real when you stop treating it like a toy and start protecting the data. So before I go any further, I want backups I actually trust. Not a vague intention to &amp;ldquo;set that up someday.&amp;rdquo; An actual job that runs, lands somewhere safe, and has been tested.&lt;/p&gt;</description></item><item><title>Digital Minimalism as a Config File</title><link>https://seanwong.xyz/notes/digital-minimalism-as-a-config-file/</link><pubDate>Mon, 13 Jul 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/digital-minimalism-as-a-config-file/</guid><description>&lt;h2 id="willpower-is-a-bad-place-to-keep-your-boundaries"&gt;Willpower is a bad place to keep your boundaries&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve installed most of the popular app blockers at one point or another. The breathing-pause apps, the unlock-delay apps, the ones that make you wait five seconds and confirm you really meant it. They all worked for about two weeks. Then the friction faded into a reflex, my thumb learned the rhythm of tapping through the delay, and I was back where I started, now with an app congratulating me for &amp;ldquo;intentional usage&amp;rdquo; while I doom-scrolled exactly as before. The problem wasn&amp;rsquo;t the apps. It was that they put the decision in the same place it always failed: my willpower, in the worst possible moment to be relying on it.&lt;/p&gt;</description></item><item><title>Self-Hosting an Ebook Library So I Don't Rent My Books</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-13/</link><pubDate>Sun, 05 Jul 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-13/</guid><description>&lt;h2 id="the-last-media-i-was-still-renting"&gt;The last media I was still renting&lt;/h2&gt;
&lt;p&gt;Right after I &lt;a href="https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-12/"&gt;brought my music home&lt;/a&gt;, books moved to the top of the list. They&amp;rsquo;d been nagging at me for a while: of everything I read, watch, and listen to, my reading was the one corner still scattered across accounts I didn&amp;rsquo;t control.&lt;/p&gt;
&lt;p&gt;My photos, documents, music, and video all live in tools I chose now, but my books were spread across a Kindle account, Apple Books, and a Kobo that wanted me to sign in. An ebook library is exactly the kind of owned default this whole project is about, so it was an easy next service to earn its spot on the laptop.&lt;/p&gt;</description></item><item><title>A Lossless Music Library That Lives on My Own Server</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-12/</link><pubDate>Sun, 28 Jun 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-12/</guid><description>&lt;h2 id="the-service-that-was-overdue"&gt;The service that was overdue&lt;/h2&gt;
&lt;p&gt;The laptop hums in the corner, quietly earning its keep, and I&amp;rsquo;d stopped reaching for cloud apps out of habit. So the server kept doing what it keeps doing and earned one more service, and this one had been waiting longer than any of the others. Music is the hobby I&amp;rsquo;ve put the most hours into, and somehow it was the last media I hadn&amp;rsquo;t brought home. Time to fix that.&lt;/p&gt;</description></item><item><title>What I Would Do Differently Self-Hosting From Scratch</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-11/</link><pubDate>Sun, 21 Jun 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-11/</guid><description>&lt;h2 id="a-checkpoint-not-a-victory-lap"&gt;A checkpoint, not a victory lap&lt;/h2&gt;
&lt;p&gt;Ten parts in, the core build works. It&amp;rsquo;s quiet, it&amp;rsquo;s mostly local, and it does what I wanted: keeps my media, photos, and documents in tools I chose. But &amp;ldquo;it works&amp;rdquo; hides a lot of small detours I took to get here. The best lessons from this whole project didn&amp;rsquo;t come from the big wins. They came from the little annoyances and rough edges I created early and had to clean up later.&lt;/p&gt;</description></item><item><title>The Glucose Diaries: What My CGM Revealed About My Biology</title><link>https://seanwong.xyz/notes/the-glucose-diaries/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid>https://seanwong.xyz/notes/the-glucose-diaries/</guid><description>&lt;p&gt;I&amp;rsquo;m not diabetic. I don&amp;rsquo;t have prediabetes. I wore a continuous glucose monitor for six weeks because I was curious — and because I have enough of a biology background to suspect the data would be interesting.&lt;/p&gt;
&lt;p&gt;It was.&lt;/p&gt;
&lt;p&gt;Nine thousand, five hundred and fifteen readings later, I&amp;rsquo;ve got a dataset that tells stories I never expected to see about my own body. The most surprising one? My glucose &lt;em&gt;rises&lt;/em&gt; during weightlifting and &lt;em&gt;falls&lt;/em&gt; during a run, and those two facts trace back to completely different physiological mechanisms. My liver was doing things I&amp;rsquo;d read about in textbooks and never thought I&amp;rsquo;d actually observe in myself.&lt;/p&gt;</description></item><item><title>Friction Can Be a Feature</title><link>https://seanwong.xyz/notes/friction-can-be-a-feature/</link><pubDate>Mon, 15 Jun 2026 09:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/friction-can-be-a-feature/</guid><description>&lt;h2 id="the-case-for-slowing-things-down-on-purpose"&gt;The case for slowing things down on purpose&lt;/h2&gt;
&lt;p&gt;Most digital design treats friction as a bug. I&amp;rsquo;ve come to think some of it is a feature. A pause before an action, a tool that makes you wait, a step you can&amp;rsquo;t skip — these are usually filed under &amp;ldquo;bad UX.&amp;rdquo; But the same delay that annoys you out of a compulsive tap is the delay that hands you back a choice. The thesis here is simple: make important work easier, and make compulsive consumption slower.&lt;/p&gt;</description></item><item><title>Automating Music Discovery With an LLM and yt-dlp</title><link>https://seanwong.xyz/notes/automating-music-discovery-with-an-llm/</link><pubDate>Sat, 06 Jun 2026 09:14:00 -0700</pubDate><guid>https://seanwong.xyz/notes/automating-music-discovery-with-an-llm/</guid><description>&lt;h2 id="i-wanted-my-favorite-hobby-to-come-with-me"&gt;I wanted my favorite hobby to come with me&lt;/h2&gt;
&lt;p&gt;Music has been the one hobby that never left. It&amp;rsquo;s the thing I put real hours into, the soundtrack to everything else — and the part I love most is the hunt: turning up a track I&amp;rsquo;ve never heard and knowing, a few seconds in, that it&amp;rsquo;s a keeper.&lt;/p&gt;
&lt;p&gt;I wanted that hunt to come with me — to happen on a walk, in the kitchen, on the train. The finding is the fun part; I just wanted it to travel.&lt;/p&gt;</description></item><item><title>Minimal Linux on a ThinkPad X260 with Debian and dwm</title><link>https://seanwong.xyz/notes/pimp-my-laptop/</link><pubDate>Sun, 24 May 2026 00:00:00 -0700</pubDate><guid>https://seanwong.xyz/notes/pimp-my-laptop/</guid><description>&lt;p&gt;I wanted a laptop that felt like mine again.&lt;/p&gt;
&lt;p&gt;Not a laptop buried under vendor defaults. Not a machine full of apps I never opened. Not a desktop that made every simple action feel like it had to pass through three layers of settings menus first. I wanted something plain, fast, keyboard-driven, and easy to understand.&lt;/p&gt;
&lt;p&gt;So I took a Lenovo ThinkPad X260 and decided to pimp it out the way I wanted: Debian Minimal, suckless tools, a black/red ThinkPad-inspired theme, a custom wallpaper, a tiny status bar, and dotfiles I could actually read.&lt;/p&gt;</description></item><item><title>Local-First Media: Self-Hosting Without Infinite Feeds</title><link>https://seanwong.xyz/notes/local-first-media-diet/</link><pubDate>Mon, 11 May 2026 18:47:08 -0800</pubDate><guid>https://seanwong.xyz/notes/local-first-media-diet/</guid><description>&lt;h2 id="why-im-building-a-local-first-media-diet"&gt;Why I’m Building a Local-First Media Diet&lt;/h2&gt;
&lt;p&gt;When most people hear “self-hosting media,” they imagine a technical hobby. A personal Netflix server. A way to store movies. A fun excuse to tinker with hardware. That is part of it. But for me, the real goal is much more important. I am not building a home server so I can own more media. I am building it so I can choose what reaches my attention by default.&lt;/p&gt;</description></item><item><title>Using Pi-hole and Caddy for Local HTTPS URLs</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-10/</link><pubDate>Sat, 02 May 2026 20:26:45 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-10/</guid><description>&lt;p&gt;So far in this series, most of my services have been running fine on the LAN, but I’ve still been opening them the ugly way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://192.168.1.50:8096&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://192.168.1.50:13378&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://192.168.1.50:2283&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It works, but it gets annoying fast. I don’t want to memorize ports, and typing IP addresses into the browser every time makes the setup feel more hacked together than it really is.&lt;/p&gt;
&lt;p&gt;In this post, I clean that up with two pieces:&lt;/p&gt;</description></item><item><title>Setting Up Homepage as a Home Server Dashboard</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-9/</link><pubDate>Sat, 25 Apr 2026 20:57:45 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-9/</guid><description>&lt;h2 id="hosting-homepage-with-docker"&gt;Hosting Homepage with Docker&lt;/h2&gt;
&lt;p&gt;In the earlier posts in this series, I add a few services (Jellyfin, Audiobookshelf, etc.). At some point, typing IPs and ports starts to feel like juggling. This post is where I add Homepage — a clean dashboard that lives at one LAN URL and links out to everything else.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What this solves&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gives the home server one dashboard instead of scattered bookmarks.&lt;/li&gt;
&lt;li&gt;Links directly to each LAN service.&lt;/li&gt;
&lt;li&gt;Shows basic server resource info at a glance.&lt;/li&gt;
&lt;li&gt;Makes the setup feel like one system instead of separate experiments.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-create-folders"&gt;1. Create folders&lt;/h2&gt;
&lt;p&gt;I keep service configs under &lt;code&gt;/srv/appdata/&lt;/code&gt;, so I make a spot for Homepage.&lt;/p&gt;</description></item><item><title>Automating YouTube Downloads with yt-dlp and systemd</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-8/</link><pubDate>Sat, 18 Apr 2026 20:03:26 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-8/</guid><description>&lt;h2 id="getting-past-the-youtube-infinite-scroll"&gt;Getting Past the YouTube Infinite Scroll&lt;/h2&gt;
&lt;p&gt;In the previous posts, I set up my little server to host media locally. This one is about automating YouTube downloads with &lt;strong&gt;yt-dlp&lt;/strong&gt;, optimized so it doesn’t waste time re-checking a million old uploads, and runs on a &lt;strong&gt;systemd timer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is not meant to mirror all of YouTube. The point is narrower: I want a small personal queue from channels I already care about, downloaded on a schedule, watchable later through my local media setup. It removes the “open YouTube and get distracted” step.&lt;/p&gt;</description></item><item><title>Installing qBittorrent-nox as a Headless Download Manager</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-7/</link><pubDate>Sat, 11 Apr 2026 21:24:32 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-7/</guid><description>&lt;h2 id="installing-qbittorrent-nox"&gt;Installing qBittorrent-nox&lt;/h2&gt;
&lt;p&gt;After Immich, I wanted a simple way to grab a few &lt;strong&gt;legit torrents&lt;/strong&gt; (Linux ISOs, open datasets, etc.) from the same little server — without running a full desktop UI. &lt;strong&gt;qBittorrent-nox&lt;/strong&gt; is the headless version of qBittorrent, and you manage it from a web browser.&lt;/p&gt;
&lt;p&gt;Same rules as the other services in this series: &lt;strong&gt;LAN-only&lt;/strong&gt;. Local IP, no domain, no reverse proxy.&lt;/p&gt;
&lt;p&gt;I’m going to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;install &lt;code&gt;qbittorrent-nox&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;run it as a dedicated user&lt;/li&gt;
&lt;li&gt;keep the Web UI reachable only from my LAN&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What this solves&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Setting Up Paperless-ngx for Document Search</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-6/</link><pubDate>Sat, 04 Apr 2026 20:35:57 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-6/</guid><description>&lt;h2 id="installing-paperless-ngx"&gt;Installing Paperless-ngx&lt;/h2&gt;
&lt;p&gt;This server started as a way to keep entertainment off my phone and out of the cloud. But once it was stable, it kind of turned into a tiny home “office” server too.&lt;/p&gt;
&lt;p&gt;So I added Paperless-ngx for documents: ingest, OCR, and search. It’s the same idea as Immich, but for PDFs instead of photos — and it stays LAN-only.&lt;/p&gt;
&lt;p&gt;For this install, I kept it simple and used the official installation script, which sets up a Docker Compose deployment for you.&lt;/p&gt;</description></item><item><title>Self-Hosting Immich for Private Photo Backups</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-5/</link><pubDate>Sat, 28 Mar 2026 21:18:09 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-5/</guid><description>&lt;h2 id="hosting-immich"&gt;Hosting Immich&lt;/h2&gt;
&lt;p&gt;After Jellyfin (video) and Audiobookshelf (audio), I wanted something like Google Photos, but not Google Photos — automatic phone backups, a clean timeline, and the fun stuff like face grouping and smart search. That’s where Immich fits: a self-hosted photo/video manager built around browsing, searching, and backing up your library on your own server.&lt;/p&gt;
&lt;p&gt;The key decision I made for this install: store all uploaded photos/videos on a separate hard drive mounted at: &lt;code&gt;/srv/storage/pictures&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Setting Up Audiobookshelf for Audiobooks and Podcasts</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-4/</link><pubDate>Sat, 21 Mar 2026 20:25:41 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-4/</guid><description>&lt;h2 id="installing-audiobookshelf"&gt;Installing Audiobookshelf&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-3/"&gt;Part 3&lt;/a&gt;, I get Jellyfin running for video. Now I add &lt;strong&gt;Audiobookshelf&lt;/strong&gt; so I can stream audiobooks (and podcasts) from the same little server. This post is just the install + first boot. I keep it simple and LAN-only.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What this solves&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keeps audiobooks and podcasts in one self-hosted library.&lt;/li&gt;
&lt;li&gt;Avoids recommendation-heavy podcast apps for saved shows.&lt;/li&gt;
&lt;li&gt;Stores audio files under the same &lt;code&gt;/srv/media/&lt;/code&gt; structure.&lt;/li&gt;
&lt;li&gt;Adds offline listening through the mobile app workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-create-the-folders-under-srvmedia"&gt;1. Create the folders under &lt;code&gt;/srv/media/&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;I keep everything in &lt;code&gt;/srv/media/&lt;/code&gt;, so I make a clean spot for audiobooks + Audiobookshelf’s data.&lt;/p&gt;</description></item><item><title>Setting Up Jellyfin on a Spare Laptop Home Server</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-3/</link><pubDate>Sat, 14 Mar 2026 21:07:54 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-3/</guid><description>&lt;h2 id="hosting-jellyfin"&gt;Hosting Jellyfin&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-1/"&gt;part 1&lt;/a&gt; I get the laptop running as a basic server.
In &lt;a href="https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-2/"&gt;part 2&lt;/a&gt; I set up &lt;code&gt;/srv/media/&lt;/code&gt;, permissions, SSH keys, and some power tweaks.&lt;/p&gt;
&lt;p&gt;This post is where I host my first service: &lt;strong&gt;Jellyfin&lt;/strong&gt;. I plan on accessing it using only the local IP address (no domain name, no reverse proxy).&lt;/p&gt;
&lt;p&gt;I wanted Jellyfin to be the first real app because it gives fast feedback. If it works, I can point a browser at the server, add a library, and immediately see whether my folder layout and permissions from part 2 were a good idea. If it does not work, the failure is usually visible: the service is down, the port is blocked, or Jellyfin cannot read the media folder.&lt;/p&gt;</description></item><item><title>How to Set Up a Spare Laptop as a Debian Home Server</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-2/</link><pubDate>Sun, 08 Mar 2026 20:48:12 -0700</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-2/</guid><description>&lt;h2 id="old-laptop--home-server-base-setup"&gt;Old laptop → home server (base setup)&lt;/h2&gt;
&lt;p&gt;I’m repurposing an old laptop as a local-only server. The goal is simple: a stable box on my LAN that can run Jellyfin, audiobookshelf, Immich, and a yt-dlp workflow later.&lt;/p&gt;
&lt;p&gt;This is the boring foundation post. No dashboards yet, no shiny app screenshots, just the parts that make every later service easier to run: a clean Debian install, SSH access, a predictable folder layout, shared permissions, and laptop power settings that do not fight the idea of a server.&lt;/p&gt;</description></item><item><title>Building a Home Server for Digital Minimalism</title><link>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-1/</link><pubDate>Sun, 01 Mar 2026 20:11:37 -0800</pubDate><guid>https://seanwong.xyz/notes/self-hosting-on-a-spare-laptop-part-1/</guid><description>&lt;h2 id="new-year-new-resolution-less-screen-time"&gt;New year, new resolution: less screen time&lt;/h2&gt;
&lt;p&gt;This year I chose something simple—&lt;strong&gt;decreasing my screen time&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A lot of the time I spend in front of a screen isn’t intentional. I’ll boot up the computer or pick up the phone to do one thing, and then get pulled into infinite scrolling feeds, recommendations, and algorithms. Willpower helps, but I’d rather do something more reliable:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Design a digital environment that isn’t constantly trying to steal my attention.&lt;/p&gt;</description></item><item><title>Plate Math: Barbell Plate Calculator for Lifters</title><link>https://seanwong.xyz/notes/plate-math/</link><pubDate>Thu, 19 Feb 2026 17:32:19 -0800</pubDate><guid>https://seanwong.xyz/notes/plate-math/</guid><description>&lt;h2 id="plate-math-a-simple-way-to-load-a-barbell-faster"&gt;Plate Math: A Simple Way to Load a Barbell Faster&lt;/h2&gt;
&lt;p&gt;If you lift regularly, you’ve probably done this: stand next to a bar, do the plate math in your head, feel confident… and still end up re-racking because the total is off.&lt;/p&gt;
&lt;p&gt;I built &lt;strong&gt;Plate Math&lt;/strong&gt; to remove that friction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plate Math&lt;/strong&gt; is a small React app: type a target weight and it tells you exactly what to put on the bar—fast. You get:&lt;/p&gt;</description></item></channel></rss>