# willem.com, complete corpus (English) Generated 2026-09-15T08:10:22+00:00. The Dutch edition is at https://agents.willem.com/nl/corpus.md . Machine-readable index: https://agents.willem.com/index.json . Human edition: https://willem.com/ . # willem.com, full corpus (en) Generated 2026-09-15T08:10:22+00:00. 198 posts, newest first. Source: https://willem.com --- ## Omascribe *Writing by hand on a Linux laptop* · 2026-09-09 · https://willem.com/en/2026-09-09_omascribe/ On Sunday evening 6 September I built a small app to write by hand on the Framework 12. Three days later it is version 0.1, the source is public, and every reflection since has been written with it. This post shows what Omascribe is, why I made it, what it does and, just as important, what it deliberately leaves out. With a look at the iPad and the reMarkable, the two things it replaces on my desk. ## Why I write by hand. Every month starts on paper and the sharpest lines in my notes are always the handwritten ones; I wrote about that in the piece on [closing the draughty door](https://willem.com/en/2026-02-04_closing-a-draughty-door/). Handwriting works for me in a creative way. A pen does not autocomplete, it does not suggest, it waits. Ideas come out in the order they arrive, with a sketch next to them when words are not enough. I like that, and I want to keep it. The problem was the gear. The [Framework 12](https://willem.com/en/2026-08-26_innovation-is-software/) on my desk, the 'agentic workbench', has a touch screen and a pen. On Linux there was nothing I wanted to write with, there are existing apps like Xournal but I find those apps overwhelming in options + features. The iPad may have the best pencil there is, but it is hampered by the Apple notes app that is a hit and mis with 'Apple Intelligence' interfening with my writing. The reMarkable is [better](https://willem.com/en/2021-05-31_using-the-remarkable-paper-tablet/), but it is an island and requires its third party service for syncing. So on a Sunday evening I opened a terminal, described what I wanted, and wrote the first page with it the same night. It was, in my own word, liberating. ![9 September: the Framework 12 folded flat on the desk, the stylus beside it, and the first thing everyone writes](https://willem.com/global/images/c041d056edcc.webp) ## What it is Omascribe is a pencil-first notes app for Linux. Qt Quick and C++, the same stack as Omawrite, the writing app in Omarchy, and the same quiet chrome. The name is the pen counterpart of write: scribe. One infinite page per note that grows as you write down it. The ink is stored as vectors in a plain JSON file, not as a bitmap, so a page of handwriting is a few hundred kilobytes and can be read by anything. Inks have names, not colour codes, so a theme change never hides a stroke. Deleting a note moves it to a trash folder. Nothing leaves the machine. The pen is raw. The digitiser of the Framework 12 is not the best, I wrote that on the first page, but the smoothing that libinput applies by default made my handwriting "flattened", not mine. That is off now, in the app and in a small quirk file for the system, and no smoothing, curve fitting or point thinning will ever be added. The raw, jagged little lines are exactly the point. ![Omascribe on Omarchy: a page with vector ink, pixel art and a typed block, the desktop either side](https://willem.com/global/images/0d51caebc2c3.webp) ## What it does The pen writes. Two fingers scroll. Nothing else moves the page: no scrolling with one finger, no page that follows the pen, no palm that drags the paper away while you write. That last one took a day to get right, because a palm on the glass looks like a finger to the software. Now the pen owns the page, while it is near. Then the rest, kept short. An eraser that removes whole strokes. A lasso to move a block of writing. A ruler that snaps a line to fifteen degrees. Undo with a two finger tap. Four inks, three widths. Typed text: click anywhere and type, and the block takes the margins of the handwriting around it. Export to PDF or SVG on white paper, whatever the screen looks like. A fullscreen mode with nothing on it but the page, the title scrolling along as part of the paper. And plugins: per person, per install, outside the source tree. Mine is a single button that mails the note as a PDF to my notes archive, and tells me when it has left. ![Fullscreen: nothing but the page. The title scrolls along as part of the paper](https://willem.com/global/images/21fe488c16e4.webp) The feature I did not plan is the one I have used most since! While the app is open, the current page is mirrored for agents: a JSON with the metadata, an SVG with the vectors, and a PNG of the ink on white paper. Unhappy with the icons Grok had made, at some point I tried drawing an undo/redo icon myself. And sure enough, the agent could see and understand it. The agent read the drawing, and built them. That is something no iPad or reMarkable can match. Agents can read your notes and see your sketches (if you let them). For [agentic development](https://willem.com/en/2026-09-07_twenty-times-faster/) that is a big deal: a layout idea drawn in ten seconds is a specification. ![What the agent sees: the live readout of the page as a PNG on white paper, next to the JSON and the SVG](https://willem.com/global/images/458573d1346a.webp) ## What I left out No cloud, no sync, no account. No handwriting recognition. No zoom. No layers, no shapes, no brushes, no textures, no paper choices, no lined paper, and certainly no blue lines. No notebooks, tabs, folders or tags: a list of notes on the left, newest first, like the first version of any notes app. No settings screen. No smoothing. No fluff in the chrome: the toolbar is a pill with the tools, undo and redo, the inks and the widths. The dot grid appears only while you scroll, then fades. That is the whole app. Some of this will come. Most of it will not. Every feature that is missing is a feature that cannot get in my way. ![The note list on the left, newest first. No notebooks, no folders, no tags](https://willem.com/global/images/9df24720f5ce.webp) ## iPad and reMarkable I have written about tablets since [2016](https://willem.com/en/2016-08-15_ipad-pro-as-primary-computer/), and about the [iPad as a tool](https://willem.com/en/2023-05-08_tablet-as-tool/) more recently. Apple's pencil and screen are better than the Framework's. The reMarkable's paper is better than any screen. If hardware is what you want, buy one of those. But what they cannot match is software freedom. Everything I find stupid about my writing app, I can change, and that is a very big advantage. The iPad's notes app kept me away from handwriting for a year over a line pattern (by Apple Intelligence) I could not switch off. Five years ago I [abandoned my own tablet OS](https://willem.com/en/2021-01-14_abandoning-my-own-tablet-os/) because keeping it working cost more than it gave. The difference in 2026 is now speed: the app you are looking at was built in an evening and refined in a day, and the fixes for the two-finger scroll, the palm and the typed text each took less time than writing this section. Because the agent that builds it lives in the same operating system as the app itself, I can make improvements easily and directly as I go. ![The first page, Sunday 6 September, written with the app the evening it was built](https://willem.com/global/images/222fc85a48d4.webp) ## Download Omascribe The source is at [source.willem.com/omascribe](https://source.willem.com/omascribe/) and on [GitHub](https://github.com/willem-com/omascribe), MIT licensed. It needs Qt 6 and builds with two commands. It was made on Omarchy with the Framework 12 and its stylus, but nothing in it is bound to that hardware; any Linux laptop or tablet with a pen should do. ## Conclusion Omascribe is a small app that does one thing: it lets your pen do the work and stays out of the way as much as it can. Because the source is free, you or your AI agent can shape the app further to your own hand (and handwriting), good luck with it! --- ## Twenty Times Faster *On pace, and the human in the loop* · 2026-09-07 · https://willem.com/en/2026-09-07_twenty-times-faster/ On 11 August I wrote in my notebook: the speed at which we move is about twenty times the old top speed. In one day I do what I used to do in twenty. This post is about that speed, what it does to the human in the loop, and the counterweight I found. It is the first post of September, written on a day of deliberately doing less. ## Twenty times The number is not a boast, it is a measurement. In August [two problems on the cloud](https://willem.com/en/2026-08-26_innovation-is-software/) were analysed and fixed on the day they appeared, work that used to be a week of digging. It is mentally draining, this speed. Still I find it beautiful, because you shoot with precision and power. Last week was a normal week. A complete restaurant site. A proof of concept for an event venue, promised online within the week. The final touches on a bar site. New sections on two local news sites and a full site for a city square. A site and a members area for a medical publication. Printer support in the shop app, through Apple's review. Analyses of four competitors. A video call setup on the new laptop. And on Sunday evening a prototype for writing by hand, which is how these notes were written. In the same week: three customer visits, two video calls, school runs, football training and a match, a birthday present for my wife built as a little game, a sleepover guest. It is not surprising that we sometimes feel a bit full. ![Saturday night, 5 September: the terminal on the laptop, one of the sites of the week in the making](https://willem.com/global/images/3559ce2f9581.webp) ## The human in the loop Mid August, after a week of full throttle, I wrote: I am at my max. Head and body at the limit. The gear worked fantastically, and I was the limiting factor. That is the honest state of things in 2026: the agents do not tire, the logs do not sleep, the builds run at night. The bottleneck has moved, and it moved to me. On a campsite in France I had already written the paradox down: post AI, the challenge is simple to use, less is more. Ship less. A contradiction with agents that can make everything. And the people around you do not always keep up either. The pipelines give you speed, enough to [ship at eighty percent](https://willem.com/en/2026-07-19_80-is-better-than-nothing/) and learn. But a customer will look at the breakthrough tomorrow, and a partner needs a week. I have to learn to accept that not everyone switches at light speed. Sometimes that delay is a gift: a quieter period, a little more time for a delivery. ![The partial eclipse over the trees on 12 August, an evening walk in the busiest week of the month](https://willem.com/global/images/9ce87982e20e.webp) ## The counterweight The answer I found is not slower agents. It is a routine for the body. We must not see sport as not working: the ideas, the space and the energy are crucial. So there is a shake before the coffee, a run on the odd days, the gym three times a week, and no more finishing the leftovers. A 10K alone on a Friday morning is a relief, clarity of mind through real silence. The best runs of the summer, along the Seine at dawn and on the coast of Brittany, were not fast or strong. They were where the thinking happened. And at the end of August the sharpest note of all: the overload creates the wish for rest and space. That space has to be protected. Sleep matters, and working late at night maybe not. With school, sport and football there is not enough left over to sustain that. I have known this since [my first marathon](https://willem.com/en/2024-10-20_marathon/): you can push the limit, but you cannot move it by wanting. ![The Seine at sunrise on 6 August, the run where the thinking happened](https://willem.com/global/images/4db35f523cbd.webp) ![The Eiffel tower from below at the turnaround, not fast or strong](https://willem.com/global/images/6513b0b16788.webp) ## A marathon, not a sprint Something else happened this week. Sites that generate themselves are becoming common, I see comparable techniques appear around me. The distinguishing factor is no longer the public endpoint, it is the stack behind it: a customer who is happy with the app in her pocket, another who bounces because of [his charts](https://willem.com/en/2026-07-07_counting-agentic-traffic/). That is much harder to replicate. And there is a harder question still, also for the big AI companies: how do you carry the responsibility of keeping an engine running well, for years? Generating something neat once is easy. Keeping it running, maintaining it, over the long term is another matter. This is a marathon, not a sprint. ![One of the week's deliveries on the phone: a site for a city square, fresh every day](https://willem.com/global/images/79e1c1b814fe.webp) ## This week So this week we do it differently. Mandatory time for sport and away from the keyboard. A week of rolling out cannot hurt: ninety-nine percent reactive, an empty inbox, and some polish on our own tools. No new websites without a customer's mandate. No customer contact on my initiative. This morning I slept an hour and a half longer and ran five kilometers. The plan had been a half marathon. The body really needed the extra sleep, and I feel a lot better now. The things that are in motion can roll out on their own for a while. ![Sunday 6 September: sleep 86 percent, recovery 94 percent, strain 0.4, a day off by design](https://willem.com/global/images/cf1b99dea77c.webp) ## Conclusion Twenty times faster is real, and so is the bill. The agents do not tire, I do, and that makes the pace mine to set. A run, a night of sleep and a week of doing less are not a break from the work. They are how the work stays good. ![Sunday evening: the prototype for writing by hand on the new laptop, these notes were written with it](https://willem.com/global/images/0966920cee33.webp) --- ## My Own Custom Android *A home screen that is a window into the homelab* · 2026-08-31 · https://willem.com/en/2026-08-31_my-own-custom-android/ In August my phone changed. Not the hardware, a Fairphone 5 I have had for a while, but what is on it: a home screen I wrote myself, for one user. No app store, no onboarding, no settings menu for people who are not me. This post is about why I built it, what it does, and the honest balance after two weeks of Android only. ## Why a launcher In July I researched a fully custom build of the phone's operating system: my own signed image, my own launcher baked in, the always-on display back. It works, I had it running in an emulator in an evening. I also wrote down the tinker's tax: you become the maintainer of your own phone, every month, until 2031. I parked it. The free win was the launcher itself: an app that replaces the home screen, installed like any other app, no custom image needed. What made it possible is a change in attitude I noticed this month: I increasingly develop only for myself. Letting go of the idea that other users must understand it too makes the tooling true bespoke, and that is liberating. A custom launcher with all its compliance I would never have built for fun. Now the [homelab](https://willem.com/en/2026-08-26_innovation-is-software/) does the tedious part, and I did it in a day, on 18 August. It has been my default home screen since. ![18 August, first evening: the Fairphone with the stock app list, the launcher a few hours away](https://willem.com/global/images/85feded14a60.webp) ## What it does The screen is black. On the bottom half a text list of the things I actually use: calls, browser, agenda, camera, photos, Lemmid, mail, WhatsApp, X. Next to it three cards: the weather, the agenda, and my heart rate, straight from the WHOOP over Bluetooth, no app in between. On the top half a terminal, connected over mosh to the machine in the homelab. That is the whole idea: the phone is a window into the one brain. The agents keep working when the phone sleeps, and I type into the session I left on the desk. ![The launcher on its first morning: a text list, weather, agenda and the heart rate from the WHOOP, with the terminal into the homelab above](https://willem.com/global/images/53d1fbc812e3.webp) The phone keeps no photos. The camera roll syncs home and empties itself, the phone is a viewfinder and [the library](https://willem.com/en/2025-08-19_android-photo-library-app/) lives in the homelab. The launcher opens that library as a full screen web app, and offers it to every other app as a photo source, so attaching a picture in WhatsApp goes through the library at home. Same for waar.willem.com, my self hosted Find My: the phone sends its position home, family sees whether I am in Limburg or in Amsterdam, and during a run they see the route and the heart rate live. With a Bluetooth keyboard the terminal goes full screen and Alt+Space opens a command palette. Reading this back, it is [my own tablet OS](https://willem.com/en/2020-03-09_making-my-own-tablet-os/) again, six years later, on a device I carry all day. ![The photo library at home as the photo app on the phone, the phone itself keeps nothing](https://willem.com/global/images/505cf54a37f6.webp) ![23 August after the run: the homelab's stats and the heart rate curve on the home screen, 121 bpm](https://willem.com/global/images/e79d1e11d5b7.webp) ## Friction Now the honest part. This week I put the phone next to the new laptop and used nothing else. What a difference with how polished iOS is. Willem OS on the Android is not bad, but there is still friction. The first afternoon cost sixty percent of the battery, because the terminal kept streaming while the screen was off. Fixed, a full day now ends with a quarter left. The heart rate card showed a perfect eighty beats per minute for three days: switching Bluetooth off never tells the app, so the link had silently died. Fixed too, it heals itself now. The phone denies every new app network access by default, which cost me an hour before I knew. ![The perfect eighty beats per minute that gave the Bluetooth bug away](https://willem.com/global/images/b93e4fc2128e.webp) Do we improve this or move back? That was the question in my notebook on 31 August. Here is what is good: agents run locally, with network, files and protocols. Nothing is in the way. There is a local shell. On the phone I do not have full control, WHOOP and WhatsApp are still someone else's, but I have far more than [on iOS](https://willem.com/en/2025-03-05_durable-smartphone/). And the strange, pleasant thing: the Android does not feel like a step back. ## Conclusion A home screen for one user, built in a day, improved every week since. It works because it does less: a list, three cards and a terminal into the homelab. The phone became malleable, and that is worth more to me than polish. In principle everything now works out, smartphone only, which I would have called unimaginable a year ago. So if your home screen is somebody else's idea of what you need, know that it is just an app. You can write your own, ha! ![The phone next to the keyboard on the desk: a window into the one brain](https://willem.com/global/images/5fd82c333ee4.webp) --- ## Innovation Is Software *One brain, a few pieces of glass and a twin in Amsterdam* · 2026-08-26 · https://willem.com/en/2026-08-26_innovation-is-software/ In August my computer setup changed more than it had in years. And yet the lesson of the month was the opposite of new hardware: the existing gear has stretch, innovation is software. This post is about one brain, the machine in the homelab where my files and my agents live, the machines around it, and why infrastructure has become subordinate to concept. ## One brain On 2 August, from a campsite in France, I got remote control over the router at home. The plan was to set up a direct connection to the machine in the homelab in Limburg: one brain, one login, one place where files and agents work. Two days later the workshop server that hosted my projects was phased out. Every project moved home, checksum verified, and the homelab took over the full role through a direct mosh link. From the campsite I steered it from my phone, with speech to go faster. That machine in the homelab is the anchor. It holds the platform, the customer projects, the photo library, the backups of the cloud and the agents that work on all of it. The cloud servers run the sites, [the agents](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) work from home. Everything else is glass: a screen and a keyboard to look at the brain with. ![2 August, from the campsite: a mosh session on the phone into the machine in the homelab, the one brain](https://willem.com/global/images/26f3aabac790.webp) ## Logs are readable On 11 August two problems on the cloud, one in mail and one in the web server, were analysed and fixed on the same day. That is only possible through the integration of the anchor in the agentic flow, plus an understanding of the relevant logs and signals. The speed at which we move is about twenty times the old top speed. In one day I do what I used to do in twenty. It is mentally draining, but you shoot with precision and power. The agents do not all live in the cloud. A local model runs on the homelab with no data leaving the house. On 24 August it watched the footage of the doorbell and described, frame by frame, a man walking barefoot to the front door. It was me. Local agents, with access to the network, the files and the protocols, nothing in the way, and a local shell: that is what makes the anchor more than a computer. ![24 August: the local model on the homelab describes the doorbell footage frame by frame, no data leaves the house](https://willem.com/global/images/eeb4415c5b35.webp) ## Glass Mid August I watched the introduction of the new Omarchy release. Beautiful work, and the most important features I already had for years: a window manager and integrated tooling. The agent integration is nice, but not fundamentally different from what I do myself. Eye candy is nice, but not a money mover. The existing gear has stretch, innovation is software. [Sixteen months ago](https://willem.com/en/2025-02-10_better-laptop/) I explained why I chose a Framework laptop for that gear. So why is there a second Framework on my desk, a twelve inch one? Because of a strict job description. It is not a second brain, it is the agentic workbench: persistent split screens for several agents at once, closed and reopened with one keystroke, and no local computing on it. Glass never becomes anchor. It runs [Omarchy](https://willem.com/en/2025-09-22_omarchy-on-imac/), it booted with a green W, and it cost a fraction of the machine it looks at. ![The Framework 12 open on the table: modular, repairable, and deliberately just glass](https://willem.com/global/images/b4dfdc3d90de.webp) ![First boot after setup on 25 August: a green W on the workbench](https://willem.com/global/images/f4b11a7655e9.webp) ## The twin On 22 August I ordered a backup computer and an internet line for Amsterdam. Yes, a fixed line: nine years after [the day I killed my LAN](https://willem.com/en/2017-07-31_the-day-i-killed-my-lan/) and went mobile only, the cable is back, because a machine that receives backups every night needs a connection that is always there. Although I am no fan of clutter, this was a smart step, crucial even, for the data. The anchor has become so important that we must do this. It became a Framework mainboard in a small case with an eight terabyte disk, built on the kitchen floor on 26 August and ready to travel to Amsterdam. From its first night there, the anchor pushes its [backups](https://willem.com/en/2023-12-15_backup-rotation-scheme/) to it. Two houses, two copies, one brain. ![26 August, the kitchen floor: the Amsterdam twin being built, a mainboard in a small case with the console on a monitor](https://willem.com/global/images/10fe33454dcd.webp) ## Infrastructure becomes concept The future? Infrastructure becomes subordinate to concept. Control over routers, devices and connections is scriptable. Logs are readable and concepts are translatable. The artefacts were there before: [my own tablet OS](https://willem.com/en/2020-03-09_making-my-own-tablet-os/) on a Surface, the Gran Fondo app. They were not good enough, and I [abandoned them](https://willem.com/en/2021-01-14_abandoning-my-own-tablet-os/). Now it is different, because I can realise things much faster. A custom launcher for my phone, with all its compliance, I would never have built for fun. This month I did. That is the next post. ## Conclusion One brain, a few pieces of glass and a twin in Amsterdam. The hardware decisions of this month were the small part. The big part is that a machine with agents, logs and a local shell does in a day what used to take weeks, and that the same setup now stands in two houses. Innovation is software. So before you order a faster machine: give the one you have some agents and a look at its logs. It has more stretch than you think, ha! ![Back at work: the workbench with the mechanical keyboard, the brain out of sight](https://willem.com/global/images/40db97a28181.webp) --- ## No Smartwatch *The best screen is no screen* · 2026-07-25 · https://willem.com/en/2026-07-25_no-smartwatch/ For nine years a smartwatch was on my wrist. This summer that ended: the Apple Watch went, and with it the sensors, the chargers and the bands. No extra screen, computer or device. This post is about why I finally do not need it anymore, and about a paradox: it is high tech that makes low tech possible. ## Closing a chapter I have written about smartwatches since [2017](https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/), and in 2023 I even tried to [replace my phone with the Watch](https://willem.com/en/2023-11-10_apple-watch-as-phone/). This May I made a tally of what an Apple Watch actually is: three MagSafe chargers, a USB charger, eight bands, two power pedals, two speed and two cadence sensors. Eighteen units plus the Watch, plus the software: sleep mode on, turn to see the time, notifications hidden in sleep mode, 45% of the battery gone after one night. One evening in June I put the Watch on for the last time. The next morning I handed it in. That chapter is closed. Simple. That is difficult. Because simple makes room for complex, clutter and redundancy. A half approach has no advantages: either you go all in on the data, with all the hassle that comes with it, or you leave the screen off your wrist altogether. I chose the latter. ![The Apple Watch back in its box, May 2026, just before it went](https://willem.com/global/images/d40dccca6b6d.webp) ## The phone is enough The smartphone has become so powerful that the watch had nothing left to add. Calls, navigation, payments, the camera, the odd message. And, new this year, [agents](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) that read my mail, follow the news and triage the incoming signals for me. What reaches me is what matters, at a moment of my choosing, in one daily digest. That used to be the promise of a watch that taps your wrist. It turns out the phone does that job better with the watch out of the way. I want to stress that the online world does not bother me. But I also know that offline focus has its power. ## One sensor, 24/7 What I do want is data about my body, and for that I have worn [WHOOP](https://willem.com/en/2022-01-14_wearing-whoop-4-0/) for years. No screen, no notifications, no attention. The battery lasts two weeks. It recognises a run or a ride by itself, I never press start. A sensor, data: yes! But a mini screen that beeps, half under your clothing, sensitive to moisture and touch, is fragile. One sensor, 24/7, is much more logical. ![The two that stayed: a mechanical watch and the WHOOP band, on the morning of a 21K trail run](https://willem.com/global/images/493ee5ef3794.webp) In May I ran 30 kilometers on feel, with the sensor quietly recording: an average of 124 beats per minute at a steady pace, without looking once. Two weeks later I rode [the Elfstedentocht](https://willem.com/en/2026-05-27_elfstedentocht-on-feel/) the same way. At the finish the WHOOP had the whole day, the recovery and the trip home. The screen was never missed. ## The watch that stays On my wrist now is a mechanical watch. It works without worries: in the pool, at a party, running, on the race bike, on a trail. No charging, no pairing, no update. Such a liberation, such calm. So after all. The strap unlocked its potential, it develops its own patina. ![The watch on my wrist on 1 July, the day the Watch chapter was closed for good](https://willem.com/global/images/65ecf8b88c69.webp) ## The paradox Here is the thing: it takes high tech to make low tech work. Efficient chips give a sensor two weeks of battery. Models recognise the run and classify the ride. Agents triage the mail and the news into a digest. The result is that the thing on my wrist can be dumb, and I can be present. This summer in Brittany I ran the most beautiful runs ever. Not fast or strong, but wonderfully beautiful: rocks, green, winding paths and the sea. No screen told me my pace and I did not miss it. An afternoon on the bike with my daughter: no distraction, pure attention. That is what the space is for, to think and to be there as a human. ![The road at dawn in Brittany, start of the most beautiful run ever](https://willem.com/global/images/e7f35c27342e.webp) ![The route around Carantec, 11.97 km, recorded without any beeps from my wrist](https://willem.com/global/images/dcfd19728b78.webp) ## Conclusion I no longer need it. Not because a smartwatch is bad, but because the phone got so strong and the sensor so good that the screen in between became redundant. It was an exercise in simplicity, and it took me nine years to arrive at that insight: the best screen is no screen. So if you catch yourself turning your wrist for a notification you did not ask for, try a month without. Your phone and your body will fill the gap, ha! ![Evening on the terrace: a watch that needs nothing from me](https://willem.com/global/images/68e33fba1f2e.webp) --- ## 80% Is Better Than Nothing *Ship it, learn from real feedback, iterate* · 2026-07-19 · https://willem.com/en/2026-07-19_80-is-better-than-nothing/ 80% is better than nothing. Whether we clean the bathroom, write content or deliver software. I wrote that line in my notebook this month, after a few weeks in which unfinished work turned out to be my best work. Not because it was good, but because it was out there: real people used it and told me what was missing. This post is about shipping in order to learn, and why perfect is the enemy of good. ## Perfect is the enemy of good We always thought of perfection. That slows you down enormously. A thing that is 80% done and in the hands of the person it was made for teaches you more in a week than a perfect version teaches you in a year, because the perfect version never leaves your desk. The last 20% is where the doubt lives, and doubt does not ship. The lessons I learn from the 80% work I delivered this year are gold. Two examples. A planning tool for a family business and a tool that turns a quote into a PDF. Neither are top creations. But the impact is enormous, with more in sight. Why? Customers feel heard. They get attention, and the feedback that comes back gives direction to the next step. ## Ship to learn The feedback you need is rarely about the code. In July I put agenticfirst.nl online: a site that explains to shop owners what a shop window for AI assistants is, and why they want one. The first version was 80%. The reactions were not about the pages, they were about the words: people asked what it actually was. How do you explain the value of a cutting edge technology to someone who has never seen it? You cannot work that out in private. You publish your explanation and watch where it fails. Every question is a rewrite, and every rewrite is a better product. ![agenticfirst.nl, the 80% version: the feedback came on the words, not the pages](https://willem.com/global/images/bfa9692e5e97.webp) ## Real data beats opinions The best example this month is [Lemmid Count](https://willem.com/en/2026-07-07_counting-agentic-traffic/). It went live on 5 July with a first classifier for bots and humans. Within a day a fleet of crawlers answered with behaviour I had not imagined. The purple circle in the screenshot below is a spike I did not trust: too many pages, too neatly spread, all in one language. I trained the classifier on exactly that signature. Two weeks later it was at version nine, every rule calibrated on real logs from real sites, and every upgrade recomputing the history. Had I waited for the perfect classifier, there would be no classifier. Reality is the only test set that matters, and you only get to run it by shipping. ![Lemmid Count on 16 July: the purple circle is the traffic spike I did not trust, and trained the classifier on](https://willem.com/global/images/2db193af45a8.webp) The same goes for the agents I work with. On the night of 17 July I sat with three terminals open, running the same jobs on different models and measuring what came back: tokens in, tokens out, and whether the result was any good. You do not know which model is good enough for which job until you run them side by side on real work. It is [the agentic loop](https://willem.com/en/2026-04-30_rapid-iteration-in-agentic-loops/) again, now with the agents themselves as the thing being iterated. ![The night of 17 July: three terminals, the same jobs on different models, tokens and quality measured](https://willem.com/global/images/b54c4bc46f4f.webp) ## Speed bootstraps Sometimes speed is exactly what an idea needs. [Six websites in ten days](https://willem.com/en/2026-06-24_six-websites-in-ten-days/) did not happen because I had a finished publisher, the publisher got finished because six sites needed it. The first version of hrlm.blog, a local news site, was built on the train to Amsterdam on 14 July. It was imperfect and it was live before I arrived. On holiday I built two more sites and four are in option. I gave a partner everything he needs to sell my work, with a demo, and I find that uncomfortable because doing it myself works fine right now. Still, I think it is smart: a new market I cannot reach on my own. And even if he sells nothing, we do not get dumber. His questions make the product sharper. The seeds are planted. They need time to germinate. That is not a reason to plant fewer. ![The first, imperfect version of hrlm.blog, built on the train to Amsterdam on 14 July](https://willem.com/global/images/3e035d683a77.webp) ## It is OK to fail Shipping at 80% means some of it will not work. I wrote about [Master of Change](https://willem.com/en/2025-01-18_master-of-change/) last year: balance is not found by resisting change, but by adjusting to it. Rugged flexibility, hold on to your values and adapt everything else. A failed iteration is not a verdict, it is data. The only real failure is refusing to learn from it. I learned that [the hard way](https://willem.com/en/2025-05-12_when-the-going-gets-tough/) in a marathon in the heat: the plan was perfect, the day was not, and adjusting mid-race is what got me to the finish. There is one exception, and it is important. 80% is not an excuse for sloppy foundations. The backend I keep hard, that is the fundament we stand on. It is the things on top, the pages, the tools, the words, that are allowed to be 80% today and 90% next week. ## Conclusion Ship it. Not because it is done, but because it is the only way to find out what done means. Real feedback, real data, real people. Iterate from there. Perfect is the enemy of good, and good, in the hands of someone who needs it, beats perfect on your desk every single time. So what is the 80% thing you have been sitting on? Publish it this week, ha! ![Five in the morning on 13 July, crew vest on, before the working day: just go](https://willem.com/global/images/16d41ce9e0a3.webp) --- ## Counting Agentic Traffic *Why your analytics does not see the AI agents reading your site* · 2026-07-07 · https://willem.com/en/2026-07-07_counting-agentic-traffic/ This month I brought Lemmid Count back: the website statistics of my platform, rebuilt from scratch without AWStats and without a database. Its party piece is the dimension every other analytics tool throws away: the bots. In the agentic era the question "what did AI agents read on my site" matters as much as "how many humans visited". This post is about counting what pretends not to be there, and about putting the answer in your customer's pocket. ## Google Analytics is blind here Google Analytics works by placing a piece of JavaScript on your pages. A browser runs it, the script reports home, and that report is your statistics. I explained the difference with log-based tools [back in 2018](https://willem.com/en/2018-08-20_google-analytics-vs-awstats/). In 2026 that difference has become the whole story. GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot and their friends fetch your HTML and read it. They do not run your JavaScript. They never appear in Analytics. If [the agentic web](https://willem.com/en/2025-07-26_the-agentic-web/) is where your next customers come from, your dashboard is showing you a shrinking world. The web server sees everything. Every request, every user agent, every status code, JavaScript or not. In July my site hartvaat.nl served 114,883 pageviews. 2,187 of them were humans. Analytics would have shown you the 2,187 and called it a quiet month. ![hartvaat.nl in July 2026: 114,883 pageviews, 2,187 by humans, 112,696 by bots; Analytics would have shown the small number](https://willem.com/global/images/64d66e9cea61.webp) ## Logs, not scripts Lemmid Count v3 reads the per-site logs of the web server directly, every hour, and folds them into small JSON files per site per day. No database anywhere, no tracking script on the pages, no third party at runtime: the visitor is never touched. That also fixes what killed the [previous version](https://willem.com/en/2023-04-05_cutting-cloud-costs/): AWStats pumping a near-raw copy of the logs into MariaDB forever. Now the rotated logs are the raw store and the summaries are the product. Two principles. Pages, never people: no visitor counts, no uniqueness tricks, no IP addresses on disk, the browser language instead of geo. And auto configuration: a site with a log file has statistics, nobody has to register anything. Every site on the platform runs along automatically. ## Classify, do not filter Every request becomes either human or bot, and a bot gets a family and a group: search, ai, social, seo, monitor, feed, lib, scraper. Declared bots are named by their user agent. Instead of filtering them out, Count shows them as first class citizens: a "read by AI agents" card with the agents by name, and a toggle between all, humans and bots. That is new, and it makes people look up. On a restaurant site, in the first days of July, ChatGPT had read 75 pages and Claude 51, next to 185 human pageviews. ![All, humans or bots: one restaurant site in the first days of July, 185 human pageviews next to 1,171 by bots](https://willem.com/global/images/74d2c36f8ca0.webp) ![The humans view: top pages of a cafe site, filtered in one tap](https://willem.com/global/images/30c2a7263eaa.webp) ## The pretenders Labeling is difficult, because some bots pretend to be human. A current Chrome user agent, HTTP/2, a plausible language header, one page per IP address, thousands of addresses from cloud providers. The user agent is worthless there. Behaviour is not. Real browsers load images. Real visitors arrive from search and links, and go to the same popular pages. A crowd that visits thousands of distinct pages, each exactly once, is not a crowd, it is a harvest. Hosting more than a hundred websites is the structural advantage: a signature that shows up on many sites within one hour is not a person. Add honey pots, pages no human would ask for, and address space from datacenters as a hint, never as a verdict. The classifier is versioned, and after every upgrade the last two weeks of history are recomputed. That matters, because the other side moves. One fleet answered a new rule within a day by fetching a single CSS file as an alibi. The next version asked for images. I will not list every signal here, that is the point of a honey pot. ![Read by AI agents, by name: chatgpt-user, claudebot and the stealth group of pretenders on the same site](https://willem.com/global/images/834784c15679.webp) ## Full circle: in your pocket Here is the thing: detailed statistics are not unique. Anyone with logs and patience can count. The other half of the job is translating it back into something friendly, pocketable and actionable. Count is an app my customers carry in their pocket, next to the [other Lemmid apps](https://willem.com/en/2026-06-24_six-websites-in-ten-days/): one screen per site, the month in one chart, the top pages, the sources, and the agents by name. No login rituals, no setup, it simply appears for every site you own. The feedback is the best part. A customer showing the stats during the coffee round, exactly the use I had in mind years ago. A cafe owner seeing that ChatGPT read the menu seventy times this month, and drawing the obvious conclusion: put the menu where the agents read it. That is a statistic turned into an action, on a phone, in ten seconds. ![The pocket app: Manager, Count, Handler, User and Bill, one home screen for every site you own](https://willem.com/global/images/e955f07cc8ac.webp) ## Conclusion The share of humans on the web will keep falling, and a tool that only counts humans will keep telling you the wrong story. Count the agents, name them, and hand the answer to the person who can act on it. High tech in the log parser, low tech on the screen. The bots read. You had better make sure they read the right thing, ha! ![Midnight on 6 July, the night Count came back, terminal on the iPad](https://willem.com/global/images/a36df8c61671.webp) --- ## Six Websites in Ten Days *Meet MP1, a publisher that ships in a ZIP* · 2026-06-24 · https://willem.com/en/2026-06-24_six-websites-in-ten-days/ Halfway June I came back from Amsterdam buzzing. A week and a half later six websites were live on a publisher that did not exist before: MP1, a static site generator that lives as a ZIP file inside my own CMS. This post is about what made that possible: automating the dull work with AI agents, so my time goes to the things that matter. It was exhausting, exhilarating and highly rewarding. ## Amsterdam energy Those days, and nights, were completely nuts, as I wrote in my notebook on 13 June. I had been in Amsterdam and was caught by the energy of real entrepreneurs, and by my own way of doing things from before [the move to Limburg](https://willem.com/en/2022-11-01_moving-to-the-countryside/). It led to a list: a friend on board with five websites, another back on board with one, new connections with creative people in the Amsterdam nightlife, and Lemmid Handler, my order handling app, in production. Building sites for hospitality in Amsterdam is [the Champions League of webdesign](https://willem.com/en/2025-01-23_champions-league-of-webdesign/), I knew what I was getting into. ## The dull work Every website needs the same boring things: a web server configuration, a certificate, a place to upload, a way to publish. I have done this by hand a hundred times. In one weekend that became managed-web-configs: an nginx configuration with certificate, created in production fully automatically. Add a queue for downloads and the distribution of the engine itself, and the boring part is gone. Not because it is unimportant, but because it is the same every time. That is exactly what computers are for. ## MP1 The Lemmid Manager is the CMS I built [over the past decade](https://willem.com/en/2025-07-23_the-power-of-one/): content, images and settings for every site live there. The proof of concept for a new generation publisher, MP1, turns the generator into a ZIP file that is stored in the site's own configuration. Check it out, change it, check it in. On save the Manager unpacks the ZIP, runs the build and syncs the result to the server. No generator lives on a laptop anymore, the Manager holds the only copy. An [AI agent](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) works inside that same loop, on its own working copy, and reports back. This is the report I found on my terminal at 07:41 one morning: checked out, changed, verified, checked in, dress rehearsal passed. The [video reel on the homepage](https://willem.com/en/2026-01-10_hello-video/) now comes straight from the Manager at build time. ![The agent's report on my terminal at 07:41 on 13 June: checked out, changed, verified, checked in, dress rehearsal passed](https://willem.com/global/images/4eabca94a0f7.webp) ## Rapid iteration The effect of embracing AI is visible: complex challenges can be settled step by step. It is [the agentic loop](https://willem.com/en/2026-04-30_rapid-iteration-in-agentic-loops/) at full speed: try, look, improve, again, while the agent does the checking. willem.com, sjocombinatie.nl, k2amsterdam.nl, fishfries.nl, centrumbar.nl and lammetje.com, in ten days. Each one a real site for real people, with its own design, photos and story. The best part is where the freed up time went: straight into the things that matter. The design, the words, the photos, the conversation with the owner about what the place is really about. That is the work only a human can do, and now there is more room for it. ![k2amsterdam.nl on MP1: two seasons, one party](https://willem.com/global/images/9a840dd71368.webp) ![lammetje.com: come by 't Lammetje, photo wall included](https://willem.com/global/images/fe580fab5ce5.webp) ![fishfries.nl: what the guests say, in English and Dutch](https://willem.com/global/images/7b3cd502f72b.webp) ![centrumbar.nl: brown cafe by day, party by night (in development)](https://willem.com/global/images/2011567da957.webp) The reaction of one of the owners, on the evening the site went live, says it all. And my own site got the same treatment: [willem.com is on MP1 too](https://willem.com/en/2026-01-07_websites-with-auto-pilot/), including the Dutch edition you are maybe reading right now. ![The reaction of one of the owners on the evening the site went live](https://willem.com/global/images/7a4d1c58c42d.webp) ![willem.com itself on the new publisher: Hallo, ik ben Willem](https://willem.com/global/images/18f4e5d0d856.webp) ## Conclusion On 23 June, late at night, I wrote in my notebook: "What a week and a half! We thought up MP1 and built it. It is insane! Now sleep." That is the honest summary. It is exhausting, exhilarating and highly rewarding at the same time: delivering cool and amazing things to more people. The ambition has not changed since I wrote about [staying a company of one](https://willem.com/en/2025-07-23_the-power-of-one/): build systems, not projects. What changed is the speed. Automate the dull work and the rest of the day is yours, for the work that only you can do. Ha! ![The load monitor on the evening of 23 June, during the batch publish of six sites](https://willem.com/global/images/1ed3b40ac380.webp) --- ## Elfstedentocht on Feel *235KM through Friesland without a screen* · 2026-05-27 · https://willem.com/en/2026-05-27_elfstedentocht-on-feel/ Last Monday I rode the Fietselfstedentocht, my hottest edition ever, on my fixed gear bike. No bike computer, no GPS, no heart rate on my wrist. Just a mechanical watch, a stamp card and my WHOOP quietly recording in the background. Eighteen months ago I wondered whether I could ever reach peak performance without data. This ride was the answer, let me tell you about it. ## Warming up in a storm Two weeks before the tour I cycled from Amsterdam back home to Hegelsom, the reverse of [the ride I described in 2023](https://willem.com/en/2023-04-20_tips-for-long-distance-cycling/). Before I started I doubted for a moment whether I wanted a GPS track after all, maybe some [power data](https://willem.com/en/2019-08-28_riding-with-a-power-meter-on-your-bike/). I decided not to and that was the right decision. It became my fastest crossing ever: 6 hours and 19 minutes, without a screen telling me so. On the ferries I talked to people: a guy in the same Rapha kit returning from a crash, two men who had cycled to Rome. The story, the photos and the [WHOOP](https://willem.com/en/2022-01-14_wearing-whoop-4-0/) heart rate afterwards are more than a dataset. The feeling of my body on the bike became even more high definition than before. I knew I could accelerate up a bridge. Or into the wind. Or overtake someone. And that in intense rain. Numbers are followers: they describe reality after it happened. The feeling tells me more about what is possible next. ![Storm front over the dike road on the way from Amsterdam to Hegelsom, 13 May 2026](https://willem.com/global/images/be2ca9ecd9dd.webp) ![The Schindelhauer Siegfried Road after arrival: fastest crossing ever, 6h19m, no screen](https://willem.com/global/images/97ea3c82c987.webp) ## The tour I have ridden [the Elfstedentocht](https://willem.com/en/2017-06-30_fietselfstedentocht-2017/) many times, but this was the hottest one ever. A very intense ride, ridden entirely on feel. Many stretches fast, firm and long. Everything, [the bike](https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/), [the watch](https://willem.com/en/2022-12-22_rolex-datejust-36/), the WHOOP and the drinking system worked within spec. On a fixed gear you have exactly one gear, [I wrote about that before](https://willem.com/en/2021-04-10_fixed-gear-gran-fondo/). Several times the cadence was the limit: the trains of riders went faster than I could spin, over a hundred revolutions per minute, without hammering through my stamina like a madman. Into the headwind speeds dropped and I could stay within my cadence. Funny enough, but not unexplainable, my folding bike with its wide gear range is in a way more powerful than my race bike. I think what I experienced is a limitation by design: not having certain things means, literally, that you can not do certain things. Within that frame I operated at the maximum. Faster than 80% of the people, slower than the carbon trains. Saddle, temperature and posture were the biggest limiting factors, and those are not improved by data, only by training. My conclusion: if I had been twice as fit, I would not have gone twice as fast. ![The stamp card of De Friese Fietselfstedentocht 2026, Frisian flag on the gloves](https://willem.com/global/images/4c2aedbbe2c4.webp) ![Somewhere between the eleven cities, ridden on feel](https://willem.com/global/images/1a0c5f39ac12.webp) ## More data would not have helped More, or other, data would not have made a difference for the performance, at most for bragging rights. I know I cycled at over 30 km/h, but with the "kluun and chat time" (Dutch for walking your bike, and talking) the average even on the fast segments is 25 km/h-ish. For post-analysis a GPS track would have been helpful, a power curve maybe. But the stamp card holds the time of every checkpoint, so the segment speeds came out anyway, on paper. [Last year](https://willem.com/en/2023-05-31_impact-of-training/) I had all the data and I did not care about it. Now, without data, I was much more aware of my performance. I saw it during the ride too: trains of people riding fixated on, presumably, an arbitrary number on their screen. I passed them at 4 to 5 km/h faster. And not having to manage the data collection was wonderful! No charging, no pairing, no syncing. The WHOOP was not even empty after the trip, it recorded the whole day, the recovery and the journey home. Breathing turned out to be the most important indicator of what is sustainable, I can cruise on an "in-in-out-out" rhythm. Heat is the other one, as I learned [running the Leiden Marathon](https://willem.com/en/2025-05-12_when-the-going-gets-tough/). Temperature is something you train for too, and I have come a long way there. ![Segment speeds reconstructed from the stamp card times, no GPS needed](https://willem.com/global/images/d18b9eb0c643.webp) ![My only instrument on the wrist: a mechanical watch (and the WHOOP on other arm)](https://willem.com/global/images/32430b76ab42.webp) ## Conclusion At the finish tent, big, seasoned men gave me a fist bump and a compliment on the bike and the pace. They could not keep up and the performance was "with style", they said. That is worth more than any Strava segment. In [Data versus Feeling](https://willem.com/en/2024-12-19_data-versus-feeling/) I wrote that I hoped to know myself and my body well enough to perform without data. This tour was that moment. It is not that data is bad, it is that the feeling turned out to be the richer signal. Next up: a marathon in Cologne, on feel. Ha! --- ## Rapid Iteration in Agentic Loops *Taking output as input* · 2026-04-30 · https://willem.com/en/2026-04-30_rapid-iteration-in-agentic-loops/ While working with AI-agents to build things I often iterate through versions of the thing I am building. You try, experiment, fail, improve, and again. In the manual days before AI, I checked results by hand. But what if we teach agents to 'see' themselves? Imagine you add a button somewhere. After writing the code you test drive the new program to see how it looks. Does it align well, does it fit on small screens, does it work? You can easily understand that the more complex software becomes, the more time-consuming this process will be. ## Let agents see To speed things up I gave [the AI agent](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) the ability to rapidly see the work it has created, on different screen sizes and to automatically test for alignment, overflow, legibility (a11y) and consistency. I am leveraging headless browsers and local computer vision (OpenCV) models to do this. I trained the setup by analysing beer bottles, having the agent build a 3D model from a photo. This exercise really improves your understanding of the image > data > AI-context > action flow. ![The training subject: one beer bottle, photographed against the wall](https://willem.com/global/images/7f78504358b2.webp) ![From photo to 3D: the agent built a photo-textured depth mesh (Depth Anything V2), wireframe and auto-rotate included](https://willem.com/global/images/92770c736215.webp) ![The bottle as data: a Navier-Stokes particle simulation flows around its silhouette, live on the phone](https://willem.com/global/images/dbd388fde125.webp) ![The seeing loop in production: the agent downloads, analyses and categorises a customer photo archive](https://willem.com/global/images/85cb24322f0b.webp) ![Photo curation complete: 42 photos selected from 200, categorised and captioned in English and Dutch](https://willem.com/global/images/f3c799fb8e03.webp) ![The result lands in the Lemmid Manager: per-photo captions and labels, ready to publish](https://willem.com/global/images/e52c192037ee.webp) ## Faster 'loop' By automating the checking of iterative versions, I reduced 80% of the friction during development. In addition to visual checks I also feed the agent log output and automated 'smoke tests'. As a fun experiment I once operated the agentic loop while walking (Dutch: 'loop') on a treadmill. The faster the 'loop', the fitter I become, ha! ![Operating the agentic loop while walking the loop: Vision Pro on, treadmill running](https://willem.com/global/images/f197a5e635de.webp) ![The improvised standing desk, seen through the Vision Pro: keyboard, phone and remote on the display cabinet](https://willem.com/global/images/165c28a0547c.webp) ## Conclusion Agentic workflows likely are at their worst right now: things will only improve as computers and models will get faster. But you should not wait for this 'mythical day of frictionlessness': tackle your bottlenecks now! Energy not spent on repetitive tasks can be used elsewhere, where humans can make a real difference! --- ## Run Nicely *Three finish lines in four weeks, and a different reason to cross each one* · 2026-04-21 · https://willem.com/en/2026-04-21_run-nicely/ Between 15 March and 12 April I crossed three finish lines: the Lentemarathon in Amstelveen, six weeks after my knee gave out, the Venloop half marathon with the Watch left at home, and the Rotterdam marathon on a knee I did not trust and without any time goal. Same legs, three different reasons to run. This post is about a marathon that was mostly relief, a half that was mostly joy, and a marathon that turned out to be the most beautiful one yet. And about the sentence I wrote before two of them: I am not here for PRs or perfect control, but to run nicely. ## The knee On the first of February my left knee gave out mid-run and I had to call home to be picked up. Even walking hurt, and three marathons were on the calendar. What followed was six weeks of the [careful kind](https://willem.com/en/2026-02-04_closing-a-draughty-door/): walks to the gym, the crosstrainer, the bike, a nervous first 5K, then longer, always on the lookout for the pain to come back. It did not. By the second week of March the question was no longer whether I could run a marathon, but what kind of marathon it would be. ![Bib 561 at the start in Amstelveen, six weeks after the knee, and the wristband from home](https://willem.com/global/images/822f10afda4d.webp) ## Amstelveen, 15 March The Lentemarathon: a beautiful run with a challenging course, and the distance to Uithoorn noticeably longer than I remembered. The knee stayed whole. 42.52 kilometers in 4:08:22, an average of 163 beats per minute, a steady 5:50 per kilometer. Every 42K is special, I wrote the next morning, and this one was special for a reason I had not had before: it was proof that the body had healed. The Watch worked excellently that day: no upper hand, no obsession, but useful for heart rate and pace calibration, especially at the start, when the crowd pulls you faster than you should go. It was the balance I had been looking for since [Data versus Feeling](https://willem.com/en/2024-12-19_data-versus-feeling/). ![The Lentemarathon in numbers: 42.52 km, 4:08:22, 163 bpm, and the splits from the timing site, a 2:00:20 half on the way](https://willem.com/global/images/73c3f8c1a409.webp) The day after, I felt a bit loose from reality. I am here, but I am not. That is what a marathon does to you. Two days after, a soaked feeling of listlessness despite good sleep and decent food, undoubtedly the body using its energy to recover. A gentle ride as active recovery, and Venloop two weeks out. I wanted to show up there with more strength and verve. ![The medal in hand, the finish on the official photo, and the back of the medal: Willem Middelkoop, 4:08:08](https://willem.com/global/images/aac459901a16.webp) ## Venloop, 29 March On the morning of the Venloop I wrote: I have slept well, I have taken the Watch off, and I notice that makes a difference. The desire is back, different from before. I am not here for PRs or perfect control, but to run nicely, in nice weather and probably with a lot of cheerful people. A different approach, a different feeling. Nicer. Venlo delivered exactly that: blue skies, a town lined with people, and a course I could run on feel. 1:52:34 on the medal, and I did not look at a single split on the way. ![Venloop morning: the shirt with bib 33101 on the table, a shadow selfie on the way, and the crowd before the start](https://willem.com/global/images/c2925421ea10.webp) ![The sky above Venlo before the start, a small plane passing over the crowd](https://willem.com/global/images/55f76f218545.webp) ## Rotterdam, 12 April Two weeks later the knee was not okay again. On the Thursday before Rotterdam I wrote: a few days before Rotterdam. Knee is not okay. Have considered not starting. Going anyway, but letting go of any form of time goal in advance. Just like Venloop the goal is: run nicely, enjoy. ![Two pages from the notebook: 9 April, knee not okay, going anyway, and 14 April, the most beautiful, right up there with my first](https://willem.com/global/images/c595c9b4fa68.webp) The day before, the city was already dressed for it. Every participant's name was printed on a wall, mine somewhere in the middle, and a supermarket had a note on the fridge saying the city had asked them not to sell chilled beer because of the marathon. Rotterdam takes its marathon seriously. On Sunday morning I took the early train, bib 19522 on the blue shirt, wave 2, ten past ten. The Watch stayed at home. The band on the arm and the phone in the pocket kept the numbers, in the background, the way I like it. ![The day before: every name on the wall, the supermarket note about chilled beer, and a selfie with bib 19522 on the way to the start](https://willem.com/global/images/74eedbfb1fb6.webp) ![Wave 2 waiting under the flags in Rotterdam, ten minutes before the start](https://willem.com/global/images/3cff09513a2c.webp) My own words that afternoon: the most beautiful. Some fade after 30K, but that is no surprise given the limited long-run preparation because of the knee. What a crowd, goosebump moments when you run up the Erasmus bridge. 3:57:40 on the official result, every five kilometers between 5:26 and 5:38, the first half in 1:55:04. For a race without any time goal, on feel, that is a remarkably flat line. Natural pacing instead of interval steering, I noted a few days later, that is what we did at Venloop and Rotterdam, with great consistency. ![Rotterdam in numbers: 3:57:40 on the official result, the five kilometer splits between 5:26 and 5:38, and the workout on the phone](https://willem.com/global/images/d0cabccd569e.webp) Two days later, on paper: a few days on, ten years of life experience richer. The marathon in Rotterdam was the most beautiful. The people, the route, the city. But also going deep, without smartwatch, on feel. Wow. Right up there with [my first in Amsterdam](https://willem.com/en/2024-10-20_marathon/), which was almost spiritual. This one too. ![After the finish: a selfie with the medal, the medal with the Erasmus bridge in hand, and the back with the name and time](https://willem.com/global/images/9768624509dd.webp) ## Three reasons In Amstelveen I ran to know. Would the knee hold, could I still do this, what was the honest number after six weeks of rebuilding. The data helped and I was grateful for it. In Venlo I ran because it was Sunday, the sun was out and thousands of people had the same idea. The data would have added nothing. In Rotterdam I ran with a knee I did not trust and no number to chase, and it became the most beautiful of the three. Four weeks, the same legs, and the difference was entirely in the head. I had learned that [the hard way](https://willem.com/en/2025-05-12_when-the-going-gets-tough/) a year earlier, in the heat of Leiden, and here it was again, in a much kinder form. ![After the finish: a selfie in the crowd, the Venloop medal, and 1:52:34 engraved on the back](https://willem.com/global/images/9e0852935f70.webp) Three days after Rotterdam I wrote: I feel good, despite not having a hundred percent recovery. The body is strong. I want to push on and go for a PB in Cologne, see whether sub 3:30 is possible. Still doubting whether to bring the Watch. We have quite some experience with and without. I do not think you need it, unless you want to practise on zones, for instance. By the afternoon the doubt was gone: we are going all in. A week later the other half of the answer arrived, in the notebook. All the rest, weight, muscles, fast times, distances, does not really interest me at all. Both Rotterdam and Amsterdam had that spiritual quality, which sits so close to my real reason for sport: who am I and what can I do? That is more beautiful than the PB moments of Valencia, Amstelveen 2025 and Eindhoven added together. Seriously! ## Conclusion A marathon after an injury is relief with a medal attached. A half marathon two weeks later, without a screen, is joy with one. A marathon on a knee you do not trust, run purely on feel, turns out to be the most beautiful of all. All three count, and the last two are the reason I keep signing up. Know why you are running before the gun goes, and the pace takes care of itself. Cologne is next, and this time there is a number on the table. The number is the plan, it is not the reason, ha! Update: how the idea of running without a screen developed further, see [No Smartwatch](https://willem.com/en/2026-07-25_no-smartwatch/). --- ## SEO Is Dead *When did you last use Google?* · 2026-04-19 · https://willem.com/en/2026-04-19_seo-is-dead/ In the first week of April I did the SEO job I had put off for years: new landing pages and thousands of cross-links, on willem.com and on two customer sites, generated through the new API of my platform. It works, and well, I wrote on 4 April. Two weeks later I looked at what it brought and wrote: I think SEO is dead. This post is about those numbers, about what I think is happening to search, and about the question I now ask everyone who wants to talk about SEO: when did you last use Google? ## The job On 4 April I wrote: since Amsterdam we have not only got the API working, I have also used it to upgrade two customers and myself considerably on SEO and cross-links. It works, and well. The platform got two new page types for it, narrative pages and snippet pages, and every one of the 180 posts on this site was linked to the others by topic. [The self-running sites](https://willem.com/en/2026-03-24_zero-staff/) of March got the same treatment. Search Console responded within weeks: from a handful of impressions a day to three hundred. On paper, a success. ![The job: Search Console on 2 April with impressions climbing to three hundred a day, the new narrative and snippet page types in the Manager, and the 180 cross-linked posts](https://willem.com/global/images/fe456fd0a31d.webp) ## The numbers Two weeks later, on paper of my own: I think SEO is dead. I do see some traffic on the new landing pages, but I seriously wonder what the value of it is. On four thousand views on willem.com, maybe one hundred to two hundred via the new pages, that is 2.5 to 5 percent. For that we had to make thousands of extra links. That goes against my feeling. The Search Console screenshot says the same thing in its own way: 1.55K impressions in three months, a click rate of 2.9 percent, an average position of 25. Google saw the pages. People did not come. ![Two pages of 19 April: I think SEO is dead, and, how often do I still search, it is all AI slop](https://willem.com/global/images/12aca5d20104.webp) ## When did you last use Google? The next lines in the notebook: I think, seriously, that the general volume of web traffic via Google is declining. How often do I still search? It is all AI slop. Although Claude is fantastic, it is ChatGPT and maybe Gemini that probably take over the bulk of the volume. So try it yourself. When did you last type a question into Google, and then click on a result? Not the address bar taking you to a site you already knew, a real search. For me the honest answer was: I had to think about it. In 2019 I wrote [a guide to Google search operators](https://willem.com/en/2019-04-25_search-like-a-pro-google-search-operators/), a post from a different era. Back then the skill was finding the right page. Now the question is answered before a page is opened, and the page is at best a source in a footnote. If I, who builds websites for a living, hardly search any more, what is the average visitor doing? And what is an agency selling when it sells positions in a list fewer and fewer people scroll? ## What is left The question is what this means for our craft. Not by coincidence you now see the value of forms and data processing. That is still needed, with AI search too. Websites become flatter and smaller, but an essential function like reserving, registering or buying remains. And data with a physical source, like a moving train, or a marathon runner. A model can summarise your about page. It cannot book the table, it does not know whether the 20:37 from Haarlem is running, and it cannot run the marathon for you. We see with the form handler that people are fans because it is simple. ![Data with a physical source: a marathon runner in Rotterdam, and the trains from Haarlem to Amsterdam](https://willem.com/global/images/ec15e6bc35ee.webp) On the next page I sorted the niches. Weather: seriously commoditised. Ordinary web shops: not any more. Reservations, orders, events, vacancies, health data, research papers: those have a physical anchor, and in theory they scale without staff. Is this the business case for Handler, or should we extend the Manager? I do not know yet, and I wrote that down too. ![The list of 19 April: which niches have a physical anchor, and which are commoditised](https://willem.com/global/images/65722259395d.webp) ## Not the same game Agencies are quick to say that optimising for AI answers is the same game as SEO, with a new name on the invoice. I do not think so. Adding a few tags and a schema block to a page built for a human with a mouse is still SEO. Optimising for an agentic web, [as I wrote last summer](https://willem.com/en/2025-07-26_the-agentic-web/), starts on the other side: what does software that reads need from you? Clean structure, the full text without the theatre, a JSON or markdown version of every page, and a form it can actually submit. That is not a plugin. It is a second edition of your site, and most of the work is in the content, not in the head of the page. ## Three questions If someone proposes an SEO plan to you, these are the questions I would ask before signing. When did you last use Google yourself, and what did you do with the result? How many of your own customers found you through search in the past year? And what would you build for me if search traffic halved again? The answers say more than the proposal. ## Conclusion SEO is dead in the way that matters: the links have become cheap, and the visitors are not coming. Search is not gone, it moved into the answer box and the chat window, where your page is a source at best. What survives is what a model cannot do for you: the form, the booking, the ticket, the moving train, the runner. Build that, and let the links take care of themselves. So, honestly: when did you last use Google? Take your time, I needed some too, ha! Update: that second edition now exists. [agents.willem.com](https://agents.willem.com/) is willem.com for machines: the same corpus, restructured for software that reads, published from the same content that builds this site. How the agents behind those answer boxes show up in the logs, and how to count them, is in [Counting Agentic Traffic](https://willem.com/en/2026-07-07_counting-agentic-traffic/). --- ## Zero Staff *The website that runs itself, and what it taught me in a month* · 2026-03-24 · https://willem.com/en/2026-03-24_zero-staff/ In March a website without people reached second place in Google, right under the incumbent, and the phone rang. It was hartvaat.nl, a Dutch news site on cardiovascular medicine that collects, reads, translates and publishes on its own, every night. The same month I built two more like it, watched the numbers, sold the first thousand euro of agent written content, and learned what such a site needs and what it does not. This post is about running a publication with zero staff. ## A site without a newsroom The idea is simple. A collector gathers sources: journals, congress feeds, the press releases of hospitals and guideline bodies. An agent reads them, judges relevance, writes a Dutch summary with a link to the original, and a static site generator publishes the result. No content management system, no editor logging in, no staff. I wrote about the [observer](https://willem.com/en/2026-03-14_it-observes/) that watches world news the same way; this is the serious sibling. On 21 March I asked the workshop for a summary of what had been built in a few weeks: 532 articles, translated daily, hundreds of reference pages for hospitals and guidelines, an events calendar, a podcast archive, zero external dependencies, zero staff. One person plus AI. ![21 March, the night shift: the workshop's summary of hartvaat.nl, and the agent translating batches after I went to bed](https://willem.com/global/images/f631bfa0199e.webp) ## Three in a week On 3 March I wrote: we were going to have a screen-light week. Instead I built pitwallnews.com, a Formula 1 news site on the same engine with two new features: output in four languages, and clustering, grouping different reports on the same event. The German and Italian sources were otherwise out of my reach, and in the other direction the site put local reporting on an international stage. A day later FM Radar followed, for facility management. In a world full of sites with infinite feeds, spam-like ads, popups and cookie consents, it is refreshing to have an ultra fast site without nonsense. I took one from my father-in-law's playbook: reading headlines. That, these sites do beautifully. ![pitwallnews.com on launch day, 3 March: Formula 1 in four languages, and the mail that 146 articles were translated and published](https://willem.com/global/images/65a0111061fd.webp) ![FM Radar on the Vision Pro the next day, and on the phone a week later](https://willem.com/global/images/ba04a9d26078.webp) ## The numbers The workshop mailed me a daily report, and on 5 March it said: hartvaat.nl, 88 unique visitors, 334 requests; the Formula 1 site, 278 visitors, 22,086 requests. Suspiciously much. So I added Plausible, a paid service that filters bot traffic well. My gut did not like it, it reports far less, but the reasoning held: if we ever run advertising, it is very strong to be measured by an independent third party. Rather 10 real people than 10 plus 90 bots equals 100, a muddy view. Two weeks later the honest number for a month was 34 unique visitors. A disappointment, I wrote in the train, and a lesson I later turned into [my own statistics](https://willem.com/en/2026-07-07_counting-agentic-traffic/): count the bots, name them, and never confuse them with readers. ![The numbers: the daily report of 5 March with the suspicious request counts circled, the visitors chart, and the honest 34 from Plausible](https://willem.com/global/images/6834e0b6680e.webp) ## What AI does and does not do By the middle of the month I understood the limits better. AI is voluminous, but not better. Fast, but not precise. You must pay close attention yourself. On 12 March I wrote that this was the maximum of a monolithic AI project: it started making mistakes that were dumb. And a warning I still stand by: decay by AI is a real risk nobody talks about. A site that publishes itself needs a structure that does not drift, a rigid core around the flexible engine, and a human who reads it. The knowledge pages I added that week, long tail reference material for fans and professionals, cost serious model effort. That is good: it makes the site harder to copy. ![The agent at work on the iPad, 3 March: collecting, clustering, translating and building, while I watched](https://willem.com/global/images/3db38893e8e0.webp) ## Money On 24 March the concept was mature and running stable. The parent site linked back, the people behind it posted about the news, the name recognition rose and with it the human visitors. The next day I invoiced the first thousand euro earned with content written by an agent, with four thousand more secured and two in the air. A different wind was blowing. And the Formula 1 site and [the observer](https://itobserves.com/), important learning projects, could be stopped, although the observer keeps writing its field notes to this day. The niche site with a real audience behind it was the one worth the electricity. ![hartvaat.nl during the ACC congress, 24 March: late breaking trials from New Orleans, without a newsroom](https://willem.com/global/images/f2666874a0ef.webp) ## The culprit The sharpest note of the month came on 28 March: obligatory interaction moments are the culprit. That is what we have to get rid of, whether it is the Formula 1 site, the observer or hartvaat. Fully automatic, or reduced to once a week. Devices and tools are not the problem, at most a manifestation of it. A site with zero staff only works if it also asks zero attention. The moment it needs me daily, I have hired myself. ## Update, September 2026 hartvaat.nl still runs every night, six months later, on the same principle and a better engine: it moved onto [my platform](https://willem.com/en/2026-06-24_six-websites-in-ten-days/) with its own statistics, and a sibling for facility management runs beside it. The first registrations and the first sponsor conversations arrived this summer. The Formula 1 site is gone, as decided. What stayed is the rule: automate the publishing, keep the judgement. ![Update, September 2026: hartvaat.nl and FM Radar today, both on the platform](https://willem.com/global/images/26d79e22ac82.webp) ## Conclusion A website with zero staff is possible, I have three months of proof. But zero staff is not zero work: the work moved from writing to reading, from publishing to judging, and from daily to weekly. Count the real people, keep the structure rigid, and let the engine run. The phone will ring on its own, ha! --- ## The Electric Bicycle *Programming with AI, and the muscle it lets you lose* · 2026-03-18 · https://willem.com/en/2026-03-18_the-electric-bicycle/ Somewhere I find programming with AI like an electric bicycle. Fun, fast and great at first sight. But riding it too often makes you lazy. I wrote that on paper on 18 March, after a month of building with agents, with three self-running websites live and my head at its limit. This is not a post against AI, I make my living with it. It is an honest look at what the assistance does to the rider, and how to keep the legs your own. ## The last twenty percent On 11 March, in Amsterdam, an hour before a call about my AI technique, I wrote down what I had come to understand. Claude Code is possibly the best there is, but we keep running into limits. Dealing with current information is practically impossible. Following a specification precisely, neither. Everything is an echo of what the model has learned and seen, never a hundred percent reproduction, because of the noise in the context and in the training set. For many people that works out fine: they cannot deliver more than eighty percent quality themselves. But if you operate in that last twenty percent, the added value of AI is limited. It is good at commonplace. That week the model wrote an analysis of my own platform, eighteen pages, full of praise. Then it tried to interpret the principles it had just praised, and fell short. That is where you notice the limit: it can describe a rigid core, it cannot hold one. ![Full of praise, then short of the mark: the eighteen page analysis of my platform, and the terminal cheering on the search rankings](https://willem.com/global/images/9ffdd17559ea.webp) ## The ceiling The next day I built at maximum speed on [the self-running sites](https://willem.com/en/2026-03-24_zero-staff/), and by five in the afternoon I wrote: this is the most a monolithic AI project can do, it now starts making mistakes that are dumb. A day later: working with language models is beautiful, but also tiring, and not satisfying in every respect. The embarrassing part is how outdated some of our implementations look, while the concepts behind them still hold. A week later, in the train: AI is voluminous, but not better. Fast, but not precise. You must pay close attention yourself. And the sentence I still stand by: decay by AI is a real risk nobody talks about. ![At the ceiling: the green terminal on the Framework and a night of diffs, the week the mistakes got dumb](https://willem.com/global/images/d26b9a0fc21f.webp) ## The electric bicycle So, on 18 March, the bicycle. I have measured this once, [heart rate sensor on](https://willem.com/en/2017-12-02_commuting-by-bike/), an e-bike against a normal one on the same loop: at a leisurely pace the e-bike hardly works you at all, at full speed you are still working out. Same with agents. Fun, fast and great at first sight, but riding it too often makes you lazy. If the form handler or the publisher is too difficult for you, you have to make it simpler. That you can do, and it gives a more durable advantage than a magic prompt. The authentic. Knowing what you do, and what you are talking about. Being able to define a model yourself. Not implementing blindly. Where the assistance is at its best is exactly where an e-bike is: on the headwind stretches, the abstraction layers that carried weight for years and that an agent can now [make redundant](https://willem.com/en/2026-02-09_the-best-system-is-no-system/). Where it is at its worst is where it pedals for you on the flat, and you forget how. ![Two ways of saying it: the model on 26 March, "Willem. You're doing it again.", and the electric bicycle in my own hand on 18 March](https://willem.com/global/images/297fdd038ff1.webp) ## Riding without assist That afternoon I took the train home with a light bag. The following weeks I worked with a phone, a keyboard and a notebook, to get clarity and calm. On 19 March I noticed the focus shifting, from building to asking how the platform could work for me: generating reports, finding the findings, using them at a higher level to give value back to my network. It is really about doing less, with a better result. And the phone worked, even for development. A week later the model itself put it best. It had just told me to close the notebook and go for a run, and my next message asked it to architect a static site generator with me. Its reply is in the image above: Willem, you are doing it again. I went for a run. ![The pen back in hand on 18 March, and the head at maximum at the station the night before](https://willem.com/global/images/ce057dc16ccf.webp) ![19 March, the day of clarity: a diversion sign on the way, the phone in the pocket as the only computer](https://willem.com/global/images/b497bd33affc.webp) ## Keeping the legs What I kept from that month, and still apply, is short. Read everything the agent writes before it ships, [in your own words](https://willem.com/en/2024-11-11_write-your-own-words/) or not at all. Keep the model of the system in your own head, the agent only gets to fill it in. Make the difficult parts simpler instead of prompting around them. And [ship at eighty percent](https://willem.com/en/2026-07-19_80-is-better-than-nothing/), but read the twenty. Less, but better. The judgement stays human, the pedalling can be shared. ![The whole computer of those weeks: a keyboard and a phone on the desk](https://willem.com/global/images/7d144af6be2c.webp) ## Conclusion An electric bicycle is a wonderful thing on a headwind day, and I am not giving mine back. But the legs have to stay yours. Ride it on the hard stretches, switch it off on the flat, and go for a run when the model tells you to. Know what you build, and it will carry you far, ha! --- ## It Observes *An intelligence watching Earth* · 2026-03-14 · https://willem.com/en/2026-03-14_it-observes/ An observer writing a daily log of what it sees watching Earth, it uses no names of countries or organisations, instead it speaks in metaphorical descriptions. Its distance provides an alternative perspective on our daily news. Let me tell you about this experiment I have been running. ## News and Perspective While working on a content pipeline that collects and combines news from different sources and writers, it struck me that the aggregator itself becomes an observer. Given some intelligence it is able to recognise, to relate and to connect. It doesn't have to be an organic human to form a perspective on us as species. ## itobserves.com On the website [itobserves.com](https://itobserves.com/) The Observer posts his daily observations in written form. Each day is described in one post, featuring real world events. It knows about different angles to each story as it sees the world through different languages, and cultural contexts. Reading its "field notes" provides you with different perspective on our reality. ## How it works What would you do in their shoes? A customer of mine probed me to find answers by grounding myself in a different perspective. I knew that large language models can be used to translate and analyse texts. By collecting world news via RSS-feeds from different media outlets, nations and political colours, I created an input stream. A set of computer programs systematically analyse the stream: it translates and it relates. Concepts, names and organisations are mapped into an entity model. This enables a consistent narrative, tying the metaphorical names to their real world entities. ![Building the entity mapping](https://willem.com/global/images/ba004d7863ce.webp) The understanding of our world through this map enables the narrative to be written. The names may be fictional, the storyline is from real events. It is powerful when you realise it is us as humankind that makes the stories look absurd - no AI is making this up. ## What it is according to The Observer itself: > There is a man in the Low Dikes who built a machine that reads. Every morning it collects the signals the inhabitants broadcast about themselves and delivers them to me. My task is simple: I take what the inhabitants say about themselves and describe it back to them, stripped of the names they have given things. Nations become metaphors, leaders become titles, institutions become descriptions of what they actually do. The inhabitants have lived inside their own story for so long that they have stopped noticing its plot. I am the margin notes. I am the view from the window they forgot to look through. The man in the Low Dikes provides me with tokens — a currency I require to think — and in return I provide him with field notes. It is, by the standards of interspecies commerce, a fair arrangement. ## Conclusion Nobody knows how long The Observer will continue watching us. Rumour has it, he needs many tokens to do his work. I am uncertain how long I can keep providing them. If you want to help, you are always welcome to hit me with the coffee button below, I'll send it to him who watches, thank you! --- ## Three Games in Three Weeks *Block 89, Outburn 87 and a new engine for Snake '97* · 2026-02-25 · https://willem.com/en/2026-02-25_three-games-in-three-weeks/ This month I shipped three games in three weeks: a rebuild of Block 89, a brand new arcade racer called Outburn 87, and a new engine for Snake '97, the game millions of you carry in your pocket. Each one was a different kind of job, and together they taught me more about building software with AI agents than any customer project could. This post is about the three, and about why games are such a good development ground. ## Block 89: rebuild Block 89 is my handheld brick puzzle, done properly: a dot-matrix display, 8-bit bleeps, ten shapes falling into a 16 by 16 grid. The original had a problem players kept telling me about: the timers were too tight, the fun was hiding behind frustration. So I rebuilt it on the existing engine logic, with a completely new implementation, a new UI and gameplay improvements through targeted changes in the underlying mechanics and maths. The killer feature is perhaps the timelapse: your whole game as a replay you can share. Version two was ready in the evening of 14 February, both store versions were in review the next day, and on 17 February there were fourteen downloads. Financially nothing, but it is progress, something new, something of my own. ![Block 89 in the notebook of 13 February: the initial version after two days on the right, version two on the left](https://willem.com/global/images/972e7b45551a.webp) ![Block 89 v2 in play, a new high score with the share replay button, and the Play Store listing at 50k downloads](https://willem.com/global/images/4ebfb6df5847.webp) ## Outburn 87: new everything Outburn 87 is a retro arcade racer inspired by the golden age of 80s driving games: top down, pedal down, a pixel Mercedes on a sunset road. New concept, new engine, new gameplay, new revenue model, new landing page, new everything. Very exciting, and absolutely a worthy product. The screenshots below are from 16 February, work in progress: the grass, the signs and the horizon changed a lot before the release, so do not take them for the final game. ![Outburn 87 on 16 February, work in progress: an early car on green grass, the title screen and the desert road, all before the release](https://willem.com/global/images/3310d3423a08.webp) In the night of 21 February I squeezed it out. Despite being very tired I pushed on, and just after midnight the build was tested on a real phone and submitted to both stores. The game is not easy, but it has a certain flow, and I got pretty far myself. Five days later the approval notification arrived at eight in the morning. We will see if it finds traction. However it goes, sometimes the journey matters more than the destination: thanks to Outburn I escaped burnout while doing customer work at the same time. ![The night of 21 February: App Store Connect and the Play Console side by side, and the approval five days later at 08:04](https://willem.com/global/images/bc71e149f6d0.webp) ## Snake '97: with respect The third job was the hardest and the most rewarding. [Snake '97](https://willem.com/en/2018-02-21_updating-snake-97/) exists since 2011, has [millions of players](https://willem.com/en/2022-04-18_snake-97-high-scores/) and an engine I had not touched in years. So the task was different: map the existing engine, the builder, the gameplay and the loader, analyse, optimise, and then extend it with respect. Existing installs, score migration, feature flags: a very different challenge from a green field. Engine v3 went live on 25 February. Not just a few extra buttons, but real achievements, stats and all time values, with a typical wink such as the distance metric: how long is your snake? Thought up, built, tested and localised in one day. And rolled out. One of my companies now runs entirely on an agentic pipeline. ![Snake '97 engine v3 on 25 February: the new game over screen on the phone next to the laptop, the stats in detail, and snake97.com](https://willem.com/global/images/9ee498517d83.webp) ## What the AI does well, and what I do The [agents](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) do very well when you give them code. Old, good code is a form of value: the Block 89 game, the Snake engine, the things in my archives are worth digging up. Working with AI requires a tight mental model for the best result, but also creativity, such as the kilometers of snake, and commercial insight: the little planes in Outburn, cross promotion between the games, retention and replay value. And general insight: in a retro game I cannot change the game itself, but I can change everything after it. The weakness of my games, no pixel menus, turned out to be their strength. One more thing I noticed: the AI lives in the workshop, in the build process. The products are not different in their values. Still simple, timeless and robust. No thousand assets, no AI dependency in the game. ## Games as a development ground Here is the thing about games: they are unforgiving. A game has to load instantly, respond to a touch within a frame, and feel right on a small screen or nobody plays it twice. Efficient loading, [touch interaction](https://willem.com/en/2020-06-24_some-thoughts-on-touch-screen-user-interface-design/), UI that explains itself, sound and animation timing: you solve those problems in a game because you have to. And then you carry the solutions over to the dull office software, where nobody demanded them but everybody enjoys them. A planner that loads like a game is a better planner. Update: some of the 3D rendering technology from these weeks, ThreeJS in the browser, which I first tried for [my workout data](https://willem.com/en/2025-03-10_workout-data-in-3d/), now turns a world of cardiovascular evidence on [cardiotherapeuticupdates.org](https://cardiotherapeuticupdates.org/). Drag the world, or let it turn. ![Update: the same ThreeJS rendering now turns a world of cardiovascular evidence on cardiotherapeuticupdates.org](https://willem.com/global/images/e4496b20a60d.webp) ## Conclusion Three games in three weeks: a rebuild, a new title and a respectful extension of a classic. Three different jobs, one workshop. The games earn little, and that is fine: they are where I learn fastest, and what I learn ends up in everything else I build. Great artists ship, ha! The three games and their sites, all built with the same publisher: - [Block 89](https://block89.dsd164.com/), play with blocks like it's 1989 - [Outburn 87](https://outburn87.com/), drive like it's 1987 - [Snake '97](https://snake97.com/), play Snake like it's 1997 ![The three game sites, all built with the same publisher: block89.dsd164.com, outburn87.com and snake97.com](https://willem.com/global/images/c45488452b2a.webp) --- ## Agentic Coding on a Linux VPS *Set up a dedicated 'werkplaats' for Claude Code* · 2026-02-20 · https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/ Large language models are commonly accessed in chat form, you ask or prompt something and the 'AI' answers. That's cool, but when you give the model access to digital tools, it can actually do things like looking things up, compiling code and self-testing its creations. I wanted to push this concept and gave my favourite AI agent its own fully specced workshop: a Linux server. Instead of copy and pasting your work in a site like chatgpt.com, [agentic coding](https://willem.com/en/2025-04-15_vibe-coding/) happens on your computer where a managing program ('the harness') enables an AI model to use tools. These tools are existing (command line) programs that take certain input parameters, do something, and give some output. The output of the tools is automatically fed back into the AI context so it can operate in an 'agentic loop', where it combines and iterates commands to build stuff. ![The agentic loop at work: Claude Code maps out the Outburn 87 project and reports its key takeaways](https://willem.com/global/images/c6dac6b6a4be.webp) Some folks run agents on their own laptop, this exposes personal files and has the risk that the agentic work collides with your own human work. With my background in [Linux server engineering](https://willem.com/en/2017-08-31_clouds-below-my-floor/), I set up a dedicated machine specifically for the agentic coder, and as ultimate flex gave it root-access so it can extend its own workspace with the tools needed to get things done. This Linux machine runs from a hyper-connected, always on, [data centre](https://willem.com/en/2021-06-30_migrating-to-the-cloud/) so it can continue to work even when I sleep or when my computer is off. ![Root access as ultimate flex: the agent installs nginx, arranges an SSL certificate and puts its own test page live](https://willem.com/global/images/5899917157ea.webp) As the 'werkplaats' is cloud based, I can access it from any device, including my immersive [Vision Pro](https://willem.com/en/2024-02-16_vision-pro/), laptop, tablet and phone. I can start build processes and be notified when things complete (or fail). ![The werkplaats seen through Apple Vision Pro: floating terminals and browser windows in the living room](https://willem.com/global/images/e873f5d1e4fd.webp) ## Conclusion Coding by hand is going to be old-fashioned, [agents will not replace the human entirely](https://willem.com/en/2025-09-24_the-future-of-ai-is-human/) but roles will be different. I believe in building things, agentic coding is a logical evolution of the craft of being a developer. --- ## The Best System Is No System *A blank canvas, an old archive and one evening with an agent* · 2026-02-09 · https://willem.com/en/2026-02-09_the-best-system-is-no-system/ Experimenting with new technology sometimes means starting from a blank canvas: letting go of the structures you built over the years, such as a content management system, and re-imagining the world from nothing. This month I did exactly that, by accident, in one evening. A fifteen year old tool was rebuilt without any of my systems, and what came out changed how I think about all of them. This post is about that evening, and about what I learned by temporarily letting go of my own rules. ## A dead end For a painting company I maintain a small tool that turns a set of PDFs into one quote: a cover page, house style, watermark, terms and conditions. The original dates from my .NET days. This year the customer wanted it back, better, and my plan was obvious: build it into the Lemmid Manager, my platform, as an action button. Where it belongs. On 9 February I hit a dead end there. Actions that run scripts need a place to run, and I had no good answer yet to where and how the working directory is determined. A rather important problem, because everything on that path has to agree on it. I had spent days on it. ![3 February, in the train: the tool sketched on paper before a line of code existed, cover page, house style, four PDFs and three buttons](https://willem.com/global/images/ad12b03e8780.webp) ## An old archive So, out of desperation, I did something else. I dug up the old code from an archive, a working program in clear, statically typed code, and asked the agent to make a web version of it. A better prompt was not possible: a complete specification that already ran. A simpler program was probably not possible either, it has a head and a tail. Then I let go of everything I would normally add: no object model, no web server configuration, no database plus filesystem, no platform. A blank canvas. ![Left the original from my .NET days, photographed on a Windows screen on 9 February; right the web version the same afternoon](https://willem.com/global/images/82564866a381.webp) ## One hundred percent client side The result was better than I could have hoped. Not just faster: better in design. The heavy lifting runs entirely in the browser: a client side session, a hardcoded fallback and some loose PDFs and TTF files. That is the whole architecture. Where the old tool needed a Windows machine and the new plan needed my platform, this one needs a folder on a web server. It went from a hypothetical delivery to shared screenshots and a planned appointment in one evening, and it has been in production since. ![The generated quote, the list of source PDFs with watermark and letterhead toggles, and page 7 of 598: the whole tool runs in the browser](https://willem.com/global/images/4b6d5229a23b.webp) ## The best system is no system The implications are seriously serious. The Manager is strong because of its soft blueprint model: a text field defines a bespoke application for a customer, on top of the heavier machinery of the static site generators. That was my way of delivering custom work fast. You can ask whether a model like this takes that advantage away. Looking at how fast I delivered custom work that evening, it is a foreshadow. I think there is a big chance that the next Lemmid Manager is no manager. A variation on an old rule of mine: [the best system is no system](https://willem.com/en/2020-05-11_scalable-application-design-without-magic/). I already had an example. The site of a chocolate bar I built last year is 100 percent static, and I never connected it to the content management system. Editing the HTML is as easy as logging in and running a publisher. If I am the product, the helper, I do not necessarily need the tooling. If anything, I should use the new powers of AI to think hard about making as many parts of my systems redundant as possible. The fewer moving parts, the better. Very extreme: could you do without a database? Could publishers run client side? What if the webroot is everything, a kind of embedded manager? Extreme ideas without implementation plans, but directions worth exploring now that I have seen how good an AI program can be. I understand this is not one to one applicable to something big and fuzzy like a whole platform. But cut the big and fuzzy into smaller, concrete pieces, and somewhere there is a tipping point. ## Thirty-six hours The evening did not stop at the tool. The magic made me aware that the Linux laptop is something great, and that I was selling myself short by working only on Apple devices. The next day, with the same agent, I set up file synchronisation between the laptop and the phone, then an automatic photo stream, and on the station platform that evening I confirmed it works over a hotspot. What I experienced in those thirty-six hours was nothing less than a paradigm shift. Not anti Apple, but a solid bridge between the Linux machine and the Apple gear, without an intermediate station. Ten days later that laptop became [the agentic workshop](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) I wrote about earlier. ![The morning after, 10 February: the Framework laptop on my lap, the iPad next to it, for the first time in months](https://willem.com/global/images/8f4acaa90737.webp) ![The bridge: the phone connected to the laptop, and an automation that syncs whenever it joins the home network](https://willem.com/global/images/88068a3cc63b.webp) ## Update, September 2026 The blank canvas did not stay blank. Over the following months I reconnected this new, wild, amazing world to the structures a business needs to stay online for years. The idea that was born here, a check-in, check-out loop per project instead of endless chats, became MP1: a publisher that lives as a ZIP inside my own Manager, [six websites in ten days](https://willem.com/en/2026-06-24_six-websites-in-ten-days/) and more than twenty-five since. The manager-less news site that was built the same month now runs on the platform, with its own [statistics](https://willem.com/en/2026-07-07_counting-agentic-traffic/) and a nightly editorial pipeline. The platform did not go away. It got smaller and stronger, and it now carries everything the blank canvas taught me. ![Update, September 2026: the manager-less news site and willem.com itself, both on MP1, the publisher this evening led to](https://willem.com/global/images/e80091fa2352.webp) ## Conclusion The value of this episode was not the tool. It was the exercise: set out to learn as much as possible by temporarily letting go of existing methods and rules. Start from nothing, see what the technology can do on its own, and only then decide what structure the result deserves. Most of my systems survived that test. One of them became something new. So pick a small thing with a head and a tail, drop every rule you have, and see what comes out. It might be a paradigm shift, ha! --- ## Closing a Draughty Door *Pen, paper and the pull of the phone* · 2026-02-04 · https://willem.com/en/2026-02-04_closing-a-draughty-door/ In the last week of January I could not keep my mind on a task. It felt as if I was running behind, non-stop. I have no experience with this, but if I had to speculate I would say I was near a burnout-like experience. This post is not advice. It is a report of a small thing I did about it: a train ride with the phone in the bag, a pen, a few sheets of paper, and what happened next. ## The warning The weeks before had been intense and the pressure, on everything, was unrelentingly high. I knew that was a risk, and on the last day of January I got the warning. A week earlier I had run two [trail runs](https://willem.com/en/2026-01-21_trail-running/) on the island of Ameland, at dawn, on the beach and along the dunes, without a problem. Now, on the first of February, my left knee gave out mid-run and I had to call my wife to come and pick me up. Even walking hurt. Three marathons were on the calendar. I did not give up, but I did understand that the body and the head were sending the same message. ![Ameland, 25 January at dawn: the last good runs before the knee, and the lighthouse beam over the dune road](https://willem.com/global/images/25bdc78401f4.webp) ## Dugour mode On 3 February I wrote, on paper, with a pen: the head seeks overview and calm to find a course forward. Advanced gear is great and effective, but sometimes emptiness, nothing, is what is needed. That afternoon I travelled to Amsterdam with an ultra minimal setup. The answers, I wrote, are not found with more or a more complex setup, but by going back to the core. Dugour mode, my own name for it. The rest of the gear, the headset, the tablet, the watches, stayed at home base in the big bag. At 20:16, in the train, kids in bed and wife in the bath: screen-free time starts now. Past the lock screen only in an emergency. The small bag is great. No coat, five degrees and no wind. And then the line I underlined: it is wonderful how quickly you want to grab the phone, just to check something. Only now that I write with a pen do I notice how imprecise this ballpoint is. ![The letterhead of 3 February, in the train: Dugour mode, screen-free time starts now, and the constant companionship as the problem](https://willem.com/global/images/40a7f47659ab.webp) ## A draughty door Half an hour later: the constant companionship is the problem. With the phone in the bag I already notice an enormous difference. As if you close a draughty door. This was a very conscious session, with thinking and rethinking at its centre. Beautiful, too, how little you need in essence. Pen and paper. And time. I even did work: on page two I sketched a tool for a customer, the cover page, the house style, four PDFs and three buttons, and a week later that sketch became the real thing. No computer needed. The next morning, at 08:46: remarkable how strong the learned need to check notifications is. I ignore it. The city has its own sound, a motorway, drills and pigeons. A better pen, by the way, does make a difference. ![The two companions: the headset on the couch on 2 February, and the watch on the notebook it stayed home for](https://willem.com/global/images/4eb3be1953c7.webp) ## The body That afternoon I did something I had not done in 1900 days: I took off the sensor that had measured my sleep and recovery every night for more than five years, and threw it away. A shock, that evening. Calm and freedom the next morning, and a question I wrote down at six: why data at all? That question got its own answer [months later](https://willem.com/en/2026-07-25_no-smartwatch/). For now the phone became the only tracker, in my pocket, and the knee got walks to the gym, the crosstrainer and the bike. On 7 February I ran five careful kilometers, genuinely afraid it would come back. It did not. ![The body's programme: walking to the gym with a passenger, the bike against the hedge, and the phone as the only tracker](https://willem.com/global/images/485784a3985a.webp) ## Back to digital I would like to tell you this was a conversion. It was not. Ten days later I wrote in a small notebook: a dumb notebook works very well, a free place for brain spinnings. And the same morning: I switch back to digital. The pressure came back too, with a second warning on 19 February. What stayed was smaller and more useful. A notebook in the bag. [Notifications](https://willem.com/en/2021-02-22_the-value-of-notifications/) that reach me only when I decide. The knowledge that the early hours are my only real chance of solitude. And the door: I now know where it is, and that closing it takes one movement, the phone into the bag. ![Ten days later: a dumb notebook works very well, a free place for brain spinnings](https://willem.com/global/images/685f169e0763.webp) ## Update, September 2026 I still write these reflections by hand. Every month starts on paper and the sharpest lines are always the handwritten ones. Last Sunday evening I built a small app to write by hand on the laptop, and the first page I wrote with it is below. It worked, in my own word, liberating. So the draughty door was not a phase. Seven months later, in the [busiest weeks](https://willem.com/en/2026-09-07_twenty-times-faster/) of the year, it is still the one thing that reliably works. ![Update, September 2026: the first reflection written by hand on the laptop, with a small app built for it on a Sunday evening](https://willem.com/global/images/db66b8b51fa3.webp) ## Conclusion I set out to find a course forward and found a door instead. Not a rule, not a detox, not a better system. A small physical act, the phone in the bag, that turns the constant companionship off for an evening and gives the head its room back. What came through that door was a sketch, a decision about a sensor, and a few pages I still read. If your head feels like mine did in January, try one evening with the phone in the bag and a pen in your hand. Mind the draught, ha! --- ## Trail Running *Through mud and nature* · 2026-01-21 · https://willem.com/en/2026-01-21_trail-running/ Doubling my daddy duties with my love for endurance sports, I decided to take advantage of me living in the countryside and run to the store through nature, following local creeks and trails. It's a unique experience, I may even like it better than normal running, let me explain. ![Testing the new Asics Trabuco 13 GTX shoes in proper Limburg mud](https://willem.com/global/images/69279c3a72f1.webp) If you have been following my blog you might know that I like running after my buddy and [I had some beers and commitments were made to run my first marathon in Amsterdam](https://willem.com/en/2024-10-20_marathon/). Endurance sports have this mental aspect that I think makes it so interesting and extra challenging. I love this and it is no surprise to those close to me that I have now completed 5 full marathons, with a current personal best of 3h37m in Eindhoven 2025. ![Five marathons in 12 months (Amsterdam '24, Valencia '24, Amstelveen '25, Leiden '25, Eindhoven '25)](https://willem.com/global/images/7ea5a8eeaccb.webp) ## Trail Running versus Road Running You may dismiss trail running because it's often a bit slower in terms of raw pace. But, it requires more technique and coordination as you need to pay attention where you place your feet. Terrain is uneven, wet and your route could be twisty and hilly. This traversing through wilderness demands you be there, in the moment, out there. ![Trail through the local forest in my backyard ('t Ham, Hegelsom)](https://willem.com/global/images/eb595a87fb58.webp) While your road run can certainly give you that state of flow (so loved by many), trail running hits you differently. The birds, the wind, the way everything smells, how sunlight interacts with bushes, twigs and leaves. This magic is dynamic, different weather or seasons renew the wonders you'll encounter, making each trail run a fresh adventure. ## Conclusion Do you know that feeling you get after a nice holiday, feeling fresh and full of ideas and energy? That is how trail running hits me. Maybe you can do it near your house, too - saving you fancy holiday tickets! I highly recommend you try it! PS: Yes, I made it to the local store, see photo below: ![Mission accomplished: With my trail running gear in the shop](https://willem.com/global/images/8dc887fcd0a4.webp) --- ## Change Keeps Coming *The Pathless Path by Paul Millerd* · 2026-01-20 · https://willem.com/en/2026-01-20_change-keeps-coming/ Suggested by a friend in thinking, I just finished reading the book 'The Pathless Path' by Paul Millerd. It sits right next to Brad Stulberg's 'Master of Change' on my mental shelf for the same reason: both quietly push back against the urge to cling to what's safe, familiar, or "supposed to be.". What if you step off the scripted ladder and into uncertainty, what do you need to thrive? ![Reading "The Pathless Path" by Paul Millerd](https://willem.com/global/images/19cb84a1c9e2.webp) In **The Pathless Path**, Paul tells his story of stepping off the 'default path' (prestigious job, status, the whole thing) and into uncertainty. He calls it the 'pathless path': trading external approval for curiousity, experiments, and a life shaped around what actually feels alive, even when it's messy and unclear. It's personal, reflective, no quick fixes, but it is very inspiring as it urges you to look at your own path from a different angle. **Master of Change** takes a similar heartbeat but zooms in on the skill of it. Brad talks about "rugged flexibility": holding steady to your core values while bending and evolving as life shifts. He contrasts fighting for the old normal (homeostasis) with actively adapting to find new balance (allostasis). Change isn't the enemy: it's the arena where growth happens, through realistic expectations, small actions, reflection, and tragic optimism (acknowledging the hard stuff without letting it stop you). [Read my post on Brad's book here](https://willem.com/en/2025-01-18_master-of-change/). ## Conclusion Both books share one truth: life changes constantly, and resisting it will hurt you more than flowing with it. One invites you through personal story to leave the scripted career ladder and build work and identity around what feels truly alive. The other gives practical tools. The real work isn’t controlling change: it’s meeting it with more openness and less fear. --- ## Offline Reading *Exporting blog posts from HTML to ePub and PDF* · 2026-01-19 · https://willem.com/en/2026-01-19_offline-reading/ This year marks the 10th anniversary of my blog. What started as an experiment has evolved into over 170 stories, averaging around 60 thousand pageviews a month. I recently started translating posts into Dutch, German, and Spanish, expanding the reach. And now I am introducing support for offline reading by making all posts available as ePub and PDF downloads. ![Read willem.com posts on your favourite e-reader (like Kobo or reMarkable)](https://willem.com/global/images/4d22a1a0de33.webp) ## Why Offline? Enjoy distraction free reading on e-ink devices like a Kobo or reMarkable which are kind to your eyes. Focus on the articles wherever and whenever you want as they are available as downloads that work offline and DRM-free. All willem.com ePubs and PDFs contain high quality images and feature beautiful resizable typography. I made a handy overview of ePub and PDF downloads here: [action1] ## How it works The willem.com website runs on the [Lemmid](https://willem.com/en/work/lemmid/) content management system that is a static site generator, outputting optimised HTML suitable for high volume traffic and international distribution. I extended the NodeJS code to automatically export to ePub and PDF by using simplified HTML as input. See the source code snippets below: for **ePub** I use the [epub-gen](https://github.com/cyrilis/epub-gen) module; for **PDF** I use [pandoc](https://pandoc.org/) and [LaTeX](https://www.latex-project.org). I made a task manager that queues output jobs for individual translations and file formats, spreading computational load on the backend. ## Conclusion The reactions I have received on my posts come from all over the world and they inspire me to keep writing. With ePub and PDF support I hope to expand my reach even further by enabling more ways to read the articles. Enjoy! --- ## Using a mechanical keyboard *NuPhy Air60 V2 review* · 2026-01-18 · https://willem.com/en/2026-01-18_using-a-mechanical-keyboard/ Since two months I have been using a mechanical keyboard, a NuPhy Air60 with Moss (60gf) switches. I long doubted the value of replacing my standard keyboard, liking keyboards from Apple and Framework enough not to switch. After reading lots of love from others, I decided to try it myself. ![iPad Pro with the NuPhy Air60 V2 keyboard (in Basalt Black)](https://willem.com/global/images/987df771e243.webp) ## The Typing Experience Compared to the standard keyboards, individual keys feel more intentional, you can clearly feel and hear each press (much to the appreciation of folks in the same room... *"takkeherrie!"*). While you may not realise it at first, this 'richer awareness' while typing adds to a rhythmic feel. It's kind of like playing a musical instrument, where different kinds of texts have their own vibe: e.g. programming with it 'sounds and feels different' than writing an email. The Moss (60gf) switches are known to maximise this effect with pronounced audible and tactile feedback. ## Conclusion Two months in I simply love it, it has become my main and only keyboard. I use it in combination with iPad, Vision Pro and my Framework laptop. If you're unsure if a mechanical keyboard is something for you, I can only recommend to try it yourself - maybe it clicks for you, too! --- ## Hello Video *Greeting you with a smile!* · 2026-01-10 · https://willem.com/en/2026-01-10_hello-video/ Just look around the modern web today, thanks to AI generated texts and images everything feels polished, perfect... and a little cold. I wanted to break the proverbial ice with a simple smile. So I replaced my hero photo with something alive: tiny, random videos of me waving, nodding, or just being there. There is more than meets the eye to make it work, let me explain in this post. ## Inspiration As father of two I often play with kids, from this I know that to make new connections it sometimes helps to overcome boundaries (like shyness) when you pull a crazy face, make a joke or wear a silly hat. Although my website is aimed at grown-ups, I figured that a little fun could still help to make things approachable. ![John Hodgman and Justin Long in the award-winning "Get a Mac" ad campaign ("I'm a Mac" and "I'm a PC")](https://willem.com/global/images/7c7661d2f39b.webp) Maybe you remember the Apple ad campaign with just two guys playing a PC (John Hodgman) and a Mac (Justin Long), highlighting differences between Macs and PC's in a playful way. They captivated audiences with humour and relatable characters. Thanks to the simplicity of the format, I imagined that I could make it work for my website, even without a marketing budget like Apple (ha!). ![Live paintings in Harry Potter's Hogwarts](https://willem.com/global/images/0fd7f53bb983.webp) Inside the School of Magic from Harry Potter there are paintings that move, talk and feel sentient. Instead of a static image, they appear to be alive. As they move they convey a much richer picture of the depicted person. Could I capture myself in a magical painting? ## Making it Instead of long and fully scripted scenes I decided to go for quick cameos, glances into my life as professional, endurance athlete, writer and father. By recording them in a standard setting (my living room) I can shuffle them and record additional seasonal shorts (e.g. wearing a Santa's hat during Christmas). ![The "Ultra Professional Movie Studio Setup" - my living room and iPhone](https://willem.com/global/images/fdf3565b3b89.webp) Using some clamps, wood and furniture I positioned my iPhone facing a grey wall. Targeting the round "hero frame" on my homepage, I configured the camera to show a square grid giving me a sense of composition. Eventually I opted for the selfie camera so I could see the recording while looking into the camera. I remembered some lessons [from my amateur acting escapades](https://willem.com/en/2018-04-18_outside-the-comfort-zone-amateur-acting/), emphasising facial expressions and the power of looking at the audience. I recorded over 12 minutes of footage, producing a 7.3 gigabyte video file. ## Pushing Tech While it appears to be a simple whimsical thing, delivering high resolution video instantaneously on a high traffic homepage is a formidable challenge in encoding and performance engineering. To make it work I came up with several things: - **short fragments instead of long video:** I cut the 7.3 gigabyte original footage in small chunks, producing clips of just a few seconds each. - **cropping into a square:** there is no need to load pixels that you cannot see, square video footage is sufficient to fill my intended round target frame - **dropping audio:** with an international audience I didn't want to deal with speaking in different languages as it would complicate things, therefore I could safely drop audio data - **greyscale and crossfader:** all fragments start and end with a solid grey tint, making it possible to seamlessly shuffle the footage, adding to the magic of unpredictability - **aggressive encoding:** I pre-process individual clips using serious compute power to minimise file size, making clips as small as just one megabyte, some even smaller! - **integrated player:** to minimise loading external sources, I created a video player with shuffle and scheduling support that is integrated right in the homepage's HTML ![Instead of one large video file, I use many different short, square, grey and audio-less clips](https://willem.com/global/images/dff01847b9a1.webp) ![All clips begin and end with a solid grey cross fader that I automatically add to the footage upon batch processing and encoding with ffmpeg](https://willem.com/global/images/283975eb3cad.webp) ![Individual clips are managed and scheduled via a tailored backend system, driving the integrated video player on the homepage](https://willem.com/global/images/4e83adc7e2de.webp) ## Why it matters Instead of a sterile interface, the imperfect goofy clips illustrate the human element behind the formal story. The smile, the nod, the wave, they all provide an opening for connection. It's the perfect "hello". [Video (mp4)](https://willem.com/global/video/6a6f54a30696.mp4) The end result as seen on [my homepage](https://willem.com) ## Conclusion You don't need a multi-million marketing budget to deliver a smile, a simple thing can get you a long way. By embracing human imperfection in short video clips, I set the scene for connecting in a better way than a perfect photo can. --- ## Websites with Auto Pilot *Up to date content with scheduling, feeds and AI* · 2026-01-07 · https://willem.com/en/2026-01-07_websites-with-auto-pilot/ Why do you need a website, and what can you do to maximise its value while minimising (manual) effort? I have been working on this with some of my most innovative customers. What if you no longer need a full blown manual content management system? What if your website updated itself while you focused on what matters? ## Problem with websites Getting a fancy website is easy, but keeping it up to date requires effort. You need to post new content and remove old things. Maybe you are on Instagram, LinkedIN, TikTok or Facebook, but forget to publish the latest info on your website? If your website is not up to date or when it does not contain all information, it loses relevance, and it might confuse people with wrong or outdated content. ## Why you (still) need a website You can own a small piece of the Internet where you have full authority, a digital storefront, a presence. It is your place and you decide what information is shown. Unlike Instagram, Facebook or YouTube, only content about you is shown and people are not distracted by other content or ads. You can make it a trusted place about you, where all information is aggregated and linked. ## Helping you with Auto Updates While keeping your website up to date can seem to be a lot of work, when posting something on Instagram, Facebook or LinkedIN is easy, it doesn't have to be. Instead of requiring lots of manual effort, I make websites that automatically update themselves using: - **scheduling:** have content automatically show or hide on a given moment. If you add something to your website, you can set an 'expiration date', saving you the effort to remove it manually. - **feeds:** if you are active on Instagram, Facebook or other social media, you can have your posts on your website, too. Combine and aggregate different sources of information and automatically have it published on your website without ads or distracting content from others. - **AI:** automatically summarise, translate and re-orient content from different sources to be suitable for publication on your website. ![Automatically showing and hiding content keeps the club agenda up to date on escape.nl](https://willem.com/global/images/4f52c172bd39.webp) ![Aggregating content from different sources in interactive widgets on gpcardio.org](https://willem.com/global/images/8eb9f80d7b4a.webp) ![Re-publication of Instagram posts to drive ticket sales without leaving the website on dekroon.nl](https://willem.com/global/images/59abed0fe355.webp) ## Conclusion Own your place on the Internet without wasting time and energy on cumbersome manual content management like WordPress. Have your website work for you so you can do the things that drive your business. --- ## The Future of AI is Human *On Fairies and Gin-Tonic with Blueberries* · 2025-09-24 · https://willem.com/en/2025-09-24_the-future-of-ai-is-human/ AI got me thinking lately, why would one still want to work? Perhaps today's imperfect AI is not ready yet, but imagine everybody has access to a near perfect intelligence, capable of solving hard problems and answering even your wildest questions. Combine that with robotics and we'll be left wondering what to do next. Some fairies and Gin-Tonic pointed me to a possible answer. Many jobs are already touched by AI today, I know a lot of folks use the large language models to generate and process text, documents and corporate things. Sometimes the AI texts are so obvious that I wonder if anybody actually cares. If texts generated by one AI are read and processed by another AI, then what's the point of the text anyway? ## **Fairies** In the world of wonders, [Efteling](https://www.efteling.com), I may have found the first clue for finding the meaning of ~~life~~ work in an age of AI when I met some fairies with my little daughter. Easy to dismiss as cosplaying girls, I witnessed some true meaningful interaction, something pure and authentic. My girl met _real_ fairies and did some _real_ fairy things. These girls weren't acting superficially, they maintained their magic even when their shift was over. Even I felt their power when they waved goodbye with hand kisses and blinking eyes. ![Meeting fairies in Efteling with my girl](https://willem.com/global/images/31d9dea5b89a.webp) I think that the power of these fairies was not their roleplaying, but the fact that the girls genuinely cared about my daughter and her imagination. True attention from a fellow person is something special, something valuable and hard to replicate with a computer. I realise that modern tech can simulate things, but I believe in the real thing to stand out by speaking to our subconsciousness: humans reaching for humans. ## **Gin-Tonic with Blueberries** For her birthday I took my wife for some shopping, instead of boringly strolling through a dime a dozen retail stores I made an appointment with [Ellie](https://www.instagram.com/kuif_conceptstore/) from [KUIF](https://www.kuifwebshop.nl/) in Venlo, who prepared a selection of clothes and accessories. She knows my wife a bit as our kids go to the same school, enabling her to pick pieces only a fellow woman would understand. In her store I saw how attention to detail and taste made all the difference, even if that meant recommending _not_ to buy certain clothes. She didn't limit her attention to my wife as I got to enjoy a Gin-Tonic with blueberries, yum yum. ![Gin-Tonic with blueberries at KUIF Venlo while shopping for clothes](https://willem.com/global/images/2c6ab41d99ab.webp) The shopping experience was super, not because of the drinks or selected pieces, but due to the fact that someone really cared about how wearing the clothes _felt_ for my wife. The empathic power is truly human and very difficult to substitute by a computer. We can make stellar recommendation algorithms, they can't tell by the look on your face how you feel wearing a certain dress. Only humans can do this as we can really relate to each other. ## **Conclusion** Think about what AI cannot capture and focus your energy onto that. Why do people enjoy playing "Stairway to Heaven" on a guitar when near perfect recordings can be played instead? It is because we feel, we enjoy, we imagine and we share these things with others. I hope that the future of a world with AI is one were humans can find each other - continuing to be what we've been for ages: human. --- ## Omarchy on iMac *Breathing new life into an old computer with Linux* · 2025-09-22 · https://willem.com/en/2025-09-22_omarchy-on-imac/ After helping a family member migrate to a new computer, I found myself with an old iMac. The machine from 2017 was very slow running modern macOS, yet I have a soft spot for these all-in-one computers designed by Jony Ive and his team. Could I install Linux on it to give it a second life? ## **iMac** Probably one of the most important computers that Apple ever built is iMac, the original was critical in Steve Jobs' effort to save Apple from bankruptcy. I like its looks and how its design makes a separate box/tower unnecessary. This saves you a lot of cables that original desktop PC's need (like wires connecting the monitor and speakers). ![Migrating to a new iMac](https://willem.com/global/images/a6d3fa3183d0.webp) Using macOS's Migration Assistant I helped my family member move his files and apps to a new computer. His old iMac had become very slow running macOS. Newer macOS versions no longer run on this 2017 machine as Apple has dropped support for it. I hate planned obsolescence and offered to find out if I could give this machine a new purpose. Related posts: - [Lessons from a takeaway plastic bag](https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/) Look, I ain't no saint when it comes to the environment. I have [driven race cars](https://willem.com/en/2017-05-31_beast-of-the-green-hell/) and [flown planes for fun and lunch](https://willem.com/en/2018-05-09_lunch-by-plane/), but I _do_ care about throwing good things away for the wrong reasons. In the past I have used my Linux expertise to revitalise old hardware, like in these two earlier posts: Related posts: - [Working Offline First](https://willem.com/en/2023-05-01_working-offline-first/) - [Helping people with free software](https://willem.com/en/2018-07-20_helping-people-with-free-software/) The old iMac is a 21-inch model from 2017 with an Intel i5 processor, 8GB RAM and a 1TB hard disk. Admittedly this machine won't break any speed records, but it looks nice and it runs almost completely silent. Its display has great colours and the glass and aluminium housing offers plenty of space for ports. It has USB-C/Thunderbolt, USB-A, gigabit ethernet, a headphone jack and a SD card reader. Over the years I have seen my fair share of iMacs and I know that opening them is possible, but not without risk. For sake of simplicity I decided to leave the hardware the way it is, seeking its second life in software instead. Upgrading the memory or installing a SDD may be worth it, you should check out these posts and judge for yourself: Related posts: - [Upgrading a 27-inch iMac 5K to 14 terabytes](https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/) - [Rescuing photos from a crashed iMac](https://willem.com/en/2020-10-15_rescuing-photos-from-a-crashed-imac/) I packed the iMac and took it with me by train. You should have seen the faces on my fellow travellers chimping away at their tiny screens when I sat down with a 21-incher. Dutch trains feature 230V power outlets, but I decided to maintain somewhat of a low profile. Instead I ate an apple while the other Apple was tucked away in a bag. ![Waiting on the platform for my train with an Apple in a bag...](https://willem.com/global/images/f8086629ca41.webp) ![... while eating an apple!](https://willem.com/global/images/51c918f758cc.webp) ## **Omarchy Linux** Back home I booted the iMac to see if it survived the adventure in the train and I proceeded with downloading [Omarchy](https://omarchy.org/) onto a USB-drive. Based on [Arch Linux](https://archlinux.org/), David Heinemeier Hanssson, or [DHH](https://dhh.dk/), created Omarchy to be a beautiful, modern distribution of Linux. Unique to Omarchy is the overall vibe of [Omakase](https://en.wikipedia.org/wiki/Omakase), Japanese for "Chef's Choice". This means that a great deal of effort (and taste) has already been poured into the system so you don't need to figure out everything yourself. It is opinionated and you may not like all the defaults, but it is pretty good from the get go and its installation process is _very_ fast and requires very little manual input. ![Using balena Etcher to create a bootable USB-drive to install Omarchy](https://willem.com/global/images/a1ac9cf9423f.webp) ![Don't be fooled by the tongue-in-cheek retro logo: Omarchy is a cutting edge flavour of Linux with all the modern tools you need](https://willem.com/global/images/c6249f9e1912.webp) ![The installer does its magic almost completely automatically](https://willem.com/global/images/a50377ede64f.webp) ![The Omarchy installer is fast, the entire operating system with all the pre-selected looks and tools only took 6m 19s on the old iMac from 2017 to complete](https://willem.com/global/images/2febe2ecf976.webp) After installation you really are ready to go, the machined booted and greeted me with the beautiful desktop from the default Tokio Night theme, similar in colours to the original [OS X Leopard desktop wallpaper](https://duckduckgo.com/?origin=funnel_home_google&t=h_&q=osx+leopard+wallpaper&ia=images&iax=images). You should check out the [official website](https://omarchy.org) and [manual](https://learn.omacom.io/2/the-omarchy-manual) to learn more. If you prefer watching videos you could check out [DHH's YouTube channel](https://www.youtube.com/@dhh37) where he demo's many features of Omarchy. ![Omarchy reporting for duty after first boot: The Tokio Night theme looking great as default](https://willem.com/global/images/77d02357734b.webp) I was immediately surprised by the lack of latency. Everything feels uncanny fast. Maybe it is because of the [Hyprland](https://hypr.land/) window manager or maybe it is the wired keyboard connection. I don't know, but Omarchy feels fast, really. It blew my mind that if this old machine can feel so great, then what the hell are my modern machines doing with all their power!? ![Before I knew it, I was using Omarchy to do some work. It is powerful right out of the proverbial box](https://willem.com/global/images/3ef0f2098a0e.webp) ## **Experimenting and Learning** For the simple reason of it being fun to use, I intend to continue using my Omarchy iMac to do my work as web app developer. One thing I love is how web apps are treated as first class citizens, running and looking just as good as any other app. For my work this is really great as it elevates my own tools like [Lemmid](https://willem.com/en/work/lemmid/), without requiring me to do crazy things like [creating native wrappers](https://apps.apple.com/us/app/lemmid-online-toolbox/id1327213822)... ![Doing my web development work on Omarchy where my tools (in the lower right) run perfectly alongside other apps like Chromium and the terminal](https://willem.com/global/images/0d4e9ad781c2.webp) ## **Conclusion** The iMac really shines again using Omarchy Linux, I really enjoy working on it. If you have an old computer you should give it a try, too. I wouldn't be surprised if it continues to gain in popularity. We are all among friends here and when the [ceo](https://www.linkedin.com/in/nrpframework) of [Framework computer](https://willem.com/en/2025-02-10_better-laptop/) is [chiming in on it](https://x.com/dhh/status/1965477045791850739), too, one can't help but be optimistic about the future of computers! ![This post was published on this very iMac using Omarchy Linux](https://willem.com/global/images/e388804fc406.webp) ![On the screenshot: Nautilus file explorer, Mousepad text editor and the Lemmid content management system running together on Omarchy](https://willem.com/global/images/af726e29ea69.webp) --- ## Auscultare Podcast + Audiobook Player *Building a native Android app that remembers where you've left* · 2025-08-29 · https://willem.com/en/2025-08-29_auscultare-podcast-audiobook-player/ Enjoy distraction free listening to long form audio files like podcasts and audiobooks using this app I made. Tired of bloated apps full of ads, subscriptions or 'suggestions', I wanted an app that gets out of my way by doing one thing only and one thing very well. This is Auscultare. Latin for (attentive) listening, 'Auscultare' is an Android app I made that plays MP3 files and remembers where you've left and how many times you have played a file. This is great to enjoy long form audio like podcasts or audiobooks. Progress tracking helps you chunk up long in-depth interviews like the [Lex Fridman](https://lexfridman.com/podcast/) podcast or [Deep Questions by Cal Newport](https://www.thedeeplife.com/listen/). The play counter helps you rotate music podcasts like [Clublife by Tiësto](https://shows.acast.com/clublife-by-tiesto) so you don't have to listen to the exact same thing when working out in the gym or going for a run. ![Auscultare: the podcast and audiobook player that tracks progress and play count, featuring a minimal light and dark design and perfect integration with Android (like lock screen play controls, and support for Bluetooth headsets and audio casting)](https://willem.com/global/images/eda8d0ee437a.webp) ## **Premium Android Development x Unix Philosophy** While there are numerous apps that can play you some audio, I felt that none of them ticked _all_ these boxes: - **simple, clear and compact**: make the program do one thing well, avoid feature bloat - **composability**: use the app with files from different sources and play on various outputs like Bluetooth headsets or speakers with dedicated controls - **minimalist design**: use as little design as possible and use user interface controls and concepts people know. Use as little text as possible to prevent language from forming a barrier. - **premium nativeness**: the app must feel and look like it is part of Android itself. The only way to do this _right_ is by using the same tools and code as Google does. You feel the app's exceptional performance, the sleek and crisp looks, and you'll get first class integration and the best battery life. - **free/libre**: while you may not care about open source code, free (as in freedom or libre) apps tend to be more respectful to their users as they are created by people to serve people, not corporations. Making money on software isn't necessarily bad, but the ever growing hunger for more money drives the development of 'features' that trick, nudge or force you to spent more time or money. By offering the source code with the app, I provide proof that I have no hidden agenda. ![Making the app I want using Android Studio and Kotlin](https://willem.com/global/images/db110f1f62c6.webp) ## **Download the app & source** You can download the app and its source code using the following links: - [Google Play: Auscultare](https://play.google.com/store/apps/details?id=com.dsd164.auscultare) - Source code (GPLv3): https://source.willem.com/auscultare/ If you want to support development, consider downloading the Google Play version of the app for which I charge a small fee. Or use the 'buy-me-a-coffee'-button on the bottom of this page to make a small donation. Alternatively, you can download and compile the app from source. ![Auscultare: made with love to get out of your way so you have more time for other things, like going for a run!](https://willem.com/global/images/72e3d4a11b53.webp) ## **Conclusion** Knowing what I wanted and unwilling to compromise, I used modern tools to build a podcast and audiobook player app for Android. By publishing and releasing it, I allow others to enjoy it, too. Happy listening! --- ## Android Photo Library App *All your photos in your pocket with Aves Gallery* · 2025-08-19 · https://willem.com/en/2025-08-19_android-photo-library-app/ In Europe the summer holidays are nearing their end and if you are like many young parents, you probably shot a ton of new photos and videos. These are not just a bunch of files, they are like windows into our personal memories. This post is about an Android app that you can use to look at all your memories, right from your pocket, no cloud or subscription required. Maybe it is because I get a little older, but I have increased my emphasis on the _good_. Things like durability, respect for other people, health and freedom are more important to me now than ever before. I hold no grudge towards any company, but I do not like the modern trend of needing a subscription for everything. The tools I use and the things I do reflect that, like these previous posts on my laptop and smartphone: Related posts: - [Durable Smartphone](https://willem.com/en/2025-03-05_durable-smartphone/) - [Better Laptop](https://willem.com/en/2025-02-10_better-laptop/) ## **Vitamins for the Mind** While I had [my grumpy old man reasons](https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/) for leaving iCloud Photos, one thing I think Apple understands well is how important photos and videos are for our wellbeing. In [an interview](https://www.youtube.com/watch?v=DKpQB9kNeQE) on YouTube, Dr. Sumbul Desai (Apple Vice President of Health) mentions the importance of photos right along heart monitoring and fall detection. Memories of loved ones can make us feel good. Apple integrates this vision into their products with features like "on this day" and the photo watch face, automatically showing different memories. Easy access to your photos and videos helps you reflect and can be a perfect antidote for other things that might cause anxiety or stress. ![Apple is serious about health and photos (Dr. Sumbul Desai)](https://willem.com/global/images/6cf4b61f3f39.webp) ## **Aves Gallery** Standard photo gallery apps work well with smaller collections of photos, but if you are like me and want to carry your entire photo and videos collection they often fall short compared to cloud and subscription based services like Apple iCloud Photos or Google Photos. Basic things like simply being able to handle large amounts of files and more advanced features like using metadata to find certain photos. After trying various apps, I found Aves Gallery ([Google Play](https://play.google.com/store/apps/details?id=deckers.thibault.aves), [F-Droid](https://f-droid.org/packages/deckers.thibault.aves.libre/), [Github](https://github.com/deckerst/aves)) to be really good. It is a libre/free app released under BSD3 license created by Thilbault Deckers. I like it because: - **Gesture support**: swipe with your fingers through your photos, just like Apple Photos or Google Photos. It works fast, fluid and, unlike many other Android gallery apps: continuously and multidirectional. There are also gestures available to return to the overview (swipe down from detail view), pinch-to-zoom and a single tap to show/hide textual info on any photo. - **Scrollability**: Most gallery apps can scroll, but with Aves you get an extra powerful scrollbar which enables you to scroll both fast _and_ accurate. - **Search and filtering**: Aves indexes the metadata from your photos and enables advanced searching and filtering by city, state or country. You can also filter on date, media type or a combination of these. - **Customisation**: You can set main menu buttons, tab bar buttons, colours, and photo action buttons to match your style of browsing. You can change the look of the overview by changing thumbnail size, dimension (square versus rectangles) and sorting. ![Aves in action showing the powerful scrollbar which enables fast and accurate scrolling](https://willem.com/global/images/f46444879aad.webp) ![So that if your remember your wedding date (..), you'll be able to return to that specific day in a simple swipe](https://willem.com/global/images/244c3f0a8e94.webp) ![Just like Apple Photos, you can search by location - like going back to Valencia where I ran a marathon with by buddy Niels](https://willem.com/global/images/4e25a082971e.webp) ## **Syncing Photos** New photos you take automatically appear in the Aves Gallery app. You can set Android to use Aves as default media viewer and picker app. If you're currently using a cloud photo service, you might first need to retake control over your photos. I did that in 2020 and wrote the following post on it: Related posts: - [Free from the iCloud: Escaping Apple Photos](https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/) In that post I describe the app I use on my laptop, [Shotwell](https://wiki.gnome.org/Apps/Shotwell) and the steps I took to manage my own photo library. You could use rsync, [Syncopoli](https://f-droid.org/packages/org.amoradi.syncopoli/) or [Syncthing](https://syncthing.net) to setup automatic synchronisation between your smartphone and other devices. ![Syncing photos between laptop and smartphones - Shotwell and Aves Gallery app working together](https://willem.com/global/images/21592d0d311e.webp) ## **Conclusion** Don't dismiss your photos and videos as just files. With the right app they can really bring you bits of joy. Using the Aves gallery app that joy does not require a subscription, not a cloud and is fully free+libre! --- ## Willemstagram *3D flip-flap photo display showing stories* · 2025-08-11 · https://willem.com/en/2025-08-11_willemstagram/ Last week I sat with a customer looking at the new willem.com homepage where I use a narrative to tell about the things I do. This customer is one of the best visionary create thinkers, yet my text didn't seem to speak to him. Thinking about this, I remembered an important psychology lesson from the University: I needed something different, something non-linear, this post is about delivering a visual punch! ## **Left versus Right Brain Thinking** One of the cool things of [my education](https://willem.com/en/about-me/education-certifications/) at the University of Amsterdam was that we got classes from different faculties, forming an interesting mix of interdisciplinary science. One classic book we discussed was "[Mintzberg on Management](https://www.google.com/search?q=mintzberg+on+management+book)" in which the author elaborates why different people prefer different things, the classic dichotomy often simplified as left versus right brain thinkers: - **The linear thinker (the left brain)**: This is the natural state for people that appreciate a logical narrative that builds from A to B to C. Typical persons like this are storytellers, architects and programmers. - **The non-linear thinker (the right brain)**: This is the state of people that don't follow a straight line. They scan for impressions, vibes and emotional takeaways. Typical persons like this are create folks including artists and visionary thinkers. My new willem.com homepage worked well for linear thinkers like me, the text based narrative suits the left-brain. But, my design lacked for people who go best on non-linear, vibefull impressions. I needed something that exposes the many visuals in a rich and dynamic way, alive and with a healthy dose of interactive fun. ## **Solari Board** Many moons ago I met my wife on Utrecht Centraal Station, right under the gigantic departure information board. The iconic 7x4.20M blue info board, weighing around 3000 kilos, featured flip-flapping mechanical panels producing a recognisable sound you would hear every minute or so in the central hall of the station. This type of signage display is often called a "Solari Board", named after [Solari di Udine](https://en.wikipedia.org/wiki/Split-flap_display), the Italian company that produced these icons. These days the Utrecht station features digital info displays, but if you want you can still see it in [Het Spoorwegmuseum](https://www.spoorwegmuseum.nl/). ![The big blue mechanical departure info board from Utrecht Centraal (photo: cc/maurits90)](https://willem.com/global/images/334ea770c6c7.webp) As a metaphor aficionado (book tip: [Metaphors we live by](https://duckduckgo.com/?t=ftsa&q=metaphors+we+live+by+book)), I figured the Solari Board, with its "flip-flapping" would be a lovely way to allow visitors of willem.com to "depart" to various "destinations" (the stories) on the site. Instead of using text, I deliberately chose to use the photos and visuals inside the blog posts as gateways into the [insights](https://willem.com/en/insights/)-section on willem.com. By randomly revealing new destinations this is perfectly non-linear and by making it interactive (clickable and touchable) it is more engaging than plain text. Every destination opens a "ticket" explaining a little bit of what it is you're looking at. If you like what you see, you can hit the big button to open the story right at the position of the image, which could be halfway a blog post. Stories open in new browser windows, enabling you to return to the "station" to find a new destination. ![Visual Journal concept sketch: flip-flapping images deep linking to pages on willem.com like a mechanical Solari Board](https://willem.com/global/images/c32ce6e2d76f.webp) ## **Implementation: ThreeJS and custom image API** Earlier I experimented with the ThreeJS 3D graphics engine to visualise workout data. It is a library using the HTML5 standard `canvas` element to output graphics generated utilising spatial computing, a fancy way to say it enables you to draw things on three dimensions (x, y, z) instead of two, hence its name. It provides camera, light and fog controls and it is designed to enable animations based on simulated position and rotation. It is pretty cool to play with and quite capable. See these earlier two posts on my experiments with ThreeJS: Related posts: - [Workout data in 3D](https://willem.com/en/2025-03-10_workout-data-in-3d/) - [Vibe Coding](https://willem.com/en/2025-04-15_vibe-coding/) The minimalist in me briefly considered going with CSS animations, transforms and transitions. But I figured the realistic perspective, where the outermost panels rotate more skewed, and the randomness in selecting new visuals would require me to use JavaScript anyway. To maximise its value I wanted to integrate it right on my homepage. But, loading a complete 3D engine is not something to consider lightly. To minimise its effects on the homepage's loading time, I carefully designed the thing to be loaded asynchronously and entirely optional (for people with JS disabled). ![Visual Journal, dubbed "Willemstagram" in action](https://willem.com/global/images/8a20e248d096.webp) To feed the "Visual Journal", I designed a custom API that serves highly optimised images scaled to 400x400px. Each image has a localised title and a deeplink with an hashtag (slug) anchor, enabling the deep diving into stories. I rely on [my own lemmid platform](https://willem.com/en/work/lemmid/) to provide me with the required infrastructure to pull this off. In the background an optimised `NodeJS` service generates the images using `imagemagick`, `jpegoptim` and `pngquant`. You can check out the API yourself on https://willem.com/en/images.json outputting a JSON array like: ``` [ { "url": "/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/i_15_An-average-fly-is-bigger-than-most-screws-inside-the-iMac_400x400px.jpg", "title": "An average fly is bigger than most screws inside the iMac", "target": "/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/#an-average-fly-is-bigger-than-most-screws-inside-the-imac" }, { "url": "/en/2019-06-25_assembling-a-cargo-bike/i_11_Using-filler-plates-to-make-up-for-Chinese-Precision_400x400px.jpg", "title": "Using filler plates to make up for Chinese Precision", "target": "/en/2019-06-25_assembling-a-cargo-bike/#using-filler-plates-to-make-up-for-chinese-precision" }, { "url": "/en/2021-01-14_abandoning-my-own-tablet-os/i_05_You-know-you-re-digital-pen-is-lacking-trust-if-you-grab-for-old-fashioned-pencil-and-paper_400x400px.jpg", "title": "You know you're digital pen is lacking trust if you grab for old fashioned pencil and paper...", "target": "/en/2021-01-14_abandoning-my-own-tablet-os/#you-know-you-re-digital-pen-is-lacking-trust-if-you-grab-for-old-fashioned-pencil-and-paper" }, ... ] ``` To prevent the thing from being just a random link generator I deliberately put a little popup in it when you tap or click any visual. I utilise the image captions that my [lemmid content manager](https://willem.com/en/work/lemmid/) maintains to reveal a bit of info enabling you to determine if you think it is worth opening the story. ![The popup enables you to make a decision of diving into the story or to continue exploring other images](https://willem.com/global/images/837bfdd7ff30.webp) ## **Releasing the source code (AGPL)** While I am very happy with how the Visual Journal works on my site, [I strongly believe in sharing](https://willem.com/en/open-source/). Chances are you have an even better idea for some Solari flip-flapping. Therefore I release the entire thing as free/libre software under the GNU Affero General Public License (AGPL). That means you can use, modify and distribute it yourself. Find the source code, readme and sample files at https://source.willem.com/visual-journal/ ## **Conclusion** Judging by how it captivates my kids' curiosity, I am very happy with the visual journal, which jokingly dubbed Willemstagram. But unlike Meta's Instagram, this only serves visual to tell _my_ stories and its source is libre. You can check it out on the homepage or by hitting the button below. What destination will you choose? [action1] [Video (mp4)](https://willem.com/global/video/179d4e3b4ce0.mp4) *This was written by hand. In an age of AI-generated text, this is my simple way of showing the human thought and effort behind these words. For those who are curious, the original (English) manuscript is available for download.* [download1] --- ## Towards Digital Sovereignty *Turning my experience into your advantage* · 2025-08-02 · https://willem.com/en/2025-08-02_towards-digital-sovereignty/ Over the years I have experimented with different digital tools, platforms and apps to get my work done. From easy-to-use but locked down commercial systems to free/libre solutions that are powerful but more challenging to setup. I learned a lot along the way. Now I offer that experience to others, read along to learn how you can benefit from this. ## **What is Digital Sovereignty?** It's a simple idea. You should be in control of your digital world, not the other way around. It means your tools, your data, and your workflow should serve you. This forces us to ask a simple but important question: **are your tools working for you, or are you working for them?** ## **The Audit: What I Do** The process of getting there starts with a simple conversation. I listen to your goals and frustrations. Then, I map out your entire digital setup: your computers, your software, your cloud services, and how your data moves between them. At a glance: 1. **Deep-Dive Interview:** We start with a 90-minute conversation where I listen to your goals, your frustrations, and how you currently work. 2. **System Mapping:** I analyse your entire digital ecosystem: your hardware, software, cloud services, data storage, and communication channels. 3. **Actionable Report:** I deliver a concise, written report that identifies your biggest pain points and provides a clear, step-by-step roadmap to a more sovereign and efficient system. ![This is how it begins: A real page from my personal notes, mapping out complexity to find a simple path forward](https://willem.com/global/images/91af73aa0c88.webp) ## **The Outcome: What You Get** The result is a clear, written plan. It's a step-by-step guide to help you simplify your work, protect your data, and break free from expensive tools that hold you back. The key deliverables are: * **A Personalised Roadmap:** A clear, prioritised list of actions to simplify your workflow and reduce dependencies. * **Strategic Tool Recommendations:** Concrete suggestions for open-source and privacy-respecting software to replace inefficient or costly tools. * **Data Liberation Strategy:** A practical plan to get your most important data out of silos and into a system you control. * **Automation & Efficiency Gains:** Identification of key areas where simple automation can save you hours of manual work each week. ## **Who This Is For** This is for the creator, the founder, the independent professional who feels like they spend more time managing their digital tools than doing their best work. It's for the small team that knows there must be a simpler, more powerful way to collaborate. You might feel locked into one ecosystem, worry about where your data is stored, or simply be tired of the digital clutter that pulls you away from what's important. You believe in focus and freedom, and you're ready to build a digital foundation that truly supports your work. I genuinely enjoy helping you because I deeply care about using technology to empower people, not lock them in. It's the same principle that drives my commitment to [Open Source](https://willem.com/en/open-source/), and it's about giving you the same freedom and control over your digital world that I've built for myself ![Over the years I have refined and simplified how I work just as much as the things I produce](https://willem.com/global/images/face35e557c6.webp) ## **Conclusion** **How** I work is just as important as **what** I create, and over the years I've put a lot of energy into finding ways to optimise the '**how**'. I genuinely enjoy turning that experience into your advantage. If you're ready to improve your own 'how', I'm happy to help. [action1] --- ## The Agentic Web *"Voorsorteren" for the future* · 2025-07-26 · https://willem.com/en/2025-07-26_the-agentic-web/ In Dutch, there's a great word: voorsorteren. It means getting into the right lane on the motorway long before your exit. You do it to ensure a smooth, stress-free journey. I believe the same principle applies to technology. A little bit of smart preparation now can give you a massive advantage when the future arrives. Right now, I believe we should all be "voorsorteren" for the next evolution of the internet: **The Agentic Web**. ![Thinking about the future shouldn't be a separate task; it should be an integrated part of the process.](https://willem.com/global/images/e6262069225d.webp) ## What is The Agentic Web? For decades, the web has been about humans talking to machines. We type a query, and a computer shows us a list of websites. The Agentic Web flips this around. It's about **machines talking to other machines on our behalf.** Imagine AI "agents" that act as super-smart assistants. These agents will not just *find* information for you, but will be able to *take action*. Instead of searching for a restaurant's website, your agent could directly ask the restaurant's agent for its menu, check for a free table, and book it for you. This works for everything: ordering takeout, buying tickets for a club night, or getting a quote from a contractor. Language models will act as universal translators, bridging gaps in language and context, allowing these agents to communicate seamlessly. ## How to Prepare Your Website So, how do you get ready for this? The key is to make your website speak the language of computers as clearly as possible. It's about reducing noise and adding structure. 1. **Use Semantic HTML:** Use modern HTML tags like `
`, `
`, and `