Creating A Safe Space for Editors to Be Wrong
I spend most of my time these days working on Umbraco AI, bringing AI into the hands of content editors. So I think a lot about what actually makes...
Welcome to my personal blog where I mostly write about Umbraco.
I spend most of my time these days working on Umbraco AI, bringing AI into the hands of content editors. So I think a lot about what actually makes...
Speech-to-text has landed in Umbraco.AI. Alongside chat and embeddings, transcription is now a first-class capability in the platform — with a new...
Last year I wrote about SPECKL, a methodology I built to explore a human-first approach to AI-assisted development. The idea was lightweight specs...
When we set out to build AI capabilities for Umbraco, we had a choice every platform team faces: build your own abstractions, or bet on someone...
When you add AI to a CMS, you’re giving it the power to generate content, respond to visitors, and interact with editors. That’s powerful — but it...
If you’ve used the build in search in Umbraco, you’ll know it’s keyword-based. You type “deployment guide” and it finds pages containing those...
File uploads have landed in Umbraco.AI. While the most visible change is in Copilot — where you can now drag and drop documents directly into the...
If you told most Umbraco developers to get excited about a minor release, you’d probably get a polite nod. Point releases aren’t usually the ones...
Following on from my Introducing Umbraco AI post, I wanted to dig deeper into one of the add-on packages that I think has the most immediately...
In my introductory post, I gave a high-level overview of how Umbraco AI is structured — providers, connections, profiles, and contexts. Of those,...
Since we released Umbraco AI, one of the most common bits of feedback I’ve heard is: “I want to try it, but I’m not sure which packages to...
If you’ve been following along with my recent posts, you’ll know that git worktrees have become a fundamental part of how I work. One worktree per...
One of the biggest boosts to my AI assisted development productivity has got to be the introduction of using git worktrees. With these it’s...
If you caught the Umbraco Winter keynote webinar, you’ll have seen us announce something I’ve been working on for a while now - Umbraco AI. I’ve...
The way I work day to day has changed quite a lot over the last 6 months. AI coding assistants like Claude Code aren’t just speeding up individual...
I’m giving a talk at Umbraco in the City soon about Spec-Driven Development (SDD), which has had me deep in research on where AI tooling is taking...
Two years ago, I launched UMB.FYI with a simple goal: to make it easier to follow the heartbeat of the Umbraco community. Every week, new blog...
Every week when I put together UMB.FYI, the weekly Umbraco community newsletter, I found myself repeating the same little tasks over and over...
When I first built my GitHub Discussions–powered blog and later created the Astro Discussions Blog Loader, one critical feature was still missing:...
This week marks a special milestone for me as UMB.FYI, my Umbraco news aggregating newsletter side project, hits its 100th issue 🎉 What started as...
It’s undeniable that the biggest story to come out of this year’s Codegarden was the MCP integration developed by Phil Whittaker and Matt Wise. The...
As the editor of UMB.FYI — the weekly newsletter for the Umbraco community — I try to deliver the news in a clean, easy-to-digest format without...
It’s no secret that UMB.FYI is built around community. The whole point is to surface and share the best Umbraco-related content being posted across...
A late-diagnosed dev's journey through neurodivergence, self-doubt, and learning to run more natively
I’ve recently been doing some performance testing at work using K6 and had the need to test a script locally. I could have run the script on the...
Bluesky, the decentralized social media platform gaining a lot traction of late, is becoming a vibrant space for the Umbraco community. Whether...
With the recent boom of Bluesky users comes a lot if interesting and exciting community initiatives born from it’s open API. One such interesting...
In a recent conversation with an Umbraco community member on Mastodon, they asked if it would be possible if we could add Urchin Tracking Module...
I recently blogged about us adding a new Bluesky tips bot to UMB.FYI and so I thought I’d share a bit more detail on how I went about...
With the recent surge in Bluesky users and a growing Umbraco cohort on the platform, it seemed like an ideal time to bring a tips bot to the...
Since creating UMB.FYI newsletter a little over a year ago, I’ve slowly been tweaking and adding features as I’ve gone along and today I wanted to...
In a recent post I shared my new blog setup using GitHub Discussions as a blogging engine combined with Astro’s new Content Layer API coming in v5,...
Discover how to build a blog powered by GitHub Discussions with full control over site markup, spam-free content, and an easy-to-maintain setup.
Learn how to deploy TypeScript type definitions for Umbraco v14 packages. This guide covers generating, bundling, and publishing type definitions, using tools like TypeScript CLI and API Extractor.
Since Umbraco v12 there has been a big push towards making all the core Umbraco products headless. A cool feature of many of these API’s is the...
In Umbraco v14 one of the hot new approaches is observable models. You can think of observables as a long lived promise that can resolve multiple...
In Umbraco Commerce we have a number of interconnected models which pose a bit of a problem when it comes to rendering them for display in our...
When building user interfaces in Umbraco v14, occasionally there comes a time when you need to build a form based on some dynamically defined...
So far in this series we have looked at creating a flexible and extendable “quick actions” feature. In this post we’ll take a look at how we can...
In the last posts in this series, we’ve looked at ways to allow developers to swap out behaviors and UI elements for our “quick action”...
In the last post we looked at how we can swap out our “quick action” button behavior whenever a button is clicked. In this post we’ll take a look...
In the last post in this series, we looked at componentizing the UI for our “quick action” elements. In this post we’ll take a look at how we can...
In our first post in this series, we looked at the basics of setting up our “quick actions” section for our UI. In that post we manually fetched...
I recently attended the online Umbraco Manchester meetup where Rick Butterfield talked about Generating a TypeScript OpenAPI client from Umbraco’s...
In this mini series I’ll take a look at a progressively more advanced example of creating your own UI extensions in Umbraco v14. I’ll loosely base...
Next in this series of posts we take a look at what I think will likely be the thing that people struggle to get their head around the most (I know...
Context API’s are an interesting new concept in the new backoffice UI, and really I think HQ themselves are still learning the best approach for...
When HQ announced that a new backoffice UI was on the cards, by far the biggest question on everyones mind was “what framework will it be built...
The next thing we’ll be taking a look at is TypeScript. This has been a bit of a divisive subject in Umbraco’s history as the community have tried...
So in the last blog post we introduced Vite and briefly mentioned that it is based around ES Modules, however as this isn’t a concept most will be...