From d9ba2f7bbe07290b017ec3e0694dad1f0d8c9924 Mon Sep 17 00:00:00 2001 From: karim Date: Thu, 4 Jun 2026 11:56:35 +0200 Subject: [PATCH] =?UTF-8?q?feature:=20Wiki=20=E2=80=94=20verlinktes=20Werk?= =?UTF-8?q?stattwissen=20mit=20Gruppen-Navigation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Hugo-Sektion /wiki als 'effektives Wiki' im KISS-Sinn: - Zweispaltiges Layout: gruppierte Seitenleiste (nach Frontmatter 'group') mit Live-Filter + Inhalt mit TOC und 'zuletzt bearbeitet'/bearbeiten-Link - Übersichtsseite gruppiert alle Einträge; WIKI im Hauptmenü - Seiten ohne group landen unter 'Allgemein' (robust) - Start-Inhalte: Meta-Seite (wie es funktioniert), Typus (→ Bibliothek), Dateiablage/Benennung; Archetype setzt group/summary - Bewusst dateibasiert: jede Seite verlinkt zur Bearbeitung ins Repo Co-Authored-By: Claude Opus 4.8 --- archetypes/wiki.md | 6 +++ assets/css/custom.css | 32 +++++++++++++++ content/wiki/_index.md | 8 ++++ content/wiki/dateiablage.md | 25 ++++++++++++ content/wiki/typus.md | 11 +++++ content/wiki/wie-dieses-wiki-funktioniert.md | 24 +++++++++++ hugo.yaml | 3 ++ layouts/_partials/wiki-nav.html | 41 +++++++++++++++++++ layouts/wiki/list.html | 42 ++++++++++++++++++++ layouts/wiki/single.html | 33 +++++++++++++++ 10 files changed, 225 insertions(+) create mode 100644 archetypes/wiki.md create mode 100644 content/wiki/_index.md create mode 100644 content/wiki/dateiablage.md create mode 100644 content/wiki/typus.md create mode 100644 content/wiki/wie-dieses-wiki-funktioniert.md create mode 100644 layouts/_partials/wiki-nav.html create mode 100644 layouts/wiki/list.html create mode 100644 layouts/wiki/single.html diff --git a/archetypes/wiki.md b/archetypes/wiki.md new file mode 100644 index 0000000..a5a315b --- /dev/null +++ b/archetypes/wiki.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .File.ContentBaseName `-` ` ` | title }}" +group: "Allgemein" +summary: "" +toc: false +--- diff --git a/assets/css/custom.css b/assets/css/custom.css index e5c0944..c90fdf0 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -719,6 +719,38 @@ a.byline-author:hover, a.journal-author:hover { color: var(--accent); } .dialog-hint { font-size: var(--font-size-small); color: var(--color-text-muted); align-self: center; opacity: 0.7; } .dialog-spacer { flex: 1; } +/* ── Wiki: zweispaltig (Seitenleiste + Inhalt), schlicht ── */ +.wiki { display: grid; grid-template-columns: 220px 1fr; gap: 2.6em; align-items: start; width: 100%; } +@media (max-width: 760px) { .wiki { grid-template-columns: 1fr; gap: 1.4em; } .wiki-side { position: static; } } +.wiki-side { position: sticky; top: 1em; align-self: start; } +.wiki-nav { display: flex; flex-direction: column; gap: 0.35em; font-size: var(--font-size-small); } +.wiki-nav-home { text-decoration: none; color: var(--color-text-primary); font-weight: 600; } +.wiki-nav-home:hover { color: var(--accent); } +.wiki-nav-home.is-current { color: var(--accent); } +.wiki-filter { width: 100%; padding: 0.4em 0.7em; margin: 0.3em 0 0.4em; font: inherit; font-size: var(--font-size-small); + border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-bg-primary); } +.wiki-filter:focus { outline: none; border-color: var(--accent); } +.wiki-nav-title { text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.7rem; color: var(--color-text-muted); margin: 0.8em 0 0.25em; } +.wiki-nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.1em; } +.wiki-nav li a { display: block; text-decoration: none; color: var(--color-text-muted); + padding: 0.18em 0 0.18em 0.7em; border-left: 2px solid transparent; } +.wiki-nav li a:hover { color: var(--accent); } +.wiki-nav li a.is-current { color: var(--color-text-primary); font-weight: 600; border-left-color: var(--accent); } + +.wiki-page { min-width: 0; } +.wiki-rubric { text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.72rem; color: var(--color-text-muted); margin: 0 0 0.2em; } +.wiki-head h1 { margin: 0 0 0.2em; } +.wiki-index { margin-top: var(--spacing-md); } +.wiki-group { margin-bottom: var(--spacing-md); } +.wiki-group h2 { font-family: var(--font-family-serif); font-size: 1.1rem; margin: 0 0 0.4em; } +.wiki-group ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4em; } +.wiki-group li a { font-weight: 600; text-decoration: none; } +.wiki-group li a:hover { color: var(--accent); } +.wiki-foot { margin-top: var(--spacing-lg); padding-top: var(--spacing-sm); border-top: 1px solid var(--color-border); + display: flex; gap: 1.2em; flex-wrap: wrap; font-size: var(--font-size-small); color: var(--color-text-muted); } +.wiki-foot a { color: var(--color-text-muted); text-decoration: none; } +.wiki-foot a:hover { color: var(--accent); } + /* ------------------------------------------------------------------------ Journal entries — three Republik-style layouts (set in front matter via `layout: image|icon|text`). Every entry is a full-bleed coloured diff --git a/content/wiki/_index.md b/content/wiki/_index.md new file mode 100644 index 0000000..e9d356f --- /dev/null +++ b/content/wiki/_index.md @@ -0,0 +1,8 @@ +--- +title: "Wiki" +summary: "Das Werkstattwissen des Büros — verlinkte Notizen, die mit der Praxis wachsen." +--- + +Die [Bibliothek](/library/) sammelt fertige Texte; das Wiki sammelt das Dazwischen — Begriffe, Handgriffe, Konventionen, die man im Alltag nachschlägt. Es ist bewusst unfertig: Eine Seite darf kurz sein, Lücken haben, sich später widersprechen — solange sie wächst, statt in einer Schublade zu verschwinden. + +Links findest du alle Seiten nach Bereich gruppiert; das Feld oben filtert sie. Wer einen Eintrag ergänzen oder neu anlegen will, tut das im Redaktions-Editor oder direkt im Repository. diff --git a/content/wiki/dateiablage.md b/content/wiki/dateiablage.md new file mode 100644 index 0000000..c010bb8 --- /dev/null +++ b/content/wiki/dateiablage.md @@ -0,0 +1,25 @@ +--- +title: "Dateiablage & Benennung" +group: "Konventionen" +summary: "Wie Projektdateien heissen, damit man sie in fünf Jahren noch findet." +toc: true +--- + +Eine Konvention ist nur dann eine, wenn sich alle daran halten. Dies ist ein Vorschlag, kein Gesetz — verbessern erwünscht. + +## Projektordner + +Jedes Projekt liegt unter `Projekte/JJJJ_Nummer_Kurzname/`, z. B. `2026_014_Mehrfamilienhaus-Seeblick/`. Das Jahr vorne sortiert chronologisch, die Nummer ist eindeutig, der Kurzname macht es lesbar. + +## Dateinamen + +`JJMMTT_Projekt_Inhalt_vNN` — Datum zuerst (sortiert sich selbst), dann was es ist, dann die Version: + +- `260604_Seeblick_Grundriss-EG_v03.pdf` +- `260604_Seeblick_Kostenschaetzung_v01.xlsx` + +Keine Umlaute, keine Leerzeichen, keine Sonderzeichen — Bindestrich trennt Wörter, Unterstrich trennt Felder. + +## Versionen + +`vNN` zählt hoch, nichts wird überschrieben. Die jeweils gültige Fassung bekommt keinen Sonderstatus im Namen — das erledigt das Datum. Wer mit Git arbeitet, lässt die Versionsnummer weg und vertraut der Historie. diff --git a/content/wiki/typus.md b/content/wiki/typus.md new file mode 100644 index 0000000..e30ac8f --- /dev/null +++ b/content/wiki/typus.md @@ -0,0 +1,11 @@ +--- +title: "Typus" +group: "Begriffe" +summary: "Ein Prinzip, das viele Werke begründet — nicht die Vorlage zum Kopieren." +--- + +Der **Typus** ist nicht das fertige Vorbild, sondern das zugrunde liegende Prinzip einer Bauaufgabe: das, was eine Markthalle zur Markthalle macht, unabhängig von Ort, Material und Epoche. Vom *Modell* unterscheidet er sich darin, dass man ihn nicht kopiert, sondern gegen ihn entwirft. + +Fürs Büro ist der Typus ein Werkzeug der Ökonomie: Wer den Typus einer Aufgabe kennt, beginnt nicht bei null, sondern variiert bewusst — und kann die eigenen Entscheidungen begründen. + +Ausführlicher in der Bibliothek: [Typus und Modell](/library/theorie/muster-typologie-fussnoten/). diff --git a/content/wiki/wie-dieses-wiki-funktioniert.md b/content/wiki/wie-dieses-wiki-funktioniert.md new file mode 100644 index 0000000..9e33347 --- /dev/null +++ b/content/wiki/wie-dieses-wiki-funktioniert.md @@ -0,0 +1,24 @@ +--- +title: "Wie dieses Wiki funktioniert" +group: "Werkstatt" +summary: "Kleine Seiten, klare Titel, viele Verweise." +toc: true +--- + +Dieses Wiki ist kein Lexikon, das jemand fertigstellt, sondern ein gemeinsames Gedächtnis, das beim Arbeiten entsteht. Ein paar Konventionen halten es übersichtlich. + +## Eine Seite, ein Begriff + +Lieber viele kleine Seiten als wenige grosse. Eine Seite behandelt einen Begriff, einen Handgriff, eine Entscheidung. Passt etwas nicht mehr auf eine Bildschirmseite, wird es meist zwei Themen sein. + +## Verweise + +Seiten verweisen mit gewöhnlichen Markdown-Links aufeinander — `[Typus](/wiki/typus/)` — und gerne auch in die [Bibliothek](/library/), wenn ein Gedanke dort ausführlicher steht. Verlinken ist die eigentliche Arbeit: Eine Notiz, auf die nichts zeigt, findet niemand. + +## Gruppen + +Das Feld `group` im Frontmatter sortiert eine Seite in die Navigation links — z. B. `group: "Begriffe"`. Seiten ohne Gruppe landen unter „Allgemein". Mehr Struktur braucht es selten. + +## Bearbeiten + +Jede Seite hat unten einen **bearbeiten**-Link, der direkt ins Repository führt. Wer lieber im Redaktions-Editor arbeitet, legt eine Seite vom Typ *Wiki* an und füllt Titel, Gruppe und Text. diff --git a/hugo.yaml b/hugo.yaml index 1000713..016afbc 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -69,6 +69,9 @@ menus: - name: LIBRARY pageRef: /library weight: 20 + - name: WIKI + pageRef: /wiki + weight: 25 - name: MANIFEST pageRef: /manifest weight: 30 diff --git a/layouts/_partials/wiki-nav.html b/layouts/_partials/wiki-nav.html new file mode 100644 index 0000000..e2d2e90 --- /dev/null +++ b/layouts/_partials/wiki-nav.html @@ -0,0 +1,41 @@ +{{- /* Wiki-Seitenleiste: alle Wiki-Seiten nach `group` gruppiert, mit Filter. + Seiten ohne `group` landen unter „Allgemein“. */ -}} +{{- $cur := .RelPermalink -}} +{{- $pages := where site.RegularPages "Section" "wiki" -}} +{{- $groups := dict -}} +{{- range $pages -}} + {{- $g := .Params.group | default "Allgemein" -}} + {{- $existing := index $groups $g | default slice -}} + {{- $groups = merge $groups (dict $g ($existing | append .)) -}} +{{- end -}} + + diff --git a/layouts/wiki/list.html b/layouts/wiki/list.html new file mode 100644 index 0000000..263371c --- /dev/null +++ b/layouts/wiki/list.html @@ -0,0 +1,42 @@ +{{ define "main" }} +
+ + +
+
+

