2025-04-20
(Mod: 2025-05-27)
| 7 minutes
While trying to integrate the many episodes of CaveTV into the site, I realized that the ontology was getting cramped. It needs to be revised to better distinguish between internal projects, external brand identities, multiple deliverables within a brand, and distinct showrooms.
What follows is the scheme we devised for what the abstractions are, how they should be tagged in Obsidian, and how the files will be managed within Hugo.
◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
🧱 Tag-Based Ontology for Your Hugo Site
This reference defines your system of semantically meaningful tags, used in Obsidian notes via a single Tags: line, and parsed by shadowmaker to generate appropriate Hugo files and structure.
🔧 Prefix Semantics
| Tag Prefix |
Meaning |
#ch-proj- |
Declares a new Project |
#ch-log |
Marks a Project Log |
#ch-artifact |
Marks a Project Artifact |
#ch-deliver- |
Declares a Deliverable (public output) |
#ch-brand- |
Declares a Brand (series/franchise) |
#ch-showroom- |
Declares a Showroom (navigational category) |
#ch-show-in- |
Routes a Brand to a Showroom |
-
We will have 3 fundamental types of note: a landing page, a log entry page, and an artifact page.
-
Log entries were previously called updates, and designated by the inclusion of a #ch-post tag, but even those 2 terms were already inconsistent, so I’ve replaced them with ’log’ and ‘#ch-log’ which has the added benefit of being even shorter.
-
Similarly, articles have been renamed ‘artifacts’, which better captures the role they fill in the system.
-
A landing page is a Markdown file that describes an entity that might have media objects or log entries attached to them.
-
For now, landing pages are used to describe projects, brands, and showrooms. The files for all three share a common information format, but are stored in different parts of the Hugo system and are rendered with different templates, so they have a common structure, but can be adapted to their specific subject.
-
Media pages are either a Markdown document in and of themselves, or they are a Markdown description of an associated media object and include links to where that object can be accessed - either local links to files on the site, or remote links to the appropriates page on an e-retailer or other websites where the media item can be found.
-
Media pages can represent any media object for any purpose. In addition to documentation or images, this could also include project deliverables, such as videos produced, books published, etc.
-
Whether a landing page describes a project, brand, or showroom is determined by which tag is used to mark it: #ch-proj-foo, #ch-brand-foo, or #ch-showroom-foo.
-
Each landing page requires a globally unique id-tag which is used to link the media pages and log pages to it. This means, for example, that when project ogg produces puppet videos, they cannot be delivered to a brand called ogg. That’s why the brand for ogg videos is called cavetv.
-
Landing pages are stored in hugo’s content tree under content/projects, content/showrooms, and content/showrooms/showroom_name/brand_name, as appropriate. So the landing page for project frank is stored in content/projects/frank/_index.md, while the cavetv brand landing page is in content/showrooms/videos/cavetv/_index.md.
-
Log entries are stored in the logs/ folder inside the folder of the landing page to which they’ve been assigned. The filename of a log file is the timestamp at which it was created.
-
This naming convention will be retroactively applied to the Obisidian source files as well, which will allow us to eliminate the timestamps database completely.
-
It also allows the title (which will be encoded as “Title: Foo bar ba” within the file) of a log entry to be changed without breaking the historical identity chain of the entry for git.
-
Artifact entries are stored in the artifacts/ folder under the landing page to which they’ve been assigned. So episode 11 of the cavetv brand is described in content/showrooms/videos/cavetv/artifacts/ep-011.md.
Ontology Refactor Execution Plan
0. Create git branches
1. Rename #ch-post to #ch-log in Obsidian content
2. Update Shadowmaker to recognize #ch-log
3. Update Hugo template logic (if any) that relied on old tag
4. Rename #ch-article to #ch-artifact in Obsidian content
5. Update Shadowmaker to recognize #ch-artifact
6. Modify Hugo layout to reflect new artifact locations
7. Introduce #ch-proj-, #ch-brand-, #ch-showroom-* naming convention
9. Verify and restructure folder layout under Hugo
11. Update Shadowmaker to handle timestamp-based filenames
12. Update Hugo templates for logs to use Title: field
13. Create a demonstration note for each of the three note types
14. Document ontology in README.md or system docs