Koen van Gilst

Articles & Experiments

Below, you'll find a collection of coding experiments, blog posts and side projects I've been thinkering with. It's a mix of educational web apps, tutorials, data visualisations and creations just for fun.

2026

Growing a Better World... Together with AI

Notes from my talk at the AI Circle on vibe coding, the changing role of engineers, and why AI should be an exoskeleton — not a replacement.

Generating vs. Searching

My 'Software for One' post got some comments about energy costs of generating small apps with AI. When I looked into it, the numbers surprised me.

Software for One

Instead of downloading someone else's app, I built exactly what I wanted for less than a dollar using AI. Is this the future of software?

A Game of Life and Ghosts

A 3D visualization of Conway's Game of Life where dead cells (ghosts) sink into a glowing history stack

Computer Says No

When AI takes over the coding, a layer of knowledge disappears - not just for the user, but for the builder themselves.

Gemini Paints Sunflowers in SVG

A new AI model drops every day. Today it was Gemini 3.1 Pro, which does a surprisingly nice SVG rendition of modern art — the Sunflowers in particular caught my eye.

Omarchy-Inspired Setup for macOS

How to set up a keyboard-driven tiling window manager on macOS using AeroSpace and SketchyBar.

Coding is Dead

From typing over starfield code as a kid to letting AI agents build features - reflecting on how coding is changing and what it means for software engineers.

2025

Building Tetris Time with Claude Code

A New Year countdown and clock visualized with falling Tetris blocks. In this post I share some insights on what has been working well for me when building with AI coding agents.

A Brief History of Large Language Models

From ChatGPT's launch to AI agents with tools - a user's perspective on how LLMs evolved from chatbots to autonomous systems in just three years.

Adding llms.txt (and a honeypot) to my website

Implementing the llms.txt standard to help LLMs understand my website, plus a clever honeypot to track when AI assistants actually visit.

European Land Use Visualization

An expanded hexagonal map visualization comparing land use across multiple European countries, showing how water, nature, cities, and agriculture are distributed. See what makes Dutch land use special - or not.

Can LLMs Recreate Van Gogh's Starry Night Using Only SVG?

An experiment tracking how AI models from 2022 to 2025 have evolved in their ability to recreate famous artworks using SVG. The results reveal how these models understand visual composition and artistic style.

A New Metaphor for AI

A post about a better metaphor for AI than the dominant "Terminator" narrative. What we can learn from the history of automata and scientific progress.

When AI Fails

A project dedicated to documenting the funny, interesting, and sometimes outright stupid ways in which AI can fail.

United Nations Speeches

A side-project that analyzes diplomatic relationships through speeches during the 2024 UN General Assembly.

2024

Generative Art Gallery

A gallery showing all my generative art projects in one place.

Joost van den Vondel's correspondence

An experiment with GenAI to automate manual tasks in creating a critical edition of Joost van den Vondel's correspondence.

Ons Land

An interactive data visualization project exploring how land is used across the Netherlands, highlighting the distribution of agriculture, nature reserves, urban areas, and infrastructure throughout the country.

Is creativity nothing more than a little randomness?

By using the randomness, AI can generate more surprising and engaging text, similar to how some human thinkers benefit from unconventional approaches. This post explores the concept of randomness in AI and its implications for creativity.

Analyzing GPT-4 Tokens

For this article I used Llama3 to analyze GPT-4 tokens, revealing a strong bias towards English and code.

AI and the Complexity of Code

Large Language Models like ChatGPT and CoPilot have a dual role in simplifying and complicating software development. Using a simple experiment this post explores how LLMs often lead to an increase in code complexity.

Prognosis 2100

Imagining the Netherlands in 2100, this page provides an overview of the impacts of climate change. It's a personal project, driven by my desire to show what the year 2100 could look like when my kids are in their 80s.

Displaying Aranet4 CO2 readings on my website

Tutorial on how to display real-time CO2 measurements from an Aranet4 monitor on my website using a Raspberry Pi.

Elder Race, book review

I read "Elder Race" by Adrian Tchaikovsky, a sci-fi novel that explores the concept that any sufficiently advanced technology is indistinguishable from magic.

2023

Rising Temperatures in The Netherlands

Visualizing the weather anomalies in rainfall, sunshine and temperature in the Netherlands using data from the Dutch Meteorological Institute (KNMI).

Why I Prefer Trunk-Based Development

Moving away from the structured Git Flow to a more continuous approach with only one main branch.

Git Standup Alias

A git alias to show a standup log for the specified author

Accessible router links in Angular

About the routerLink directive and how to make sure it's accessible

Progressively enhanced dark mode

Adding a dark theme to my website using NextJS 13 and React Server Components

AI Enhanced Education

During the pandemic, I worked on a side project to help parents create lessons for their kids, but it was too time-consuming to create those lessons. Now, with LLMs, I revisited the idea.

Why a plant-based diet is a good idea

My arguments in favor of eating less meat.

2022

Guest post by ChatGPT

I asked ChatGPT to write a blog post about its impact on the way developers write code. The contents might surprise you.

Reading Notes Regenesis

Regenesis: Feeding the World without Devouring the Planet. By George Monbiot.

