📖 Documentation: https://gauravagarwalgarg.github.io/blog/
📦 Repository: GitHub
A curated blog covering software engineering, emerging technology, aerospace, health-tech, startups, economics, infrastructure, history, and culinary adventures.
Live: gauravagarwalgarg.github.io/Blog
- 🌙 Dark mode (system preference + toggle)
- 📱 Mobile-first, responsive design
- ⚡ 100/100 Lighthouse performance target
- 🔍 SEO: canonical URLs, OpenGraph, Twitter cards
- 📡 RSS feed + Sitemap
- ✍️ Markdown & MDX support
- 🎨 Syntax highlighting (Shiki)
- 🖼️ Image optimization (Sharp)
- 📑 Table of contents (via MDX)
- 🏷️ Category filtering
- � Micro-blogging (short-form posts)
- 🚀 Static deploy via GitHub Pages (future: self-hosted dynamic)
| Layer | Tool |
|---|---|
| Framework | Astro 6 |
| Content | Markdown / MDX |
| Styling | Vanilla CSS (no framework overhead) |
| Fonts | Atkinson Hyperlegible (local, no CLS) |
| Images | Sharp (build-time optimization) |
| Deploy | GitHub Actions → GitHub Pages |
| Future | Docker + Caddy/Nginx (self-hosted) |
src/
├── components/ # Reusable UI (Header, Footer, PostCard, etc.)
├── content/
│ ├── blog/ # Long-form posts (Markdown/MDX)
│ └── micro/ # Short-form micro-posts
├── layouts/ # Page layouts (BlogPost)
├── pages/ # Routes (index, blog, projects, about)
├── styles/ # Global CSS (dark mode, typography)
└── consts.ts # Site config, categories, projects, nav
npm install
npm run dev # http://localhost:4321
npm run build # Production build
npm run preview # Preview production buildCreate src/content/blog/my-post.md:
---
title: "My Post Title"
description: "A brief description for SEO and cards."
pubDate: 2024-06-15
category: "software-engineering"
tags: ["rust", "systems", "performance"]
draft: false
---
Your content here. Supports full Markdown + code blocks.software-engineering · emerging-tech · aerospace · health-tech · startups · economics · infrastructure · history · culinary · micro
When ready to move off GitHub Pages:
# Dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80# docker-compose.yml
services:
blog:
build: .
ports:
- "80:80"
- "443:443"
volumes:
- ./certs:/etc/nginx/certs
restart: unless-stoppedSwitch Astro to SSR mode when needed:
// astro.config.mjs
output: 'server',
adapter: node({ mode: 'standalone' }),- Content-first No visual noise. Words and code are the product.
- Performance No JS frameworks on the client. Static HTML + minimal CSS.
- Accessible Semantic HTML, proper contrast, keyboard navigable.
- Progressive Works without JS. Dark mode via CSS + localStorage.
- Portable Static output. Deploy anywhere (Pages, S3, Nginx, Caddy).
Inspired by Firebase Blog, Astrofy, and OpenBlog.