# Web Development ## 2025 - [Adding llms.txt & markdown output to your Hugo site](/blog/llms-txt-support/index.md) ## 2024 - [Homegrown Analytics](/blog/homegrown-analytics/index.md) - [Handling duplicate events from Stripe in your webhook endpoint](/blog/handling-duplicate-stripe-events/index.md) - [Visual Regression Testing using Playwright and GitHub Actions](/blog/visual-regression-testing/index.md) - [Adding prefetch and prerender using the Speculation Rules API](/blog/speculation-rules/index.md) - [Adding sharing to my posts via ShareOpenly](/blog/share-openly/index.md) - [Order fulfillment with Azure Functions and Stripe](/blog/order-fulfillment/index.md) - [Adding some e-commerce to my galleries](/blog/adding-e-commerce-to-my-galleries/index.md) - [Adding photo galleries to my site](/blog/adding-photo-galleries/index.md) ## 2023 - [You probably don't need nofollow](/blog/you-probably-do-not-need-nofollow/index.md) - [The evolution of Microsoft documentation sites](/blog/evolution-of-microsoft-documentation-sites/index.md) ## 2021 - [Don't Mess Around With Your Domain!](/blog/domain-names/index.md) - [Don't depend on Referrer info](/blog/referrer/index.md) - [Updating my blog to support multiple image formats](/blog/image-formats/index.md) - [Do as little work as you can](/blog/do-as-little-as-possible/index.md) - [Creating an effective bug report](/blog/creating-an-effective-bug-report/index.md) - [Assessing your site for Accessibility](/blog/assessing-your-site-for-accessibility/index.md) - [You need a test environment](/blog/you-need-a-test-environment/index.md) - [Adding a special section to my Hugo posts based on a tag or tags](/blog/adding-a-special-section-based-on-tags/index.md) - [The inevitable result of focusing only on shipping features](/blog/inevitable-cost-of-focusing-on-only-features/index.md) - [Updating my blog for SEO](/blog/update-my-blog-for-seo/index.md) - [Assessing your site for Search Engine Optimization (SEO)](/blog/assessing-your-site-for-seo/index.md) - [Don't code links to open in a new tab or window.](/blog/do-not-open-new-tabs/index.md) - [A Defensive Approach to Engineering Quality](/blog/a-defensive-approach-to-engineering-quality/index.md) - [Why you should care about the performance of your site](/blog/why-you-should-care-about-performance/index.md) - [Assessing a website for performance, accessibility and more](/blog/site-assessments/index.md) ## 2020 - [Templates used when building and rendering docs.microsoft.com](/blog/docs-templates/index.md) - [The basic flow of Docs.Microsoft.com](/blog/docs-basic-flow/index.md) - [An overview of Docs.Microsoft.com](/blog/docs-overview/index.md) - [Pushing to the CDN](/blog/cdn-push-vs-pull/index.md) - [Beyond content caching and distribution, what else can a CDN do?](/blog/cdn-advanced-functionality/index.md) - [What does it mean to purge content from a CDN?](/blog/cdn-purge-and-invalidate/index.md) - [Should you have a separate domain for content served through the CDN?](/blog/cdn-separate-domain/index.md) - [More discussion of CDNs with common questions and answers](/blog/cdn-q-and-a/index.md) - [What is a CDN, how does it work, and should you use one?](/blog/overview-of-cdn/index.md) ## 2005 - [Added category elements to my RSS feed, since I wasn't playing Xbox 360](/blog/added-category-elements-to-my-rss-feed-since-i-wasnt-playing-xbox-360/index.md) ## 2003 - [There goes that column idea...](/blog/there-goes-that-column-idea/index.md)