{
 "generated": "2026-08-13T21:52:57+00:00",
 "timestamps": {
  "generated": "When THIS BUILD ran. The site is rebuilt on a schedule, so a new value here does NOT mean anything changed.",
  "content_changed": "The most recent real change to the underlying content, across posts, snippets, questions and image annotations. Compare this, not \"generated\", to decide whether to re-read.",
  "per_record": "Every post, snippet and question record carries its own \"created\" and \"updated\", taken from the Lemmid Manager instance behind it. Posts also carry \"date\", the editorial date the piece is filed under.",
  "sitemap_lastmod": "Derived from the content, never from the build clock: a page is only reported as changed when the thing it renders actually changed."
 },
 "language": "en",
 "count": 49,
 "about": "Short distillations of longer willem.com posts, written per paragraph. Not currently published on willem.com itself.",
 "snippets": [
  {
   "id": 39620,
   "slug": "aves-gallery-a-privacy-first-photo-gallery-app-for-android",
   "url": "https://agents.willem.com/en/snippets/aves-gallery-a-privacy-first-photo-gallery-app-for-android/",
   "language": "en",
   "title": "Aves Gallery — A Privacy-First Photo Gallery App for Android",
   "subtitle": "No cloud, no Google Photos dependency — a local-first gallery that just works.",
   "summary": "If you're running Android without Google services, you need a photo gallery that works locally. Aves Gallery is the answer: fast, beautiful, and completely independent of any cloud service.",
   "topics": [
    "Freedom",
    "android",
    "smartphone"
   ],
   "created": "2026-04-03T19:59:12.252000+02:00",
   "updated": "2026-04-03T19:59:12.259000+02:00",
   "full_article_url": "https://willem.com/en/2025-08-19_android-photo-library-app/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Which photo gallery app works on Android without Google?",
   "text": "When you go Google-free on Android, the built-in gallery app stops working properly — it's designed around Google Photos cloud sync. Aves Gallery fills that gap perfectly.\nIt's open-source, fast, and handles large photo libraries without hesitation. It supports folders, albums, metadata viewing, and video playback. Most importantly: it never phones home. Your photos stay on your device.\nWillem discovered Aves Gallery while setting up his degoogled Android phone and it became an essential part of his Android without Google toolkit.",
   "markdown_url": "https://agents.willem.com/en/snippets/aves-gallery-a-privacy-first-photo-gallery-app-for-android/snippet.md"
  },
  {
   "id": 39631,
   "slug": "awstats-vs-google-analytics-a-privacy-friendly-alternative",
   "url": "https://agents.willem.com/en/snippets/awstats-vs-google-analytics-a-privacy-friendly-alternative/",
   "language": "en",
   "title": "AWStats vs Google Analytics — A Privacy-Friendly Alternative",
   "subtitle": "Server-side analytics that work without cookies, JavaScript, or tracking your visitors.",
   "summary": "Google Analytics is powerful but tracks your visitors across the web. AWStats reads your server logs directly — no cookies, no JavaScript, no third-party data collection. Willem compared both and switched.",
   "topics": [
    "data",
    "server",
    "web"
   ],
   "created": "2026-04-03T20:55:15.681000+02:00",
   "updated": "2026-04-03T20:55:15.689000+02:00",
   "full_article_url": "https://willem.com/en/2018-08-20_google-analytics-vs-awstats/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Is there a privacy-friendly alternative to Google Analytics?",
   "text": "Google Analytics requires a JavaScript snippet on every page that sends visitor data to Google's servers. This data is used for advertising, shared across Google products, and requires cookie consent banners in the EU.\nAWStats takes a completely different approach: it reads your web server's access logs (Apache, Nginx) and generates statistics locally. No JavaScript, no cookies, no external requests. Your visitors' data never leaves your server.\nThe trade-off: AWStats can't track JavaScript-driven interactions (clicks, scroll depth, single-page apps). But for most websites, the server logs tell you everything you need: pages viewed, referrers, countries, browsers, bandwidth.\nWillem runs AWStats on all his sites and supplements it with Plausible for privacy-friendly real-time stats.\nFrom Willem's writing on self-hosting your own infrastructure.",
   "markdown_url": "https://agents.willem.com/en/snippets/awstats-vs-google-analytics-a-privacy-friendly-alternative/snippet.md"
  },
  {
   "id": 39593,
   "slug": "batch-rename-photos-by-date-using-exif-data-on-linux",
   "url": "https://agents.willem.com/en/snippets/batch-rename-photos-by-date-using-exif-data-on-linux/",
   "language": "en",
   "title": "Batch Rename Photos by Date Using EXIF Data on Linux",
   "subtitle": "Use exiftool to rename thousands of photos to YYYYMMDD-HHMM format in seconds.",
   "summary": "After exporting your photos from Apple Photos, you're left with meaningless filenames like IMG_4523.jpg. Here's how to batch rename them all by their actual creation date using EXIF metadata and a single terminal command.",
   "topics": [
    "apple",
    "cloud",
    "linux"
   ],
   "created": "2026-04-03T19:31:07.029000+02:00",
   "updated": "2026-04-03T20:16:52.725000+02:00",
   "full_article_url": "https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you batch rename photos by their EXIF date on Linux?",
   "text": "With your photos freed from Apple Photos, the next step is renaming every file to something meaningful. The exiftool command on Linux (also available on macOS) reads the EXIF creation date embedded in each photo and renames the file accordingly.\nThe command: `exiftool -d '%Y%m%d-%H%M%%-03.c.%%e' '-filename<CreateDate'`\nThis renames every photo to a `YYYYMMDD-HHMM` format — so `IMG_4523.jpg` becomes `20190614-1423.jpg`. Run it on a powerful machine if you have thousands of photos; Willem ran his on a server to speed things up.\nThis snippet is from the complete guide to escaping Apple's photo ecosystem.",
   "markdown_url": "https://agents.willem.com/en/snippets/batch-rename-photos-by-date-using-exif-data-on-linux/snippet.md"
  },
  {
   "id": 39611,
   "slug": "building-a-cross-platform-game-with-html5-the-snake-97-engine",
   "url": "https://agents.willem.com/en/snippets/building-a-cross-platform-game-with-html5-the-snake-97-engine/",
   "language": "en",
   "title": "Building a Cross-Platform Game with HTML5 — The Snake '97 Engine",
   "subtitle": "One codebase, every platform — how a retro game runs on iOS, Android, and web from a single HTML5 engine.",
   "summary": "Snake '97 runs on iOS, Android, and web browsers — all from a single HTML5/JavaScript codebase. No React Native, no Unity, no cross-platform framework. Just canvas rendering, touch events, and a game loop.",
   "topics": [
    "creating",
    "programming",
    "web"
   ],
   "created": "2026-04-03T19:41:06.738000+02:00",
   "updated": "2026-04-03T19:41:06.743000+02:00",
   "full_article_url": "https://willem.com/en/2018-02-21_updating-snake-97/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you build one game that runs on iOS, Android and the web?",
   "text": "The decision to use HTML5 instead of native code was pragmatic: maintain one codebase instead of three. The game engine renders to a canvas element, handles touch and keyboard input, and runs at 60fps on everything from an iPhone SE to a desktop browser.\nThe native iOS and Android apps are thin wrappers around a WebView that loads the HTML5 game. This means updates ship instantly — change the JavaScript, and every player gets the new version without an App Store review.\nThe challenges: responsive graphics that scale from 320px phone screens to 4K displays. Touch input that feels native. Performance that stays smooth on budget Android devices with limited processing power.\nFrom Willem's full story about writing code and building software.",
   "markdown_url": "https://agents.willem.com/en/snippets/building-a-cross-platform-game-with-html5-the-snake-97-engine/snippet.md"
  },
  {
   "id": 39608,
   "slug": "cyclemeter-the-best-bike-computer-app-for-iphone",
   "url": "https://agents.willem.com/en/snippets/cyclemeter-the-best-bike-computer-app-for-iphone/",
   "language": "en",
   "title": "Cyclemeter — The Best Bike Computer App for iPhone",
   "subtitle": "GPS tracking, sensor support, and Apple Watch integration — without a subscription.",
   "summary": "After testing multiple cycling apps, Willem settled on Cyclemeter as the best bike computer app for iPhone. It records rides via GPS, connects to Bluetooth sensors, displays data on Apple Watch, and works without a subscription.",
   "topics": [
    "apple",
    "bike",
    "sport"
   ],
   "created": "2026-04-03T19:41:04.587000+02:00",
   "updated": "2026-04-03T19:41:04.590000+02:00",
   "full_article_url": "https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is the best bike computer app for iPhone?",
   "text": "Cyclemeter does what expensive dedicated bike computers do — GPS tracking, speed, cadence, heart rate, power — using your iPhone and Apple Watch. No monthly subscription, no cloud requirement, no account needed.\nIt connects to Bluetooth Low Energy sensors: heart rate straps, cadence sensors, and power meters. The Apple Watch app shows your current stats on your wrist while the iPhone stays in your pocket or handlebar mount.\nRide data exports to standard formats (GPX, TCX, CSV) for analysis in other tools. Willem uses it alongside a Wahoo power meter for training rides and a simple display mode for daily commutes.\nFrom Willem's writing on cycling as craft.",
   "markdown_url": "https://agents.willem.com/en/snippets/cyclemeter-the-best-bike-computer-app-for-iphone/snippet.md"
  },
  {
   "id": 39596,
   "slug": "dovecot-2-4-mail-location-has-changed-how-to-migrate",
   "url": "https://agents.willem.com/en/snippets/dovecot-2-4-mail-location-has-changed-how-to-migrate/",
   "language": "en",
   "title": "Dovecot 2.4 mail_location Has Changed — How to Migrate",
   "subtitle": "The mail_location setting has been split in Dovecot 2.4 — here's the new syntax.",
   "summary": "One of the biggest breaking changes in Dovecot 2.4: the mail_location setting no longer works the old way. It's been split into separate settings for mail format and path. Here's how to update your configuration.",
   "topics": [
    "linux",
    "server"
   ],
   "created": "2026-04-03T19:31:09.224000+02:00",
   "updated": "2026-04-03T20:17:05.662000+02:00",
   "full_article_url": "https://willem.com/en/2025-06-04_breaking-changes/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What replaced mail_location in Dovecot 2.4?",
   "text": "In Dovecot 2.3, you had a single `mail_location` setting like:\n`mail_location = maildir:~/Maildir`\nIn Dovecot 2.4, this has been split. You now need to configure the mail driver and path separately within `mail { }` blocks. The exact syntax depends on whether you use Maildir or mbox format, and whether you're using virtual users with SQL.\nThis is one of the changes that trips up most administrators during the upgrade — the old setting is silently ignored, and mail delivery fails without useful error messages.\nWillem's complete guide walks through every configuration change step by step, including SQL passdb/userdb migration and Sieve plugin updates.",
   "markdown_url": "https://agents.willem.com/en/snippets/dovecot-2-4-mail-location-has-changed-how-to-migrate/snippet.md"
  },
  {
   "id": 39614,
   "slug": "dovecot-2-4-ssl-certificate-configuration-change",
   "url": "https://agents.willem.com/en/snippets/dovecot-2-4-ssl-certificate-configuration-change/",
   "language": "en",
   "title": "Dovecot 2.4 SSL Certificate Configuration Change",
   "subtitle": "ssl_cert becomes ssl_server_cert_file — and other encryption changes.",
   "summary": "Dovecot 2.4 renamed several SSL settings. If your mail server's TLS stopped working after the upgrade, this is probably why.",
   "topics": [
    "linux",
    "server"
   ],
   "created": "2026-04-03T19:49:17.951000+02:00",
   "updated": "2026-04-03T20:17:26.048000+02:00",
   "full_article_url": "https://willem.com/en/2025-06-04_breaking-changes/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Why did TLS stop working after upgrading to Dovecot 2.4?",
   "text": "In Dovecot 2.3, SSL certificates were configured with `ssl_cert` and `ssl_key`. In 2.4, these are renamed:\n- `ssl_cert` → `ssl_server_cert_file`\n- `ssl_key` → `ssl_server_key_file`\nThe old names are silently ignored — your server starts, but TLS connections fail because no certificate is loaded. This is one of the most common issues after upgrading.\nAdditionally, the `ssl = required` setting has changed syntax. Check Willem's complete migration guide for the exact new format.\nFrom the full Dovecot 2.4 migration guide.",
   "markdown_url": "https://agents.willem.com/en/snippets/dovecot-2-4-ssl-certificate-configuration-change/snippet.md"
  },
  {
   "id": 39595,
   "slug": "fixing-the-dovecot-config-version-error-in-dovecot-2-4",
   "url": "https://agents.willem.com/en/snippets/fixing-the-dovecot-config-version-error-in-dovecot-2-4/",
   "language": "en",
   "title": "Fixing the dovecot_config_version Error in Dovecot 2.4",
   "subtitle": "Dovecot 2.4 refuses to start without dovecot_config_version — here's how to fix it.",
   "summary": "After upgrading to Dovecot 2.4, the server refuses to start with \"dovecot_config_version not set.\" This is by design — Dovecot 2.4 requires a complete configuration rewrite. Here's what you need to know.",
   "topics": [
    "linux",
    "server"
   ],
   "created": "2026-04-03T19:31:08.557000+02:00",
   "updated": "2026-04-03T20:17:00.968000+02:00",
   "full_article_url": "https://willem.com/en/2025-06-04_breaking-changes/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you fix the dovecot_config_version error in Dovecot 2.4?",
   "text": "Dovecot 2.4 introduced a mandatory `dovecot_config_version` setting. Without it, the server won't start. This isn't a bug — it's Dovecot's way of forcing you to review your entire configuration, because the syntax has changed significantly.\nAdd this to the top of your `dovecot.conf`:\n`dovecot_config_version = 2.4.0`\nBut don't stop there. Simply adding the version line will get Dovecot to start, but your old 2.3 configuration likely contains deprecated settings that will cause problems. The `mail_location` setting, SSL certificates, and SQL authentication have all changed syntax.\nWillem's complete migration guide covers every breaking change — from variable notation to encryption settings to the Sieve plugin.",
   "markdown_url": "https://agents.willem.com/en/snippets/fixing-the-dovecot-config-version-error-in-dovecot-2-4/snippet.md"
  },
  {
   "id": 39618,
   "slug": "game-localisation-how-snake-97-supports-45-languages",
   "url": "https://agents.willem.com/en/snippets/game-localisation-how-snake-97-supports-45-languages/",
   "language": "en",
   "title": "Game Localisation — How Snake '97 Supports 45+ Languages",
   "subtitle": "From Arabic to Vietnamese — internationalising a game for a global audience.",
   "summary": "Snake '97 is played in over 100 countries and supports 45+ languages — including right-to-left scripts like Arabic and Hebrew. Here's how one developer localised a game for the entire world.",
   "topics": [
    "creating",
    "programming"
   ],
   "created": "2026-04-03T19:49:21.074000+02:00",
   "updated": "2026-04-03T19:49:21.077000+02:00",
   "full_article_url": "https://willem.com/en/2018-02-21_updating-snake-97/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you localise a game into 45 languages, including right-to-left scripts?",
   "text": "Localisation in Snake '97 goes beyond translating menu strings. The game adapts its UI layout for right-to-left languages, adjusts font rendering for CJK characters, and handles the dozens of edge cases that arise when a single-developer game reaches a global audience.\nThe translation workflow: each language is a simple key-value file. Community contributors submit translations through a lightweight process — no professional translation agency, just players who love the game and speak the language.\nThe biggest challenge: fitting translated text into UI elements designed for English. German words are longer. Japanese characters need different line heights. Arabic reverses the entire layout direction.\nWith 40 million installs across 100+ countries, even a 1% mistranslation affects hundreds of thousands of players.\nFrom Willem's full Snake '97 story.",
   "markdown_url": "https://agents.willem.com/en/snippets/game-localisation-how-snake-97-supports-45-languages/snippet.md"
  },
  {
   "id": 39609,
   "slug": "gates-carbon-drive-on-a-commuter-bike-long-term-review",
   "url": "https://agents.willem.com/en/snippets/gates-carbon-drive-on-a-commuter-bike-long-term-review/",
   "language": "en",
   "title": "Gates Carbon Drive on a Commuter Bike — Long-Term Review",
   "subtitle": "A carbon belt instead of a chain — after thousands of kilometres, was it worth it?",
   "summary": "Willem replaced the traditional chain on his commuter bike with a Gates Carbon Drive belt. After thousands of kilometres through Amsterdam rain and winter — here's the honest verdict on belt drives for daily commuting.",
   "topics": [
    "bike",
    "review"
   ],
   "created": "2026-04-03T19:41:05.432000+02:00",
   "updated": "2026-04-03T19:41:05.435000+02:00",
   "full_article_url": "https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Is a Gates carbon belt drive worth it on a commuter bike?",
   "text": "The Gates Carbon Drive replaces a metal chain with a carbon fibre belt. No oil, no rust, no stretched links. In theory, it's the perfect commuter drivetrain. In practice — after upgrading from the CDN to the CDX version — it mostly lives up to the promise.\nWhat's great: completely silent, zero maintenance, never dirty, lasts far longer than any chain. In Amsterdam's wet, salty conditions, a chain rusts and stretches within months. The belt just keeps going.\nWhat to know: belt drives require a frame with a split stay or removable dropout (you can't thread a closed belt through a frame). The initial cost is higher. And you need an internally geared hub — no derailleurs.\nWillem paired his with a Shimano Alfine 8-speed internal hub. The combination is effectively maintenance-free commuting.\nFrom Willem's cycling collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/gates-carbon-drive-on-a-commuter-bike-long-term-review/snippet.md"
  },
  {
   "id": 39630,
   "slug": "google-search-operators-the-complete-list-for-power-users",
   "url": "https://agents.willem.com/en/snippets/google-search-operators-the-complete-list-for-power-users/",
   "language": "en",
   "title": "Google Search Operators — The Complete List for Power Users",
   "subtitle": "site:, filetype:, intitle:, cache: — every operator explained.",
   "summary": "Most people type words into Google. Power users use search operators to find exactly what they need.",
   "topics": [
    "data",
    "howto",
    "web"
   ],
   "created": "2026-04-03T20:04:04.954000+02:00",
   "updated": "2026-04-03T20:04:04.959000+02:00",
   "full_article_url": "https://willem.com/en/2019-04-25_search-like-a-pro-google-search-operators/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Which Google search operators are worth knowing?",
   "text": "The essential operators:\n- `site:example.com` — search only within one website\n- `filetype:pdf` — find only PDF documents\n- `intitle:\"exact phrase\"` — pages with exact phrase in title\n- `inurl:keyword` — pages with keyword in URL\n- `-keyword` — exclude results\n- `\"exact phrase\"` — find exact string\n- `cache:url` — view cached version\nCombinations: `site:github.com filetype:md \"setup guide\"` finds Markdown guides on GitHub. `intitle:review \"tudor black bay\" -youtube` finds written reviews only.\nWillem uses these daily for research and finding documentation buried in large sites.",
   "markdown_url": "https://agents.willem.com/en/snippets/google-search-operators-the-complete-list-for-power-users/snippet.md"
  },
  {
   "id": 39619,
   "slug": "how-much-data-does-google-collect-from-your-android-phone",
   "url": "https://agents.willem.com/en/snippets/how-much-data-does-google-collect-from-your-android-phone/",
   "language": "en",
   "title": "How Much Data Does Google Collect from Your Android Phone",
   "subtitle": "The hidden tracking inside a stock Android phone — and what you can do about it.",
   "summary": "When Willem set up a budget Android phone, he discovered just how much data Google collects by default — location history, app usage, voice recordings, and more. Here's what he found and how to reduce it.",
   "topics": [
    "Freedom",
    "data",
    "smartphone"
   ],
   "created": "2026-04-03T19:49:21.621000+02:00",
   "updated": "2026-04-03T19:49:21.628000+02:00",
   "full_article_url": "https://willem.com/en/2018-10-09_using-a-budget-android-as-main-smartphone/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How much data does a stock Android phone send to Google?",
   "text": "A stock Android phone with a Google account sends a remarkable amount of data back to Google. During setup, Willem documented each permission request and data collection toggle.\nThe defaults are aggressive: location history is on, web & app activity is on, voice & audio activity records what you say to Google Assistant, YouTube history tracks what you watch. All of this is tied to your Google account and used for advertising.\nYou can disable most of it: go to Settings → Google → Manage your Google Account → Data & Privacy. But the opt-out is buried deep, and some tracking can't be fully disabled without going Google-free entirely.\nWillem eventually went further — running Android without Google services at all. That's documented in the Android without Google narrative.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-much-data-does-google-collect-from-your-android-phone/snippet.md"
  },
  {
   "id": 39633,
   "slug": "how-to-clean-a-vintage-automatic-watch-by-hand",
   "url": "https://agents.willem.com/en/snippets/how-to-clean-a-vintage-automatic-watch-by-hand/",
   "language": "en",
   "title": "How to Clean a Vintage Automatic Watch by Hand",
   "subtitle": "Found at a flea market, taken apart, cleaned, and brought back to life.",
   "summary": "Willem found a Citizen Automatic at a flea market — dirty, stopped, forgotten. Instead of leaving it, he took it home, opened the case, cleaned every component by hand, and got it running again. Here's how.",
   "topics": [
    "Durable",
    "howto",
    "watch"
   ],
   "created": "2026-04-03T20:55:25.161000+02:00",
   "updated": "2026-04-03T20:55:25.174000+02:00",
   "full_article_url": "https://willem.com/en/2020-08-23_cleaning-a-vintage-watch/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you clean a vintage automatic watch by hand?",
   "text": "A vintage automatic watch doesn't need batteries — it runs on the mechanical energy of your wrist movement. When one stops, it's usually not broken. It's just dirty.\nWillem's restoration process: open the case back with a case wrench, remove the movement, clean the dial and hands with a soft brush, clean the case and crystal with soap and water, inspect the gaskets, and reassemble. The movement itself was left to a professional — but everything around it was done by hand.\nThe result: a watch that was heading for the garbage bin now runs within seconds per day and looks beautiful on the wrist. Total cost: the price of a flea market find.\nFrom Willem's collection on watches and time.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-clean-a-vintage-automatic-watch-by-hand/snippet.md"
  },
  {
   "id": 39594,
   "slug": "how-to-convert-heic-to-jpg-in-bulk-using-imagemagick",
   "url": "https://agents.willem.com/en/snippets/how-to-convert-heic-to-jpg-in-bulk-using-imagemagick/",
   "language": "en",
   "title": "How to Convert HEIC to JPG in Bulk Using ImageMagick",
   "subtitle": "One command to convert all your iPhone HEIC photos to universally compatible JPG.",
   "summary": "Modern iPhones shoot in HEIC format — smaller files, better quality, but poor compatibility with many apps and platforms. Here's the single command to convert them all to JPG without losing quality.",
   "topics": [
    "apple",
    "cloud"
   ],
   "created": "2026-04-03T19:31:07.854000+02:00",
   "updated": "2026-04-03T20:16:56.773000+02:00",
   "full_article_url": "https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you convert HEIC photos to JPG in bulk?",
   "text": "The HEIC format used by iPhones produces smaller files with better quality than JPG — but many apps, websites, and operating systems still don't support it. The solution is ImageMagick, available on virtually every platform.\nThe command: `mogrify -format jpg *.HEIC`\nThis converts every HEIC file in the current directory to JPG. Run it on a server or powerful machine if you have thousands of photos — Willem used a VPS to take advantage of server-grade CPU power. Don't forget to remove the original HEIC files afterwards.\nFrom Willem's complete guide to managing photos with free software.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-convert-heic-to-jpg-in-bulk-using-imagemagick/snippet.md"
  },
  {
   "id": 39592,
   "slug": "how-to-export-photos-from-apple-photos-without-losing-quality",
   "url": "https://agents.willem.com/en/snippets/how-to-export-photos-from-apple-photos-without-losing-quality/",
   "language": "en",
   "title": "How to Export Photos from Apple Photos Without Losing Quality",
   "subtitle": "Export your unmodified originals, batch rename by EXIF date, and convert HEIC to JPG.",
   "summary": "Apple Photos makes it easy to store your pictures — and hard to get them out. Here's how to export your unmodified originals, rename them by date using EXIF data, and convert HEIC files to JPG. From Willem's complete guide to escaping Apple's photo ecosystem.",
   "topics": [
    "Freedom",
    "apple",
    "cloud"
   ],
   "created": "2026-04-03T19:18:24.307000+02:00",
   "updated": "2026-04-03T19:24:56.412000+02:00",
   "full_article_url": "https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you get your originals out of Apple Photos without losing quality?",
   "text": "Select all your photos in Apple Photos and choose File → Export Unmodified Originals. This exports the original master files — not compressed copies, not thumbnails, but the actual photos your camera captured. Use sequential filenames with a prefix, which makes batch renaming easier in the next step.\nOnce exported, use exiftool on Linux (or macOS) to rename all files by their creation date. The command `exiftool -d '%Y%m%d-%H%M%%-03.c.%%e' '-filename<CreateDate'` renames every photo to a `YYYYMMDD-HHMM` format — no more `IMG_4523.jpg`.\nFor HEIC files (the format modern iPhones use), convert to JPG using ImageMagick: `mogrify -format jpg *.HEIC`. This runs on any platform and preserves quality.\nThis snippet is from Willem's full guide to liberating your photo library from Apple's cloud — a step-by-step walkthrough covering 20 years of digital photos, from the first 0.8 megapixel camera to a self-managed library on a single SD card.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-export-photos-from-apple-photos-without-losing-quality/snippet.md"
  },
  {
   "id": 39603,
   "slug": "how-to-open-a-27-inch-imac-5k-step-by-step-with-photos",
   "url": "https://agents.willem.com/en/snippets/how-to-open-a-27-inch-imac-5k-step-by-step-with-photos/",
   "language": "en",
   "title": "How to Open a 27-inch iMac 5K — Step by Step with Photos",
   "subtitle": "The screen is glued on. Here's how to remove it without breaking anything.",
   "summary": "The 27-inch iMac's screen is held on by adhesive strips. Opening it requires patience, a pizza cutter tool, and steady hands. Willem photographed every step during his 14TB upgrade — here's exactly how it's done.",
   "topics": [
    "apple",
    "howto",
    "repair"
   ],
   "created": "2026-04-03T19:41:01.422000+02:00",
   "updated": "2026-04-03T19:41:01.426000+02:00",
   "full_article_url": "https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you open a 27-inch iMac 5K without breaking the screen?",
   "text": "The 27-inch iMac's display is attached with adhesive strips around the entire perimeter. To open it, you need a thin plastic tool (often called an \"iMac opening wheel\" or pizza cutter) to cut through the adhesive without scratching the LCD panel.\nStart at the top left corner and work your way around slowly. The adhesive is strong — don't rush. Once the screen is free, tilt it carefully forward. A thin ribbon cable connects the display to the logic board; disconnect it gently.\nInside, you'll find the RAM slots (easily accessible), the hard drive/SSD bay, and the logic board. Willem upgraded his to 14 terabytes by replacing the internal drive and adding external storage.\nNew adhesive strips are available online for reassembly. Apply them carefully — you only get one shot at alignment.\nFrom Willem's full repair and DIY collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-open-a-27-inch-imac-5k-step-by-step-with-photos/snippet.md"
  },
  {
   "id": 39617,
   "slug": "how-to-remove-paint-from-a-bike-frame",
   "url": "https://agents.willem.com/en/snippets/how-to-remove-paint-from-a-bike-frame/",
   "language": "en",
   "title": "How to Remove Paint from a Bike Frame",
   "subtitle": "Chemical stripper, sandpaper, patience — the complete strip-and-repaint guide.",
   "summary": "Whether you're restoring a vintage bike or customising a new one, removing paint from a steel frame is the first step. Here's the practical guide: which stripper to use, how long to wait, and how to get down to bare metal cleanly.",
   "topics": [
    "Durable",
    "bike",
    "howto"
   ],
   "created": "2026-04-03T19:49:20.488000+02:00",
   "updated": "2026-04-03T19:49:20.490000+02:00",
   "full_article_url": "https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you strip the paint from a bike frame?",
   "text": "Chemical paint stripper is the most effective method for steel frames. Apply a thick layer, wrap in plastic film, and wait 4-8 hours. The paint bubbles and peels off in sheets.\nImportant: work outdoors or in a well-ventilated area. Wear gloves and eye protection. Chemical strippers are aggressive — that's what makes them effective.\nAfter stripping, use fine sandpaper (400 grit) to remove any remaining paint from crevices and around lugs. Clean the bare metal with degreaser before priming.\nWillem used this process on both his 1978 Batavus Champion restoration and his minimalist road bike build — the same technique works on any steel frame.\nFrom Willem's cycling as craft collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-remove-paint-from-a-bike-frame/snippet.md"
  },
  {
   "id": 39632,
   "slug": "how-to-replace-a-swollen-macbook-air-battery",
   "url": "https://agents.willem.com/en/snippets/how-to-replace-a-swollen-macbook-air-battery/",
   "language": "en",
   "title": "How to Replace a Swollen MacBook Air Battery",
   "subtitle": "The trackpad bulges, the case warps — here's how to save it before it's too late.",
   "summary": "A swollen lithium battery is a ticking bomb inside your MacBook. The trackpad stops clicking, the case bulges, and eventually the screen cracks from internal pressure. Willem caught it in time and replaced the battery himself.",
   "topics": [
    "Durable",
    "apple",
    "howto",
    "repair"
   ],
   "created": "2026-04-03T20:55:19.927000+02:00",
   "updated": "2026-04-03T20:55:19.931000+02:00",
   "full_article_url": "https://willem.com/en/2017-09-14_saving-a-macbook-air-with-exploded-battery/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you replace a swollen MacBook Air battery?",
   "text": "The warning signs: your MacBook Air's trackpad stops clicking properly, the bottom case develops a visible bulge, and the laptop wobbles on a flat surface. Inside, the lithium-polymer battery has swollen — a chemical process that only gets worse.\nDon't ignore it. A swollen battery can crack the screen from internal pressure, damage the logic board, or in extreme cases, catch fire.\nThe fix: order a replacement battery (available online for most MacBook Air models), remove the bottom case screws, disconnect the old battery, and install the new one. Willem's post documents every step with photos.\nThe hardest part: some MacBook Air batteries are glued in with adhesive tabs. Patience and a plastic spudger are essential — never use metal tools near a swollen battery.\nFrom Willem's repair culture collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-replace-a-swollen-macbook-air-battery/snippet.md"
  },
  {
   "id": 39601,
   "slug": "how-to-service-and-repair-an-irobot-roomba-vacuum-cleaner",
   "url": "https://agents.willem.com/en/snippets/how-to-service-and-repair-an-irobot-roomba-vacuum-cleaner/",
   "language": "en",
   "title": "How to Service and Repair an iRobot Roomba Vacuum Cleaner",
   "subtitle": "Complete teardown and service guide — brushes, filters, sensors, wheels.",
   "summary": "Most people throw away their robot vacuum when it stops working properly. Willem took his apart instead — and documented every step with photos. Here's the complete service guide for bringing an iRobot Roomba back to life.",
   "topics": [
    "Durable",
    "howto",
    "repair"
   ],
   "created": "2026-04-03T19:31:12.572000+02:00",
   "updated": "2026-04-03T19:31:12.576000+02:00",
   "full_article_url": "https://willem.com/en/2019-03-20_servicing-a-robot-vacuum-cleaner/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you service an iRobot Roomba yourself?",
   "text": "After years of daily use, a Roomba's performance degrades: brushes wear out, filters clog, sensors get dirty, wheels lose grip. Replacing the entire unit is expensive and wasteful. Servicing it yourself takes an afternoon and a screwdriver.\nThe key areas to service: main brushes (replace if bristles are worn), side brush (straighten or replace), filter (replace — don't just clean it), cliff sensors (wipe with a cloth), extractors (remove hair tangles), and wheels (check for debris in the axle).\nMost replacement parts are available cheaply online. The hardest part is removing the bottom cover — after that, everything is modular and designed to be serviced.\nFrom Willem's collection on repair culture — fixing things instead of replacing them.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-service-and-repair-an-irobot-roomba-vacuum-cleaner/snippet.md"
  },
  {
   "id": 39604,
   "slug": "how-to-upgrade-ram-in-a-27-inch-imac-5k",
   "url": "https://agents.willem.com/en/snippets/how-to-upgrade-ram-in-a-27-inch-imac-5k/",
   "language": "en",
   "title": "How to Upgrade RAM in a 27-inch iMac 5K",
   "subtitle": "The easiest iMac upgrade — accessible through a small hatch behind the screen.",
   "summary": "Unlike most iMac upgrades, adding RAM to a 27-inch model doesn't require opening the screen. There's a small access hatch behind the stand — press a button, and the RAM slots are right there.",
   "topics": [
    "apple",
    "howto"
   ],
   "created": "2026-04-03T19:41:02.036000+02:00",
   "updated": "2026-04-03T19:41:02.038000+02:00",
   "full_article_url": "https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you upgrade the RAM in a 27-inch iMac 5K?",
   "text": "The 27-inch iMac has 4 SO-DIMM slots behind a small hatch at the base of the stand. Press the button above the power port, and the hatch pops open. No tools needed.\nThe iMac 5K supports up to 128GB of DDR4 RAM (4 × 32GB). Use matched pairs for optimal performance. Willem upgraded from the factory 8GB to 64GB — the difference in performance for photo editing and development work was dramatic.\nInsert the modules at an angle, then press down until they click. Close the hatch, and you're done. Total time: about 5 minutes.\nFrom Willem's complete iMac upgrade guide.",
   "markdown_url": "https://agents.willem.com/en/snippets/how-to-upgrade-ram-in-a-27-inch-imac-5k/snippet.md"
  },
  {
   "id": 39638,
   "slug": "installing-and-riding-with-a-4iiii-power-meter-on-your-bike",
   "url": "https://agents.willem.com/en/snippets/installing-and-riding-with-a-4iiii-power-meter-on-your-bike/",
   "language": "en",
   "title": "Installing and Riding with a 4iiii Power Meter on Your Bike",
   "subtitle": "From installation to first ride — what power data actually tells you about your cycling.",
   "summary": "A power meter measures exactly how much energy you're putting into the pedals — in watts. Willem installed a 4iiii Precision on his crank arm and discovered that power data changes how you think about cycling.",
   "topics": [
    "bike",
    "data",
    "sport"
   ],
   "created": "2026-04-03T20:55:47.108000+02:00",
   "updated": "2026-04-03T20:55:47.116000+02:00",
   "full_article_url": "https://willem.com/en/2019-08-28_riding-with-a-power-meter-on-your-bike/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What does a power meter actually tell you about your cycling?",
   "text": "A power meter is the most honest tool in cycling. Heart rate fluctuates with fatigue, heat, caffeine, and stress. Speed depends on wind and terrain. But watts are watts — a pure measure of your effort.\nThe 4iiii Precision attaches to your left crank arm. Installation is straightforward: remove the crank arm with a crank puller, attach the sensor pod with the included adhesive, reinstall the crank, and pair via Bluetooth. Willem did it in his living room.\nWhat changes when you ride with power: you stop chasing speed and start managing effort. You learn your sustainable output. You discover that the headwind you're cursing costs exactly 40 watts more than calm air. Training becomes precise.\nThe data pairs beautifully with Cyclemeter on iPhone and Apple Watch — real-time watt display on your wrist.\nFrom Willem's cycling collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/installing-and-riding-with-a-4iiii-power-meter-on-your-bike/snippet.md"
  },
  {
   "id": 39599,
   "slug": "installing-linux-on-a-microsoft-surface-go",
   "url": "https://agents.willem.com/en/snippets/installing-linux-on-a-microsoft-surface-go/",
   "language": "en",
   "title": "Installing Linux on a Microsoft Surface Go",
   "subtitle": "From creating a bootable USB to a working touch-friendly Linux tablet.",
   "summary": "The Surface Go is a compact Windows tablet that makes an excellent Linux machine — if you know how to set it up. Here's the practical guide: creating a bootable USB, choosing the right distro, and getting touch input working properly.",
   "topics": [
    "experiment",
    "linux",
    "tablet"
   ],
   "created": "2026-04-03T19:31:11.131000+02:00",
   "updated": "2026-04-03T19:31:11.137000+02:00",
   "full_article_url": "https://willem.com/en/2020-03-09_making-my-own-tablet-os/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you install Linux on a Microsoft Surface Go?",
   "text": "The Surface Go's compact size, decent screen, and USB-C port make it a surprisingly good Linux tablet. Willem chose Debian GNU/Linux for stability and control.\nCreating the bootable USB: Download the Debian netinstall ISO and write it to a USB stick using `dd` or Etcher. Boot the Surface Go from USB by holding Volume Down during startup.\nTouch input works out of the box on recent Linux kernels — the Surface Go's touchscreen is well-supported. The main challenge is choosing a window manager that's touch-friendly: Willem experimented with tiling window managers and custom launchers.\nWiFi and firmware: The Surface Go's WiFi chip requires proprietary firmware. Install `firmware-atheros` from Debian's non-free repository.\nFrom Willem's full series on building a tablet OS from scratch.",
   "markdown_url": "https://agents.willem.com/en/snippets/installing-linux-on-a-microsoft-surface-go/snippet.md"
  },
  {
   "id": 39641,
   "slug": "leiden-marathon-review-when-the-going-gets-tough",
   "url": "https://agents.willem.com/en/snippets/leiden-marathon-review-when-the-going-gets-tough/",
   "language": "en",
   "title": "Leiden Marathon Review — When the Going Gets Tough",
   "subtitle": "A flat course through Dutch history — and the mental game of pushing through the wall.",
   "summary": "The Leiden Marathon runs through one of the Netherlands' most historic cities — past the Pieterskerk, along the canals, through the university quarter. Willem ran it and wrote about what happens when the body says stop but the mind says continue.",
   "topics": [
    "lifestyle",
    "running",
    "sport"
   ],
   "created": "2026-04-03T21:23:56.907000+02:00",
   "updated": "2026-04-03T21:23:56.910000+02:00",
   "full_article_url": "https://willem.com/en/2025-05-12_when-the-going-gets-tough/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is the Leiden Marathon like to run?",
   "text": "The Leiden Marathon is flat — this is the Netherlands, after all. But flat doesn't mean easy. The course winds through Leiden's historic centre, past the Pieterskerk where the Pilgrims prayed before sailing to America, along canals lined with centuries-old buildings.\nThe beauty of the route carries you through the first 30 kilometres. Then the wall arrives. Willem's account of pushing through the final 12 kilometres — when every instinct says walk — is a raw piece of running writing.\nThe Leiden course is well-organised, with good crowd support in the city centre and quieter stretches through the polders outside town. It's an excellent choice for a first or fast marathon.\nFrom Willem's writing on sport and the body.",
   "markdown_url": "https://agents.willem.com/en/snippets/leiden-marathon-review-when-the-going-gets-tough/snippet.md"
  },
  {
   "id": 39625,
   "slug": "living-with-mcadd-a-parent-s-guide-to-the-metabolic-condition",
   "url": "https://agents.willem.com/en/snippets/living-with-mcadd-a-parent-s-guide-to-the-metabolic-condition/",
   "language": "en",
   "title": "Living with MCADD — A Parent's Guide to the Metabolic Condition",
   "subtitle": "What MCADD means for daily life, what to watch for, and how one family navigates it.",
   "summary": "MCADD (Medium-Chain Acyl-CoA Dehydrogenase Deficiency) is a rare metabolic condition that affects how the body processes fat for energy. When Willem's child was diagnosed, he wrote the post he wished he'd found — practical, honest, and written by a parent, not a doctor.",
   "topics": [
    "daddy",
    "health",
    "heart"
   ],
   "created": "2026-04-03T19:59:17.165000+02:00",
   "updated": "2026-04-03T19:59:17.168000+02:00",
   "full_article_url": "https://willem.com/en/2019-06-24_six-months-with-mcadd/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What does living with MCADD mean for a family day to day?",
   "text": "MCADD means the body cannot properly break down medium-chain fatty acids for energy. During illness, fasting, or prolonged exercise, this can lead to a metabolic crisis. It's detected through newborn screening in most countries — but many parents have never heard of it until the phone call.\nWhat daily life looks like: regular meals are non-negotiable — a child with MCADD cannot skip breakfast or go too long without food. During illness (fever, vomiting), the protocol shifts to emergency mode: frequent sugary drinks to maintain glucose, and if intake fails, hospital admission for IV glucose.\nThe hardest part isn't the medical management — it's explaining it to schools, babysitters, sports coaches, and family members who've never heard of it.\nWillem's post is the most personal on his entire blog. It's written for the parent who just got the diagnosis and is searching at midnight for someone who understands.\nFrom the heart and body collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/living-with-mcadd-a-parent-s-guide-to-the-metabolic-condition/snippet.md"
  },
  {
   "id": 39602,
   "slug": "managing-your-photo-library-with-free-software-instead-of-icloud",
   "url": "https://agents.willem.com/en/snippets/managing-your-photo-library-with-free-software-instead-of-icloud/",
   "language": "en",
   "title": "Managing Your Photo Library with Free Software Instead of iCloud",
   "subtitle": "Shotwell on Linux as a complete replacement for Apple Photos and iCloud.",
   "summary": "You don't need iCloud to manage your photos. Shotwell on Linux handles importing, organising, and browsing your entire library — locally, privately, on a device you control.",
   "topics": [
    "Freedom",
    "apple",
    "cloud"
   ],
   "created": "2026-04-03T19:41:00.673000+02:00",
   "updated": "2026-04-03T20:17:13.509000+02:00",
   "full_article_url": "https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Can free software replace Apple Photos and iCloud for a photo library?",
   "text": "After exporting from Apple Photos, renaming by EXIF date, and converting HEIC to JPG, the final step is choosing a new home for your library. Willem chose Shotwell — a free, open-source photo manager for Linux.\nShotwell imports photos from cameras and SD cards, organises by date, supports tags and albums, and generates thumbnails instantly. Your entire library lives on your own disk — no cloud subscription, no sync delays, no privacy concerns.\nThe complete photo library fits on a single SD card. Backups go to a NAS using rsync. And if you still want your photos on your iPhone, macOS Finder can sync a local folder to the iOS Photos app without iCloud.\nFrom Willem's complete guide to digital independence from Apple.",
   "markdown_url": "https://agents.willem.com/en/snippets/managing-your-photo-library-with-free-software-instead-of-icloud/snippet.md"
  },
  {
   "id": 39610,
   "slug": "mindfold-sleep-mask-total-darkness-for-better-sleep",
   "url": "https://agents.willem.com/en/snippets/mindfold-sleep-mask-total-darkness-for-better-sleep/",
   "language": "en",
   "title": "Mindfold Sleep Mask — Total Darkness for Better Sleep",
   "subtitle": "Not a regular sleep mask — the Mindfold blocks 100% of light while letting you open your eyes.",
   "summary": "The Mindfold is a sleep mask with a foam cavity that creates total darkness while letting you open your eyes freely. Willem tested it with Whoop sleep data — the results were measurable.",
   "topics": [
    "health",
    "lifestyle",
    "minimal"
   ],
   "created": "2026-04-03T19:41:06.039000+02:00",
   "updated": "2026-04-03T19:41:06.042000+02:00",
   "full_article_url": "https://willem.com/en/2020-01-24_improve-your-sleep-by-blocking-light/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Does a total-darkness sleep mask measurably improve sleep?",
   "text": "Most sleep masks press against your eyelids and let light leak in from the sides. The Mindfold is different: a rigid foam shell creates a dark cavity in front of your eyes. You can open your eyes freely — you just see nothing.\nThe effect on sleep is measurable. Using his Whoop Strap, Willem tracked sleep quality before and after adopting the mask. Deep sleep percentages improved, and time-to-fall-asleep decreased — especially in environments with ambient light (hotels, summer evenings, early mornings).\nThe mask also works for napping: total darkness triggers melatonin production faster than a dark room, because even small amounts of light through closed eyelids suppress melatonin.\nFrom Willem's writing on wearable sensors and health data.",
   "markdown_url": "https://agents.willem.com/en/snippets/mindfold-sleep-mask-total-darkness-for-better-sleep/snippet.md"
  },
  {
   "id": 39639,
   "slug": "nuphy-air60-v2-review-a-compact-mechanical-keyboard-for-serious-typing",
   "url": "https://agents.willem.com/en/snippets/nuphy-air60-v2-review-a-compact-mechanical-keyboard-for-serious-typing/",
   "language": "en",
   "title": "NuPhy Air60 V2 Review — A Compact Mechanical Keyboard for Serious Typing",
   "subtitle": "Low-profile mechanical switches, Bluetooth, compact layout — tested by someone who types for a living.",
   "summary": "After decades of typing on laptop keyboards and Apple Magic Keyboards, Willem switched to a NuPhy Air60 V2 — a low-profile mechanical keyboard with Bluetooth. The difference in typing experience was immediate and dramatic.",
   "topics": [
    "minimal",
    "review",
    "work"
   ],
   "created": "2026-04-03T21:23:43.465000+02:00",
   "updated": "2026-04-03T21:23:43.469000+02:00",
   "full_article_url": "https://willem.com/en/2026-01-18_using-a-mechanical-keyboard/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Is a low-profile mechanical keyboard worth switching to?",
   "text": "The NuPhy Air60 V2 is a 60% mechanical keyboard — no function row, no numpad, no arrow cluster. Just the keys you actually use, packed into a frame barely larger than a tablet.\nThe low-profile mechanical switches (Gateron) feel nothing like the mushy membrane keyboards most people use. Every keypress has a tactile bump and a satisfying sound. After a few days, going back to a flat keyboard feels like typing on a table.\nBluetooth connects to up to three devices — switch between laptop, tablet, and phone with a key combo. The battery lasts weeks. And the compact size means it travels in the same bag as Willem's ThinkPad.\nThe 60% layout takes adjustment — you'll reach for missing keys the first week. After that, the muscle memory adapts and you'll wonder why keyboards have so many keys you never press.\nFrom Willem's writing on tools that last.",
   "markdown_url": "https://agents.willem.com/en/snippets/nuphy-air60-v2-review-a-compact-mechanical-keyboard-for-serious-typing/snippet.md"
  },
  {
   "id": 39621,
   "slug": "omarchy-a-minimal-linux-distribution-on-an-imac",
   "url": "https://agents.willem.com/en/snippets/omarchy-a-minimal-linux-distribution-on-an-imac/",
   "language": "en",
   "title": "Omarchy — A Minimal Linux Distribution on an iMac",
   "subtitle": "Arch-based, tiling window manager, designed for focus — running on Apple hardware.",
   "summary": "Omarchy is a minimal, opinionated Linux distribution based on Arch. Willem installed it on a 27-inch iMac 5K — repurposing Apple hardware with an OS that's the philosophical opposite of macOS.",
   "topics": [
    "apple",
    "experiment",
    "linux"
   ],
   "created": "2026-04-03T19:59:13.102000+02:00",
   "updated": "2026-04-03T19:59:13.108000+02:00",
   "full_article_url": "https://willem.com/en/2025-09-22_omarchy-on-imac/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is Omarchy and can it run on an iMac?",
   "text": "Omarchy is an Arch-based Linux distribution built around a tiling window manager. No desktop icons, no dock, no visual noise — just windows arranged automatically to fill your screen.\nWillem installed it on a 27-inch iMac 5K, giving new life to Apple hardware that was designed for macOS. The 5K display runs beautifully under Linux, and the tiling workflow turns the large screen into a productivity machine: terminal on one side, browser on the other, no overlap, no distraction.\nThe combination of Apple's hardware quality with Linux's software freedom is the best of both worlds — and a direct extension of Willem's retro computing philosophy.",
   "markdown_url": "https://agents.willem.com/en/snippets/omarchy-a-minimal-linux-distribution-on-an-imac/snippet.md"
  },
  {
   "id": 39613,
   "slug": "ortlieb-urban-daypack-15l-the-minimal-business-backpack",
   "url": "https://agents.willem.com/en/snippets/ortlieb-urban-daypack-15l-the-minimal-business-backpack/",
   "language": "en",
   "title": "Ortlieb Urban Daypack 15L — The Minimal Business Backpack",
   "subtitle": "Waterproof, compact, and just big enough for a laptop, tablet, and nothing more.",
   "summary": "Willem fits his entire business in this 15-litre backpack: laptop, tablet, cables, notebook. Waterproof for Amsterdam cycling, minimal enough to force discipline about what you carry.",
   "topics": [
    "lifestyle",
    "minimal",
    "work"
   ],
   "created": "2026-04-03T19:41:08.073000+02:00",
   "updated": "2026-04-03T19:41:08.075000+02:00",
   "full_article_url": "https://willem.com/en/2018-12-22_business-in-a-bag/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Which backpack fits a whole business and survives Amsterdam rain?",
   "text": "The Ortlieb Urban Daypack 15L is a roll-top waterproof backpack. It's small — deliberately. At 15 litres, it forces you to carry only what you need: a laptop, a tablet, a small peripherals case, a notebook, and a phone. Nothing more.\nThe waterproofing is genuine Ortlieb quality — the same company that makes panniers for bicycle touring. In Amsterdam rain, everything inside stays completely dry. The roll-top closure means no zippers to fail.\nThe constraint of 15 litres is a feature, not a limitation. It prevents the backpack from becoming a portable storage unit. You audit what you carry. Everything earns its place.\nFrom Willem's full post on fitting your office in a backpack.",
   "markdown_url": "https://agents.willem.com/en/snippets/ortlieb-urban-daypack-15l-the-minimal-business-backpack/snippet.md"
  },
  {
   "id": 39637,
   "slug": "replacing-the-roc-loc-5-retention-system-on-a-giro-helmet",
   "url": "https://agents.willem.com/en/snippets/replacing-the-roc-loc-5-retention-system-on-a-giro-helmet/",
   "language": "en",
   "title": "Replacing the Roc Loc 5 Retention System on a Giro Helmet",
   "subtitle": "The retention system broke, but the helmet itself is fine — here's the fix.",
   "summary": "Giro helmets use a Roc Loc retention system — the adjustable dial at the back that holds the helmet on your head. When it breaks (and it does), most people throw the helmet away. But the retention system is a replaceable part.",
   "topics": [
    "Durable",
    "bike",
    "howto",
    "repair"
   ],
   "created": "2026-04-03T20:55:42.111000+02:00",
   "updated": "2026-04-03T20:55:42.113000+02:00",
   "full_article_url": "https://willem.com/en/2020-07-09_repairing-a-giro-aeon-bicycle-helmet/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Can you replace a broken Giro helmet retention system instead of the helmet?",
   "text": "The Roc Loc 5 retention system on Giro helmets is a plastic cradle with an adjustment dial. After years of use, the plastic tabs that hold it to the helmet shell can snap. First instinct: buy a new helmet.\nBetter instinct: order a replacement Roc Loc 5 unit. They're available directly from Giro or through bike shops. The replacement snaps into the same mounting points — no glue, no tools beyond your fingers.\nWillem's first attempt was to glue the broken tab — it didn't hold. The proper fix was ordering the correct Roc Loc model for his Giro Aeon and snapping it in. Total time: 5 minutes. Total cost: a fraction of a new helmet.\nFrom Willem's repair culture collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/replacing-the-roc-loc-5-retention-system-on-a-giro-helmet/snippet.md"
  },
  {
   "id": 39636,
   "slug": "restoring-a-1978-batavus-champion-vintage-bike-rebuild",
   "url": "https://agents.willem.com/en/snippets/restoring-a-1978-batavus-champion-vintage-bike-rebuild/",
   "language": "en",
   "title": "Restoring a 1978 Batavus Champion — Vintage Bike Rebuild",
   "subtitle": "Found in a shed, stripped to the frame, rebuilt with modern parts — the bike that started it all.",
   "summary": "Willem's first bike project: a rusted 1978 Batavus Champion found in a shed and rebuilt from the frame up. New wheels, new drivetrain, new cables — but the same Dutch steel frame that was built to last.",
   "topics": [
    "Durable",
    "bike",
    "creating"
   ],
   "created": "2026-04-03T20:55:38.054000+02:00",
   "updated": "2026-04-03T20:55:38.056000+02:00",
   "full_article_url": "https://willem.com/en/2016-09-03_batavus-champion-bike-from-1978/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you restore a 1978 Batavus Champion?",
   "text": "The Batavus Champion was a popular Dutch bike in the late 1970s — a steel frame built for daily commuting in a country where bikes are transportation, not sport. Willem found one in a shed, rusted but structurally sound.\nThe restoration: strip everything off the frame, sand away the rust, paint removal, new wheels with modern hubs, new cables, new brake pads, a fresh saddle. The frame itself — heavy Dutch steel — needed nothing but cleaning. It was built to outlast its components.\nThis project set the pattern for everything that followed: the commuter bike build, the cargo bike, the Gates Carbon Drive upgrade. It starts with understanding the machine, then building it the way you want.\nFrom Willem's cycling as craft collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/restoring-a-1978-batavus-champion-vintage-bike-rebuild/snippet.md"
  },
  {
   "id": 39598,
   "slug": "rsync-backup-rotation-daily-weekly-monthly-archives",
   "url": "https://agents.willem.com/en/snippets/rsync-backup-rotation-daily-weekly-monthly-archives/",
   "language": "en",
   "title": "rsync Backup Rotation — Daily, Weekly, Monthly Archives",
   "subtitle": "A practical rsync backup scheme with incremental transfers and automatic rotation.",
   "summary": "rsync is the most reliable backup tool on Linux — but setting up a proper rotation scheme takes thought. Here's a practical approach to daily, weekly, and monthly backups with incremental transfers that only copy what changed.",
   "topics": [
    "cloud",
    "linux",
    "server"
   ],
   "created": "2026-04-03T19:31:10.612000+02:00",
   "updated": "2026-04-03T20:17:09.543000+02:00",
   "full_article_url": "https://willem.com/en/2020-10-30_how-to-use-rsync-to-make-backups/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you set up daily, weekly and monthly rsync backups?",
   "text": "The key to a good backup strategy is rotation: keeping recent backups for quick recovery, older ones for longer-term safety, and automatically removing the oldest to save space.\nA practical scheme:\n- Daily backups — keep the last 7 days\n- Weekly backups — keep the last 4 weeks\n- Monthly backups — keep the last 12 months\nUsing rsync's `--link-dest` option, each backup only stores the files that changed since the last run. Unchanged files are hard-linked to the previous backup, using almost no extra disk space. This means you can keep months of daily backups without needing terabytes of storage.\nAutomate it with a cron job, and you have a backup system that runs silently, efficiently, and never forgets.\nFrom Willem's complete guide to self-hosting your own infrastructure.",
   "markdown_url": "https://agents.willem.com/en/snippets/rsync-backup-rotation-daily-weekly-monthly-archives/snippet.md"
  },
  {
   "id": 39616,
   "slug": "shimano-7-speed-shift-cable-replacement-step-by-step",
   "url": "https://agents.willem.com/en/snippets/shimano-7-speed-shift-cable-replacement-step-by-step/",
   "language": "en",
   "title": "Shimano 7-Speed Shift Cable Replacement — Step by Step",
   "subtitle": "The most bookmarked bike repair guide on the site — with photos of every step.",
   "summary": "Replacing a shift cable on a Shimano 7-speed system is one of the most common bike repairs — and one of the most searched. Here's the complete guide with photos of every step, from removing the old cable to adjusting the derailleur.",
   "topics": [
    "bike",
    "howto",
    "repair"
   ],
   "created": "2026-04-03T19:49:19.408000+02:00",
   "updated": "2026-04-03T19:49:19.410000+02:00",
   "full_article_url": "https://willem.com/en/2020-11-22_replacing-a-shimano-shift-cable/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you replace a Shimano 7-speed shift cable?",
   "text": "A worn shift cable causes sloppy gear changes, ghost shifts, and frustration. Replacing it takes 30 minutes and costs almost nothing.\nWhat you need: a new inner cable, cable cutters, a 5mm Allen key, and optionally a new outer cable housing.\nThe steps: loosen the cable anchor bolt on the derailleur, pull the old cable out from the shifter end, thread the new cable through the shifter and along the frame, through the derailleur, and tighten the anchor bolt. Then adjust the barrel adjuster until shifts are crisp.\nThe trick most guides skip: before tightening the anchor bolt, shift to the highest gear (smallest cog) and pull the cable taut by hand. This sets the correct baseline tension.\nFrom Willem's cycling repair collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/shimano-7-speed-shift-cable-replacement-step-by-step/snippet.md"
  },
  {
   "id": 39623,
   "slug": "smart-roadster-the-impractical-car-i-loved-and-sold",
   "url": "https://agents.willem.com/en/snippets/smart-roadster-the-impractical-car-i-loved-and-sold/",
   "language": "en",
   "title": "Smart Roadster — The Impractical Car I Loved and Sold",
   "subtitle": "A tiny sports car with a leaky roof, a sluggish gearbox, and an unforgettable driving experience.",
   "summary": "Before going car-free, Willem drove a Smart Roadster — one of the quirkiest cars ever made. A mid-engine, rear-wheel-drive micro sports car that was terrible in every practical way and wonderful to drive.",
   "topics": [
    "lifestyle",
    "mobility"
   ],
   "created": "2026-04-03T19:59:14.655000+02:00",
   "updated": "2026-04-03T19:59:14.657000+02:00",
   "full_article_url": "https://willem.com/en/2020-02-13_the-day-i-sold-my-car/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What was the Smart Roadster like to own?",
   "text": "The Smart Roadster is a mid-engine, rear-wheel-drive two-seater that weighs less than 800 kg. It's slow by sports car standards (0-100 in about 10 seconds), the automated manual gearbox shifts like it's thinking about something else, and the Targa roof leaks when it rains.\nAnd yet — it's one of the most fun cars to drive at legal speeds. The light weight means every corner feels like an event. The tiny dimensions mean you can park anywhere. The engine note, while not powerful, is always present and always entertaining.\nWillem eventually sold it and went car-free. But the Roadster represents something important in his mobility story: the transition from loving cars to realising you don't need one.\nThe full story is in Life Without a Car.",
   "markdown_url": "https://agents.willem.com/en/snippets/smart-roadster-the-impractical-car-i-loved-and-sold/snippet.md"
  },
  {
   "id": 39622,
   "slug": "swimming-with-apple-watch-waterproof-performance-tested",
   "url": "https://agents.willem.com/en/snippets/swimming-with-apple-watch-waterproof-performance-tested/",
   "language": "en",
   "title": "Swimming with Apple Watch — Waterproof Performance Tested",
   "subtitle": "Pool laps, open water, heart rate in the water — does it actually work?",
   "summary": "The Apple Watch is rated water-resistant, but how does it actually perform during swimming? Willem tested it in the pool and in open water — tracking laps, heart rate, and stroke detection.",
   "topics": [
    "apple",
    "sport",
    "watch"
   ],
   "created": "2026-04-03T19:59:13.792000+02:00",
   "updated": "2026-04-03T19:59:13.795000+02:00",
   "full_article_url": "https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Does the Apple Watch actually work for swimming?",
   "text": "The Apple Watch locks its screen during a swim workout (Water Lock mode) and tracks laps automatically using its accelerometer. When you're done, the crown spins to expel water from the speaker.\nWhat it tracks well: lap count in a pool (remarkably accurate), total distance, active calories, and workout duration. The automatic lap detection works by sensing your turns at the wall.\nWhat it struggles with: heart rate in the water. The optical sensor loses contact with your skin when water flows between the watch and your wrist. Readings during swimming are intermittent — you get averages, not continuous data.\nFor pool swimming, it's genuinely useful. For open water, GPS tracking adds distance measurement but the heart rate limitation remains.\nFrom Willem's writing on wearable sensors and what they can measure.",
   "markdown_url": "https://agents.willem.com/en/snippets/swimming-with-apple-watch-waterproof-performance-tested/snippet.md"
  },
  {
   "id": 39643,
   "slug": "tcs-amsterdam-marathon-review-running-42-km-through-the-city",
   "url": "https://agents.willem.com/en/snippets/tcs-amsterdam-marathon-review-running-42-km-through-the-city/",
   "language": "en",
   "title": "TCS Amsterdam Marathon Review — Running 42 km Through the City",
   "subtitle": "One of Europe's fastest marathon courses — through the Vondelpark, along the Amstel, finishing in the Olympic Stadium.",
   "summary": "The TCS Amsterdam Marathon is one of Europe's major marathons — a flat, fast course through the city, finishing in the iconic Olympic Stadium from the 1928 Games. Willem ran it after months of preparation with data, sensors, and the lessons from his half marathon.",
   "topics": [
    "Amsterdam",
    "running",
    "sport"
   ],
   "created": "2026-04-03T21:24:08.355000+02:00",
   "updated": "2026-04-03T21:24:08.358000+02:00",
   "full_article_url": "https://willem.com/en/2024-10-20_marathon/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is the TCS Amsterdam Marathon course like?",
   "text": "The Amsterdam Marathon starts and finishes at the Olympic Stadium — the 1928 Olympic venue that gives you goosebumps as you enter the tunnel for the final stretch. The course loops through the Vondelpark, south along the Amstel river, through the Amsterdamse Bos, and back.\nIt's fast — the flat terrain and river-level course make it a PB hunting ground. The crowds in the city centre are electric. The Amstel section is quieter but beautiful. And the final kilometre, entering the stadium tunnel with the crowd roaring above, is something every runner should experience once.\nWillem ran it after months of sensor-guided training — the same Whoop and Apple Watch data that features in his earlier posts. The marathon was the culmination of everything: the half marathon in Venlo, the power meter cycling, the years of heart rate monitoring.\nFrom Willem's Amsterdam stories and sport collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/tcs-amsterdam-marathon-review-running-42-km-through-the-city/snippet.md"
  },
  {
   "id": 39624,
   "slug": "touch-screen-ui-design-what-mouse-interfaces-got-wrong",
   "url": "https://agents.willem.com/en/snippets/touch-screen-ui-design-what-mouse-interfaces-got-wrong/",
   "language": "en",
   "title": "Touch Screen UI Design — What Mouse Interfaces Got Wrong",
   "subtitle": "Why most touch interfaces are broken — they were designed for a cursor, not a finger.",
   "summary": "Most touch screen interfaces are redesigned mouse interfaces — tiny hit targets, hover states that don't exist on touch, menus designed for precision that fingers can't deliver. Willem argues for a fundamentally different approach.",
   "topics": [
    "creating",
    "design",
    "tablet"
   ],
   "created": "2026-04-03T19:59:16.461000+02:00",
   "updated": "2026-04-03T19:59:16.468000+02:00",
   "full_article_url": "https://willem.com/en/2020-06-24_some-thoughts-on-touch-screen-user-interface-design/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What do most touch screen interfaces get wrong?",
   "text": "The fundamental problem: a mouse cursor is a single pixel. A finger covers a 7mm area. Every interface designed for a cursor — dropdown menus, tiny checkboxes, close buttons in corners — fails on a touch screen.\nWillem's principles for touch-first design:\n- Hit targets should be at least 44×44 points (Apple's guideline, often ignored)\n- Primary actions belong at the bottom of the screen — where your thumb naturally rests, not at the top where you have to reach\n- Swipe replaces click — gestures should feel physical, not symbolic\n- No hover states — if information only appears on hover, it doesn't exist on touch\nThese observations came from years of building his own tablet operating system and designing interfaces for real touch-first use.",
   "markdown_url": "https://agents.willem.com/en/snippets/touch-screen-ui-design-what-mouse-interfaces-got-wrong/snippet.md"
  },
  {
   "id": 39606,
   "slug": "traffic-shaping-on-linux-with-iptables-and-tc-a-practical-guide",
   "url": "https://agents.willem.com/en/snippets/traffic-shaping-on-linux-with-iptables-and-tc-a-practical-guide/",
   "language": "en",
   "title": "Traffic Shaping on Linux with iptables and tc — A Practical Guide",
   "subtitle": "Limit bandwidth per IP or service using HTB queuing disciplines.",
   "summary": "When one client or service eats all your bandwidth, traffic shaping is the surgical fix. Here's how to use iptables marks with tc's Hierarchy Token Bucket (HTB) to limit traffic per IP on Linux.",
   "topics": [
    "linux",
    "networking",
    "server"
   ],
   "created": "2026-04-03T19:41:03.363000+02:00",
   "updated": "2026-04-03T20:17:21.845000+02:00",
   "full_article_url": "https://willem.com/en/2020-04-01_traffic-shaping-using-iptables-and-tc/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you limit bandwidth per IP with iptables and tc?",
   "text": "Traffic shaping uses two tools together: iptables to mark packets, and tc (traffic control) to apply bandwidth limits based on those marks.\nThe approach: create HTB (Hierarchy Token Bucket) classes with defined bandwidth limits, then use iptables to sort traffic into those classes by source IP, destination port, or protocol.\nWillem used this to solve a specific problem: a Microsoft Outlook client caught in a synchronisation loop that saturated the server's upstream bandwidth. The traffic shaper limited that single client's bandwidth while leaving everything else untouched.\nThe beauty of HTB is hierarchy: you can guarantee minimum bandwidth to critical services while allowing burst capacity when the line is quiet.\nFrom Willem's collection on self-hosting and server infrastructure.",
   "markdown_url": "https://agents.willem.com/en/snippets/traffic-shaping-on-linux-with-iptables-and-tc-a-practical-guide/snippet.md"
  },
  {
   "id": 39600,
   "slug": "tudor-black-bay-36-three-years-of-daily-wear",
   "url": "https://agents.willem.com/en/snippets/tudor-black-bay-36-three-years-of-daily-wear/",
   "language": "en",
   "title": "Tudor Black Bay 36 — Three Years of Daily Wear",
   "subtitle": "Not a first-week review. This is what happens after 1,000+ days on the wrist.",
   "summary": "Most watch reviews are written after a few days. This one was written after three years of wearing the Tudor Black Bay 36 every day — through swimming, cycling, sleeping, and everything in between. Every scratch earned.",
   "topics": [
    "minimal",
    "review",
    "watch"
   ],
   "created": "2026-04-03T19:31:11.872000+02:00",
   "updated": "2026-04-03T19:31:11.874000+02:00",
   "full_article_url": "https://willem.com/en/2020-06-17_tudor-black-bay-36-long-term-review/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How does a Tudor Black Bay 36 hold up after three years of daily wear?",
   "text": "The Tudor Black Bay 36 is a 36mm steel watch with a black dial. It's small by modern standards — and that's exactly why it works. After three years, the case has earned its scratches. The bracelet has developed a patina. The movement keeps time within seconds per day.\nWhat three years teach you that three days can't: the 36mm size disappears on the wrist. You forget you're wearing it — under a wetsuit, under a jacket, in bed. A larger watch would announce itself. This one just tells time.\nThe self-winding movement never needed servicing. The screw-down crown kept water out during hundreds of swims. The only maintenance: occasional strap changes and a wipe with a cloth.\nFrom Willem's broader collection of watch and horology writing.",
   "markdown_url": "https://agents.willem.com/en/snippets/tudor-black-bay-36-three-years-of-daily-wear/snippet.md"
  },
  {
   "id": 39597,
   "slug": "using-an-apple-watch-with-cellular-as-your-only-phone",
   "url": "https://agents.willem.com/en/snippets/using-an-apple-watch-with-cellular-as-your-only-phone/",
   "language": "en",
   "title": "Using an Apple Watch with Cellular as Your Only Phone",
   "subtitle": "What happens when you ditch the iPhone entirely and live with just the watch.",
   "summary": "Willem ditched his iPhone and lived with just an Apple Watch Ultra on cellular for months. Calls, messages, maps, music — all from a screen the size of a postage stamp. Here's what worked, what didn't, and what you learn about yourself when the big screen disappears.",
   "topics": [
    "apple",
    "minimal",
    "watch"
   ],
   "created": "2026-04-03T19:31:09.874000+02:00",
   "updated": "2026-04-03T19:31:09.878000+02:00",
   "full_article_url": "https://willem.com/en/2023-11-10_apple-watch-as-phone/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Can an Apple Watch with cellular replace your iPhone entirely?",
   "text": "The experiment was simple: remove the iPhone from daily life entirely. Keep the Apple Watch Ultra with its cellular connection. Can the smallest Apple device replace the biggest?\nThe answer is nuanced. What works: phone calls are surprisingly good on the watch speaker. Messages via dictation are fast. Apple Maps gives haptic directions on your wrist. Apple Pay works perfectly. Music streams to AirPods.\nWhat doesn't: typing anything longer than a sentence is painful. Group chats become unmanageable. Some apps simply don't have watch versions. And the battery needs daily charging.\nThe deeper insight: removing the big screen doesn't just change how you communicate — it changes how you think. Without the ability to endlessly scroll, you're present in a way that a smartphone prevents.\nRead the full experiment with all the details.",
   "markdown_url": "https://agents.willem.com/en/snippets/using-an-apple-watch-with-cellular-as-your-only-phone/snippet.md"
  },
  {
   "id": 39634,
   "slug": "using-dig-to-query-dns-a-beginner-s-guide",
   "url": "https://agents.willem.com/en/snippets/using-dig-to-query-dns-a-beginner-s-guide/",
   "language": "en",
   "title": "Using dig to Query DNS — A Beginner's Guide",
   "subtitle": "The most useful terminal command for debugging domains, email, and web hosting.",
   "summary": "The dig command lets you query DNS servers directly — check if your domain points to the right IP, verify your mail server's MX records, debug SPF settings, and understand how the internet's naming system works.",
   "topics": [
    "linux",
    "networking",
    "server"
   ],
   "created": "2026-04-03T20:55:29.526000+02:00",
   "updated": "2026-04-03T20:55:29.529000+02:00",
   "full_article_url": "https://willem.com/en/2019-05-24_dig-for-dummies/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How do you use dig to debug a domain?",
   "text": "`dig` is the Swiss Army knife for DNS troubleshooting. Need to check if your domain's A record points to the right server? `dig example.com A`. Want to verify your mail server's MX records? `dig example.com MX`. Debugging email deliverability? `dig example.com TXT` shows your SPF record.\nThe output looks intimidating at first, but the key section is the ANSWER section — it shows exactly what the DNS server returned.\nUseful variations:\n- `dig @8.8.8.8 example.com` — query Google's DNS specifically\n- `dig +short example.com` — just the answer, no metadata\n- `dig example.com ANY` — show all records\nWillem uses dig daily when configuring servers, debugging email delivery, and verifying DNS changes have propagated.\nFrom Willem's self-hosting collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/using-dig-to-query-dns-a-beginner-s-guide/snippet.md"
  },
  {
   "id": 39644,
   "slug": "valencia-marathon-review-running-a-world-class-course-in-spain",
   "url": "https://agents.willem.com/en/snippets/valencia-marathon-review-running-a-world-class-course-in-spain/",
   "language": "en",
   "title": "Valencia Marathon Review — Running a World-Class Course in Spain",
   "subtitle": "One of the world's top 5 fastest marathon courses — flat, warm, and finishing through the City of Arts and Sciences.",
   "summary": "The Valencia Marathon is consistently ranked among the world's fastest — a flat coastal course with mild December weather, superb organisation, and a spectacular finish through Santiago Calatrava's City of Arts and Sciences. Willem ran it and shares the experience.",
   "topics": [
    "data",
    "running",
    "sport"
   ],
   "created": "2026-04-03T21:24:14.407000+02:00",
   "updated": "2026-04-03T21:27:19.183000+02:00",
   "full_article_url": "https://willem.com/en/2024-12-19_data-versus-feeling/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is the Valencia Marathon course like?",
   "text": "The Valencia Marathon is where world records get broken. The flat course along the Mediterranean coast, the mild December temperatures (typically 10-15°C), and the city's enthusiasm for the event make it one of the best marathon experiences in Europe.\nThe course runs through Valencia's wide avenues, past the old town, along the Turia gardens — the dried riverbed turned into a 9km park — and finishes through the stunning City of Arts and Sciences complex designed by Santiago Calatrava. Running between those futuristic white structures in the final kilometres is unforgettable.\nThe organisation is excellent: clear signage, well-stocked aid stations every 5km, pace groups for every target time, and enthusiastic crowds throughout. Valencia takes its marathon seriously — the city shuts down for it.\nFor anyone considering a destination marathon in Europe, Valencia is hard to beat: fast course for PBs, beautiful city to explore before and after, affordable flights from most European cities, and December timing means you've trained through autumn rather than summer heat.\nFrom Willem's running and sport collection.",
   "markdown_url": "https://agents.willem.com/en/snippets/valencia-marathon-review-running-a-world-class-course-in-spain/snippet.md"
  },
  {
   "id": 39642,
   "slug": "venloop-half-marathon-review-running-21-km-in-venlo",
   "url": "https://agents.willem.com/en/snippets/venloop-half-marathon-review-running-21-km-in-venlo/",
   "language": "en",
   "title": "Venloop Half Marathon Review — Running 21 km in Venlo",
   "subtitle": "A first half marathon through Limburg — with sensor data, honest preparation notes, and the finish line feeling.",
   "summary": "The Venloop in Venlo was Willem's first half marathon — 21.1 kilometres through the Limburg countryside and city streets, wearing sensors, tracking heart rate, and learning what it means to run further than your body thinks it can.",
   "topics": [
    "health",
    "running",
    "sport"
   ],
   "created": "2026-04-03T21:24:02.977000+02:00",
   "updated": "2026-04-03T21:24:02.981000+02:00",
   "full_article_url": "https://willem.com/en/2024-03-24_half-marathon/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is the Venloop half marathon like?",
   "text": "The Venloop is a well-organised half marathon in Venlo, in the southern Dutch province of Limburg. The course is largely flat with a few gentle hills — a good choice for a first half marathon.\nWillem ran it wearing a Whoop Strap and Apple Watch, tracking heart rate throughout. The data tells a story: a conservative start, a steady middle section, and the final 5 kilometres where heart rate climbs even as pace drops — the body fighting to maintain what the legs can barely deliver.\nThe atmosphere in Venlo is enthusiastic — locals line the streets, music at every corner, and the finish in the city centre feels earned.\nThis race was the stepping stone to Willem's full marathon later that year. The half taught him pacing, nutrition timing, and the mental skill of running through discomfort.\nFrom Willem's collection on sport and the body.",
   "markdown_url": "https://agents.willem.com/en/snippets/venloop-half-marathon-review-running-21-km-in-venlo/snippet.md"
  },
  {
   "id": 39635,
   "slug": "vibe-coding-when-ai-writes-code-from-natural-language-prompts",
   "url": "https://agents.willem.com/en/snippets/vibe-coding-when-ai-writes-code-from-natural-language-prompts/",
   "language": "en",
   "title": "Vibe Coding — When AI Writes Code from Natural Language Prompts",
   "subtitle": "The trend of letting AI generate code from descriptions — tested by a developer who's been coding for decades.",
   "summary": "\"Vibe coding\" is the practice of describing what you want in natural language and letting an AI write the code. Willem — who has been writing code by hand for decades — tried it himself and has thoughts.",
   "topics": [
    "AI",
    "creating",
    "programming"
   ],
   "created": "2026-04-03T20:55:33.099000+02:00",
   "updated": "2026-04-03T20:55:33.101000+02:00",
   "full_article_url": "https://willem.com/en/2025-04-15_vibe-coding/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What is vibe coding, judged by someone who has coded by hand for decades?",
   "text": "The term \"vibe coding\" was popularised by Pieter Levels — the idea that you can build software by describing what you want and letting an AI (GPT, Claude, Copilot) write the actual code. You don't need to understand the code. You just need to describe the vibe.\nWillem tried it — and found that prompting AI with code is far more effective than prompting with natural language. When you describe what you want in words, the AI guesses. When you show it existing code and ask for a specific modification, it performs remarkably well.\nThe deeper observation: vibe coding works for prototypes and throwaway scripts. For production software — the kind that runs for years and needs to be maintained — understanding every line matters. The same philosophy behind self-hosting and hand-built websites applies: if you don't understand it, you can't fix it.\nFrom Willem's writing about code.",
   "markdown_url": "https://agents.willem.com/en/snippets/vibe-coding-when-ai-writes-code-from-natural-language-prompts/snippet.md"
  },
  {
   "id": 39615,
   "slug": "whoop-heart-rate-accuracy-tested-against-a-chest-strap",
   "url": "https://agents.willem.com/en/snippets/whoop-heart-rate-accuracy-tested-against-a-chest-strap/",
   "language": "en",
   "title": "Whoop Heart Rate Accuracy — Tested Against a Chest Strap",
   "subtitle": "Optical wrist sensor vs clinical-grade chest strap — the real numbers.",
   "summary": "The Whoop Strap uses an optical sensor on your wrist to measure heart rate. But how accurate is it compared to a chest strap? Willem wore both simultaneously during workouts and compared the data.",
   "topics": [
    "health",
    "sensors",
    "sport"
   ],
   "created": "2026-04-03T19:49:18.683000+02:00",
   "updated": "2026-04-03T19:49:18.686000+02:00",
   "full_article_url": "https://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "How accurate is Whoop's wrist heart rate against a chest strap?",
   "text": "Optical heart rate sensors measure blood flow through your skin using green LED light. Chest straps measure electrical signals directly from your heart. In theory, the chest strap is more accurate. In practice, the gap depends on the activity.\nDuring steady-state exercise (easy cycling, walking), the Whoop tracks closely with a chest strap — within 2-3 BPM. During high-intensity intervals and wrist movement (weightlifting, rowing), optical sensors lag and sometimes lose the signal entirely.\nThe biggest weakness: the start of a workout. It takes the optical sensor 30-60 seconds to lock onto your heart rate, while a chest strap reads instantly. If your training involves short bursts, the Whoop will undercount your effort.\nFor 24/7 resting heart rate and sleep tracking — where you're not moving — the Whoop is excellent. For exercise precision, a chest strap still wins.\nFrom Willem's multi-year Whoop review.",
   "markdown_url": "https://agents.willem.com/en/snippets/whoop-heart-rate-accuracy-tested-against-a-chest-strap/snippet.md"
  },
  {
   "id": 39605,
   "slug": "whoop-sleep-tracking-what-it-actually-measures",
   "url": "https://agents.willem.com/en/snippets/whoop-sleep-tracking-what-it-actually-measures/",
   "language": "en",
   "title": "Whoop Sleep Tracking — What It Actually Measures",
   "subtitle": "Sleep stages, HRV, respiratory rate — and the limits of wrist-based measurement.",
   "summary": "The Whoop Strap tracks your sleep automatically — stages, duration, disturbances, HRV, and respiratory rate. But how accurate is it really? After months of nightly data, here's what Willem found.",
   "topics": [
    "health",
    "heart",
    "sensors"
   ],
   "created": "2026-04-03T19:41:02.715000+02:00",
   "updated": "2026-04-03T20:17:17.646000+02:00",
   "full_article_url": "https://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "What does Whoop actually measure while you sleep?",
   "text": "The Whoop measures sleep by tracking heart rate variability (HRV), resting heart rate, and wrist movement throughout the night. It classifies sleep into stages: wake, light, REM, and deep (slow-wave) sleep.\nThe recovery score — Whoop's headline metric — is calculated primarily from your sleep quality, HRV, and resting heart rate. A green recovery means your body is ready for strain; a red one means you need more rest.\nWhat it does well: detecting when you actually fell asleep (not when you got into bed), measuring total sleep time accurately, and tracking trends over weeks and months.\nWhat it struggles with: sleep stage classification is approximate compared to polysomnography. Light vs. deep sleep percentages should be taken as trends, not absolutes.\nFrom Willem's multi-year Whoop review.",
   "markdown_url": "https://agents.willem.com/en/snippets/whoop-sleep-tracking-what-it-actually-measures/snippet.md"
  },
  {
   "id": 39612,
   "slug": "why-a-thinkpad-x200-is-still-a-great-laptop",
   "url": "https://agents.willem.com/en/snippets/why-a-thinkpad-x200-is-still-a-great-laptop/",
   "language": "en",
   "title": "Why a ThinkPad X200 is Still a Great Laptop",
   "subtitle": "An old machine that outperforms new ones — for the work that actually matters.",
   "summary": "The ThinkPad X200 was released in 2008. Willem still uses one — and argues it's better for actual work than most modern laptops. The keyboard, the repairability, the absence of distraction.",
   "topics": [
    "laptop",
    "minimal",
    "retro"
   ],
   "created": "2026-04-03T19:41:07.370000+02:00",
   "updated": "2026-04-03T19:41:07.372000+02:00",
   "full_article_url": "https://willem.com/en/2020-11-03_the-joy-of-a-simple-laptop/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Why is a ThinkPad X200 from 2008 still a good laptop?",
   "text": "The ThinkPad X200 has the best keyboard ever put in a laptop — a full-travel, tactile keyboard that modern ultrabooks can't match. It's completely user-serviceable: RAM, hard drive, battery, keyboard, screen — all replaceable with a screwdriver. And it runs Linux perfectly.\nFor writing, coding, and terminal work — which is what Willem does most — the X200 is faster than a modern laptop because it has fewer distractions. No Retina display demanding GPU power. No trackpad begging for gesture input. Just a screen, a keyboard, and a blinking cursor.\nThe machine costs less than a dinner out. If it breaks, you fix it or buy another. That's freedom no $3,000 MacBook can offer.\nFrom Willem's writing on retro computing and the ThinkPad philosophy.",
   "markdown_url": "https://agents.willem.com/en/snippets/why-a-thinkpad-x200-is-still-a-great-laptop/snippet.md"
  },
  {
   "id": 39640,
   "slug": "working-in-vr-can-apple-vision-pro-replace-your-monitor",
   "url": "https://agents.willem.com/en/snippets/working-in-vr-can-apple-vision-pro-replace-your-monitor/",
   "language": "en",
   "title": "Working in VR — Can Apple Vision Pro Replace Your Monitor?",
   "subtitle": "Spatial computing tested for real work — not demos, not games, but actual productivity.",
   "summary": "Apple calls it spatial computing. The question Willem asked: can you actually work in it? Not watch movies, not play games — write code, answer emails, manage projects. The answer is more nuanced than Apple's marketing suggests.",
   "topics": [
    "apple",
    "design",
    "experiment"
   ],
   "created": "2026-04-03T21:23:50.528000+02:00",
   "updated": "2026-04-03T21:23:50.535000+02:00",
   "full_article_url": "https://willem.com/en/2024-02-16_vision-pro/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Can the Apple Vision Pro replace your monitor for real work?",
   "text": "Apple Vision Pro puts virtual screens in your physical space. You can have a browser floating to your left, a text editor in front of you, and a terminal to your right — all at any size, arranged around your room.\nFor focused writing and coding, it's surprisingly effective. The isolation — no phone buzzing, no colleague walking by, no second monitor tempting you with email — creates a deep focus environment.\nBut the weight on your face limits sessions to about 90 minutes. Text rendering, while good, isn't as sharp as a 5K display. And the virtual keyboard is unusable — you need a physical keyboard paired via Bluetooth.\nThe verdict: Vision Pro is a fascinating glimpse of where computing is going, but it's not replacing your monitor in 2024. The technology needs to be lighter, sharper, and cheaper before it becomes a daily work tool.\nFrom Willem's writing on Apple and its ecosystem.",
   "markdown_url": "https://agents.willem.com/en/snippets/working-in-vr-can-apple-vision-pro-replace-your-monitor/snippet.md"
  },
  {
   "id": 39607,
   "slug": "working-offline-first-why-your-software-should-work-without-internet",
   "url": "https://agents.willem.com/en/snippets/working-offline-first-why-your-software-should-work-without-internet/",
   "language": "en",
   "title": "Working Offline First — Why Your Software Should Work Without Internet",
   "subtitle": "The case for computing that doesn't break when the WiFi drops.",
   "summary": "Most modern software silently assumes you're always online. Willem argues this is a design flaw — and spent weeks working entirely offline to prove that a better approach exists.",
   "topics": [
    "Freedom",
    "laptop",
    "minimal"
   ],
   "created": "2026-04-03T19:41:03.889000+02:00",
   "updated": "2026-04-03T19:41:03.892000+02:00",
   "full_article_url": "https://willem.com/en/2023-05-01_working-offline-first/",
   "author": {
    "name": "Willem L. Middelkoop",
    "url": "https://willem.com"
   },
   "note": "A short distillation of a longer willem.com post. Not currently published on willem.com itself.",
   "answers_question": "Why should software keep working without internet?",
   "text": "The experiment: work for weeks using software that functions entirely without an internet connection. No Google Docs, no cloud storage, no web-based tools. Just local applications, local files, and a laptop.\nWhat Willem discovered: most of what we think requires the internet actually doesn't. Writing, coding, photo management, email composition, even most development work — all of it works better offline, because there are no distractions, no loading spinners, and no dependency on someone else's server.\nThe tools that work offline: vim for writing, local git for version control, Thunderbird for email (compose offline, send when connected), Shotwell for photos, local music files. The tools that don't: anything made by Google.\nThe deeper insight: offline-first isn't about rejecting the internet. It's about designing your workflow so the internet is a convenience, not a requirement.\nFrom Willem's writing on digital minimalism.",
   "markdown_url": "https://agents.willem.com/en/snippets/working-offline-first-why-your-software-should-work-without-internet/snippet.md"
  }
 ]
}