LabCodeHub öffentliche Ansicht
Anmelden
Küpper / Quildrop öffentlich

fix: update quilldrop doku

R Rüdiger Küpper <rpr@9it.de> committete am 19.02.2026 02:33
77d8f24773dafbfa40bc7a21d1211af10546da4e
2 geänderte Datei(en) +148 −47
Kontextzeilen: 0 1 2 3 10
geändert README.md
+74 −21 Datei ansehen
@@ -68,22 +68,23 @@ QuillDrop nutzt [Goldmark](https://github.com/yuin/goldmark) als Markdown-Engine
68 68
- **Hugo-Kompatibilität** - `{{</* rawhtml */>}}` Shortcodes werden automatisch verarbeitet
69 69
70 70
### Responsives Design mit Dark/Light Theme
71 71
72 72
Das mitgelieferte Theme bietet:
73 73
74 74
- **Dark Mode als Default** mit einem hellen Alternativ-Theme
75 75
- **Theme Toggle** mit localStorage-Persistenz (bleibt nach Reload erhalten)
76 76
- **Futuristisches Design** - Dunkle Hintergrunde, Cyan-Akzente, subtile Glow-Effekte
77 77
- **Responsive Layout** - Mobile-first, optimiert für alle Bildschirmgrößen
78 -
- **Hamburger-Navigation** auf mobilen Geräten mit Fullscreen-Overlay
79 -
- **Dropdown-Menus** für verschachtelte Navigation
78 +
- **Hamburger-Navigation** auf mobilen Geräten mit Fullscreen-Overlay und eigenem Stacking Context
79 +
- **Dropdown-Menus** für verschachtelte Navigation (Touch-optimiert auf Mobile)
80 +
- **Integrierte Suche** — Lupe in der Navbar mit Ctrl+K Shortcut
80 81
- **Typographie** - Inter als Textfont, JetBrains Mono für Code und Metadaten
81 82
82 83
### Navigation und Menü
83 84
84 85
Das Navigationsmenü wird vollständig über die `config.yaml` konfiguriert und unterstützt verschachtelte Dropdown-Menüs:
85 86
86 87
```yaml
87 88
menu:
88 89
  - label: "Home"
89 90
    url: "/"
@@ -108,43 +109,84 @@ Neue Menüpunkte und Untermenüs können jederzeit durch einfaches Erweitern der
108 109
Die Startseite zeigt eine konfigurierbare Anzahl von Posts pro Seite (Standard: 5). Die Pagination bietet:
109 110
110 111
- **Intelligente Seitennummerierung** - Zeigt erste und letzte Seite, plus ein Fenster um die aktuelle Seite herum
111 112
- **Ellipsis** bei vielen Seiten (1 ... 10 11 **12** 13 14 ... 23)
112 113
- **Neuere/Ältere Buttons** für schnelle Navigation
113 114
- **Pretty URLs** - `/page/2`, `/page/3`, etc.
114 115
- SEO-freundlich: `/page/1` wird automatisch auf `/` umgeleitet (301)
115 116
116 117
### Tags und Kategorien
117 118
118 -
- **Tag-Übersicht** unter `/tags` mit Anzahl der Posts pro Tag
119 -
- **Tag-Seiten** unter `/tags/kubernetes` mit allen Posts eines Tags
120 -
- **Tag-Badges** auf Post-Cards und Einzelseiten
119 +
QuillDrop unterstützt sowohl Tags als auch Kategorien zur Strukturierung von Inhalten:
120 +
121 +
- **Tag-Übersicht** unter `/tags/` mit Anzahl der Posts pro Tag
122 +
- **Tag-Seiten** unter `/tags/kubernetes/` mit allen Posts eines Tags
123 +
- **Kategorie-Übersicht** unter `/categories/` mit Anzahl der Posts pro Kategorie
124 +
- **Kategorie-Seiten** unter `/categories/technik/` mit allen Posts einer Kategorie
125 +
- **Tag- und Kategorie-Badges** auf Post-Cards und Einzelseiten
126 +
- Tags und Kategorien werden aus dem YAML-Frontmatter (`tags`, `categories`) ausgelesen
127 +
128 +
### Volltextsuche
129 +
130 +
QuillDrop enthält eine integrierte Client-seitige Suche, die komplett ohne Backend auskommt:
131 +
132 +
- **Suchindex** — Beim Generieren wird eine `search-index.json` mit allen Posts erstellt
133 +
- **Lazy Loading** — Der Suchindex wird erst beim ersten Öffnen der Suche geladen
134 +
- **Multi-Term-Suche** — Mehrere Suchbegriffe werden mit UND verknüpft
135 +
- **Felder** — Durchsucht Titel, Vorschau, Tags und Kategorien
136 +
- **Keyboard-Shortcut** — `Ctrl+K` / `Cmd+K` öffnet die Suche
137 +
- **Lupe in der Navbar** — Klick auf das Such-Icon öffnet das Suchfeld
138 +
- **Debounce** — Suchergebnisse erscheinen nach 200ms Tippverzögerung
139 +
- **Maximal 8 Treffer** mit Highlighting der Suchbegriffe
140 +
- **Escape** oder Klick außerhalb schließt die Suche
141 +
- Kein externer Dienst, kein Framework — reines Vanilla JavaScript
142 +
143 +
### Artikel-Navigation
144 +
145 +
Am Ende jedes Blog-Posts wird eine Navigation zum vorherigen und nächsten Artikel angezeigt:
146 +
147 +
- **Neuerer Artikel** (← links) — Verlinkt zum chronologisch neueren Post
148 +
- **Älterer Artikel** (→ rechts) — Verlinkt zum chronologisch älteren Post
149 +
- Beim neuesten Artikel wird nur "Älterer Artikel" angezeigt
150 +
- Beim ältesten Artikel wird nur "Neuerer Artikel" angezeigt
151 +
- Zeigt jeweils den Titel des verlinkten Artikels an
152 +
153 +
### Inhaltsverzeichnis (Table of Contents)
154 +
155 +
Posts können ein automatisch generiertes Inhaltsverzeichnis aktivieren:
156 +
157 +
- Aktivierung über `toc: true` im Frontmatter
158 +
- Unterstützt **H1, H2 und H3** Überschriften
159 +
- **Relative Einrückung** — Das TOC erkennt die minimale Heading-Ebene und rückt relativ dazu ein
160 +
- Automatische Anchor-Links zu den jeweiligen Überschriften
161 +
- Wird client-seitig generiert für schnelle Seitenladezeit
121 162
122 163
### Statische Seiten
123 164
124 165
Neben Blog-Posts unterstützt QuillDrop statische Seiten für:
125 166
126 167
- Impressum, Datenschutzerklärung
127 168
- Über mich / About
128 169
- Projektseiten (mit Unterseiten)
129 170
- Beliebige weitere Seiten
130 171
131 172
Seiten werden als Markdown-Dateien im `sites/`-Verzeichnis abgelegt. Verschachtelte Verzeichnisse werden automatisch erkannt - z.B. wird `sites/projekte/vm-tracker/index.md` unter `/sites/projekte/vm-tracker` erreichbar.
132 173
133 174
### RSS Feed
134 175
135 -
Automatisch generierter RSS 2.0 Feed unter `/feed.xml` mit:
176 +
Automatisch generierter RSS 2.0 Feed unter `/index.xml` mit:
136 177
137 178
- Den letzten 20 Posts
138 179
- Titel, Link, Vorschau und Veröffentlichungsdatum
139 180
- RSS-Autodiscovery im HTML-Head
140 181
- RSS-Icon in der Navigation
182 +
- URL `/index.xml` für Kompatibilität mit bestehenden Blog-Setups
141 183
142 184
### Cover-Bilder
143 185
144 186
Posts können ein Cover-Bild definieren, das sowohl auf der Startseite (als Post-Card) als auch auf der Einzelansicht angezeigt wird:
145 187
146 188
- **21:9 Aspect Ratio** auf Post-Cards mit Zoom-on-Hover Effekt
147 189
- **Volle Breite** auf der Einzelpost-Seite
148 190
- **Lazy Loading** für optimale Performance
149 191
- **Fallback** von `cover` auf `featureImage`
150 192
@@ -160,55 +202,61 @@ quilldrop/
160 202
│   ├── 2025-11-06-mein-post.md
161 203
│   └── ...
162 204
├── sites/                           # Statische Seiten
163 205
│   ├── ueber-mich.md
164 206
│   ├── impressum.md
165 207
│   └── projekte/
166 208
│       └── mein-projekt/
167 209
│           └── index.md
168 210
├── static/                          # Statische Assets
169 211
│   ├── css/style.css
170 -
│   ├── js/theme.js
212 +
│   ├── js/
213 +
│   │   ├── theme.js                 # Dark/Light Toggle + TOC Generator
214 +
│   │   └── search.js                # Client-seitige Volltextsuche
171 215
│   └── images/
172 216
├── internal/
173 217
│   ├── config/config.go             # YAML Config Loader
174 218
│   ├── content/
175 -
│   │   ├── post.go                  # Post Struct + FlexTime
219 +
│   │   ├── post.go                  # Post Struct + FlexTime + Tags/Categories
176 220
│   │   ├── parser.go                # Markdown + Frontmatter Parser
177 221
│   │   └── page.go                  # Statische Seiten Parser
178 222
│   ├── server/server.go             # HTTP Server
179 -
│   ├── generator/generator.go       # Static Site Generator
223 +
│   ├── generator/
224 +
│   │   ├── generator.go             # Static Site Generator
225 +
│   │   └── search.go                # Search-Index Generator (JSON)
180 226
│   └── templates/
181 227
│       ├── render.go                # Template Engine + Functions
182 228
│       ├── rss.go                   # RSS Feed Generator
183 -
│       ├── base.html                # Base Layout
229 +
│       ├── base.html                # Base Layout + Navbar + Suche
184 230
│       ├── home.html                # Homepage + Pagination
185 -
│       ├── post.html                # Einzelner Post
231 +
│       ├── post.html                # Einzelner Post + Prev/Next Navigation
186 232
│       ├── page.html                # Statische Seite
187 233
│       ├── tags.html                # Tag-Übersicht
188 -
│       └── tag.html                 # Tag-Seite
234 +
│       ├── tag.html                 # Tag-Seite
235 +
│       ├── categories.html          # Kategorie-Übersicht
236 +
│       └── category.html            # Kategorie-Seite
189 237
└── output/                          # Generierte statische Dateien
190 238
```
191 239
192 240
### Technologie-Stack
193 241
194 242
| Komponente | Technologie |
195 243
|-----------|-------------|
196 244
| Sprache | Go (Standard Library + minimale Dependencies) |
197 245
| HTTP Server | `net/http` (Go Standard Library) |
198 246
| Templates | `html/template` mit `embed.FS` |
199 247
| Markdown | Goldmark + GFM + Emoji + Chroma |
200 248
| Konfiguration | YAML via `gopkg.in/yaml.v3` |
201 249
| Syntax Highlighting | Chroma (Dracula Theme) |
202 250
| Fonts | Inter + JetBrains Mono (Google Fonts) |
203 251
| CSS | Vanilla CSS mit Custom Properties |
204 -
| JavaScript | Vanilla JS (kein Framework) |
252 +
| JavaScript | Vanilla JS — Theme Toggle, Suche, TOC (kein Framework) |
205 253
206 254
### Dependencies
207 255
208 256
QuillDrop hat bewusst minimale Abhängigkeiten - **kein Web-Framework**, **kein CSS-Framework**, **kein JS-Framework**:
209 257
210 258
- `github.com/yuin/goldmark` - Markdown Parser (CommonMark-konform)
211 259
- `github.com/yuin/goldmark-emoji` - Emoji Shortcodes
212 260
- `github.com/yuin/goldmark-highlighting/v2` - Syntax Highlighting
213 261
- `github.com/alecthomas/chroma/v2` - Syntax Highlighting Engine
214 262
- `gopkg.in/yaml.v3` - YAML Parser
@@ -317,37 +365,42 @@ Dann im Browser: [http://localhost:8080](http://localhost:8080)
317 365
./quilldrop generate
318 366
319 367
# Generierte Dateien befinden sich in output/
320 368
ls output/
321 369
```
322 370
323 371
Die generierten Dateien im `output/`-Verzeichnis können direkt auf einen Webserver (Nginx, Apache, Caddy) oder CDN deployed werden.
324 372
325 373
## URL-Schema
326 374
375 +
Alle URLs verwenden konsequent Trailing Slashes, um serverseitige Redirects zu vermeiden:
376 +
327 377
| URL | Beschreibung |
328 378
|-----|-------------|
329 379
| `/` | Startseite (letzte N Posts) |
330 -
| `/page/2` | Seite 2 der Post-Liste |
331 -
| `/posts/2025-11-06-mein-post` | Einzelner Blog-Post |
332 -
| `/tags` | Tag-Übersicht |
333 -
| `/tags/kubernetes` | Posts mit Tag "Kubernetes" |
334 -
| `/sites/ueber-mich` | Statische Seite |
335 -
| `/sites/projekte/vm-tracker` | Verschachtelte Projektseite |
336 -
| `/feed.xml` | RSS Feed |
380 +
| `/page/2/` | Seite 2 der Post-Liste |
381 +
| `/posts/2025-11-06-mein-post/` | Einzelner Blog-Post |
382 +
| `/tags/` | Tag-Übersicht |
383 +
| `/tags/kubernetes/` | Posts mit Tag "Kubernetes" |
384 +
| `/categories/` | Kategorie-Übersicht |
385 +
| `/categories/technik/` | Posts in Kategorie "Technik" |
386 +
| `/sites/ueber-mich/` | Statische Seite |
387 +
| `/sites/projekte/vm-tracker/` | Verschachtelte Projektseite |
388 +
| `/index.xml` | RSS Feed |
389 +
| `/search-index.json` | Suchindex (JSON) |
337 390
| `/static/css/style.css` | Statische Assets |
338 391
| `/images/posts/2025/11/cover.webp` | Bilder |
339 392
340 393
## Warum QuillDrop?
341 394
342 395
- **Keine Datenbank** - Dateisystem als einzige Datenquelle
343 396
- **Keine Build-Pipeline** - Ein `go build` und fertig
344 -
- **Keine JS-Frameworks** - Vanilla JavaScript, unter 90 Zeilen
397 +
- **Keine JS-Frameworks** - Vanilla JavaScript für Theme, Suche und TOC
345 398
- **Minimale Dependencies** - 5 Go-Packages, alle fokussiert auf Markdown
346 399
- **Blitzschnell** - Generiert 100+ Posts in unter 3 Sekunden
347 400
- **Einzelnes Binary** - Templates eingebettet, kein Runtime-Setup
348 401
- **Hugo-kompatibel** - Bestehende Hugo-Posts mit Frontmatter funktionieren
349 402
- **Dual-Mode** - Entwicklung mit Server, Produktion mit Static Generator
350 403
351 404
## Lizenz
352 405
353 406
QuillDrop ist Open Source.
geändert sites/projects/quilldrop/index.md
+74 −26 Datei ansehen
@@ -73,22 +73,23 @@ QuillDrop nutzt [Goldmark](https://github.com/yuin/goldmark) als Markdown-Engine
73 73
- **Hugo-Kompatibilität** - `{{</* rawhtml */>}}` Shortcodes werden automatisch verarbeitet
74 74
75 75
### Responsives Design mit Dark/Light Theme
76 76
77 77
Das mitgelieferte Theme bietet:
78 78
79 79
- **Dark Mode als Default** mit einem hellen Alternativ-Theme
80 80
- **Theme Toggle** mit localStorage-Persistenz (bleibt nach Reload erhalten)
81 81
- **Futuristisches Design** - Dunkle Hintergrunde, Cyan-Akzente, subtile Glow-Effekte
82 82
- **Responsive Layout** - Mobile-first, optimiert für alle Bildschirmgrößen
83 -
- **Hamburger-Navigation** auf mobilen Geräten mit Fullscreen-Overlay
84 -
- **Dropdown-Menus** für verschachtelte Navigation
83 +
- **Hamburger-Navigation** auf mobilen Geräten mit Fullscreen-Overlay und eigenem Stacking Context
84 +
- **Dropdown-Menus** für verschachtelte Navigation (Touch-optimiert auf Mobile)
85 +
- **Integrierte Suche** — Lupe in der Navbar mit Ctrl+K Shortcut
85 86
- **Typographie** - Inter als Textfont, JetBrains Mono für Code und Metadaten
86 87
87 88
### Navigation und Menü
88 89
89 90
Das Navigationsmenü wird vollständig über die `config.yaml` konfiguriert und unterstützt verschachtelte Dropdown-Menüs:
90 91
91 92
```yaml
92 93
menu:
93 94
  - label: "Home"
94 95
    url: "/"
@@ -113,43 +114,84 @@ Neue Menüpunkte und Untermenüs können jederzeit durch einfaches Erweitern der
113 114
Die Startseite zeigt eine konfigurierbare Anzahl von Posts pro Seite (Standard: 5). Die Pagination bietet:
114 115
115 116
- **Intelligente Seitennummerierung** - Zeigt erste und letzte Seite, plus ein Fenster um die aktuelle Seite herum
116 117
- **Ellipsis** bei vielen Seiten (1 ... 10 11 **12** 13 14 ... 23)
117 118
- **Neuere/Ältere Buttons** für schnelle Navigation
118 119
- **Pretty URLs** - `/page/2`, `/page/3`, etc.
119 120
- SEO-freundlich: `/page/1` wird automatisch auf `/` umgeleitet (301)
120 121
121 122
### Tags und Kategorien
122 123
123 -
- **Tag-Übersicht** unter `/tags` mit Anzahl der Posts pro Tag
124 -
- **Tag-Seiten** unter `/tags/kubernetes` mit allen Posts eines Tags
125 -
- **Tag-Badges** auf Post-Cards und Einzelseiten
124 +
QuillDrop unterstützt sowohl Tags als auch Kategorien zur Strukturierung von Inhalten:
125 +
126 +
- **Tag-Übersicht** unter `/tags/` mit Anzahl der Posts pro Tag
127 +
- **Tag-Seiten** unter `/tags/kubernetes/` mit allen Posts eines Tags
128 +
- **Kategorie-Übersicht** unter `/categories/` mit Anzahl der Posts pro Kategorie
129 +
- **Kategorie-Seiten** unter `/categories/technik/` mit allen Posts einer Kategorie
130 +
- **Tag- und Kategorie-Badges** auf Post-Cards und Einzelseiten
131 +
- Tags und Kategorien werden aus dem YAML-Frontmatter (`tags`, `categories`) ausgelesen
132 +
133 +
### Volltextsuche
134 +
135 +
QuillDrop enthält eine integrierte Client-seitige Suche, die komplett ohne Backend auskommt:
136 +
137 +
- **Suchindex** — Beim Generieren wird eine `search-index.json` mit allen Posts erstellt
138 +
- **Lazy Loading** — Der Suchindex wird erst beim ersten Öffnen der Suche geladen
139 +
- **Multi-Term-Suche** — Mehrere Suchbegriffe werden mit UND verknüpft
140 +
- **Felder** — Durchsucht Titel, Vorschau, Tags und Kategorien
141 +
- **Keyboard-Shortcut** — `Ctrl+K` / `Cmd+K` öffnet die Suche
142 +
- **Lupe in der Navbar** — Klick auf das Such-Icon öffnet das Suchfeld
143 +
- **Debounce** — Suchergebnisse erscheinen nach 200ms Tippverzögerung
144 +
- **Maximal 8 Treffer** mit Highlighting der Suchbegriffe
145 +
- **Escape** oder Klick außerhalb schließt die Suche
146 +
- Kein externer Dienst, kein Framework — reines Vanilla JavaScript
147 +
148 +
### Artikel-Navigation
149 +
150 +
Am Ende jedes Blog-Posts wird eine Navigation zum vorherigen und nächsten Artikel angezeigt:
151 +
152 +
- **Neuerer Artikel** (← links) — Verlinkt zum chronologisch neueren Post
153 +
- **Älterer Artikel** (→ rechts) — Verlinkt zum chronologisch älteren Post
154 +
- Beim neuesten Artikel wird nur "Älterer Artikel" angezeigt
155 +
- Beim ältesten Artikel wird nur "Neuerer Artikel" angezeigt
156 +
- Zeigt jeweils den Titel des verlinkten Artikels an
157 +
158 +
### Inhaltsverzeichnis (Table of Contents)
159 +
160 +
Posts können ein automatisch generiertes Inhaltsverzeichnis aktivieren:
161 +
162 +
- Aktivierung über `toc: true` im Frontmatter
163 +
- Unterstützt **H1, H2 und H3** Überschriften
164 +
- **Relative Einrückung** — Das TOC erkennt die minimale Heading-Ebene und rückt relativ dazu ein
165 +
- Automatische Anchor-Links zu den jeweiligen Überschriften
166 +
- Wird client-seitig generiert für schnelle Seitenladezeit
126 167
127 168
### Statische Seiten
128 169
129 170
Neben Blog-Posts unterstützt QuillDrop statische Seiten für:
130 171
131 172
- Impressum, Datenschutzerklärung
132 173
- Über mich / About
133 174
- Projektseiten (mit Unterseiten)
134 175
- Beliebige weitere Seiten
135 176
136 177
Seiten werden als Markdown-Dateien im `sites/`-Verzeichnis abgelegt. Verschachtelte Verzeichnisse werden automatisch erkannt - z.B. wird `sites/projekte/vm-tracker/index.md` unter `/sites/projekte/vm-tracker` erreichbar.
137 178
138 179
### RSS Feed
139 180
140 -
Automatisch generierter RSS 2.0 Feed unter `/feed.xml` mit:
181 +
Automatisch generierter RSS 2.0 Feed unter `/index.xml` mit:
141 182
142 183
- Den letzten 20 Posts
143 184
- Titel, Link, Vorschau und Veröffentlichungsdatum
144 185
- RSS-Autodiscovery im HTML-Head
145 186
- RSS-Icon in der Navigation
187 +
- URL `/index.xml` für Kompatibilität mit bestehenden Blog-Setups
146 188
147 189
### Cover-Bilder
148 190
149 191
Posts können ein Cover-Bild definieren, das sowohl auf der Startseite (als Post-Card) als auch auf der Einzelansicht angezeigt wird:
150 192
151 193
- **21:9 Aspect Ratio** auf Post-Cards mit Zoom-on-Hover Effekt
152 194
- **Volle Breite** auf der Einzelpost-Seite
153 195
- **Lazy Loading** für optimale Performance
154 196
- **Fallback** von `cover` auf `featureImage`
155 197
@@ -165,55 +207,61 @@ quilldrop/
165 207
│   ├── 2025-11-06-mein-post.md
166 208
│   └── ...
167 209
├── sites/                           # Statische Seiten
168 210
│   ├── ueber-mich.md
169 211
│   ├── impressum.md
170 212
│   └── projekte/
171 213
│       └── mein-projekt/
172 214
│           └── index.md
173 215
├── static/                          # Statische Assets
174 216
│   ├── css/style.css
175 -
│   ├── js/theme.js
217 +
│   ├── js/
218 +
│   │   ├── theme.js                 # Dark/Light Toggle + TOC Generator
219 +
│   │   └── search.js                # Client-seitige Volltextsuche
176 220
│   └── images/
177 221
├── internal/
178 222
│   ├── config/config.go             # YAML Config Loader
179 223
│   ├── content/
180 -
│   │   ├── post.go                  # Post Struct + FlexTime
224 +
│   │   ├── post.go                  # Post Struct + FlexTime + Tags/Categories
181 225
│   │   ├── parser.go                # Markdown + Frontmatter Parser
182 226
│   │   └── page.go                  # Statische Seiten Parser
183 227
│   ├── server/server.go             # HTTP Server
184 -
│   ├── generator/generator.go       # Static Site Generator
228 +
│   ├── generator/
229 +
│   │   ├── generator.go             # Static Site Generator
230 +
│   │   └── search.go                # Search-Index Generator (JSON)
185 231
│   └── templates/
186 232
│       ├── render.go                # Template Engine + Functions
187 233
│       ├── rss.go                   # RSS Feed Generator
188 -
│       ├── base.html                # Base Layout
234 +
│       ├── base.html                # Base Layout + Navbar + Suche
189 235
│       ├── home.html                # Homepage + Pagination
190 -
│       ├── post.html                # Einzelner Post
236 +
│       ├── post.html                # Einzelner Post + Prev/Next Navigation
191 237
│       ├── page.html                # Statische Seite
192 238
│       ├── tags.html                # Tag-Übersicht
193 -
│       └── tag.html                 # Tag-Seite
239 +
│       ├── tag.html                 # Tag-Seite
240 +
│       ├── categories.html          # Kategorie-Übersicht
241 +
│       └── category.html            # Kategorie-Seite
194 242
└── output/                          # Generierte statische Dateien
195 243
```
196 244
197 245
### Technologie-Stack
198 246
199 247
| Komponente | Technologie |
200 248
|-----------|-------------|
201 249
| Sprache | Go (Standard Library + minimale Dependencies) |
202 250
| HTTP Server | `net/http` (Go Standard Library) |
203 251
| Templates | `html/template` mit `embed.FS` |
204 252
| Markdown | Goldmark + GFM + Emoji + Chroma |
205 253
| Konfiguration | YAML via `gopkg.in/yaml.v3` |
206 254
| Syntax Highlighting | Chroma (Dracula Theme) |
207 255
| Fonts | Inter + JetBrains Mono (Google Fonts) |
208 256
| CSS | Vanilla CSS mit Custom Properties |
209 -
| JavaScript | Vanilla JS (kein Framework) |
257 +
| JavaScript | Vanilla JS — Theme Toggle, Suche, TOC (kein Framework) |
210 258
211 259
### Dependencies
212 260
213 261
QuillDrop hat bewusst minimale Abhängigkeiten - **kein Web-Framework**, **kein CSS-Framework**, **kein JS-Framework**:
214 262
215 263
- `github.com/yuin/goldmark` - Markdown Parser (CommonMark-konform)
216 264
- `github.com/yuin/goldmark-emoji` - Emoji Shortcodes
217 265
- `github.com/yuin/goldmark-highlighting/v2` - Syntax Highlighting
218 266
- `github.com/alecthomas/chroma/v2` - Syntax Highlighting Engine
219 267
- `gopkg.in/yaml.v3` - YAML Parser
@@ -294,25 +342,20 @@ date: 2025-12-01 10:00:00
294 342
author: "Max Mustermann"
295 343
tags: [Blog, QuillDrop]
296 344
preview: "Das ist mein erster Post mit QuillDrop!"
297 345
toc: false
298 346
---
299 347
300 348
# Willkommen
301 349
302 350
Das ist mein erster Post mit **QuillDrop**.
303 351
304 -
## Code-Beispiel
305 -
306 -
```go
307 -
fmt.Println("Hello QuillDrop!")
308 -
```
309 352
```
310 353
311 354
### Lokale Vorschau
312 355
313 356
```bash
314 357
# Dynamischen Server starten
315 358
./quilldrop serve
316 359
317 360
# Oder direkt mit Go
318 361
go run . serve
@@ -327,37 +370,42 @@ Dann im Browser: [http://localhost:8080](http://localhost:8080)
327 370
./quilldrop generate
328 371
329 372
# Generierte Dateien befinden sich in output/
330 373
ls output/
331 374
```
332 375
333 376
Die generierten Dateien im `output/`-Verzeichnis können direkt auf einen Webserver (Nginx, Apache, Caddy) oder CDN deployed werden.
334 377
335 378
## URL-Schema
336 379
380 +
Alle URLs verwenden konsequent Trailing Slashes, um serverseitige Redirects zu vermeiden:
381 +
337 382
| URL | Beschreibung |
338 383
|-----|-------------|
339 384
| `/` | Startseite (letzte N Posts) |
340 -
| `/page/2` | Seite 2 der Post-Liste |
341 -
| `/posts/2025-11-06-mein-post` | Einzelner Blog-Post |
342 -
| `/tags` | Tag-Übersicht |
343 -
| `/tags/kubernetes` | Posts mit Tag "Kubernetes" |
344 -
| `/sites/ueber-mich` | Statische Seite |
345 -
| `/sites/projekte/vm-tracker` | Verschachtelte Projektseite |
346 -
| `/feed.xml` | RSS Feed |
385 +
| `/page/2/` | Seite 2 der Post-Liste |
386 +
| `/posts/2025-11-06-mein-post/` | Einzelner Blog-Post |
387 +
| `/tags/` | Tag-Übersicht |
388 +
| `/tags/kubernetes/` | Posts mit Tag "Kubernetes" |
389 +
| `/categories/` | Kategorie-Übersicht |
390 +
| `/categories/technik/` | Posts in Kategorie "Technik" |
391 +
| `/sites/ueber-mich/` | Statische Seite |
392 +
| `/sites/projekte/vm-tracker/` | Verschachtelte Projektseite |
393 +
| `/index.xml` | RSS Feed |
394 +
| `/search-index.json` | Suchindex (JSON) |
347 395
| `/static/css/style.css` | Statische Assets |
348 396
| `/images/posts/2025/11/cover.webp` | Bilder |
349 397
350 398
## Warum QuillDrop?
351 399
352 400
- **Keine Datenbank** - Dateisystem als einzige Datenquelle
353 401
- **Keine Build-Pipeline** - Ein `go build` und fertig
354 -
- **Keine JS-Frameworks** - Vanilla JavaScript, unter 90 Zeilen
402 +
- **Keine JS-Frameworks** - Vanilla JavaScript für Theme, Suche und TOC
355 403
- **Minimale Dependencies** - 5 Go-Packages, alle fokussiert auf Markdown
356 404
- **Blitzschnell** - Generiert 100+ Posts in unter 3 Sekunden
357 405
- **Einzelnes Binary** - Templates eingebettet, kein Runtime-Setup
358 406
- **Hugo-kompatibel** - Bestehende Hugo-Posts mit Frontmatter funktionieren
359 407
- **Dual-Mode** - Entwicklung mit Server, Produktion mit Static Generator
360 408
361 409
## Lizenz
362 410
363 411
QuillDrop ist Open Source.