Blog

A diagram showing the five layers of the Acquia Cloud Site Factory solution stack, including personalization and site management.
The different layers of the Acquia Cloud Site Factory solution stack.
A two-by-two grid showing four scenarios: Assist, Relay, Delegate, and Orchestrate. The vertical axis moves from one person to many people and agents. The horizontal axis moves from one system to many systems and channels. AI tools may be enough for simple solo work, but a CMS becomes more important as content work involves more people and systems.
The more people, agents, systems, and channels involved, the more a CMS matters as the control layer.
A browser window displaying a simple "Hello world!" webpage on IPNS.
My Web3 site in Brave using IPNS.
Brave showing a HTML file hosted on IPFS
Brave showing my webpage hosted on IPFS.
A confirmation screen stating that buytaert.eth was registered successfully
A confirmation screen stating that buytaert.eth was registered successfully.
Chart that shows my cameras and when I used them
The timeframe I used each camera for. The white numbers on the blue bars represent the number of photos I published on my website.
A screenshot of Drupal's editorial UI that shows a few integrations with ChatGPT.
A screenshot of Drupal's editorial UI that shows a few integrations with ChatGPT in the sidebar. The ability to suggest similar titles, summarize content and recommend taxonomy terms.
Chatgpt peloton in volkswagen california
A screenshot of ChatGPT answering the question: "Does a Peloton bike fit in the back of a Volkwsagen California T6.1?".
Screenshot showing Sol the tomato plant with Claude's sensor readings and watering decision.
Claude monitoring Sol's environment and deciding to water 200ml after analyzing soil moisture across two probes.
Color-coded chart indicating stable, healthy CO2 levels throughout the night.
A chart from my CO2 monitor that displays hourly air quality over four consecutive days. Each row is a day, and each square is an hour. Green squares mean normal CO2 levels and clean air; red squares mean high CO2 levels that can affect sleep and focus. The chart shows that CO2 levels remain healthy after we turned on the Nest's air cycling feature.
Color-coded chart that illustrates gradually increasing CO2 concentrations during sleep.
A chart from my CO2 monitor that displays hourly air quality over four consecutive days. Each row is a day, and each square is an hour. Green squares mean normal CO2 levels and clean air; red squares mean high CO2 levels that can affect sleep and focus. Every day, the squares shift from green to red, showing air quality decreases during sleep.
Lush.
Lush.com is a nice example of a content-rich shopping experience built with Drupal and Drupal Commerce.
A 3x3 grid compares digital distributors and the open web, showing different future scenarios for publishers' profitability and user experience.
This image summarizes different scenarios for the future of the web. Each scenario has a label in the top-left corner which I'll refer to in this blog post. A larger version of this image can be found at https://dri.es/sites/buytaert.net/files/images/blog/digital-distributors-vs-open-web-who-will-win.jpg.
An AI chatbot in Drupal CMS setting up a "Locations" taxonomy and populating it with the top 10 cities worldwide.
An AI chatbot in Drupal CMS setting up a "Locations" taxonomy and populating it with the top 10 cities worldwide.
Bar chart showing a steady increase in organization credits for strategic initiatives from 2019 to 2024, with a significant jump in 2024.
Drupal CMS has been a powerful catalyst for accelerating innovation and collaboration. Since development began in 2024, contributions have soared. Organization credits for strategic initiatives grew by 44% compared to 2023, with individual contributions increasing by 37%. The number of unique contributors rose by 12.5%, and participating organizations grew by 11.3%.
Screenshot of the Drupal CMS installer showing some recipes enabled and others disabled.
The Drupal CMS installer lets users choose from predefined 'recipes' like blog, events, case studies and more. Each recipe automatically downloads the required modules, sets up preconfigured content types, and applies the necessary configurations.
Screenshot of the Drupal.org homepage showcasing the updated brand with the tagline 'Create ambitious digital experiences,' presented in a bold and vibrant design.
The new Drupal.org features a refreshed brand and updated messaging, positioning Drupal as a modern, composable CMS.
Drupal supporting different JavaScript front ends
Drupal should support a variety of JavaScript libraries on the user-facing front end while relying on a single shared framework as a standard across Drupal administrative interfaces.
A screenshot of my email headers showing that SPF, DKIM, and DMARC all pass
In Gmail, click 'Show Original' to see what email protection is in place.
An artistic rendering of an endless amount of servers stretching into the horizon.
A Generative AI self-portrait by DALL·E. Via Wikimedia Commons.
Updating the Content Resolver record of an ENS domain
Mapping the IPFS hash to dries.eth is done by updating the Content Resolver record of the ENS domain on the ENS Domains website.
A table from the European Commission's Cloud Sovereignty Framework showing the four contributing factors for Technology Sovereignty (SOV-6): integration through open APIs and standards, software accessible under open licenses, visibility into design and architecture, and EU independence in high-performance computing.
The four contributing factors within Technology Sovereignty (SOV-6). Open licensing is one among four. Source: Cloud Sovereignty Framework, version 1.2.1, October 2025.
A table and formula from the European Commission's Cloud Sovereignty Framework showing how the composite sovereignty score is computed. Eight sovereignty objectives are weighted: Strategic Sovereignty 15%, Legal and Jurisdictional 10%, Data and AI 10%, Operational 15%, Supply Chain 20%, Technology 15%, Security and Compliance 10%, and Environmental Sustainability 5%. The sovereignty score is the weighted sum of each objective's normalized score.
Screenshot of how the European Commission computes its composite sovereignty score. Technology Sovereignty (SOV-6), which covers open licensing, accounts for 15% of the total. Source: Cloud Sovereignty Framework, version 1.2.1, October 2025.
This graph illustrates the market power of supermarkets / digital distributors. A handful of supermarkets / digital distributors stand between thousands of farmers / publishers and millions of consumers.
The file upload form in Fleek
Fleek conveniently allows you to upload files to IPFS from the browser.
Google Chrome showing dries.eth using the Metamask extension
dries.eth rendered in Google Chrome with the Metamask extension.
Screenshot of the main page in the new dri.es design.
After: The redesigned homepage, with recent photos.
Screenshot of the main page in the old dri.es design.
Before: The old homepage, with a blue header.
A cabinet displaying jars, each with a different interest inside: travel, photography, electronics, tennis, food, investing, coffee, and more.
A cabinet with all my interests.
A user clicks a teaser image, triggering a smooth transition to the full content page while changing the URL.
When a user clicks a teaser image on the homepage of an Ember-enhanced Drupal.com, the page seamlessly transitions into the full content page for that teaser, with the teaser image as a reference point, even though the URL changes.
A content editor interface overlays a webpage, showing real-time updates with transitions and animations for an in-context preview.
In CardStack Editor, an editorial interface with transitions and animations is superimposed onto the content page in a manner similar to outside-in, and the editor benefits from an in-context, in-preview experience that updates in real time.
A screen confirming an updated content hash for 'dries.eth' on the Ethereum Name Service, with a link to view the transaction on Etherscan.
A transaction confirmation on the ENS website, showing a successful update for dries.eth.
A man with glasses and a beard smiling, wearing a black shirt, in an indoor setting.
James Gosling, the inventor of Java and Vice President at Sun Microsystems. © Sun Microsystems.
Screenshot of a blog post in the new dri.es design.
After: The redesigned article page, with a larger lead image.
Screenshot of a blog post in the old dri.es design.
Before: The old article page, with a blue header.
An example placeholder image shows brown and black tones
The generated placeholder, scaled up by a browser from a tiny image that is 5 pixels wide. The size of this placeholder image is only 395 bytes.
The files overview screen of my local IPFS node
A "Files" overview screen showing that my local IPFS node is hosting index.html.
The status screen of my local IPFS node showing bandwidth usage
A dashboard showing my local IPFS node's bandwidth usage.
A drop-down menu allowing you to pin a file on IPFS.
A drop-down menu allows you to easily pin a file to an IPFS node.
Diagram comparing Microsoft Graph and LinkedIn Graph, showing connections between elements like emails, contacts, jobs, and hiring managers.
Source: Microsoft.
National Geographic's "Planet or plastic?" cover
One of the best covers I've seen. *Iconic!*
A group of six people on a video call celebrating the Outside-In patch being committed to Drupal 8.
Acquia's outside-in team celebrating that the outside-in patch was committed to Drupal 8.2 beta. Go team!
Instead of each platform having its own user experience, we have a shared integration and presentation layer. The central integration layer serves to unify data coming from distinctly different systems. Compatible with the "Big Reverse of the Web" theory, the presentation layers is not limited to a traditional web browser but could include push technology like a notification.
Diagram showing separate platforms (CMS, Commerce, CRM), each with its own presentation layer and user data, connected by arrows.
The current state of the web: one end-user application made up of different platform that each have their own user experience and presentation layer and stores its own user data.
A layered diagram showing user data separated from applications, managed independently below CMS, commerce, and CRM systems.
Instead of each platform having its own user data, we move the data away from the applications to the users, managed by a "personal information broker" under the user's control.
A personal information broker manages data access between the user and multiple applications.
The user's personal information broker manages data access to different applications.
A user changes the impersonation to "Anonymous" and then places a block, receiving a notification about the impact.
First the editor changes the impersonation to "Anonymous" then she places the block. She is informed about the impact of the change.
The editor switches to "Subscribers", hiding the "Access reports" block and receiving a notification when placing the "Download report" block.
The editor changes the impersonation to "Subscribers". When she does the "Access reports" block is hidden as it is not visible for subscribers. When she places the "Download report" block and chooses the "Subscriber pages" page group, she is notified about the impact of the change.
A cursor clicks on an empty block, revealing a menu with thumbnail options for adding content to the page.
The proposed outside-in experience for adding a block. Everything happens on the actual page rather than on an administration page. Places where things can be added appear on hover. On click they show thumbnails that you can filter with autocomplete.
A user navigates a website's admin interface to add a content block, showing the current block editing process.
The current inside-out experience for adding a block. Not all steps are shown.
A user selects different impersonation options to view how "Access reports" and "Download report" blocks appear for each role.
The anonymous users need to see the "Access reports" block and subscribers need to see the "Download report" block. Impersonation lets you see what that looks like for each user group.
User selects a menu item and edits its name and path directly on the page in real-time.
The proposed outside-in experience for editing a menu item. Rather than moving out-of-context to an administration page to get the job done, configuration happens right on the page where you see the effect of each action. You start adding a menu item simply by selecting the menu on the page. Both the menu item and the item's path are in focus to reinforce the connection. As you type a path is proposed from the link text.
A user navigates multiple admin pages to edit a menu item, requiring several steps and page refreshes.
The current inside-out experience for editing a menu item: adding a menu link and changing its position involves 2 separate administration pages, 4 page refreshes and more than 400 words of text on the UI.
An animated GIF showing a Drupal workspace being deployed from 'Stage' to 'Live,' starting with an empty Live workspace.
This animated gif shows how a workspace is deployed from 'Stage' to 'Live' on a single site. In this example the Live workspace is initially empty.
An animated GIF showing a user switching between workspaces in Drupal and previewing site content changes.
This animated gif shows how a content creator can switch between multiple workspaces and get a full-site preview on a single site. In this example the Live workspace is empty, while there has been a lot of content addition on the Stage workspace in.
Pinata replication form
Pinata allows you to upload files to IPFS from the browser. You can replicate content across multiple IPFS nodes run by Pinata.
A screenshot of the IPFS Desktop application displaying an HTML file with a drop-down menu option to 'Publish to IPNS'.
The IPFS Desktop application showing my index.html file with an option to 'Publish to IPNS'.
A user requests information from multiple computers, represented by arrows pointing from the user to the screens.
The pull-based web.
A mobile device receives push notifications from different sources, including a building, a store, and a user profile.
The push-based web.
Schema org image license markup
The HTML code for an image on my blog. Schema.org metadata is used to programmatically specify that my photo is licensed under Creative Commons BY-NC 4.0. This license encourages others to copy, remix, and redistribute my photos, as long it is for noncommercial purposes and appropriate credit is given.
A screenshot of the Arduino IDE with a dialog box for installing the 'Sensirion Core' dependency for the 'Sensirion I2C SCD4x' library.
Installing the Sensirion SCD4x library via the Arduino IDE.
Line chart showing revenue growth, profit margin expansion, and share count reduction contributing to improved earnings per share.
Three components working together to improve earnings per share: revenue growth, margin expansion and share count reduction.
Chart showing SHW dividend growth and declining payout ratio, indicating a safer and steadily increasing dividend over time.
The dividend is low but has been growing fast. At the same time the dividend actually became safer as the dividend payout ratio went down sharply.
Sherwin-Williams stock rose 322% in 10 years, outperforming the S&P 500, but recently declined about 20% from its peak.
The past 10 years, Sherwin-Williams has significantly outperformed the S&P 500. The past months, Sherwin-Williams has fallen about 20% from its all-time high.
A grid of hourly battery levels shows green squares fading to red over recent days.
The view from Schiphol airport.
A collage of screenshots displaying the websites of various static site generators, with prominent text emphasizing phrases such as 'fast page loads', 'peak performance', unparalleled speed', 'full speed', and more.
A collage of screenshots featuring different static site generators' websites, emphasizing their marketing messaging on performance.
Universal JavaScript
In a universal JavaScript approach utilizing shared rendering, Node.js executes a framework (in this case Angular), which then renders an initial application state in HTML. This initial state is passed to the client side, which also loads the framework to provide further client-side rendering that is necessary, particularly to “rehydrate” or update the server-side render.
Flowchart explaining when to charge VAT for international e-commerce sales based on customer and business location within the EU.
If you have an e-commerce site that sells to international customers, this is how you need the charge VAT.
A diagram showing an entity graph in Drupal, illustrating relationships between events, locations, people, and recipes.
A visual example of an entity graph in Drupal.
Comparison of REST, JSON API, and GraphQL in Drupal 8, showing request structure and server responses with simplified payloads.
A comparison of different API approaches for Drupal 8, with amended and simplified payloads for illustrative purposes.
A waterfall diagram that shows requests and load times after replacing youtube.com with youtube-nocookie.com
When using youtube-nocookie.com, Google no longer uses DoubleClick to track your users. No HTTP cookie was sent, "only" 18 files were loaded, and the total page load time was significantly faster at 2.9 seconds (vertical blue line). Most of the load time is still the result of embedding a single YouTube video.
A waterfall diagram that shows requests and load times before replacing youtube.com with youtube-nocookie.com
When embedding a video using youtube.com, Google uses DoubleClick to track your users (yellow bar). A total of 22 files were loaded, and the total time to load the page was 4.4 seconds (vertical blue line). YouTube makes your pages slow, as the vast majority of requests and load time is spent on loading the YouTube video.
The generated HTML code for Tim Berners-Lee's Wikipedia page; it could be more semantic
What the browser sees; the HTML code Wikipedia (MediaWiki) generates.
The markup for Tim Berners-Lee's Wikipedia page; it's complex and inconsistent
What Wikipedia editors write (source).
The browser output for Tim Berners-Lee's Wikipedia page
What visitors of Wikipedia see.
Official CERN document from 1993 declaring the release of World Wide Web software into the public domain.
Twenty-five years ago, CERN released the World Wide Web technology into the public domain. Below is the document that officially put the World Wide Web into the public domain on 30 April 1993. I love the "no warranty" disclaimer!
A personalized cover!
Close-up of a stock certificate with the word "SHARES" prominently displayed in bold, decorative lettering.
Detail shot of an old Shares certificate
A person frames a view with their hands, overlaid with a city skyline, symbolizing vision and innovation.
Woman framing the future. This is a montage which has a city scape overlaid. Success and vision concept
Two chess knights, one white and one black, face each other on a board, symbolizing competition and collaboration.
Chess board and pieces in a chess game.
3D illustration, concept car without reference based on real vehicles inside of windtunnel.
Hands typing on a keyboard with a computer screen displaying code in the background.
coding code program coder programming work write man system web network html human hand key secrecy criminal concept - stock image
Chalk drawing of a cube made of smaller blue blocks, with some blocks floating apart, on a blackboard background.
Assebling of a 3D cubic bluilfing blocks structur.
Senior caucasian businessman choking or slowing streaming data in illustration of net neutrality regulations
A special bird flying in space has the spotlight while lots of identical birds sit on the ground (lack of diversity)
astronaut standing a among flock of bird, single glowing unique bird flying around, digital art style, illustration painting (astronaut standing a among flock of bird, single glowing unique bird flying around, digital art style, illustration painting
Large metal pots with wooden lids in which lobsters are boiled
The original image that we need to generate a placeholder for.
2018 dri.es redesign
Before (left) and after (right).
An ESP32-S3 development board is linked to an SHT41 temperature and humidity sensor and powered by a battery pack. For scale, a 2 Euro coin is included. The SHT41 sensor is roughly equivalent in size to the coin, and the ESP32-S3 board is about twice the coin's diameter.
An ESP32-S3 development board (middle) linked to a Sensirion SHT41 temperature and humidity sensor (left) and powered by a battery pack (right).
An ESP32-S3 development board is linked to an SCD41 CO2 and temperature sensor. For scale, a coin and pen are included. The SCD41 sensor is roughly equivalent in size to the coin, and the ESP32-S3 board is about twice the coin's diameter.
A development board with an ESP32-S3 chip (left) connected to a Sensirion SCD41 sensor on the right, which measures CO2 levels and temperature.
A 12V to 5V voltage converter in a waterproof metal box the size of a matchbox, placed on a gridded mat.
The 12V to 5V voltage converter used to convert the 12V output from the solar panel to 5V for the Raspberry Pi.
A large battery, the size of a loaf of bread, with a solar panel in the background.
A 18Ah LFP battery from Voltaic, featuring a waterproof design and integrated MPPT charge controller. The battery is large and heavy, weighing 3kg (6.6lbs), but it can power a Raspberry Pi for days.
A 12V to 5V voltage converter in a waterproof metal box the size of a matchbox, integrated into a cable with heat shrink tubing.
A 12V to 5V buck converter, needed to convert the 12V output from my solar panel to the 5V required by my Raspberry Pi Zero 2. It was integrated by cutting the cable, connecting the converter, and protecting the connections with heat shrink tubing to ensure they are waterproof.
A Raspberry Pi 4 and an RS485 CAN HAT next to each other.
The Raspberry Pi 4 (on the left) can run a website, while the RS485 CAN HAT (on the right) will communicate with the charge controller for the solar panel and battery.
A Raspberry Pi 4 with an RS485 CAN HAT in a waterproof enclosure, surrounded by cables, screws and components.
A Raspberry Pi 4 with an attached RS485 CAN HAT module is being installed in a waterproof enclosure.
A solar panel and battery mounted securely on a roof deck railing.
The solar panel and battery mounted on our roof deck.