A minimal, high-performance Jekyll theme for personal websites and blogs. Designed for readability and elegance.
- 🎨 Two Beautiful Themes: Choose between Paper (Clean Ivory/Slate) and Flexoki (Warm Earthy).
- 📱 Responsive & Mobile-First: Optimized layout for all devices.
- 🌙 Dark Mode Support: Automatic and manual toggle.
- ✍️ Typography Focused: Optimized for long-form reading.
- 🎯 Code Block UX: Rouge highlighting, language labels, diff styling, and copy buttons.
- 🖼️ Figure Helpers: Captioned images with lazy loading, wide layouts, and SEO-aware hero/social image metadata.
- 🧮 Opt-in Math & Diagrams: Per-page MathJax and Mermaid support.
- 🔍 SEO Optimized: Built-in metadata and social tags.
- 📡 Atom Feed Support: Ships with collection feeds plus an aggregate root feed.
Apollo comes with two pre-configured color themes. The default is Paper.
To switch to Flexoki, edit assets/css/styles.scss:
// @use "themes/paper"; <-- Comment this out
@use "themes/flexoki"; // <-- Uncomment thisFor working on Apollo itself:
# Prerequisites
brew install fswatch # File watcher for live reload
brew install vips # Image processing for OG images
bundle install # Ruby dependencies
# Run locally
bash scripts/compose.sh serveOpen http://localhost:4000 - edits to _sass/, _layouts/, etc. auto-reload.
mkdir my-site && cd my-site
git initgit remote add apollo https://github.com/defaults/apollo.git
git fetch apollo
git subtree add --prefix=apollo apollo master --squashbash apollo/scripts/setup-site.shThis creates:
my-site/
├── apollo/ # Theme (git subtree - don't edit directly)
├── content/ # Your markdown files (edit this!)
│ ├── _essays/ # Blog posts
│ ├── home/index.md # Homepage
│ └── about.md # About page
├── overrides/ # Optional theme overrides
├── scripts/
│ └── compose.sh # Build script (delegates to apollo)
├── _config.local.yml # Your site config
├── app.yaml # GCP App Engine config
└── .github/workflows/
└── deploy.yml # CI/CD workflow
Edit _config.local.yml:
title: "Your Name"
description: "Your tagline"
url: "https://yoursite.com"
author:
name: "Your Name"
# SEO & Social
twitter:
username: "yourhandle"
social:
links:
- https://twitter.com/yourhandle
- https://github.com/yourhandle- SEO: Handled automatically by
jekyll-seo-tag. Ensuretitle,description,url, andlogoare set in_config.local.yml. - Feeds:
/feed.xmlis the aggregate Atom feed. Collection feeds are configured underfeed.collectionsand default to/essays/feed.xml. - LLM SEO: A
/llms.txtfile is automatically generated for AI indexing.
Edit files in content/:
# content/_essays/2024-01-01-my-first-post.md
---
title: "My First Post"
date: 2024-01-01
---
Write your content here in markdown.Apollo keeps normal Markdown as the default, then adds a few optional helpers for technical writing.
Fenced code blocks are enhanced automatically with a language label and copy button:
```typescript
const message = "hello";
```Diff blocks receive inserted/deleted line styling:
```diff
- const theme = "light";
+ const theme = userPreference ?? "light";
```Use the figure include when you want captions, dimensions, or wide/full layouts:
{% include figure.html
src="/assets/images/example.png"
alt="A readable description"
caption="A short caption."
layout="wide"
width="1200"
height="800"
%}For post hero images, use hero in front matter:
hero:
image: /assets/images/example.png
alt: A readable description
caption: Optional hero caption.
social_image: /assets/images/og/example.pngsocial_image is used for SEO/share metadata. If it is omitted, Apollo falls back to the hero image, then the first image in the page, then logo.
Enable math or diagrams per page:
math: true
mermaid: trueThen write regular display math or Mermaid fences:
$$ E = mc^2 $$
```mermaid
flowchart LR
Draft --> Preview --> Publish
```# Install dependencies (once)
BUNDLE_GEMFILE=apollo/Gemfile bundle install
brew install fswatch
# Serve with live reload
bash scripts/compose.sh servePush to GitHub. The included workflow deploys to GCP App Engine.
Required secret: GCP_SERVICE_ACCOUNT_KEY (your GCP service account JSON)
git fetch apollo
git subtree pull --prefix=apollo apollo master --squashCopy any file from apollo/ to overrides/ with the same path and modify it:
# Example: customize the header
cp apollo/_includes/header.html overrides/_includes/header.html
# Edit overrides/_includes/header.htmlThe theme uses CSS custom properties. Override in overrides/assets/css/custom.scss:
:root {
--color-action: #your-color;
}| Directory | Purpose | Edit? |
|---|---|---|
apollo/ |
Theme (subtree) | ❌ No |
content/ |
Your markdown | ✅ Yes |
overrides/ |
Theme overrides | ✅ Yes |
_config.local.yml |
Site config | ✅ Yes |
| Command | Description |
|---|---|
bash scripts/compose.sh serve |
Build and serve with live reload |
bash scripts/compose.sh build |
Build site (for CI/manual builds) |
bash scripts/compose.sh clean |
Remove build directory |
MIT