41554 blogs · [ { "id": "01a0d9cd-cc72-73b6-9433-913abef8187d", "title": "Most Automation Is a Decision, Not a Conversation", "url": "https://mattbrailsford.dev/most-automation-is-a-decision-not-a-conversation", "published_at": "2026-09-25T00:00:00+00:00" }, { "id": "01a0bb54-513c-71ad-912d-54fd3e76ccd2", "title": "Retiring Named Pipes: A Simpler Fix for Dev Port Conflicts", "url": "https://mattbrailsford.dev/worktree-dev-port", "published_at": "2026-09-18T13:31:22+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c1a0fd76", "title": "Introducing Umbraco AI Copilot Workspace", "url": "https://mattbrailsford.dev/introducing-copilot-workspace", "published_at": "2026-08-20T09:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c24cd884", "title": "Creating A Safe Space for Editors to Be Wrong", "url": "https://mattbrailsford.dev/creating-a-safe-space-for-editors-to-be-wrong", "published_at": "2026-07-03T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c31447a8", "title": "Speech-to-Text in Umbraco.AI", "url": "https://mattbrailsford.dev/speech-to-text-in-umbraco-ai", "published_at": "2026-04-28T09:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c3fc0d9a", "title": "Letting Go: How My AI Workflow Has Evolved", "url": "https://mattbrailsford.dev/letting-go-how-my-ai-workflow-has-evolved", "published_at": "2026-04-23T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c4f0f0f1", "title": "What We Gained Building Umbraco AI on Microsoft.Extensions.AI and the Microsoft Agent Framework", "url": "https://mattbrailsford.dev/what-we-gained-building-umbraco-ai-on-meai-and-maf", "published_at": "2026-04-21T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c5aa96d4", "title": "Guardrails in Umbraco AI", "url": "https://mattbrailsford.dev/guardrails-in-umbraco-ai", "published_at": "2026-04-16T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c6774f32", "title": "Introducing Umbraco AI Search", "url": "https://mattbrailsford.dev/introducing-umbraco-ai-search", "published_at": "2026-04-14T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c6b01d80", "title": "File Uploads in Umbraco.AI", "url": "https://mattbrailsford.dev/file-uploads-in-umbraco-ai", "published_at": "2026-04-09T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c6dc70b1", "title": "Why Umbraco 17.4.0 Is a Big Deal for AI", "url": "https://mattbrailsford.dev/why-umbraco-1740-is-a-big-deal-for-ai", "published_at": "2026-04-07T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c795d397", "title": "Umbraco AI Prompts: Template Syntax and Variables", "url": "https://mattbrailsford.dev/umbraco-ai-prompts-template-syntax-and-variables", "published_at": "2026-04-02T08:30:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c83a7fd7", "title": "Understanding Contexts in Umbraco AI", "url": "https://mattbrailsford.dev/understanding-contexts-in-umbraco-ai", "published_at": "2026-03-27T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c8ef4868", "title": "The Umbraco AI Kitchen Sink Install", "url": "https://mattbrailsford.dev/umbraco-ai-kitchen-sink-install", "published_at": "2026-03-04T11:19:26+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c931130e", "title": "Replacing My Custom Git Worktree Skill with Claude Code Hooks", "url": "https://mattbrailsford.dev/replacing-my-custom-git-worktree-skill-with-claude-code-hooks", "published_at": "2026-02-24T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c93b44bc", "title": "How Task Metadata Saved My Git History: Keeping Claude Code in the Right Git Worktree", "url": "https://mattbrailsford.dev/keeping-claude-code-in-the-right-git-worktree", "published_at": "2026-02-14T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4c94c0a2a", "title": "Introducing Umbraco AI", "url": "https://mattbrailsford.dev/introducing-umbraco-ai", "published_at": "2026-02-05T11:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4ca14d35d", "title": "Solving Port Conflicts in AI-Assisted Development: HTTP over Named Pipes", "url": "https://mattbrailsford.dev/http-over-named-pipes", "published_at": "2026-02-02T19:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4ca85a976", "title": "SPECKL: Testing a Human-First Approach to AI-Assisted Development", "url": "https://mattbrailsford.dev/speckl-testing-a-human-first-approach-to-ai-assisted-development", "published_at": "2025-10-14T08:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4cb7ec09b", "title": "UMB.FYI Celebrates it's 2nd Birthday with a Pulse Check", "url": "https://mattbrailsford.dev/umbfyi-celebrates-its-2nd-birthday-with-a-pulse-check", "published_at": "2025-10-06T09:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4cbfacf98", "title": "UMB.FYI Gets a New Workflow Engine", "url": "https://mattbrailsford.dev/umbfyi-gets-a-new-workflow-engine", "published_at": "2025-09-03T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4ccbdc473", "title": "Adding Scheduled Posts to My GitHub Discussions Powered Blog", "url": "https://mattbrailsford.dev/adding-scheduled-posts-to-my-github-discussions-powered-blog", "published_at": "2025-08-29T18:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4ccc694f0", "title": "UMB.FYI Celebrates it's 100th Issue", "url": "https://mattbrailsford.dev/umbfyi-celebrates-its-100th-issue", "published_at": "2025-08-27T05:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4cd2d5e3e", "title": "Building an MCP Server for Umbraco Commerce", "url": "https://mattbrailsford.dev/building-an-mcp-server-for-umbraco-commerce", "published_at": "2025-08-11T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4ce1845dd", "title": "How I Saved 5GB of Storage Per Year for UMB.FYI", "url": "https://mattbrailsford.dev/how-i-saved-5gb-of-storage-per-year-for-umbfyi", "published_at": "2025-07-22T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4cedbc21b", "title": "UMB.FYI Gets an iOS Tip Shortcut", "url": "https://mattbrailsford.dev/umbfyi-gets-an-ios-tip-shortcut", "published_at": "2025-07-20T00:00:01+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4cef36c37", "title": "ND & Me: Running in Emulation", "url": "https://mattbrailsford.dev/neurodiversity-and-me-running-in-emulation", "published_at": "2025-06-24T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4cfb95f70", "title": "Installing K6 on a Raspberry Pi", "url": "https://mattbrailsford.dev/installing-k6-on-a-raspberry-pi", "published_at": "2024-12-19T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d0750bf1", "title": "Getting Started on Bluesky for Umbraco Developers", "url": "https://mattbrailsford.dev/getting-started-on-bluesky-for-umbraco-developers", "published_at": "2024-12-14T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d16e32a5", "title": "Introducing the Umbraco Bluesky Labeler", "url": "https://mattbrailsford.dev/introducing-the-umbraco-bluesky-labeler", "published_at": "2024-12-13T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d265f4d8", "title": "UMB.FYI links get Urchin Tracking Module (UTM) parameters", "url": "https://mattbrailsford.dev/umbfyi-links-get-utm-parameters", "published_at": "2024-12-05T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d31caee6", "title": "Creating a Bluesky bot in C#", "url": "https://mattbrailsford.dev/creating-a-bluesky-bot-in-csharp", "published_at": "2024-11-19T00:00:02+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d3348c3c", "title": "UMB.FYI gets a Bluesky tips bot", "url": "https://mattbrailsford.dev/umbfyi-gets-a-bluesky-tips-bot", "published_at": "2024-11-19T00:00:01+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d37e783c", "title": "UMB.FYI gets Profiles, Tags and Topics", "url": "https://mattbrailsford.dev/umbfyi-gets-profiles-tags-and-topics", "published_at": "2024-10-21T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d479c390", "title": "Launching the GitHub Discussions Blog Loader for Astro", "url": "https://mattbrailsford.dev/launching-the-github-discussions-blog-loader-for-astro", "published_at": "2024-10-03T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d5410b9d", "title": "Building a GitHub Discussions Powered Blog", "url": "https://mattbrailsford.dev/building-a-github-discussions-powered-blog", "published_at": "2024-09-26T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d5fb03f1", "title": "Deploying TypeScript Type Definitions for Umbraco v14 Packages", "url": "https://mattbrailsford.dev/deploying-typescript-type-definitions-for-umbraco-v14-packages", "published_at": "2024-07-26T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d6238102", "title": "The Challenge of Versioning Expandable API's in Umbraco", "url": "https://mattbrailsford.dev/the-challenge-of-versioning-expandable-apis-in-umbraco", "published_at": "2024-05-02T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d7093a81", "title": "Using the Command Pattern to Re-Apply Changes to an Observable Model in Umbraco Bellissima", "url": "https://mattbrailsford.dev/using-the-command-pattern-to-re-apply-changes-to-an-observable-model-in-umbraco-bellissima", "published_at": "2024-04-30T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d71aa8a0", "title": "Enhancing Asynchronous Data Fetching in Umbraco v14 with Lit Async Directives", "url": "https://mattbrailsford.dev/enhancing-asynchronous-data-fetching-in-umbraco-v14-with-lit-async-directives", "published_at": "2024-04-25T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d78556e2", "title": "Reusing Umbraco Properties in Umbraco v14", "url": "https://mattbrailsford.dev/reusing-umbraco-properties-in-umbraco", "published_at": "2024-04-23T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d83e7579", "title": "Creating your own UI extension points in Umbraco v14 - Part 6: Filters & Conditions", "url": "https://mattbrailsford.dev/creating-your-own-ui-extension-points-in-umbraco-v14-part-6-filters-conditions", "published_at": "2024-04-18T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d8477079", "title": "Creating your own UI extension points in Umbraco v14 - Part 5: Kinds", "url": "https://mattbrailsford.dev/creating-your-own-ui-extension-points-in-umbraco-v14-part-5-kinds", "published_at": "2024-04-16T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d91b94d5", "title": "Creating your own UI extension points in Umbraco v14 - Part 4: Interchangeable Elements", "url": "https://mattbrailsford.dev/creating-your-own-ui-extension-points-in-umbraco-v14-part-4-interchangeable-elements", "published_at": "2024-04-11T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4d98b8b45", "title": "Creating your own UI extension points in Umbraco v14 - Part 3: Customizable APIs", "url": "https://mattbrailsford.dev/creating-your-own-ui-extension-points-in-umbraco-v14-part-3-customizable-apis", "published_at": "2024-04-09T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4da551702", "title": "Creating your own UI extension points in Umbraco v14 - Part 2: Extension Slots", "url": "https://mattbrailsford.dev/creating-your-own-ui-extension-points-in-umbraco-v14-part-2-extension-slots", "published_at": "2024-04-04T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4daf9935f", "title": "Simplifying Imports with TypeScript Path Aliases in Umbraco v14", "url": "https://mattbrailsford.dev/simplifying-imports-with-typescript-path-aliases-in-umbraco-v14", "published_at": "2024-04-02T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dbd4f5e0", "title": "Creating your own UI extension points in Umbraco v14 - Part 1: The Basics", "url": "https://mattbrailsford.dev/creating-your-own-ui-extension-points-in-umbraco-v14-part-1-the-basics", "published_at": "2024-04-02T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dc434525", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 10 - RxJS)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-10-rxjs", "published_at": "2022-10-21T00:00:10+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dc5a220b", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 9 - Context API)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-9-context-api", "published_at": "2022-10-21T00:00:09+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dca1116e", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 8 - Lit)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-8-lit", "published_at": "2022-10-21T00:00:08+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dcf6d682", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 7 - TypeScript)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-7-typescript", "published_at": "2022-10-21T00:00:07+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dd0d8fbb", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 6 - ES Modules)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-6-es-modules", "published_at": "2022-10-21T00:00:06+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4dda52ce9", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 5 - Vite)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-5-vite", "published_at": "2022-10-21T00:00:05+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4de44ba64", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 4 - Web Components)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-4-web-components", "published_at": "2022-10-21T00:00:04+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4df40d9bd", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 3 - Glossary)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-3-glossary", "published_at": "2022-10-21T00:00:03+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e023477a", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 2 - Resources)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-2-resources", "published_at": "2022-10-21T00:00:02+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e04408b6", "title": "Back to the Front-end: Exploring the Future of the Umbraco UI (Part 1 - Introduction)", "url": "https://mattbrailsford.dev/back-to-the-front-end-exploring-the-future-of-the-umbraco-ui-part-1-introduction", "published_at": "2022-10-21T00:00:01+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e0c8b7cd", "title": "Is .NET Core the end of the Pragmatic Umbraco Developer?", "url": "https://mattbrailsford.dev/is-net-core-the-end-of-the-pragmatic-umbraco-developer", "published_at": "2021-10-11T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e19d1b1b", "title": "Multi-targeting Razor Views in Umbraco v8 and v9", "url": "https://mattbrailsford.dev/multi-targeting-razor-views-in-umbraco-v8-and-v9", "published_at": "2021-08-26T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e2344874", "title": "Automating Umbraco Package Build & Deployments with NUKE Build, GitVersion and Azure DevOps", "url": "https://mattbrailsford.dev/automating-umbraco-package-build-deployments-with-nuke-build-gitversion-and-azure-devops", "published_at": "2021-08-12T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e2d520b3", "title": "Adding ILogger support to Umbraco v8", "url": "https://mattbrailsford.dev/adding-ilogger-t-support-to-umbraco-v8", "published_at": "2021-08-04T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e3160e48", "title": "Fixing analyzer problems in multi-targeted Umbraco packages", "url": "https://mattbrailsford.dev/fixing-analyzer-problems-in-multi-targeted-umbraco-packages", "published_at": "2021-07-28T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e353f4b9", "title": "Converting IContent to IPublishedContent in Umbraco v8+", "url": "https://mattbrailsford.dev/converting-icontent-to-ipublishedcontent-in-umbraco-v8", "published_at": "2021-02-03T00:00:00+00:00" }, { "id": "01a087a1-a705-71af-ae87-efb4e442e765", "title": "Auto-scaling Azures SignalR Service via Powershell Function", "url": "https://mattbrailsford.dev/auto-scaling-azures-signalr-service-via-powershell-function", "published_at": "2019-07-15T00:00:00+00:00" } ] posts Claim your blog
Back to mattbrailsford.dev
Blog · corpus.blog/blogs/mattbrailsford.dev/posts

mattbrailsford.dev

mattbrailsford.dev

2026

2025

2024

2022

2021

2019