Web 5 min read beginner

Why I am building tech.hwmoon.com as a static engineering blog

The platform decision behind HWMOON Tech Lab: Astro, Azure Static Web Apps, Markdown content, and a layout optimized for engineering notes.

tech.hwmoon.com is meant to be a personal engineering blog, but I do not want it to feel like a throwaway side page. The goal is to keep the publishing stack simple while making the writing surface strong enough for cloud notes, migration logs, troubleshooting records, and technical essays.

The decision is to use the same broad platform family as the news site: Astro + Markdown + Azure Static Web Apps.

Design principle

The blog should be boring in the right places.

  • Static HTML first
  • Markdown for posts
  • No database for ordinary content
  • Git history as the editorial log
  • Azure Static Web Apps for hosting
  • Terraform for DNS and cloud resources

That gives me a small, reproducible stack. The site can move between subscriptions or tenants without depending on hidden platform state.

Why Astro

Astro is a good fit because most technical posts are content-heavy pages. I do not need a large client-side application to render a document about DNS, CI/CD, or infrastructure decisions.

The useful parts are:

  • Content collections with schema validation
  • Static route generation
  • Markdown rendering
  • Component-based layouts
  • Low JavaScript by default

The last point matters. A technical blog should load fast, be readable on mobile, and remain easy for search engines and link previews to understand.

Why a separate subdomain

The HWMOON domain can support multiple properties with different jobs.

SubdomainRole
news.hwmoon.comIT briefing and publisher-style content
tech.hwmoon.comPersonal technical writing and build logs
compass.hwmoon.comExisting NAS-hosted WordPress service

Keeping tech separate avoids mixing personal engineering notes with the news product. It also makes analytics, sitemap, Search Console, and future AdSense decisions cleaner.

Content model

The blog content model is intentionally small.

const postSchema = z.object({
  title: z.string(),
  description: z.string(),
  publishedDate: z.string(),
  category: z.string(),
  tags: z.array(z.string()),
  difficulty: z.enum(["beginner", "intermediate", "advanced"]),
  readTime: z.string(),
  featured: z.boolean(),
  draft: z.boolean()
});

The schema is not there to make writing harder. It prevents silent quality drift. Every published post should have enough metadata for cards, archives, SEO, and structured data.

Layout direction

The site uses the same calm, professional tone as the news platform, but the information structure is different.

The news site is optimized for article volume and scanning. The tech blog is optimized for long-form reading, code blocks, checklists, and reference-style posts.

That changes the layout:

  • Home highlights a few posts and topic lanes
  • Post detail pages give code blocks real visual weight
  • Category pages collect related build notes
  • Footer links point back to the wider HWMOON ecosystem

Deployment shape

The intended production path is:

Git repository
  -> Azure DevOps pipeline
  -> npm install
  -> astro build
  -> Azure Static Web Apps deploy
  -> tech.hwmoon.com

DNS can stay in Azure DNS. The tech record should point to the Static Web Apps default hostname after the Static Web App is created and the custom domain is configured.

What this unlocks

This gives me a place to publish the work behind the work:

  • Azure DNS and domain setup
  • Synology NAS operations
  • Terraform module decisions
  • CI/CD agent migration notes
  • Search Console and AdSense preparation
  • Static publishing architecture
  • Practical AI automation experiments

The important part is not just documenting commands. The useful posts explain why a decision was made, what failed, what changed, and how I would rebuild it later.