{"site":"Owain.Codes","url":"https://owain.codes","description":"Technical blog about .NET, C#, Umbraco, and modern web development","total_posts":38,"posts":[{"id":1213,"title":"OC.PowerSort 1.2.0","url":"https://owain.codes/blog/2026/april/ocpowersort-120/","published_date":"2026-04-17","updated_date":"2026-04-17","author":"Owain Williams","tags":["umbraco","umbraco-package"]},{"id":1206,"title":"Optimizing Umbraco Member Pagination From Slow to Lightning Fast","url":"https://owain.codes/blog/2026/march/optimizing-umbraco-member-pagination-from-slow-to-lightning-fast/","published_date":"2026-03-31","updated_date":"2026-03-31","author":"Owain Williams","tags":["umbraco","performance","csharp","databases"]},{"id":1205,"title":"GitKraken CLI Beginner's Guide: A Better Git CLI for Developers","url":"https://owain.codes/blog/2026/march/gitkraken-cli-beginners-guide/","published_date":"2026-03-24","updated_date":"2026-03-24","author":"Owain Williams","tags":["gitkraken cli","gitkraken","git"]},{"id":1200,"title":"OC.PowerSort Package","url":"https://owain.codes/blog/2026/march/ocpowersort-package/","published_date":"2026-03-18","updated_date":"2026-03-18","author":"Owain Williams","tags":["umbraco","umbraco-package"]},{"id":1198,"title":"OC.UFMFallbacks Package","url":"https://owain.codes/blog/2026/march/ocufmfallbacks-package/","published_date":"2026-03-17","updated_date":"2026-03-17","author":"Owain Williams","tags":["umbraco","umbraco-package"]},{"id":1197,"title":"OC.UFMMemberLookup Package","url":"https://owain.codes/blog/2026/march/ocufmmemberlookup-package/","published_date":"2026-03-16","updated_date":"2026-03-18","author":"Owain Williams","tags":["umbraco","umbraco-package"]},{"id":1194,"title":"Auto-Updating Your GitHub README with Your Latest Blog Posts","url":"https://owain.codes/blog/2026/march/auto-updating-your-github-readme-with-your-latest-blog-posts/","published_date":"2026-03-10","updated_date":"2026-03-20","author":"Owain Williams","tags":["github"]},{"id":1188,"title":"How I used Umbraco.AI for free","url":"https://owain.codes/blog/2026/february/how-i-used-umbracoai-for-free/","published_date":"2026-02-27","updated_date":"2026-02-27","author":"Owain Williams","tags":["umbraco","ai"]},{"id":1160,"title":"Tracking Bouldering Sessions with a Garmin Watch App and Umbraco Dashboard","url":"https://owain.codes/blog/2026/february/tracking-bouldering-sessions-with-a-garmin-watch-app-and-umbraco-dashboard/","published_date":"2026-02-20","updated_date":"2026-02-20","author":"Owain Williams","tags":["umbraco","garmin"]},{"id":1141,"title":"Upgrading Umbraco 13 to Umbraco 17 issue","url":"https://owain.codes/blog/2026/february/upgrading-umbraco-13-to-umbraco-17-issue/","published_date":"2026-02-04","updated_date":"2026-02-04","author":"Owain Williams","tags":["umbraco"]},{"id":1136,"title":"When GitKraken Desktop Runs Slow","url":"https://owain.codes/blog/2025/december/when-gitkraken-desktop-runs-slow/","published_date":"2025-12-17","updated_date":"2025-12-17","author":"Owain Williams","tags":["gitkraken"]},{"id":1135,"title":"OC.HiddenDashboard - Umbraco Package","url":"https://owain.codes/blog/2025/december/ochiddendashboard-umbraco-package/","published_date":"2025-12-15","updated_date":"2025-12-16","author":"Owain Williams","tags":["umbraco","package"]},{"id":1113,"title":"When the Umbraco Community responds.","url":"https://owain.codes/blog/2025/november/when-the-umbraco-community-responds/","published_date":"2025-11-04","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","thoughts"]},{"id":1121,"title":"Has the Umbraco Community lost it's Spark?","url":"https://owain.codes/blog/2025/november/has-the-umbraco-community-lost-its-spark/","published_date":"2025-11-03","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","thoughts"]},{"id":1118,"title":"Working Around Umbraco's RenderController Async Limitation","url":"https://owain.codes/blog/2025/august/working-around-umbracos-rendercontroller-async-limitation/","published_date":"2025-08-04","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco"]},{"id":1130,"title":"Change of Job","url":"https://owain.codes/blog/2025/june/change-of-job/","published_date":"2025-06-06","updated_date":"2025-12-10","author":"Owain Williams","tags":["thoughts"]},{"id":1129,"title":"Creating an Obsidian Plugin","url":"https://owain.codes/blog/2025/may/creating-an-obsidian-plugin/","published_date":"2025-05-19","updated_date":"2025-12-10","author":"Owain Williams","tags":["obsidian"]},{"id":1105,"title":"A developer with ADHD?","url":"https://owain.codes/blog/2025/february/a-developer-with-adhd/","published_date":"2025-02-21","updated_date":"2025-12-10","author":"Owain Williams","tags":["mental health","thoughts"]},{"id":1112,"title":"2025 - Dev Life Balance","url":"https://owain.codes/blog/2025/january/2025-dev-life-balance/","published_date":"2025-01-21","updated_date":"2025-12-10","author":"Owain Williams","tags":["thoughts"]},{"id":1126,"title":"Extension methods and testing to solve a problem","url":"https://owain.codes/blog/2024/november/extension-methods-and-testing-to-solve-a-problem/","published_date":"2024-11-09","updated_date":"2025-12-12","author":"Owain Williams","tags":["csharp","dotnet"]},{"id":1133,"title":"String Interpolation Vs String Concatenation","url":"https://owain.codes/blog/2024/september/string-interpolation-vs-string-concatenation/","published_date":"2024-09-10","updated_date":"2025-12-10","author":"Owain Williams","tags":["csharp"]},{"id":1124,"title":"Follow up - Making Redirects with more performant code","url":"https://owain.codes/blog/2024/august/follow-up-making-redirects-with-more-performant-code/","published_date":"2024-08-29","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","dotnet"]},{"id":1115,"title":"Handling Redirects with Middleware in .Net","url":"https://owain.codes/blog/2024/august/handling-redirects-with-middleware-in-net/","published_date":"2024-08-28","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","dotnet"]},{"id":1122,"title":"Caching sitemaps while using querystrings","url":"https://owain.codes/blog/2024/june/caching-sitemaps-while-using-querystrings/","published_date":"2024-06-07","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","csharp","dotnet"]},{"id":1131,"title":"How the ternary operator cleaned up my code","url":"https://owain.codes/blog/2024/april/how-the-ternary-operator-cleaned-up-my-code/","published_date":"2024-04-04","updated_date":"2025-12-10","author":"Owain Williams","tags":["csharp"]},{"id":1127,"title":"Umbraco 14 Beta - first impressions","url":"https://owain.codes/blog/2024/march/umbraco-14-beta-first-impressions/","published_date":"2024-03-07","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco"]},{"id":1110,"title":"Ask questions, all the time!","url":"https://owain.codes/blog/2024/february/ask-questions-all-the-time/","published_date":"2024-02-29","updated_date":"2025-12-10","author":"Owain Williams","tags":["thoughts"]},{"id":1132,"title":"What are the origins of UmbracoTees day?","url":"https://owain.codes/blog/2024/january/what-are-the-origins-of-umbracotees-day/","published_date":"2024-01-24","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco"]},{"id":1099,"title":"Using Umbraco Authorized Services to Authenticate with an API","url":"https://owain.codes/blog/2023/december/using-umbraco-authorized-services-to-authenticate-with-an-api/","published_date":"2023-12-09","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","dotnet"]},{"id":1085,"title":"A song about Umbraco","url":"https://owain.codes/blog/2023/november/a-song-about-umbraco/","published_date":"2023-11-14","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco"]},{"id":1094,"title":"Umbraco UK Festival revisited","url":"https://owain.codes/blog/2023/november/umbraco-uk-festival-revisited/","published_date":"2023-11-04","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco"]},{"id":1101,"title":"What to pack when going to a conference?","url":"https://owain.codes/blog/2023/october/what-to-pack-when-going-to-a-conference/","published_date":"2023-10-30","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","thoughts"]},{"id":1095,"title":"Where is the Umbraco Community?","url":"https://owain.codes/blog/2023/september/where-is-the-umbraco-community/","published_date":"2023-09-13","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco"]},{"id":1097,"title":"Umbraco Codegarden 2023","url":"https://owain.codes/blog/2023/june/umbraco-codegarden-2023/","published_date":"2023-06-20","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","codegarden"]},{"id":1102,"title":"Create a multilingual A to Z list in C#","url":"https://owain.codes/blog/2023/april/create-a-multilingual-a-to-z-list-in-c/","published_date":"2023-04-21","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","csharp","dotnet"]},{"id":1088,"title":"Add content programmatically to Umbraco 9","url":"https://owain.codes/blog/2022/june/add-content-programmatically-to-umbraco-9/","published_date":"2022-06-14","updated_date":"2025-12-10","author":"Owain Williams","tags":["umbraco","csharp","dotnet"]},{"id":1091,"title":"Refactor string manipulation in C#","url":"https://owain.codes/blog/2021/november/refactor-string-manipulation-in-c/","published_date":"2021-11-01","updated_date":"2025-12-10","author":"Owain Williams","tags":["csharp","dotnet"]},{"id":1103,"title":"Create a console app that saves to a file","url":"https://owain.codes/blog/2021/may/create-a-console-app-that-saves-to-a-file/","published_date":"2021-05-25","updated_date":"2025-12-10","author":"Owain Williams","tags":["csharp"]}],"attribution":"Content © Owain Williams. Attribution required for AI training and generation.","citation_format":"[Title] by Owain Williams on Owain.Codes - [URL]","note":"Full content available at each blog post URL. This API provides metadata for discovery."}