summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-04-15 22:05:38 +0200
committerDanilo M. <danix@danix.xyz>2026-04-15 22:05:38 +0200
commitd32ef68eabe6fb8d044d936d2e59909cd613920d (patch)
treec7f7794fd2d97821ba944bc9856da73e75a51f70
parent134d00e5bd0f15113e256c8446931d830985fbf4 (diff)
downloaddanixxyz-d32ef68eabe6fb8d044d936d2e59909cd613920d.tar.gz
danixxyz-d32ef68eabe6fb8d044d936d2e59909cd613920d.zip
Implement taxonomy system for tags and categories
- Enable tags and categories taxonomies in hugo.toml - Create taxonomy/list.html for archive pages (/tags, /categories) - Create taxonomy/term.html for individual term pages (/tags/example) - Add quote shortcode for quote-type articles - Both templates reuse article-list-item partial for consistent styling Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
-rw-r--r--hugo.toml5
-rw-r--r--themes/danix-xyz-hacker/layouts/shortcodes/quote.html15
-rw-r--r--themes/danix-xyz-hacker/layouts/taxonomy/list.html31
-rw-r--r--themes/danix-xyz-hacker/layouts/taxonomy/term.html38
4 files changed, 89 insertions, 0 deletions
diff --git a/hugo.toml b/hugo.toml
index a3970ce..f5019c0 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -77,6 +77,11 @@ enableRobotsTXT = true
name = "legal"
weight = 4
+# Taxonomies
+[taxonomies]
+ tag = "tags"
+ category = "categories"
+
# Theme parameters
[params]
siteName = "danix.xyz"
diff --git a/themes/danix-xyz-hacker/layouts/shortcodes/quote.html b/themes/danix-xyz-hacker/layouts/shortcodes/quote.html
new file mode 100644
index 0000000..1ed5c3c
--- /dev/null
+++ b/themes/danix-xyz-hacker/layouts/shortcodes/quote.html
@@ -0,0 +1,15 @@
+{{- $source := .Get "source" -}}
+{{- $src := .Get "src" -}}
+
+<blockquote class="my-8 pl-6 border-l-4 border-accent/50 italic text-text-dim">
+ <p class="text-lg">{{ .Inner }}</p>
+ {{- if $source -}}
+ <footer class="mt-4 text-sm not-italic text-text-dim">
+ {{- if $src -}}
+ — <a href="{{ $src }}" class="text-accent hover:underline">{{ $source }}</a>
+ {{- else -}}
+ — {{ $source }}
+ {{- end -}}
+ </footer>
+ {{- end -}}
+</blockquote>
diff --git a/themes/danix-xyz-hacker/layouts/taxonomy/list.html b/themes/danix-xyz-hacker/layouts/taxonomy/list.html
new file mode 100644
index 0000000..fd4b5d9
--- /dev/null
+++ b/themes/danix-xyz-hacker/layouts/taxonomy/list.html
@@ -0,0 +1,31 @@
+{{ define "main" }}
+<div class="mx-auto px-4 py-12 max-w-4xl">
+ <!-- Page title with taxonomy name -->
+ <h1 class="text-4xl md:text-5xl font-bold text-accent mb-12">
+ {{ i18n .Data.Plural }}
+ </h1>
+
+ <!-- Articles list -->
+ <div class="space-y-2 max-w-2xl">
+ {{ $pinned := where .Pages "Params.pinned" true }}
+ {{ $unpinned := where .Pages "Params.pinned" false }}
+
+ <!-- Pinned posts first -->
+ {{ range (sort $pinned "Date" "desc") }}
+ {{ partial "article-list-item.html" . }}
+ {{ end }}
+
+ <!-- Regular posts -->
+ {{ range (sort $unpinned "Date" "desc") }}
+ {{ partial "article-list-item.html" . }}
+ {{ end }}
+
+ <!-- Empty state -->
+ {{ if eq (len .Pages) 0 }}
+ <div class="py-12 text-center text-text-dim">
+ {{ i18n "noRelated" }}
+ </div>
+ {{ end }}
+ </div>
+</div>
+{{ end }}
diff --git a/themes/danix-xyz-hacker/layouts/taxonomy/term.html b/themes/danix-xyz-hacker/layouts/taxonomy/term.html
new file mode 100644
index 0000000..5353715
--- /dev/null
+++ b/themes/danix-xyz-hacker/layouts/taxonomy/term.html
@@ -0,0 +1,38 @@
+{{ define "main" }}
+<div class="mx-auto px-4 py-12 max-w-4xl">
+ <!-- Page title with taxonomy type -->
+ <h1 class="text-4xl md:text-5xl font-bold text-accent mb-2">
+ {{ i18n .Data.Singular }}
+ </h1>
+
+ <!-- Current term heading -->
+ <p class="text-lg text-text-dim mb-12">
+ <span class="inline-flex items-center px-3 py-1 rounded text-sm font-medium border border-accent/30 text-accent">
+ {{ .Title }}
+ </span>
+ </p>
+
+ <!-- Articles list -->
+ <div class="space-y-2 max-w-2xl">
+ {{ $pinned := where .Pages "Params.pinned" true }}
+ {{ $unpinned := where .Pages "Params.pinned" false }}
+
+ <!-- Pinned posts first -->
+ {{ range (sort $pinned "Date" "desc") }}
+ {{ partial "article-list-item.html" . }}
+ {{ end }}
+
+ <!-- Regular posts -->
+ {{ range (sort $unpinned "Date" "desc") }}
+ {{ partial "article-list-item.html" . }}
+ {{ end }}
+
+ <!-- Empty state -->
+ {{ if eq (len .Pages) 0 }}
+ <div class="py-12 text-center text-text-dim">
+ {{ i18n "noRelated" }}
+ </div>
+ {{ end }}
+ </div>
+</div>
+{{ end }}