AOG (Act of Genius) is an Emacs Org-mode static site generator. It is based on the org-page lineage and is used here as an editor-first publishing engine for technical blogs.
Core behavior:
- Read Org source files from a repository.
- Render content with Mustache templates and a selected theme.
- Generate category pages, tag pages, and RSS/search artifacts.
- Publish HTML output to a target directory or a configured branch workflow.
- Org-native writing and export flow.
- Theme system with template/CSS/JS resources.
- Category and tag index generation.
- RSS generation.
- Incremental publication via git-aware workflows.
- Search index generation support in downstream pipelines.
- Highly scriptable Elisp integration.
Required:
- Emacs (batch mode).
- Org-mode.
- Git.
- Elisp libraries used by AOG internals:
mustache.el,htmlize.el,dash.el,ht.el,git.el.
Optional:
simple-httpdfor Emacs-side preview flows.
(add-to-list 'load-path "/path/to/AOG")
(require 'aog)Install via your preferred Emacs package manager and then:
(require 'aog)(setq aog/repository-directory "/path/to/blog-repo")
(setq aog/site-domain "https://example.com")
(setq aog/site-main-title "My Blog")
(setq aog/site-sub-title "Notes on systems and software")
(setq aog/theme 'selfdotsend) ; or any available themeOptional identity and integrations:
(setq aog/personal-github-link "https://github.com/your-user")
(setq aog/personal-disqus-shortname "your-disqus-id")
(setq aog/personal-google-analytics-id "G-XXXXXXX")(aog/do-publication)(aog/do-publication t nil "/tmp/aog-public" nil nil)Run:
M-x aog/do-publication
In this environment, a companion shell wrapper named aog is used to drive
AOG + blog automation from the terminal.
Default locations used by the wrapper:
AOG_DIR->/Users/pankajdoharey/Development/Projects/AOGAOG_REPO_DIR->/Users/pankajdoharey/Development/metacritical.github.io
Current commands:
aog build [repo_dir] aog dev [repo_dir] aog new [--publish] "Title" aog new [repo_dir] [--publish] "Title" aog ls [repo_dir] aog publish [repo_dir] [output_dir] aog draft-publish [repo_dir] [output_dir] aog preview [repo_dir] [output_dir] [port]
Command intent:
build: run repositorypublish.shpipeline (full production-style build).dev: rundoormanprocess set (watch + local web + local editor stack).new: create draft by default, or publish-ready post with--publish.ls: list draft Org files.publish: run AOG publication only.draft-publish: run AOG publication including drafts.preview: publish then serve via Python HTTP on selected port.
Themes live under themes/ and typically include:
templates/(Mustache templates)resources/cssresources/js- optional images/fonts
For downstream blog repos, theme resources are copied into generated output directories by repository publish scripts.
- AOG publishes content; repository-level scripts usually handle extra steps like link normalization, syntax post-processing, static asset copy, and deployment-specific aliasing.
- If you rely on incremental git-aware publishing, keep repository history clean and commit source changes before publication.