pelican-plugins/ lives in .gitignore so the random_article plugin
never reached the build server after cleanup. Moved to lib/ which
already serves as a PLUGIN_PATHS entry. Removed the os.path.exists
check that caused the plugin to skip all articles when the generator
ran before article directories existed in output.
- CLAUDE.md: Add cover letter RST format guide
- Makefile: Use cover-letter.style for PDF generation
- lib/generate_llms_txt.py: Add contact, payment, software, ML expertise & commission sections
- New cover letters: Phantom Backend (Money Movement), Solflare Backend Developer
- cover-letter.style: rst2pdf styling for clean PDF output
- rst2md.py now creates both index.md (with metadata) and index-slim.md (clean)
- generate_jsonblog.py references index-slim.md for clean content
- Fixes "Error: No content found" in blog viewer
- strip_pelican_metadata() removes title and metadata fields
Changes blog.json generation to link to hosted markdown files instead of
embedding full content. Each post now includes a content_url field pointing
to {site_url}/{slug}/index.md. This significantly reduces blog.json file
size while maintaining full content access via standard HTTP requests.
Updated README.rst to document the new linking behavior & how blog.json works.
Updated generate_jsonblog.py to:
- Load Markdown content from output/<slug>/index.md files
- Set content_type: 'markdown' for each post
- Fall back to plain text if index.md not found
This ensures blog.json contains native Markdown content converted
from RST via pandoc, rather than stripped HTML from the Atom feed.
Works with the build order in make formats:
1. rst2md converts RST to Markdown
2. jsonblog reads the Markdown files
3. blog.json contains proper Markdown with content_type set
Result: 100/100 posts now have Markdown content with content_type field.
- lib/rst2md.py - RST to Markdown converter using pandoc
- lib/generate_jsonfeed.py - JSON Feed v1.1 generator
- lib/generate_jsonblog.py - JSON Blog format (jsonblog.dev)
- lib/generate_plaintext.py - HTML to plain text converter
- lib/generate_llms_txt.py - AI agent onboarding file
These scripts generate multiple formats for AI/LLM consumption:
- blog.json at root (entire blog in one file)
- feeds/all.json (JSON Feed format)
- llms.txt (onboarding documentation)
- index.md (Markdown versions)
- index.txt (plain text versions)
The pelican-plugins/ directory is gitignored, so moved the plugin
to lib/ which is tracked. Updated PLUGIN_PATHS to include lib/.
This plugin provides the strip_anchors Jinja2 filter that removes
TOC divs and toc-backref anchor links from article summaries on
the homepage, preventing broken anchor links in excerpts.