Wiki

+

{{ .Title }}

+
+ +
{{ .Content }}
+ + {{ $pages := where site.RegularPages "Section" "wiki" }} + {{ $groups := dict }} + {{ range $pages }} + {{ $g := .Params.group | default "Allgemein" }} + {{ $existing := index $groups $g | default slice }} + {{ $groups = merge $groups (dict $g ($existing | append .)) }} + {{ end }} + + {{ if $pages }} +
+ {{ range $g, $ps := $groups }} +
+

{{ $g }}

+
    + {{ range sort $ps "Title" }} +
  • + {{ .LinkTitle }} + {{ with .Params.summary }} — {{ . }}{{ end }} +
  • + {{ end }} +
+
+ {{ end }} +
+ {{ else }} +

Noch keine Einträge — der erste entsteht im Redaktions-Editor.

+ {{ end }} +
+
+{{ end }} diff --git a/layouts/wiki/single.html b/layouts/wiki/single.html new file mode 100644 index 0000000..9a35e87 --- /dev/null +++ b/layouts/wiki/single.html @@ -0,0 +1,33 @@ +{{ define "main" }} +
+ + +
+
+

Wiki{{ with .Params.group }} · {{ . }}{{ end }}

+

{{ .Title }}

+ {{ with .Params.summary }}

{{ . }}

{{ end }} +
+ + {{ $hasToC := .Params.toc | default false }} + {{ $headers := findRE " + Inhalt +
{{ .TableOfContents }}
+ + {{ end }} + +
+ {{ .Content }} +
+ + +
+
+{{ end }}