Edi Wang

Microsoft MVP for Azure

Posts in August 2026

From Azure to Anywhere: Redesigning Image Storage Architecture for this Blog

Moonglade has redesigned its image storage architecture by removing direct dependencies on Azure Blob Storage and S3-compatible SDKs. The application now works with two isolated filesystem roots for public images and private originals, while the hosting environment provides durable storage through Azure Files, Docker volumes, NFS, or other mounted solutions. This change reduces provider-specific code and configuration, strengthens the security boundary around original uploads, and makes the blog easier to deploy across different platforms without sacrificing CDN support.
ASP.NET Azure Azure Blob Storage

From Azure Functions to a Database Outbox: Simplifying Moonglade Email Notifications

This post explains how Moonglade moved its email notification system away from a standalone Azure Functions service and Azure Storage Queue, integrating email processing back into the main blog application with a lightweight database outbox. The migration reduces Azure dependencies and deployment complexity while keeping email delivery asynchronous, durable, and reliable for a personal blogging workload.
Azure Azure Function Azure Storage Queue