Three-Layer Taxonomy¶
This knowledge base uses a three-layer taxonomy system that separates concerns between human navigation, website presentation, and machine traversal.
The Layers¶
Layer |
Purpose |
Source |
Consumer |
|---|---|---|---|
Directories |
Human navigation |
Filesystem |
You, locally |
Categories |
Website navigation |
|
Readers, sidebar |
Tags |
AI/Zettelkasten navigation |
|
Search, AI agents |
How They Work Together¶
Consider a document about lumpen organizing:
---
category: Theory # Website: appears under "Theory"
tags:
- organizing/strategy # AI: findable via organizing
- theory/class-analysis # AI: findable via theory
- politics/marxism # AI: findable via politics
---
# Lumpen Organizing
Directory: Lives in
sample/concepts/(your local organization)Category: Shows under “Theory“ in sidebar (reader intent: “teach me about X”)
Tags: Discoverable via multiple paths (machine traversal)
Implementation¶
Three custom Sphinx extensions plus a shared module power this workflow:
publish_filter (_extensions/publish_filter/)¶
Excludes documents with
publish: falsefrom the entire buildStrips Obsidian comments (``) from output
_common (_extensions/_common/)¶
Shared utilities used by all extensions:
frontmatter.py - Single source of truth for YAML frontmatter extraction
extract_frontmatter(content)- Parse YAML from markdown stringReturns
(frontmatter_dict, body_content)tuple
traversal.py - Unified directory walking
iter_markdown_files(srcdir, exclude_patterns, ...)- Iterate markdown filesParameters: -
skip_underscore_files- Skip _index.mdetc. (default: True) - skip_underscore_dirs- Skip _build/etc. (default: True) - skip_dot_dirs- Skip .git/etc. (default: True)
External Extensions¶
sphinx-tags- Generates tag pages for AI/search navigation
Templates¶
Use <leader>mN in Neovim to create notes from templates in _templates/:
note.md (General purpose)¶
---
zkid: 202411281430 # Zettelkasten ID (YYYYMMDDHHMM)
title: "Document Title"
author: Percy
date-created: 2024-11-28T14:30
date-edited: 2024-11-28T14:30
category: # Website navigation
tags: [] # AI/Zettelkasten navigation
publish: false # Draft by default
status: draft
---
daily.md (Daily notes)¶
Pre-configured with date-based tags for journal entries.
Publishing Workflow¶
Documents have a publish key controlling visibility:
Value |
Behavior |
|---|---|
|
Draft - excluded from build |
|
Published - included in build |
(no key) |
Published - backwards compatible |
To publish a draft:
1. Write and refine with publish: false
2. When ready, change to publish: true
3. Run mise run build
Obsidian Comments¶
Use `` for comments that don’t appear in the published site:
# Document Title
This content is visible.
More visible content.
Comments are stripped during the Sphinx build - they never reach the HTML output.
Adding New Content¶
1. Create file with <leader>mN (uses template)
2. Fill in category: for website navigation
3. Add tags: for cross-referencing
4. Write content (use `` for notes-to-self)
5. Set publish: true when ready
6. Build with mise run build
Quick Example¶
---
zkid: 202411281430
title: "New Methodology"
author: Percy
date-created: 2024-11-28T14:30
date-edited: 2024-11-28T14:30
category: Praxis
tags:
- organizing/tactics
- theory/praxis
publish: true
status: complete
---
# New Methodology
Content here.