A minimalist, lightweight static blog generator built with Elixir, designed to be:
- Simple to maintain
- Fast to load
- Easy to build locally
- Aesthetic and clean
- Markdown-based posts with YAML front matter
- Tag filtering system
- Dark/light theme toggle
- Responsive design
- Zero external dependencies at runtime
- No tracking or analytics
- Built entirely with Elixir
- Elixir 1.19+
- Erlang/OTP 28+
mix deps.getBuild and serve locally:
mix devVisit http://localhost:8000
Generate HTML files without starting server:
mix build_siteStart HTTP server without rebuilding:
mix serve [port] # default port: 8000- Create markdown file in
_posts/directory:
Format: YYYY-MM-DD-slug.md
- Add YAML front matter:
---
layout: post
title: "Your Post Title"
date: 2025-01-01
tags: [tag1, tag2, tag3]
---
Your post content here...- Run
mix build_siteto generate HTML
├── _posts/ # Markdown source files
├── posts/ # Generated HTML posts
├── lib/
│ ├── blog_builder.ex # Main build logic
│ ├── blog_server.ex # HTTP server
│ └── mix/tasks/ # Mix tasks (build_site, serve, dev)
├── mix.exs # Project configuration
├── post-template.html # HTML template for posts
├── index.html # Main blog listing page
├── style.css # All styling
├── script.js # Client-side JavaScript
└── posts.json # Generated posts index
GitHub Actions automatically builds and deploys to GitHub Pages on push to main.
- Static Generation: Converts markdown → HTML at build time
- YAML Front Matter: Parses post metadata (title, date, tags)
- Template System: Applies HTML templates with string replacement
- JSON Index: Generates searchable posts.json for frontend
- HTTP Server: Elixir Plug/Cowboy for local development