<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Erik Lieben</title>
    <link>https://eriklieben.com</link>
    <description>Personal blog of Erik Lieben — .NET, TypeScript, Azure, event sourcing, and developer experience.</description>
    <language>en</language>
    <copyright>&#xA9; 2026 Erik Lieben</copyright>
    <lastBuildDate>Tue, 26 May 2026 00:00:00 GMT</lastBuildDate>
    <generator>eriklieben.com static site generator</generator>
    <atom:link href="https://eriklieben.com/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>What&apos;s new in Aspire 13.3 - `aspire init` is no longer one-size-fits-all. The aspireify skill and your coding agent tailor the AppHost to your repo.</title>
      <link>https://eriklieben.com/posts/aspireify-skill/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/aspireify-skill/</guid>
      <pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate>
      <description>Aspire 13.3 ships aspire init with most of its detection-and-scaffolding code stripped out. What used to be deterministic file generation is now a handover: init drops a minimal skeleton, then a one-time skill called aspireify drives a coding agent through the wiring that needs to actually read your repo. I ran that handover six times across three Claude models and two un-aspirified eval apps to see where the skill earns its keep, and where it still leans on the model.</description>
      <category>.NET Development</category>
      <category>Aspire</category>
      <category>AI Skills</category>
      <category>Developer Tooling</category>
    </item>
    <item>
      <title>What&apos;s new in Aspire 13.3 - Aspire&apos;s dashboard keeps a record: notification center and markdown messages</title>
      <link>https://eriklieben.com/posts/aspire-dashboard-notification-center/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/aspire-dashboard-notification-center/</guid>
      <pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate>
      <description>Aspire 13.3 adds a notification center to the dashboard: a bell-icon panel that catches every command response with a markdown body and a clickable &quot;View response&quot; entry. It is small, it is dev-loop sized, and it is the thing that finally makes resource commands worth writing for your local AppHost instead of just for ops.</description>
      <category>.NET Development</category>
      <category>Aspire</category>
      <category>Dashboard</category>
    </item>
    <item>
      <title>What&apos;s new in Aspire 13.3 - Stop alt-tabbing to DevTools: WithBrowserLogs makes Chromium an Aspire resource</title>
      <link>https://eriklieben.com/posts/aspire-with-browser-logs/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/aspire-with-browser-logs/</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
      <description>Aspire 13.3 introduces WithBrowserLogs, an extension that attaches a tracked Chromium browser to an endpoint-capable resource. Console logs and network activity stream back into the Aspire dashboard alongside your backend traces. For anyone debugging a frontend that talks to a distributed backend, this is the hop you&apos;ve been making manually for years.</description>
      <category>Developer Tooling</category>
      <category>Aspire</category>
      <category>Chromium</category>
      <category>Playwright</category>
    </item>
    <item>
      <title>Azure Functions Consumption on Linux is going away, what are the migration paths?</title>
      <link>https://eriklieben.com/posts/azure-functions-linux-consumption-migration-paths/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/azure-functions-linux-consumption-migration-paths/</guid>
      <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
      <description>Linux Consumption is going away, and Microsoft&apos;s migration guidance points at Flex Consumption. But is Flex actually the right destination for your apps, or are the other paths Azure Functions on Azure Container Apps, Container Apps Jobs, AKS with KEDA, or plain ACA worth a closer look?</description>
      <category>.NET Development</category>
      <category>Azure Functions</category>
      <category>Container Apps</category>
      <category>KEDA</category>
      <category>Durable Functions</category>
      <category>Flex Consumption</category>
    </item>
    <item>
      <title>Run Gemma 4 with Ollama locally, and keep the Aspire LLM Insights (sparkles and all)</title>
      <link>https://eriklieben.com/posts/local-llms-with-aspire-genai-tracing/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/local-llms-with-aspire-genai-tracing/</guid>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <description>Can&apos;t use Microsoft Foundry because of compliance or an Azure bill that doubles during an AI development spike, but still want the best AI debugging experience in Aspire? Here&apos;s how to keep the full GenAI chat-log sparkles while Ollama and Gemma 4 run locally.</description>
      <category>AI &amp; Development</category>
      <category>Aspire</category>
      <category>LLM</category>
      <category>Gemma 4</category>
      <category>Ollama</category>
    </item>
    <item>
      <title>C# scripting in .NET 10: stop context-switching to your AI agent&apos;s scripts</title>
      <link>https://eriklieben.com/posts/dotnet-10-csharp-scripting-stop-context-switching/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/dotnet-10-csharp-scripting-stop-context-switching/</guid>
      <pubDate>Mon, 30 Mar 2026 06:00:00 GMT</pubDate>
      <description>You&apos;re debugging an issue and ask your AI agent to write a quick script that checks your database state. It hands you Python or JavaScript. You can read it, sure, but you can&apos;t review it at a glance the way you can with C. With .NET 10&apos;s dotnet run file.cs, there&apos;s no reason to leave your main coding language anymore for the utility scripts your agent writes during development.</description>
      <category>AI &amp; Development</category>
      <category>C#</category>
      <category>.NET Development</category>
      <category>.NET 10</category>
      <category>C# Scripting</category>
      <category>File-based Apps</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Don&apos;t let your AI agent delegate the debug work to you: manage, monitor, and test your app with Aspire 13.2&apos;s CLI overhaul and new agent skills</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-aspire-debugging/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-aspire-debugging/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>You&apos;ve discussed the feature with your AI agent, it wrote the code for it, but then what? You start the app, open the browser, click around, look for bugs, find one, describe it back to the agent. You&apos;re doing all the boring manual labor of verifying that what was built actually works. With Aspire&apos;s CLI overhaul in 13.2 and its new skills combined with Playwright CLI/skills the agent can manage and monitor your distributed app, open the browser, test the feature, and debug it. The tedious verify-and-fix loop becomes the agent&apos;s job, not yours.</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>Aspire</category>
      <category>Playwright</category>
      <category>OpenTelemetry</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Dependency updates that understand your code</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-dependency-management/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-dependency-management/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>We&apos;ve all been there. You open your repository on Monday morning and there are a dozen dependency update PRs waiting. Some are patch updates, some are minor, one is a major version bump buried in the middle. CI is green on all of them. You merge them. What could go wrong?</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>Renovate</category>
      <category>Dependabot</category>
      <category>NuGet</category>
      <category>npm</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Documentation as a first-class concern in your agentic workflow</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-documentation/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-documentation/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>Most teams write documentation after the feature ships. By then the context is stale, the pressure to move on is high, and the ADR nobody wrote is already forgotten. The agentic dev workflow treats docs as something you generate alongside the code, not something you backfill when someone complains the wiki is out of date.</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>ADR</category>
      <category>RFC</category>
      <category>VitePress</category>
      <category>Mermaid</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Quality gates that actually run: verification and security in the agentic workflow</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-quality-gates/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-quality-gates/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>Most code quality checks exist in three places: a CI pipeline that runs after you push, a mental checklist you may or may not remember, and post-commit hooks that hit you with a wall of failures right when you thought you were done. The agentic workflow collapses all of these into a single command that runs before the PR, covers both .NET and Angular, and pairs automated scanning with reasoning about what the results mean.</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>OWASP</category>
      <category>Security Review</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Building and evolving your own AI development skills</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-skill-building/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-skill-building/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>Skills are the most powerful part of any agentic workflow, and they&apos;re also the easiest to get wrong. This post covers the full lifecycle: writing a skill from scratch, finding and adopting skills from the community, and closing the loop so your skills improve over time.</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>Skills</category>
      <category>Marketplace</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Teaching your AI how to write tests with you</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-tdd/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-tdd/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>Everyone has opinions about how tests should look. Naming conventions, structure patterns, which mocking library to use. The problem with AI coding assistants is that they have collected opinions for their learnings too, and they&apos;re usually not yours.</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>xUnit</category>
      <category>NSubstitute</category>
      <category>Vitest</category>
      <category>Angular</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - AI-driven usability testing: a think-aloud study with a team of AI testers</title>
      <link>https://eriklieben.com/posts/agentic-dev-workflow-ux-testing/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/agentic-dev-workflow-ux-testing/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>Manual usability testing is slow, expensive, and easy to skip when a deadline looms. The /tool-ux-study skill spawns a coordinated team of AI tester agents that each log in as a different persona, test the application under different themes and viewports, and report back — while a lead agent acts as UX research facilitator, observing sessions, probing for clarity, and synthesizing findings into a research-grade report.</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>Playwright</category>
      <category>WCAG</category>
      <category>UX Testing</category>
    </item>
    <item>
      <title>Agentic (.NET) developer workflow - Turning your AI tool into your pair programming companion</title>
      <link>https://eriklieben.com/posts/turning-ai-into-pair-programming-companion/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/turning-ai-into-pair-programming-companion/</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <description>AI models are trained on billions of lines of &quot;everyone&apos;s&quot; code good and bad code, generic best practice, the Stack Overflow answer, the textbook approaches. But your project might not be that generic; why else did you otherwise create it?</description>
      <category>AI &amp; Development</category>
      <category>Claude Code</category>
      <category>LLM</category>
      <category>Agentic Workflow</category>
    </item>
    <item>
      <title>TimeProvider in .NET8, the solution to flaky tests with DateTime.Now issues</title>
      <link>https://eriklieben.com/posts/net8_timeprovider_for_unit_tests/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/net8_timeprovider_for_unit_tests/</guid>
      <pubDate>Mon, 11 Aug 2025 00:00:00 GMT</pubDate>
      <description>If you&apos;re still using DateTime.Now in your .NET tests, you&apos;re building on quicksand. Flaky time-dependent tests are some of the most frustrating issues—they pass locally, fail randomly in CI/CD, and destroy confidence in your deployment pipeline. Good news, .NET 8 brings us TimeProvider to solve this problem. This isn&apos;t just another abstraction—it&apos;s Microsoft&apos;s answer to a problem and baked directly into the framework to make time-dependent code reliably testable.</description>
      <category>.NET Development</category>
      <category>C#</category>
      <category>.NET 8</category>
      <category>NUnit</category>
      <category>NodaTime</category>
      <category>Testing</category>
    </item>
    <item>
      <title>Using playwright during SPA/Angular development to mock your environment</title>
      <link>https://eriklieben.com/posts/playwright-as-development-browser-with-mocks/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/playwright-as-development-browser-with-mocks/</guid>
      <pubDate>Sat, 26 Aug 2023 00:00:00 GMT</pubDate>
      <description>Developing Single Page Applications SPAs can be complex, particularly when combining a SPA that communicates with one or more API&apos;s with complex data sets. It&apos;s often time-consuming to create a full range of testing projects that cover all the required scenarios in your testing environment due to complex dependencies or additional data structures necessary to make it work.</description>
      <category>Frontend Development</category>
      <category>Playwright</category>
      <category>Angular</category>
      <category>TypeScript</category>
      <category>Faker.js</category>
      <category>Mocking</category>
    </item>
    <item>
      <title>Customized pull request status policy using Azure Functions for semantic release PR titles (part 1)</title>
      <link>https://eriklieben.com/posts/semantic-release-status-check-part-1/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/semantic-release-status-check-part-1/</guid>
      <pubDate>Mon, 06 Mar 2023 00:00:00 GMT</pubDate>
      <description>In my previous blog post/posts/semantic-release-nuget/, I showed you how to automate releases using pull request titles for your NuGet packages. When you use this process less often, or if you have new people onboarding your team, it is beneficial to give some additional help/ insights when they go through the process. This blog post will look at how to build an Azure Function to provide more information about the process during your regular pull request workflow.</description>
      <category>Azure DevOps</category>
      <category>Azure Functions</category>
      <category>C#</category>
      <category>.NET 7</category>
      <category>Azure Key Vault</category>
    </item>
    <item>
      <title>Automate your release flow of NuGet packages using Azure DevOps and Node&apos;s semantic-release</title>
      <link>https://eriklieben.com/posts/semantic-release-nuget/</link>
      <guid isPermaLink="true">https://eriklieben.com/posts/semantic-release-nuget/</guid>
      <pubDate>Sat, 17 Dec 2022 00:00:00 GMT</pubDate>
      <description>In the NodeJShttps://nodejs.org/en/ ecosystem, a great solution is available for automating the workflow of releasing packages, explicitly concerning the versioning of packages, named semantic-releasehttps://www.npmjs.com/package/semantic-release. All it takes for you to use this in your .NET project is a willingness to accept a little bit of JavaScript in your .NET deployment pipeline. A well worth exception you should be willing to take to improve your overall development experience. In this blog post, I will take you through my setup for a project that builds &amp; publishes a NuGet package using Azure DevOpshttps://azure.microsoft.com/en-us/services/devops/ to an Azure DevOps artifact feedhttps://azure.microsoft.com/en-us/services/devops/artifacts/.</description>
      <category>Azure DevOps</category>
      <category>semantic-release</category>
      <category>NuGet</category>
      <category>PowerShell</category>
      <category>Azure DevOps Artifacts</category>
    </item>
  </channel>
</rss>