Files
markusgraf_ch/docs/TAXONOMIES.md
T
Markus GrafandClaude d36a18d28b feat: initialize Hugo static site with Bootstrap 5.x
Initialize minimal Hugo site structure with Bootstrap 5.3.2 integration for
markusgraf.ch conversion. Implements OpenSpec proposal add-minimal-hugo-site.

Features:
- Hugo project structure with standard directories
- Base layout template (baseof.html) with Bootstrap 5.3.2 via CDN
- Homepage (index.html) and single page (single.html) templates
- Reusable partials: header, footer, navigation
- Responsive Bootstrap grid layout
- Mobile-first design with semantic HTML5
- Valid HTML output with basic accessibility features
- Taxonomies disabled for minimal site (see docs/TAXONOMIES.md)

Documentation:
- IMPLEMENTATION_SUMMARY.md - Complete implementation guide
- docs/TAXONOMIES.md - Guide for re-enabling categories/tags
- static/README.md - Guide for placing static assets

Configuration:
- hugo.toml configured for markusgraf.ch
- .gitignore for Hugo build artifacts

All 24 tasks from OpenSpec proposal completed successfully.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 10:25:11 +01:00

225 lines
5.2 KiB
Markdown

# Hugo Taxonomies Guide
## Current Status
Taxonomies (categories and tags) are **currently disabled** in this Hugo site to keep it minimal.
## What Are Taxonomies?
Hugo taxonomies are classification systems for your content:
- **Categories** - Broad groupings (e.g., "Technology", "Personal", "Projects")
- **Tags** - Specific keywords (e.g., "golang", "web-development", "tutorial")
They're useful for blogs and content-heavy sites where visitors need to filter and find related content.
## Why Are They Disabled?
For a minimal personal website without a blog, taxonomies add unnecessary complexity:
- Creates extra pages (`/categories/`, `/tags/`) that aren't used
- Requires additional template files
- Generates warning messages during builds
## How to Re-enable Taxonomies
When you're ready to add a blog or need content categorization:
### Step 1: Enable Taxonomies in Configuration
Edit `hugo.toml` and **remove** or **comment out** this line:
```toml
# Remove this line:
disableKinds = ['taxonomy', 'term']
```
Or comment it out to keep for reference:
```toml
# Taxonomies disabled for minimal site - uncomment to enable:
# disableKinds = ['taxonomy', 'term']
```
### Step 2: Create Taxonomy Templates
Create two template files in `layouts/_default/`:
#### `layouts/_default/taxonomy.html`
This template displays all content items for a single category or tag.
```html
{{ define "main" }}
<div class="container">
<div class="row">
<div class="col-lg-8 offset-lg-2">
<header class="mt-5 mb-4">
<h1 class="display-4">{{ .Title }}</h1>
<p class="lead text-muted">{{ .Data.Plural }}: {{ len .Pages }} {{ if eq (len .Pages) 1 }}item{{ else }}items{{ end }}</p>
</header>
<div class="list-group">
{{ range .Pages }}
<a href="{{ .RelPermalink }}" class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">{{ .Title }}</h5>
<small class="text-muted">{{ .Date.Format "Jan 2, 2006" }}</small>
</div>
{{ if .Description }}
<p class="mb-1">{{ .Description }}</p>
{{ end }}
</a>
{{ end }}
</div>
</div>
</div>
</div>
{{ end }}
```
#### `layouts/_default/terms.html`
This template lists all available categories or all available tags.
```html
{{ define "main" }}
<div class="container">
<div class="row">
<div class="col-lg-8 offset-lg-2">
<header class="mt-5 mb-4">
<h1 class="display-4">{{ .Title }}</h1>
<p class="lead text-muted">Browse all {{ .Data.Plural | lower }}</p>
</header>
<div class="row">
{{ range .Pages }}
<div class="col-md-6 mb-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h5>
<p class="card-text text-muted">{{ len .Pages }} {{ if eq (len .Pages) 1 }}post{{ else }}posts{{ end }}</p>
</div>
</div>
</div>
{{ end }}
</div>
</div>
</div>
</div>
{{ end }}
```
### Step 3: Add Taxonomies to Content
Add categories and tags to your content front matter:
```markdown
---
title: "My Blog Post"
date: 2024-10-27
categories:
- Technology
- Web Development
tags:
- hugo
- golang
- static-sites
---
Your content here...
```
### Step 4: Optional - Configure Menu Links
Add taxonomy pages to your navigation in `hugo.toml`:
```toml
[menu]
[[menu.main]]
name = "Categories"
url = "/categories/"
weight = 10
[[menu.main]]
name = "Tags"
url = "/tags/"
weight = 20
```
### Step 5: Optional - Customize Taxonomy Names
If you want different taxonomy names (e.g., "Topics" instead of "Categories"):
```toml
[taxonomies]
topic = "topics"
tag = "tags"
```
Then use in front matter:
```markdown
---
topics:
- Web Development
tags:
- hugo
---
```
## Testing After Re-enabling
After re-enabling and creating templates:
```bash
# Build the site
hugo
# Start the server
hugo server -D
# Visit in browser:
# http://localhost:1313/categories/
# http://localhost:1313/tags/
# http://localhost:1313/categories/technology/
# http://localhost:1313/tags/hugo/
```
You should see:
- No warnings in build output
- Category and tag listing pages
- Individual category/tag pages showing filtered content
## Custom Taxonomies
Hugo supports custom taxonomies beyond categories and tags:
```toml
[taxonomies]
category = "categories"
tag = "tags"
series = "series" # For blog post series
author = "authors" # For multi-author blogs
project = "projects" # For portfolio sites
```
Use in content:
```markdown
---
series: ["Getting Started with Hugo"]
authors: ["Markus Graf"]
projects: ["Personal Website"]
---
```
## References
- [Hugo Taxonomies Documentation](https://gohugo.io/content-management/taxonomies/)
- [Hugo Template Lookup Order](https://gohugo.io/templates/lookup-order/)
- Bootstrap Components used: Cards, List Groups (see [Bootstrap Docs](https://getbootstrap.com/docs/5.3/))
## See Also
- `IMPLEMENTATION_SUMMARY.md` - Overview of the Hugo site structure
- `hugo.toml` - Main configuration file
- `layouts/_default/` - Template directory