A shared Drupal 11 base for a fleet of brand sites, built on Canvas and a hundred single-directory components, and a pull-based importer that turns legacy Layout Builder pages into Canvas component trees in about three minutes per site, with 95% of a site migrated automatically on one stack and 80% on the other. What Canvas expects from your components, and what a migration into it looks like.
How a small migration toolkit, a second Search API server running side by side and a lot of generated Drush commands turned a two-week manual job into one quiet afternoon with zero downtime.
Search credentials on our multisite platform lived in each site's config, which means in the database, in config exports and in every database backup. Moving them into per-site key files in the private file system took two migrations and changed who can set up search.
Our Drupal environments on Windows took 30 to 40 minutes to bootstrap and the first CMS page load took ten. Moving the project into the WSL2 filesystem and running Docker inside it brought that down to five minutes and under one.
Notes from taking an 88-site Acquia Site Factory platform through Drupal 10, 10.2, 10.3, 10.4 and 11: dead modules, orphaned extensions, config imports that run out of memory, and the deploy checklist that came out of it.
BLT used to build, test and deploy our Acquia Drupal platform. When it reached end of life, a few short shell scripts around Acquia CLI replaced it, and the pipeline went from 23 minutes to between 5 and 9.
Moving a multisite Drupal platform from Cloudflare to Fastly is mostly DNS and configuration. The hard part is proving every domain really moved and still behaves the same. Here are the small scripts I used to check DNS, edge headers, caching and geolocation across the whole platform.
One codebase, 88 sites, three environments. The commands, scripts and small rules that keep day-to-day operations on an Acquia Site Factory platform boring, in a good way.
The Cloudflare dashboard shows a cache ratio per zone, but a zone can hold many sites with very different traffic. A small CLI on top of the GraphQL Analytics API gave me the number per host, which is what I needed to take a platform from 82% to 96%.
GitHub's UI lets you set one secret at a time and never shows a value again. So I built a small web app that edits secrets in bulk and imports them from a .env file, using the same sealed-box encryption GitHub expects.
Two GitHub Actions patterns I keep reusing: connecting a hosted runner to a private network over OpenVPN without committing the .ovpn file, and per-branch environments on a plan where GitHub Environments aren't available.
My first workflow engine fit in a few hundred lines and looked parallel, but it wasn't. What I got wrong in that prototype, and how the engine behind BlockNext handles ordering, parallel branches, joins, retries and cancellation.
Why BlockNext is one codebase with six binaries instead of a set of microservices, how its modules are laid out, and the one Go feature that turns module boundaries from a convention into a compile error.
A fresh BlockNext install is seven containers idling at around 100 MB, and Postgres is nearly half of that. The trick isn't clever optimization. Every piece of scale-out infrastructure has an in-process default, and Redis only starts once something is configured to use it.
In BlockNext every integration node is described once, as a JSON Schema. That single description drives the UI form, input validation, the LLM function declaration and the MCP tool. Here is how it fits together, using the Slack node as an example.
Every integration node in BlockNext doubles as an MCP tool, so Claude or any other MCP client can use your connected services directly. What it takes beyond wrapping a function: credential references, an output shape MCP accepts, per-organization concurrency limits and a real OAuth 2.1 server.
A workflow platform stores other people's API keys and OAuth tokens for many organizations at once. The rules BlockNext follows for roles, tenant-scoped queries, encryption at rest, masked secrets and refreshing tokens without burning them.
netkit is fourteen network and developer tools in a single Go binary with no dependencies outside the standard library. Most of those tools fetch URLs that users type in, so the most important code in the project is six lines in a net.Dialer.
DisplayBridge turns a tablet or another computer into a second monitor for a Mac, aiming for under 16 ms end to end. The key decision was to never queue a frame. Plus a pure Rust session core behind a C ABI shared by Swift, Kotlin and desktop sinks.
LumoDine gives restaurants a QR code menu on their own subdomain, in many languages and currencies. The shape of the system: one API, two Next.js apps, a tiny redirect service, and a data model built around a single items collection and a separate graph of relations.
iOS asks for /apple-touch-icon.png at the root of your domain, whether you link to it or not. On a multisite where every brand shares one docroot, you can't just drop a file there. How we gave every site its own sixteen icons.
Every listing page on our Drupal platform hit Solr three times for a single page view, and every filter click took 700 ms to 1.5 s. Finding where the requests came from took one devel module. The fixes were a forgotten Views attachment, a load-more link and a missing Cache-Control header.
Search autocomplete sent a request to Solr on every keystroke, on every site. We replaced it with one cached JSON file per site and fuzzy matching in the browser. Now a visitor makes one autocomplete request per page, however much they type.
Ping watches the npm packages a team depends on and tells them when a version in their range ships. One Go binary, one Postgres database, no Redis or broker: the scan queue, the event bus and the delivery queue are all tables claimed with FOR UPDATE SKIP LOCKED.
BlockNext takes subscriptions and credit purchases by card through Stripe or Paddle, and on-chain through MetaMask. Three providers that work very differently, behind one small interface, a handful of optional capabilities and nine normalized events.