<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Michael Pellegrin</title>
  <subtitle>Software engineer with twenty years across cloud platforms, distributed systems, and mobile apps. Writing on engineering decisions that matter in production.</subtitle>
  <link href="https://mdpellegrin.com/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://mdpellegrin.com/blog/"/>
  <updated>2026-05-05T00:00:00.000Z</updated>
  <id>https://mdpellegrin.com/</id>
  <author>
    <name>Michael Pellegrin</name>
  </author>
  <entry>
    <title>Add the Trailing Slash to Your Azure Key Vault References</title>
    <link href="https://mdpellegrin.com/blog/2026-05-05-azure-key-vault-reference-trailing-slash/"/>
    <updated>2026-05-05T00:00:00.000Z</updated>
    <id>https://mdpellegrin.com/blog/2026-05-05-azure-key-vault-reference-trailing-slash/</id>
    <summary>An Azure App Service Key Vault reference without a trailing slash silently returned an older version of my secret after I rotated it. Token validation failed because the issuer URL no longer matched. Here&#39;s what happened, what the documentation actually says, and why the slash matters.</summary>
  </entry>
  <entry>
    <title>What Two Bottle Caps Started</title>
    <link href="https://mdpellegrin.com/blog/2026-04-06-attrakto-launch/"/>
    <updated>2026-04-06T00:00:00.000Z</updated>
    <id>https://mdpellegrin.com/blog/2026-04-06-attrakto-launch/</id>
    <summary>Attrakto started as a fidget with two bottle caps and became a calm daily puzzle game. Here is how it got here.</summary>
  </entry>
  <entry>
    <title>Fix the Password Manager Problem in Auth0 Universal Login with a Custom Domain</title>
    <link href="https://mdpellegrin.com/blog/2026-03-25-auth0-custom-domain/"/>
    <updated>2026-03-25T00:00:00.000Z</updated>
    <id>https://mdpellegrin.com/blog/2026-03-25-auth0-custom-domain/</id>
    <summary>Auth0 Universal Login puts all your users on a shared auth0.com subdomain. That breaks password manager autofill and credential association on iOS and Android. A custom domain fixes it, and it&#39;s easier to configure than you&#39;d expect.</summary>
  </entry>
  <entry>
    <title>My AI Development Everyday Kit</title>
    <link href="https://mdpellegrin.com/blog/2026-03-02-ai-development-everyday-kit/"/>
    <updated>2026-03-02T00:00:00.000Z</updated>
    <id>https://mdpellegrin.com/blog/2026-03-02-ai-development-everyday-kit/</id>
    <summary>Everyday kit is not just for gear people. Here&#39;s my current AI development workflow, an honest account of what it replaced, and why I&#39;m already working on the next version.</summary>
  </entry>
  <entry>
    <title>Stop Returning HTTP 200 for Failures: RFC 9457 Problem Details in ASP.NET</title>
    <link href="https://mdpellegrin.com/blog/2026-02-23-rfc9457-problem-details-aspnet/"/>
    <updated>2026-02-23T00:00:00.000Z</updated>
    <id>https://mdpellegrin.com/blog/2026-02-23-rfc9457-problem-details-aspnet/</id>
    <summary>HTTP already has error semantics. RFC 9457 Problem Details gives your error payloads a standard structure to match. Here&#39;s why it matters and how to implement it in ASP.NET Web API using middleware.</summary>
  </entry>
  <entry>
    <title>Eliminating Database Lookups with Auth0 Custom Claims</title>
    <link href="https://mdpellegrin.com/blog/2026-02-16-auth0-custom-claims/"/>
    <updated>2026-02-16T00:00:00.000Z</updated>
    <id>https://mdpellegrin.com/blog/2026-02-16-auth0-custom-claims/</id>
    <summary>How to enrich JWT tokens with user data during login, eliminating per-request database lookups while keeping your domain logic decoupled from your identity provider.</summary>
  </entry>
</feed>
