Personal blog built with Eleventy 3.x and Tailwind CSS v4, deployed to Cloudflare Pages.
This blog has gone through three generations. Previous versions are preserved as archive branches.
Branch: master
Built with Eleventy 3.x (ESM, Nunjucks templates), styled with Tailwind CSS v4. Comments powered by giscus (GitHub Discussions). Deployed to Cloudflare Pages with native git integration.
Branch: archive-saber
Built with Saber, a Vue.js-based static site generator (now archived/unmaintained). Custom Vue theme with components for layouts, embeds, and comments. Disqus for comments, GA Lite for analytics, jsDelivr as CDN. Deployed to Netlify.
Branch: archive-2017
Built with Hexo 3.x, a Node.js static site generator. Used the NexT theme with built-in search, categories, and tags. The original version of the blog.
src/
โโโ _data/ # Global data files
โ โโโ site.json # Site metadata (title, url, nav)
โ โโโ categories.json # Category slug mapping
โ โโโ friends.js # Build-time fetch of friends list
โ โโโ legacyRedirects.js # Old URL redirect rules
โโโ _includes/
โ โโโ layouts/
โ โ โโโ base.njk # Base HTML (head, OG tags, Twitter Cards)
โ โ โโโ post.njk # Blog post layout (tags, giscus comments)
โ โ โโโ page.njk # Static page layout
โ โโโ header.njk
โ โโโ footer.njk
โโโ posts/ # Blog posts (markdown)
โโโ pages/ # Static pages (about, friends, archives)
โโโ drafts/ # Draft posts (excluded from build)
โโโ assets/ # Images and files (passthrough copy)
โโโ static/ # Favicon, icons, robots.txt (passthrough copy)
โโโ css/main.css # Tailwind CSS entry point
โโโ index.njk # Homepage with pagination
โโโ feed.njk # Atom feed
โโโ feed-json.njk # JSON feed
โโโ sitemap.njk # Sitemap
โโโ tags.njk # Tag listing page
โโโ tag-page.njk # Individual tag page template
โโโ redirects.njk # _redirects generator
eleventy.config.js # Eleventy configuration
# First-time setup (creates the dev container from distrobox.ini)
distrobox assemble create
# Enter the dev container
distrobox enter blog-dev
# Install dependencies
yarn install
# Dev server with hot reload
yarn dev
# Production build
yarn buildDeploys automatically to Cloudflare Pages via native git integration. Push to master triggers a production deploy; PRs get preview deployments.
Build settings in Cloudflare Pages dashboard:
- Build command:
yarn build - Build output directory:
_site - Environment variable:
NODE_VERSION=22