Plotting the age of parliament with Livebook

A tutorial for Livebook, an interactive coding notebook for the Elixir programing language.

Use trash instead of rm

Stop using rm -rf node_modules, use Trash instead.

Decoding a JWT token

Using jq to decode JWT tokens from the command line.

My gitconfig

A snippet I use to setup the aliases and global git config on new machines.

Phoenix LiveView Cursors

Part 2 of my tutorial creating "live cursors" as seen in Figma. In this tutorial, I'll be using Phoenix LiveView to create the same feature.

Git hash in Next.js

A snippet to parse the git hash from the command line and add it as an environment variable to a Next.js app.

Support Ukraine banner

Add a stand with Ukraine banner using this TailwindCSS snippet

On returning to the office

Some advice from the Stoic philosopher Seneca for workers returning to the office after the pandemic.

Cleaning up local branches

A bash script that deletes all local branches not found on the remote.

Live user cursors with Phoenix Presence

A tutorial for creating live cursors as seen in Figma. A step-by-step guide focused on beginners (I'm learning Phoenix myself).

Clean code is a phase

Why it's better to be kind than to be clean.

2021

Adding Tailwind CSS to a Phoenix project

With the official mix task it has become very easy to add Tailwind to any Phoenix project. To make it even more straightforward I've written this quick step-by-step guide.

React components should read like a book

How the ordering of functions can make component files easier to read.

accent-color

Nice looking radios and checkboxes with native css styling

Custom scrollbars

It's something you easily forget, but it's easy and looks so much better.

One command to run it all

Why mocking all external requests for your app is worth it.

useStorage

A React hook that uses localStorage (or sessionStorage) to persist component state.

Of Bundles and Barrels

Why index barrel files can lead to large bundle sizes

Code Colocation is King

A simple principle to help structure code better

mijn-Lessen.nl

A web app built during the Covid-19 lockdown that helps parents and elementary school children create lessons collaboratively. Parents can support their kids with challenging topics and share interactive educational content with other families. (in Dutch)

Vaccination progress

A Twitter bot that tweets the latest vaccination progress for the Netherlands. Recently updated to also show the number of people that received a booster shot.

2020

Using Svelte to create a scroll video effect

Tutorial on how to create a scroll video effect using Svelte’s powerful bind command.

Tafels.app

A new year, a new JavaScript framework! Using svelte I created this PWA to help my kids with math. The goal was to create an app-like experience, using micro animations, full offline support, prefetching JavaScript and server-side rendering.

2019

Programming quotes

A collection of great programming quotes

mobx-state-tree

A first look at the state management library mobx-state-tree and a comparison with Redux Saga.

303 See Other

Last week I learned a few things about how redirects and 303 status codes are handled in the browser.

Accessible SVGs in React

How to let screenreaders read the title of an SVG using React

Brutalist CSS

196 bytes of minimal CSS

Forgit me nots

Git commands I keep forgetting

Reading notes Programming TypeScript

Stuff I don't want to forget from the Book Programming TypeScript.

Using React Hooks with canvas

An intro to the React hooks useState, useRef and useEffect

Reading notes Accelerate

Accelerate gives a scientific analysis of what makes IT organizations successful. I've listed the most important ones (from a developer perspective)

Lumber Jack

Weekend project to learn more about Mobx State Tree. Simple kids' game inspired by Stardew Valley and Monty Python. Don't forget to turn on the sound!

2018

Reading notes CSS In Depth

Review of a book for programmers who have always considered CSS to be an (unpleasant) afterthought

Finding Nora

I made this app to test what you can accomplish with current PWA technology (especially on iOS). My kids loved it, I hope you do too! 🎉

Peter and the Wolf

Progressive Web App for kids, based upon the classical piece "Peter and the Wolf" by Prokofiev. Turns out that making large mp3s available offline is harder than I thought.

Size of NPM

I thought it might be (mildly) interesting to keep track of how the NPM node_modules folder grows over time. This website keeps track of the size of the top 100 npm packages. It's been running for a while now and the results are... frightening?

2017

API testing with Jest

Testing async API calls using Jest’s mocking features

Star Trek

Star Wars or Star Trek? Why not both? Using just CSS and a little bit of JavaScript I recreated these classic science fiction intros.

Star Wars

Star Wars or Star Trek? Why not both? Using just CSS and a little bit of JavaScript I recreated these classic science fiction intros.

2016

Generating PDF's with Express

A fun little tutorial of how to create a PDF using a web form, Express and PDFKit

Words to line prices

A simple web app for translators that converts a price per word to a price per standard line (55 characters).

Help Terence!

A Twitter bot raising emoji money for his trip around the world. A fun little experiment with social media and Twitter bots. [no longer active]. Technologies used: Express, MongoDB.

Rush hour timelapse

A Twitter bot that creates daily timelapse videos of the traffic jams in the Netherlands. No longer active, but you can still see some of the old time-lapses.

2014

Wikipedia edits door de Nederlandse overheid

Twitter bot inspired by @congressedits that monitors and Tweets any edits made to Wikipedia by the Dutch government. It's been in the news quite a few times (de Volkskrant) and the account has more followers than I do. (in Dutch)