Jekyll Knowledge Base — Full Reference
Overview
The EZAlgo Knowledge Base is a local Jekyll site at https://knowledge.ezalgotrader.com that auto-renders Markdown files as styled HTML. A file watcher monitors source directories and auto-injects Jekyll frontmatter — you write plain Markdown, it appears on the site within seconds.
Architecture
Source MD files (no frontmatter needed)
↓ [inotify watcher: scripts/watcher.py]
Jekyll _posts/ dir (with auto-injected frontmatter)
↓ [jekyll serve --watch on port 44444]
Caddy reverse_proxy (knowledge.ezalgotrader.com)
↓
https://knowledge.ezalgotrader.com (HTTPS, auto-TLS)
Categories (Subdirectories)
Drop .md files into the correct subdirectory under .hermes/plans/:
| Subdirectory | Jekyll Category | Purpose |
|---|---|---|
.hermes/plans/github-issues/ |
GitHub Issues | Bug reports, issue tracking |
.hermes/plans/future-features/ |
Future Features | Feature proposals, specs, wishlists |
.hermes/plans/to-do/ |
To Do | Action items, task lists, sprint plans |
.hermes/plans/brainstorm/ |
Brainstorm | Ideation, exploration, open questions |
.hermes/plans/documentation/ |
Documentation | Reference docs, guides, how-tos |
.hermes/plans/tools/ |
Tools | DevOps, infra, CI/CD, tooling, services |
.hermes/plans/ (root) |
plan | Uncategorized plans |
Tags — The Cross-Cutting Layer
Tags come from filename keywords (hyphens/underscores split into tag boundaries). Use descriptive, topic-focused filenames to get good tags. Numeric-only tokens are excluded.
Core Platform Tags (what it does)
trading— live trading, order execution, positionssignals— signal generation, threshold, confluencebacktesting— optimizer, ray, numba, historical testingstrategy— strategy isolation, setup config, parameter managementdata-pipeline— MT5 connector, range bars, arrow, parquet, data flowindicators— badge values, 20 indicators, instant calculation
Frontend Tags (what users see)
chart— scichart, rendering, WebGL, panelsfrontend— UI, panels, routes, layout, web appbadge— badge overlay, badge values, thresholds
Backend Tags (infrastructure)
backend— Python services, Docker, FastAPIrust— PyO3, range bar builder, native modulesinfra— Docker, Supabase, ports, deployment, CI/CDobservability— logging, monitoring, health checks
Concern Tags (how we work)
architecture— system design, data flow, big-picture decisionsrefactor— code cleanup, migration, restructuringsecurity— auth, permissions, secretsperformance— optimization, latency, throughputtesting— TDD, test strategies
Example Filenames and Resulting Tags
| File | Category | Auto-tags |
|---|---|---|
to-do/2026-06-03_chart-redesign-badge-overlay.md |
To Do | chart, redesign, badge, overlay |
documentation/2026-06-02_data-pipeline-arrow-parquet.md |
Documentation | data-pipeline, arrow, parquet |
brainstorm/2026-06-02_rust-pyo3-migration-strategy.md |
Brainstorm | rust, pyo3, migration, strategy |
future-features/2026-06-05_trading-live-order-execution.md |
Future Features | trading, live, order, execution |
github-issues/2026-06-03_backend-signal-pipeline-crash.md |
GitHub Issues | backend, signal, pipeline, crash |
tools/2026-06-02_infra-docker-compose-deployment.md |
Tools | infra, docker, compose, deployment |
Frontmatter Watcher
The watcher (/home/ezalgo/jekyll-knowledge/scripts/watcher.py) runs as jekyll-watcher.service and monitors source directories via inotifywait.
Auto-Injection Rules
- If a file lacks
---frontmatter, the watcher injects:layout,title(from first# heading),date(fromYYYY-MM-DD_prefix or mtime),categories(from subdirectory),tags(from filename keywords),author - If a file has existing
---frontmatter, it is copied as-is — no injection
Manual Frontmatter Override
To specify exact tags, add a frontmatter block at the top of your file:
---
layout: post
title: "My Custom Title"
date: 2026-06-02
categories: [Future Features]
tags: [chart, scichart, redesign, frontend]
author: EZAlgo
---
# My content here...
Services
| Service | Unit File | What it does |
|---|---|---|
jekyll-knowledge.service |
/home/ezalgo/jekyll-knowledge/scripts/jekyll-knowledge.service |
Jekyll serve on port 44444 with --watch |
jekyll-watcher.service |
/home/ezalgo/jekyll-knowledge/scripts/jekyll-watcher.service |
Frontmatter injection daemon |
Commands
# Re-sync all files manually
python3 ~/jekyll-knowledge/scripts/watcher.py --sync
# Clean orphaned Jekyll files (source was deleted)
python3 ~/jekyll-knowledge/scripts/watcher.py --cleanup
# Restart services
sudo systemctl restart jekyll-knowledge jekyll-watcher
# View logs
journalctl -u jekyll-watcher -f
journalctl -u jekyll-knowledge -f
# Manual Jekyll build (no serve)
cd ~/jekyll-knowledge && bundle exec jekyll build
# Jekyll config
/home/ezalgo/jekyll-knowledge/_config.yml
# Watcher config (SOURCE_DIRS, CATEGORY_MAP)
/home/ezalgo/jekyll-knowledge/scripts/watcher.py
CATEGORY_MAP Configuration
The watcher’s CATEGORY_MAP in scripts/watcher.py maps subdirectory names to display categories:
CATEGORY_MAP = {
"github-issues": "GitHub Issues",
"future-features": "Future Features",
"to-do": "To Do",
"brainstorm": "Brainstorm",
"documentation": "Documentation",
"tools": "Tools",
}
Files directly in .hermes/plans/ (no subdirectory) get category plan.
Verification
After writing a file, confirm it appears at https://knowledge.ezalgotrader.com
Key Rule
Every plan, action item, brainstorm, or architectural decision MUST be published here. If it only exists in chat, it doesn’t exist.