Web Development
Blog posts
- Homegrown Analytics Jul 10
- Handling duplicate events from Stripe in your webhook endpoint Jun 9
- Visual Regression Testing using Playwright and GitHub Actions May 22
- Adding prefetch and prerender using the Speculation Rules API May 17
- Adding sharing to my posts via ShareOpenly May 11
- Order fulfillment with Azure Functions and Stripe May 5
- Adding some e-commerce to my galleries May 4
- Adding photo galleries to my site Apr 13
- You probably don't need nofollow Dec 9
- The evolution of Microsoft documentation sites May 14
- Don't Mess Around With Your Domain! Aug 31
- Don't depend on Referrer info Jul 10
- Updating my blog to support multiple image formats Jun 13
- Do as little work as you can May 6
- Creating an effective bug report Apr 25
- Assessing your site for Accessibility Apr 6
- You need a test environment Mar 21
- Adding a special section to my Hugo posts based on a tag or tags Mar 15
- The inevitable result of focusing only on shipping features Mar 14
- Updating my blog for SEO Mar 14
- Assessing your site for Search Engine Optimization (SEO) Feb 3
- Don't code links to open in a new tab or window. Feb 2
- A Defensive Approach to Engineering Quality Jan 24
- Why you should care about the performance of your site Jan 18
- Assessing a website for performance, accessibility and more Jan 18
- Templates used when building and rendering docs.microsoft.com Sep 16
- The basic flow of Docs.Microsoft.com May 23
- An overview of Docs.Microsoft.com May 19
- Pushing to the CDN May 16
- Beyond content caching and distribution, what else can a CDN do? Mar 17
- What does it mean to purge content from a CDN? Mar 8
- Should you have a separate domain for content served through the CDN? Mar 8
- More discussion of CDNs with common questions and answers Mar 8
- What is a CDN, how does it work, and should you use one? Feb 26
- Added category elements to my RSS feed, since I wasn't playing Xbox 360 Nov 26
- There goes that column idea... Feb 26