An Astro blog for writing posts from Markdown files under
architectures/<slug>/README.md.
The blog itself is deployed as a Docker container. GitHub Actions builds and pushes the image to GitHub Container Registry, then triggers Watchtower on the host so the running container updates automatically.
/
├── architectures/
│ └── <slug>/
│ └── README.md # Blog post content parsed by Astro
├── deployments/
│ └── <slug>/
│ └── README.md # Deployment notes for the matching post
├── src/
│ ├── content.config.ts # Astro content collection config
│ ├── pages/
│ └── styles/
├── docker-compose.yml # Runtime services: blog + Watchtower
├── Dockerfile # Astro build + Nginx static serving
└── .github/workflows/deploy.yml
Each post lives at architectures/<slug>/README.md and needs frontmatter that
matches src/content.config.ts.
---
title: "Post Title"
description: "Short summary for the post list."
post: 1
slug: optional-custom-slug
date: "2026-05-15"
tags: ["tier-1", "astro", "blog"]
---The homepage lists posts in post order and can filter them by tags.
bun install
bun run dev
bun run buildIf you use npm instead:
npm install
npm run dev
npm run buildThe live deployment is Docker-based:
- Push to
main. - GitHub Actions builds
ghcr.io/glitchyi/blog:latestforlinux/arm64. - GitHub Actions pushes the image to GHCR.
- GitHub Actions calls the Watchtower webhook.
- Watchtower pulls the new image and recreates
astro-app.
See deployments/00-setup/README.md for the full Watchtower and host setup.
Built by Advaith Narayanan (Glitchy).