The Moss blog is built with Jekyll and integrated with the main static site. Blog files are generated into build/blog/ and deployed alongside the main site.
moss.social/
├── _config.yml # Jekyll configuration
├── _layouts/ # Blog layouts (default, post)
├── _posts/ # Blog posts (markdown files)
├── _includes/ # Reusable components
├── assets/ # Blog assets (CSS, images)
│ └── css/
│ └── blog.css # Blog-specific styles
├── index.html # Blog index page
├── Gemfile # Ruby dependencies
└── build/
├── index.html # Main site (unchanged)
├── download.html # Main site (unchanged)
├── style.css # Main site (unchanged)
└── blog/ # Generated blog (gitignored)
├── index.html # Blog home at /blog/
├── 2025/12/19/...# Blog posts
├── feed.xml # RSS feed
└── assets/ # Blog assets
- Create a file in
_posts/with the format:YYYY-MM-DD-title.md - Add front matter:
---
layout: post
title: "Your Post Title"
date: 2025-12-19
author: Moss Team
tags: [tag1, tag2, tag3]
excerpt: "A short summary for the blog index"
---
Your content here in Markdown...layout: Always use "post"title: Post title (required)date: Publication date (required)author: Author name (optional, defaults to "Moss Team")author_image: Path to author avatar image (optional, shows placeholder if not provided)- Images located at:
/blog/assets/images/authors/[name].jpg
- Images located at:
image: Path to featured image (optional, shows gradient placeholder if not provided)- Place images in:
assets/images/posts/ - Reference as:
/blog/assets/images/posts/filename.png
- Place images in:
tags: Array of tags (optional, max 2 shown on cards)excerpt: Summary text (optional, auto-generated if not provided)
See AUTHORS.md for complete author reference.
# Build the blog
bundle exec jekyll build
# The blog will be generated in build/blog/
# Commit the build/blog/ directory to Git
git add build/blog/
git commit -m "Update blog"
git push
# Cloudflare will auto-deploy the changesbuild and serve via python:
cd build
python3 -m http.server 8000
The blog uses the Moss design system with Vonge-inspired layout:
- Fonts: Mossville-v2 (headings), Inter (body)
- Colors: From
styleguide.css(forest-dark, moss-primary, leaf-accent, earth-bg) - Spacing: CSS variables from the design system
- Layout Features:
- Featured images on blog post cards
- Author avatars with name and date
- Two-column post hero (content left, image right)
- Dropcap on first paragraph of posts
- Gradient placeholders when images not provided
- Responsive design (single column on mobile)
Blog-specific styles are in assets/css/blog.css.
The main site has a "Blog" link added to the navigation that points to /blog/.
✅ Jekyll outputs to build/blog/ only - main site files are never touched
✅ The build/blog/ directory is gitignored (generated files)
✅ Main site remains a simple static site
✅ Blog uses same fonts, colors, and design language as main site
❌ Don't edit files in build/blog/ directly (they're regenerated)
❌ Don't change the destination in _config.yml (it would overwrite the main site)
❌ Don't forget to run bundle exec jekyll build before committing
- Write your blog post in
_posts/ - Run
bundle exec jekyll build - Commit changes including
build/blog/ - Push to GitHub
- Cloudflare auto-deploys
The blog automatically generates an RSS feed at /blog/feed.xml
Posts automatically get:
- SEO meta tags (via jekyll-seo-tag)
- Sitemap entry (via jekyll-sitemap)
- Open Graph tags
- Twitter Card tags
Blog not building?
# Install dependencies
bundle install
# Try a clean build
rm -rf build/blog/
bundle exec jekyll buildMain site broken?
The blog should never touch main site files. Check that _config.yml has:
destination: build/blogexclude:includesbuild/
Posts not showing?
- Check filename format:
YYYY-MM-DD-title.md - Ensure front matter is valid YAML
- Check date isn't in the future