<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Jerrie Pelser&apos;s Blog</title><description>Jerrie Pelser&apos;s personal blog on software development and open source</description><link>https://www.jerriepelser.com/</link><item><title>AdminUI for OpenIddict: A gentle introduction</title><link>https://www.jerriepelser.com/posts/admin-ui-for-openiddict-intro/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/admin-ui-for-openiddict-intro/</guid><description>I give a quick introduction to AdminUI for OpenIddict which allows you to manage your OpenIddict configuration and administer users and roles.</description><pubDate>Tue, 11 Mar 2025 00:00:00 GMT</pubDate></item><item><title>Debug ASP.NET Core OAuth authorization flows with Proxyman</title><link>https://www.jerriepelser.com/posts/debug-aspnet-core-oauth-authorization-flows/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/debug-aspnet-core-oauth-authorization-flows/</guid><description>This short guide helps you debug issues with Proxyman when using OAuth 2.0 or OpenID Connect flows in ASP.NET Core</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Disable ASP.NET Core Status Code pages for FastEndpoints</title><link>https://www.jerriepelser.com/posts/disable-status-code-page-fast-endpoints/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/disable-status-code-page-fast-endpoints/</guid><description>A quick tip on how you can disable the StatusCode middleware for a specific FastEndpoints endpoint</description><pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate></item><item><title>Implement user-facing logs with ASP.NET Core and Serilog</title><link>https://www.jerriepelser.com/posts/implement-user-facing-log-files/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/implement-user-facing-log-files/</guid><description>Demonstrates how you can implement user-facing logs with ASP.NET Core logging and Serilog</description><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Learning Thai with AI: Preparing the AI prompts</title><link>https://www.jerriepelser.com/posts/learning-thai-with-ai-part-1/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/learning-thai-with-ai-part-1/</guid><description>In this post, I see whether I can use AI to generate a good prompts for generating an Anki card</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Learning Thai with AI: Exporting and Importing cards</title><link>https://www.jerriepelser.com/posts/learning-thai-with-ai-part-2/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/learning-thai-with-ai-part-2/</guid><description>I continue with cleaning my Anki deck with AI. In this blog post I look and exporting and importing data from Anki</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Learning Thai with AI: Cleaning up parts of speech</title><link>https://www.jerriepelser.com/posts/learning-thai-with-ai-part-3/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/learning-thai-with-ai-part-3/</guid><description>I continue with cleaning my Anki deck with AI. In this blog post I look at cleaning up the parts of speech</description><pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Learning Thai with AI: Cleaning up my Thai words</title><link>https://www.jerriepelser.com/posts/learning-thai-with-ai-part-4/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/learning-thai-with-ai-part-4/</guid><description>I continue with cleaning my Anki deck with AI. In this blog post I look at cleaning up my Thai words</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Learning Thai with AI: Enriching my Thai vocab with AI</title><link>https://www.jerriepelser.com/posts/learning-thai-with-ai-part-5/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/learning-thai-with-ai-part-5/</guid><description>I continue with cleaning my Anki deck with AI. In this blog post, I finally get to enrich my Thai vocab with AI</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Limiting API callers to specific IP Addresses</title><link>https://www.jerriepelser.com/posts/limiting-api-callers-specific-ip-addresses/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/limiting-api-callers-specific-ip-addresses/</guid><description>Demonstrates how you can limit the callers of certain API endpoints to specific IP addresses</description><pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate></item><item><title>My process for creating API clients</title><link>https://www.jerriepelser.com/posts/my-process-creating-api-clients/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/my-process-creating-api-clients/</guid><description>I have a look at how I create API clients for use in Cloudpress with Flurl and discuss why I settled on this pattern</description><pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate></item><item><title>Prevent plus-addressing account creation abuse (Part 1)</title><link>https://www.jerriepelser.com/posts/prevent-plus-address-account-abuse-part-1/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/prevent-plus-address-account-abuse-part-1/</guid><description>Learn how you can prevent users from abusing your application by creating multiple accounts using plus-addressing</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Prevent plus-addressing account creation abuse (Part 2)</title><link>https://www.jerriepelser.com/posts/prevent-plus-address-account-abuse-part-2/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/prevent-plus-address-account-abuse-part-2/</guid><description>Learn how you can prevent users from abusing your application by creating multiple accounts using plus-addressing</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Disallow application signups with emails containing a plus</title><link>https://www.jerriepelser.com/posts/preventing-plus-addressing-aspnet-core-identity/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/preventing-plus-addressing-aspnet-core-identity/</guid><description>Learn how to prevent multiple signups to your application from people using plus-addressing (aka sub-addressing)</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate></item><item><title>How I publish scheduled content with Relay.app</title><link>https://www.jerriepelser.com/posts/publish-astro-website-relay-app/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/publish-astro-website-relay-app/</guid><description>In this blog post I discuss my workflow for publishing scheduled blog posts with Relay.app</description><pubDate>Tue, 29 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Automatically refresh access tokens for 3rd party services</title><link>https://www.jerriepelser.com/posts/refresh-third-party-access-tokens/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/refresh-third-party-access-tokens/</guid><description>I demonstrate how you can automatically refresh access tokens when calling 3rd party APIs</description><pubDate>Tue, 15 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Squash EF Core migrations</title><link>https://www.jerriepelser.com/posts/squash-ef-core-migrations/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/squash-ef-core-migrations/</guid><description>Learn about the technique I used to squash my EF Core migrations into a single file</description><pubDate>Tue, 03 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Switching to Omarchy: The first 24 hours</title><link>https://www.jerriepelser.com/posts/switching-to-omarchy-part-1/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/switching-to-omarchy-part-1/</guid><description>I have switched to Omarchy for my personal computing needs. Here are some of my initial learnings from the first 24 hours.</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Switching to Omarchy: It&apos;s Neovim after all</title><link>https://www.jerriepelser.com/posts/switching-to-omarchy-part-2/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/switching-to-omarchy-part-2/</guid><description>Despite my initial thoughts, it seems I will have to get to grips with Neovim after all. Here are my first experiences and some pointers</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Switching to Omarchy: Replacing iCloud Drive for files</title><link>https://www.jerriepelser.com/posts/switching-to-omarchy-part-3/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/switching-to-omarchy-part-3/</guid><description>Something I&apos;ve been wanting to do for a while was to switch away for iCloud for file storage. As part of my switch to Omarchy, I decided to do this as well.</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Serializing audit information with System.Text.Json</title><link>https://www.jerriepelser.com/posts/system-text-json-customize-serialization-contract/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/system-text-json-customize-serialization-contract/</guid><description>Looking at how you can use DefaultJsonTypeInfoResolver modifiers to write auditing information when serializing JSON documents with System.Text.JSON</description><pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate></item><item><title>End-to-end API testing with Flurl HTTP testing library</title><link>https://www.jerriepelser.com/posts/text-api-clients-flurl/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/text-api-clients-flurl/</guid><description>I demonstrate I used the Flurl HTTP testing library to do end-to-end testing between different API endpoints.</description><pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Return popup window response with the Broadcast Channel API</title><link>https://www.jerriepelser.com/posts/use-broadcast-channel-api-inter-browser-window-communication/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/use-broadcast-channel-api-inter-browser-window-communication/</guid><description>I demonstrate how you can use the Broadcast Channel API to return values from a popup window to the main browser window.</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Using Pushed Authorization Requests (PAR) with OpenIddict</title><link>https://www.jerriepelser.com/posts/using-openiddict-par-support/</link><guid isPermaLink="true">https://www.jerriepelser.com/posts/using-openiddict-par-support/</guid><description>We look at the benefits of Pushed Authorization Requests (PAR) and demonstrate how to use it with OpenIddict.</description><pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate></item></channel></rss>