Personal tech blog by Stanislav Zhelyazkov — sharing deep dives on Azure infrastructure, Bicep, Azure Policy, governance, and cloud administration.
🔗 Live site: cloudadministrator.net
- Framework: Astro 6
- Styling: Custom CSS with dark/light mode
- Hosting: GitHub Pages
- CDN/Proxy: Cloudflare
- Analytics: Cloudflare Analytics (server-side)
- Language: TypeScript
- 📝 Markdown blog with syntax highlighting (Shiki dual themes)
- 🔍 Client-side search across all posts
- 🎠 Featured posts carousel on homepage
- 🏷️ Tag-based filtering and categorization
- 🌗 Dark/light mode with system preference detection
- 📱 Fully responsive design
- 📡 RSS feed at
/feed/ - 🗺️ Auto-generated sitemap
- 🔗 SEO-optimized with JSON-LD structured data and Open Graph tags
- 📊 Reading time estimates
- 🔄 Related posts suggestions
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production (runs astro check + astro build)
npm run build
# Preview production build
npm run preview├── public/
│ ├── media/ # Blog post images (YYYY/MM structure)
│ └── favicon.svg # Site favicon
├── src/
│ ├── components/ # Astro components (PostCard, HeroCarousel, etc.)
│ ├── content/
│ │ └── blog/ # Blog posts in Markdown (YYYY/MM/DD structure)
│ ├── layouts/ # Base layout with global styles
│ ├── pages/ # File-based routing (archive, tags, search, etc.)
│ ├── plugins/ # Custom remark plugins
│ └── utils/ # Shared utilities (paths, blog helpers, assets)
├── scripts/
│ └── build.mjs # Build script (check + build)
├── .github/
│ └── workflows/
│ └── deploy.yml # GitHub Pages deployment
├── astro.config.mjs # Astro configuration
├── content.config.ts # Content collection schema
└── tsconfig.json
Pushes to main automatically deploy via GitHub Actions:
- Checkout and install dependencies
- Run
astro checkfor type validation - Build static site with
astro build - Deploy to GitHub Pages
The site uses cloudadministrator.net via Cloudflare proxy. Configuration:
- Set repo variable
SITE_URLto your custom domain URL - Configure the custom domain in GitHub Pages settings
- Set Cloudflare DNS CNAME to
slavizh.github.io(proxied) - Set Cloudflare SSL/TLS to Full
- Create a new
.mdfile insrc/content/blog/YYYY/MM/DD/ - Add frontmatter:
--- title: "Your Post Title" excerpt: "Short summary for cards and previews" description: "SEO meta description" pubDate: "2026-03-13" heroImage: "/media/2026/03/your-image.png" tags: ["Azure", "Bicep"] draft: false ---
- Add your image to
public/media/YYYY/MM/ - Commit and push — the site deploys automatically
MIT License — see LICENSE for details.
Blog content © Stanislav Zhelyazkov. All rights reserved.