﻿<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>cscharf.de — posts</title>
  <link href="https://cscharf.de/blog/" rel="alternate" />
  <link href="https://cscharf.de/blog/feed.xml" rel="self" />
  <id>https://cscharf.de/blog/</id>
  <updated>2026-08-16T00:00:00Z</updated>
  <entry>
    <title>Hello World</title>
    <link href="https://cscharf.de/blog/hello-world/" />
    <id>https://cscharf.de/blog/hello-world/</id>
    <updated>2026-08-16T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Welcome to your new &lt;strong&gt;Kiln&lt;/strong&gt; site!&lt;/p&gt;
&lt;p&gt;This is your first post. Edit it or create new &lt;code&gt;.md&lt;/code&gt; files in &lt;code&gt;content/posts/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="code-highlighting"&gt;Code highlighting&lt;/h2&gt;
&lt;p&gt;Kiln uses Prism.js for syntax highlighting:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;var site = new KilnSite(&amp;quot;My Site&amp;quot;);
site.Build();
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;console.log(&amp;quot;Hello, Kiln!&amp;quot;);
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Pflegeelternschaft und Verantwortung: Was Alltag wirklich lehrt</title>
    <link href="https://cscharf.de/blog/2026-08-16-pflegeelternschaft-ueber-responsibility/" />
    <id>https://cscharf.de/blog/2026-08-16-pflegeelternschaft-ueber-responsibility/</id>
    <updated>2026-08-16T00:00:00Z</updated>
    <summary>Ein persönlicher Blick auf Pflegeelternschaft, Verantwortung und das Spannungsfeld zwischen Beruf, Alltag und Haltung.</summary>
    <content type="html">&lt;p&gt;Im Alltag von Pflegeelternschaft gibt es wenig Platz für perfekte Lösungen. Vielmehr geht es darum, stabil zu bleiben, wenn sich Situationen schwer einschätzen lassen und man trotzdem verantwortungsvoll handeln muss.&lt;/p&gt;
&lt;h2 id="verantwortung-ist-kein-konzept-sondern-alltag"&gt;Verantwortung ist kein Konzept, sondern Alltag&lt;/h2&gt;
&lt;p&gt;Es ist leicht, Verantwortung als etwas Abstraktes zu sehen – als Leitbild oder als berufliches Schlagwort. In der Praxis ist sie ein ständiger Rhythmus aus Aufmerksamkeit, Geduld, Anpassung und Klarheit.&lt;/p&gt;
&lt;p&gt;Man muss Dinge abwägen, priorisieren und im Zweifel Entscheidungen treffen, die weder einfach noch sauber sind. Genau dort zeigt sich, was wirklich zählt: Haltung und Klarheit.&lt;/p&gt;
&lt;h2 id="die-verbindung-zur-technik"&gt;Die Verbindung zur Technik&lt;/h2&gt;
&lt;p&gt;Vielleicht ist es gerade deshalb, dass mich Architektur und Verantwortung so nahe verbinden. In beiden Bereichen geht es um Systeme, Grenzen, Wechselwirkungen und die Frage, was tragfähig ist.&lt;/p&gt;
&lt;p&gt;Gute Entscheidungen entstehen oft nicht durch Perfektion, sondern durch die Bereitschaft, die vorhandenen Zusammenhänge ernst zu nehmen und danach handelbar zu bleiben.&lt;/p&gt;
&lt;h2 id="was-ich-daraus-mitnehme"&gt;Was ich daraus mitnehme&lt;/h2&gt;
&lt;p&gt;Pflegeelternschaft hat mich in einer sehr konkreten Weise gelehrt, dass gute Lösungen nicht immer die elegantesten sind. Oft sind sie die verständlichsten, die am meisten stabilisieren und die am ehesten im echten Leben funktionieren.&lt;/p&gt;
&lt;p&gt;Das gilt für Technik genauso wie für den Alltag.&lt;/p&gt;
&lt;h2 id="fazit"&gt;Fazit&lt;/h2&gt;
&lt;p&gt;Im Kern geht es um dieselbe Sache: echte Verantwortung ist nicht die Abwesenheit von Ungewissheit, sondern die Fähigkeit, auch in komplexen Situationen klar, menschlich und stabil zu bleiben.&lt;/p&gt;
&lt;p&gt;Das ist eine Haltung, die ich auch beim Entwerfen von Systemen respektiere – und die ich im Leben täglich neu erlebe.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Dataverse-Architektur: Warum gute Grenzen wichtiger sind als mehr Features</title>
    <link href="https://cscharf.de/blog/2026-08-16-dataverse-architecture-principles/" />
    <id>https://cscharf.de/blog/2026-08-16-dataverse-architecture-principles/</id>
    <updated>2026-08-16T00:00:00Z</updated>
    <summary>Ein Blick auf Dataverse-Architektur, klare Systemgrenzen und die Frage, wann Plattformdesign wirklich tragfähig wird.</summary>
    <content type="html">&lt;p&gt;Dataverse ist eine starke Plattform. Genau deshalb ist die Architekturentscheidung so wichtig: Zu viel Komplexität entsteht oft nicht durch die Technik selbst, sondern durch die fehlenden Grenzen.&lt;/p&gt;
&lt;h2 id="die-zentrale-frage"&gt;Die zentrale Frage&lt;/h2&gt;
&lt;p&gt;Wenn eine Plattform viele Möglichkeiten bietet, entsteht schnell die Versuchung, alles in einem Modell zu lösen. Das ist genau dort problematisch, wo Dataverse-Projekte an Komplexität verlieren.&lt;/p&gt;
&lt;p&gt;Eine gute Dataverse-Architektur beginnt daher nicht mit Features, sondern mit klaren Verantwortlichkeiten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Was gehört in Dataverse?&lt;/li&gt;
&lt;li&gt;Was gehört in eine externe API?&lt;/li&gt;
&lt;li&gt;Was wird durch Power Automate gelöst?&lt;/li&gt;
&lt;li&gt;Wo liegt die fachliche Verantwortung?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="grenzen-sind-keine-einschrankung"&gt;Grenzen sind keine Einschränkung&lt;/h2&gt;
&lt;p&gt;Viele Teams sehen Grenzziehung als Verzicht. In der Praxis ist sie aber ein Designmittel. Gute Grenzen machen Lösungen verständlich, testbar und wartbar.&lt;/p&gt;
&lt;p&gt;Das gilt vor allem dann, wenn mehrere Business-Streams auf derselben Plattform arbeiten. Sobald Rollen, Prozesse und Integrationen miteinander verschmelzen, verlieren Teams schnell die Übersicht.&lt;/p&gt;
&lt;h2 id="architektur-heisst-auch-governance"&gt;Architektur heißt auch Governance&lt;/h2&gt;
&lt;p&gt;Ein gutes Dataverse-Setup ist nicht nur technisch sauber, sondern auch governancefähig:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;klare Namenskonventionen&lt;/li&gt;
&lt;li&gt;verständliche Modellgrenzen&lt;/li&gt;
&lt;li&gt;eindeutige Verantwortlichkeiten&lt;/li&gt;
&lt;li&gt;nachvollziehbare Integrationsmuster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ohne Governance entsteht schnell eine Plattform, die anfänglich nützlich wirkt, langfristig aber schwer zu beherrschen ist.&lt;/p&gt;
&lt;h2 id="mein-fazit"&gt;Mein Fazit&lt;/h2&gt;
&lt;p&gt;Dataverse ist keine „einfach alles“-Lösung. Es ist eine Plattform mit Potenzial, aber nur dort wirklich stark, wo Architektur und Verantwortung sauber zusammenspielen.&lt;/p&gt;
&lt;p&gt;Wenn wir Lösungen mit klaren Grenzen und echten fachlichen Verantwortlichkeiten bauen, wird Dataverse zu einem echten Basis- und Integrationsbaustein – und nicht zu einer unübersichtlichen Technikkulisse.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Welcome to Kiln</title>
    <link href="https://cscharf.de/blog/01-welcome-to-kiln/" />
    <id>https://cscharf.de/blog/01-welcome-to-kiln/</id>
    <updated>2026-08-16T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Welcome to &lt;strong&gt;Kiln&lt;/strong&gt;, a powerful and flexible static site generator built on .NET.&lt;/p&gt;
&lt;p&gt;This blog demonstrates all the features Kiln offers out-of-the-box. Read through these posts to learn how Kiln works and what you can build with it.&lt;/p&gt;
&lt;h2 id="what-is-kiln"&gt;What is Kiln?&lt;/h2&gt;
&lt;p&gt;Kiln transforms your Markdown content into a blazing-fast static website. No database, no server complexity — just pure, fast HTML served anywhere.&lt;/p&gt;
&lt;h2 id="key-features"&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content Collections&lt;/strong&gt;: Organize your posts, pages, and custom collections&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown-First&lt;/strong&gt;: Write in Markdown, customize with Frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in Taxonomies&lt;/strong&gt;: Tags, categories, or custom taxonomies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Highlighting&lt;/strong&gt;: Prism.js integration for syntax highlighting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Page Bundles&lt;/strong&gt;: Co-locate assets with your content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theming&lt;/strong&gt;: Flexible template system with Liquid/Scriban&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Extend Kiln with custom functionality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Lightning-fast builds and deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Start exploring — each post showcases a different Kiln feature. Happy building!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Markdown Showcase</title>
    <link href="https://cscharf.de/blog/02-markdown-showcase/" />
    <id>https://cscharf.de/blog/02-markdown-showcase/</id>
    <updated>2026-08-15T00:00:00Z</updated>
    <content type="html">&lt;p&gt;This post demonstrates Markdown formatting capabilities supported by Kiln.&lt;/p&gt;
&lt;h2 id="headings"&gt;Headings&lt;/h2&gt;
&lt;p&gt;All heading levels (h2-h6) are supported. Use &lt;code&gt;##&lt;/code&gt; for h2, &lt;code&gt;###&lt;/code&gt; for h3, and so on.&lt;/p&gt;
&lt;h2 id="text-formatting"&gt;Text Formatting&lt;/h2&gt;
&lt;p&gt;You can use &lt;strong&gt;bold&lt;/strong&gt; and &lt;em&gt;italic&lt;/em&gt; text. You can also use &lt;em&gt;&lt;strong&gt;bold and italic&lt;/strong&gt;&lt;/em&gt; together.&lt;/p&gt;
&lt;p&gt;You can create &lt;del&gt;strikethrough&lt;/del&gt; text and &lt;code&gt;inline code&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="lists"&gt;Lists&lt;/h2&gt;
&lt;h3 id="unordered-lists"&gt;Unordered Lists&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Item one&lt;/li&gt;
&lt;li&gt;Item two
&lt;ul&gt;
&lt;li&gt;Nested item&lt;/li&gt;
&lt;li&gt;Another nested item&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Item three&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ordered-lists"&gt;Ordered Lists&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;First item&lt;/li&gt;
&lt;li&gt;Second item&lt;/li&gt;
&lt;li&gt;Third item&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="blockquotes"&gt;Blockquotes&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a blockquote. You can use blockquotes to highlight important information or quotes from other sources.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Blockquotes can be nested too!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;h2 id="tables"&gt;Tables&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Support&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;Full GFM support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontmatter&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;YAML format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Links&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;Internal and external&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;Relative and absolute paths&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="links-and-images"&gt;Links and Images&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/PepperPix/Kiln"&gt;Link to Kiln repository&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Images are embedded the same way as Markdown links, with an exclamation mark prefix:&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/favicon.svg" alt="Kiln Logo" /&gt;&lt;/p&gt;
&lt;h2 id="code-blocks"&gt;Code Blocks&lt;/h2&gt;
&lt;p&gt;Inline code uses backticks: &lt;code&gt;var x = 42;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Code blocks are created with triple backticks and optional language identifier:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Plain text code block
const greeting = &amp;quot;Hello, Kiln!&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Learn more about code highlighting in the next post!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Code Highlighting with Prism.js</title>
    <link href="https://cscharf.de/blog/03-code-highlighting/" />
    <id>https://cscharf.de/blog/03-code-highlighting/</id>
    <updated>2026-08-14T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Kiln integrates &lt;strong&gt;Prism.js&lt;/strong&gt; for beautiful syntax highlighting across all supported languages.&lt;/p&gt;
&lt;h2 id="c-example"&gt;C# Example&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using System;
using Kiln.Core;

public class SiteBuilder
{
    private readonly Configuration _config;

    public SiteBuilder(Configuration config)
    {
        _config = config ?? throw new ArgumentNullException(nameof(config));
    }

    public void Build()
    {
        Console.WriteLine($&amp;quot;Building {_config.Title}...&amp;quot;);
        // Build your site here
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="javascripttypescript"&gt;JavaScript/TypeScript&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;// Frontend interactivity with Kiln
class SiteNavigator {
  constructor(rootSelector) {
    this.root = document.querySelector(rootSelector);
    this.init();
  }

  init() {
    console.log(&amp;quot;Initializing site navigation...&amp;quot;);
    this.attachEventListeners();
  }

  attachEventListeners() {
    document.querySelectorAll('a[data-nav]')
      .forEach(link =&amp;gt; {
        link.addEventListener('click', (e) =&amp;gt; this.navigate(e));
      });
  }
}

// Initialize on page load
document.addEventListener('DOMContentLoaded', () =&amp;gt; {
  new SiteNavigator('[data-navigator]');
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="yaml-configuration"&gt;YAML Configuration&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;title: My Kiln Site
description: A blazingly fast static site
baseUrl: https://example.com
theme: default

collections:
  posts:
    directory: content/posts
    permalink: /blog/:slug/
    sort: date desc
    taxonomies:
      - tags
      - categories

taxonomies:
  tags:
    permalink: /tags/:slug/
  categories:
    permalink: /categories/:slug/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="htmlcss"&gt;HTML/CSS&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;article class=&amp;quot;post&amp;quot;&amp;gt;
  &amp;lt;header class=&amp;quot;post-header&amp;quot;&amp;gt;
    &amp;lt;h1 class=&amp;quot;post-title&amp;quot;&amp;gt;{{ page.title }}&amp;lt;/h1&amp;gt;
    &amp;lt;time class=&amp;quot;post-date&amp;quot;&amp;gt;{{ page.date | format_date }}&amp;lt;/time&amp;gt;
  &amp;lt;/header&amp;gt;
  &amp;lt;div class=&amp;quot;post-content&amp;quot;&amp;gt;
    {{ content }}
  &amp;lt;/div&amp;gt;
&amp;lt;/article&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-css"&gt;.post {
  max-width: 65ch;
  margin: 2rem auto;
  padding: 1rem;
  font-family: system-ui, -apple-system, sans-serif;
}

.post-header {
  border-bottom: 2px solid var(--color-primary);
  padding-bottom: 1rem;
  margin-bottom: 1.5rem;
}

.post-title {
  margin: 0.5rem 0;
  font-size: 2rem;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prism supports &lt;strong&gt;60+ languages&lt;/strong&gt; out of the box. Check the language identifier in the code fence to enable highlighting!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Working with Collections</title>
    <link href="https://cscharf.de/blog/04-working-with-collections/" />
    <id>https://cscharf.de/blog/04-working-with-collections/</id>
    <updated>2026-08-13T00:00:00Z</updated>
    <content type="html">&lt;p&gt;&lt;strong&gt;Collections&lt;/strong&gt; are the heart of Kiln. They organize your content into logical groups with consistent structure, metadata, and rendering.&lt;/p&gt;
&lt;h2 id="what-is-a-collection"&gt;What is a Collection?&lt;/h2&gt;
&lt;p&gt;A collection is a directory of content items (Markdown files) that share:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A common location (e.g., &lt;code&gt;content/posts/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Consistent Frontmatter structure&lt;/li&gt;
&lt;li&gt;Shared layout template&lt;/li&gt;
&lt;li&gt;Optional sorting and pagination rules&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="built-in-collections"&gt;Built-in Collections&lt;/h2&gt;
&lt;p&gt;Kiln includes two default collections:&lt;/p&gt;
&lt;h3 id="posts-collection"&gt;Posts Collection&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;collections:
  posts:
    directory: content/posts
    permalink: /blog/:slug/
    sort: date desc
    layout: post
    paginate: 10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Posts are sorted by date (newest first), paginated at 10 items per page, and rendered with the &lt;code&gt;post.html&lt;/code&gt; layout.&lt;/p&gt;
&lt;h3 id="pages-collection"&gt;Pages Collection&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;collections:
  pages:
    directory: content/pages
    permalink: /:slug/
    sort: weight asc
    layout: page
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pages are sorted by &lt;code&gt;weight&lt;/code&gt; (Frontmatter field), allowing you to control menu order.&lt;/p&gt;
&lt;h2 id="creating-custom-collections"&gt;Creating Custom Collections&lt;/h2&gt;
&lt;p&gt;You can create as many collections as you need. Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;collections:
  projects:
    directory: content/projects
    permalink: /portfolio/:slug/
    layout: project
    taxonomies:
      - technologies
      - year
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each item in the collection becomes a page with its own URL and can be listed on category pages.&lt;/p&gt;
&lt;h2 id="collection-metadata"&gt;Collection Metadata&lt;/h2&gt;
&lt;p&gt;Every item in a collection automatically gets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;url&lt;/code&gt;: The generated URL&lt;/li&gt;
&lt;li&gt;&lt;code&gt;slug&lt;/code&gt;: URL-friendly name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;: Rendered HTML&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;: Custom Frontmatter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collection&lt;/code&gt;: The collection name&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This metadata is available in templates for navigation, related posts, and more.&lt;/p&gt;
&lt;h2 id="accessing-collections"&gt;Accessing Collections&lt;/h2&gt;
&lt;p&gt;In Kiln templates, you can iterate over collections:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-liquid"&gt;{% for post in collections.posts %}
  &amp;lt;article&amp;gt;
    &amp;lt;h2&amp;gt;&amp;lt;a href=&amp;quot;{{ post.url }}&amp;quot;&amp;gt;{{ post.title }}&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
    &amp;lt;time&amp;gt;{{ post.date }}&amp;lt;/time&amp;gt;
  &amp;lt;/article&amp;gt;
{% endfor %}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Collections make it easy to build blogs, portfolios, documentation sites, and more!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Taxonomies and Tags</title>
    <link href="https://cscharf.de/blog/05-taxonomies-and-tags/" />
    <id>https://cscharf.de/blog/05-taxonomies-and-tags/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <content type="html">&lt;p&gt;&lt;strong&gt;Taxonomies&lt;/strong&gt; in Kiln let you organize and cross-reference your content through tags, categories, or any custom dimension.&lt;/p&gt;
&lt;h2 id="what-are-taxonomies"&gt;What are Taxonomies?&lt;/h2&gt;
&lt;p&gt;A taxonomy is a classification system applied to collection items via Frontmatter. Common examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tags&lt;/strong&gt;: Topics or keywords (e.g., &lt;code&gt;kiln&lt;/code&gt;, &lt;code&gt;getting-started&lt;/code&gt;, &lt;code&gt;development&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Categories&lt;/strong&gt;: Broader groupings (e.g., &lt;code&gt;tutorial&lt;/code&gt;, &lt;code&gt;feature&lt;/code&gt;, &lt;code&gt;announcement&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authors&lt;/strong&gt;: For multi-author blogs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Years&lt;/strong&gt;: For chronological archives&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technologies&lt;/strong&gt;: For portfolio sites&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="defining-taxonomies"&gt;Defining Taxonomies&lt;/h2&gt;
&lt;p&gt;Taxonomies are configured in &lt;code&gt;site.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;taxonomies:
  tags:
    permalink: /tags/:slug/
    paginate: 20
  categories:
    permalink: /categories/:slug/
    paginate: 10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And applied to collections:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;collections:
  posts:
    taxonomies:
      - tags
      - categories
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="using-tags-in-frontmatter"&gt;Using Tags in Frontmatter&lt;/h2&gt;
&lt;p&gt;Simply add a list to your Frontmatter:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;---
title: My Post
tags:
  - kiln
  - getting-started
  - documentation
categories:
  - tutorial
---
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="generated-pages"&gt;Generated Pages&lt;/h2&gt;
&lt;p&gt;Kiln automatically generates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/tags/kiln/&lt;/code&gt; — All posts tagged &amp;quot;kiln&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tags/getting-started/&lt;/code&gt; — All posts tagged &amp;quot;getting-started&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/categories/tutorial/&lt;/code&gt; — All posts categorized &amp;quot;tutorial&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Paginated at the configured limit.&lt;/p&gt;
&lt;h2 id="displaying-taxonomy-links"&gt;Displaying Taxonomy Links&lt;/h2&gt;
&lt;p&gt;In templates, display tags and categories:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-liquid"&gt;&amp;lt;div class=&amp;quot;post-tags&amp;quot;&amp;gt;
  {% for tag in page.tags %}
    &amp;lt;a href=&amp;quot;/tags/{{ tag | slugify }}/&amp;quot; class=&amp;quot;tag&amp;quot;&amp;gt;{{ tag }}&amp;lt;/a&amp;gt;
  {% endfor %}
&amp;lt;/div&amp;gt;

&amp;lt;div class=&amp;quot;post-categories&amp;quot;&amp;gt;
  {% for cat in page.categories %}
    &amp;lt;span class=&amp;quot;category&amp;quot;&amp;gt;{{ cat }}&amp;lt;/span&amp;gt;
  {% endfor %}
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="benefits"&gt;Benefits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Discoverability&lt;/strong&gt;: Readers find related content through tags&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SEO&lt;/strong&gt;: Dedicated tag pages for keyword targeting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organization&lt;/strong&gt;: Structure content without rigid hierarchies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: Add or remove tags without changing permalinks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Taxonomies are a powerful way to organize and surface your content!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Page Bundles and Images</title>
    <link href="https://cscharf.de/blog/06-page-bundles-and-images/" />
    <id>https://cscharf.de/blog/06-page-bundles-and-images/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <content type="html">&lt;p&gt;&lt;strong&gt;Page Bundles&lt;/strong&gt; are directories that group a post with its associated assets (images, documents, etc.). This keeps your content organized and simplifies asset references.&lt;/p&gt;
&lt;h2 id="traditional-asset-organization"&gt;Traditional Asset Organization&lt;/h2&gt;
&lt;p&gt;Without page bundles, you might structure assets like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;content/
├── posts/
│   ├── my-post.md
│   └── another-post.md
assets/
└── images/
    ├── my-post-header.png
    └── another-post-diagram.svg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This separates content from assets, making it hard to manage.&lt;/p&gt;
&lt;h2 id="page-bundle-structure"&gt;Page Bundle Structure&lt;/h2&gt;
&lt;p&gt;With page bundles:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;content/
└── posts/
    ├── my-post/
    │   ├── index.md.template
    │   ├── header.png
    │   └── diagram.svg
    └── another-post/
        ├── index.md.template
        └── screenshot.jpg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each post is a directory with its own content and assets.&lt;/p&gt;
&lt;h2 id="benefits"&gt;Benefits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Co-location&lt;/strong&gt;: Content and assets live together&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easier management&lt;/strong&gt;: No hunt through global asset folders&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better scaling&lt;/strong&gt;: Hundreds of posts without losing track&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reproducibility&lt;/strong&gt;: Move a post dir, everything moves with it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versioning&lt;/strong&gt;: Assets change with their content&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="referencing-assets"&gt;Referencing Assets&lt;/h2&gt;
&lt;p&gt;In your Markdown, reference assets by relative path:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-markdown"&gt;![Post header](./header.png)

![Diagram](./diagram.svg)

[Download PDF](./resources.pdf)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When Kiln builds, it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Copies&lt;/strong&gt; &lt;code&gt;header.png&lt;/code&gt; to &lt;code&gt;_site/assets/content/posts/my-post/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates&lt;/strong&gt; the Markdown link to &lt;code&gt;/assets/content/posts/my-post/header.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preserves&lt;/strong&gt; the file with its original name and format&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="asset-url-structure"&gt;Asset URL Structure&lt;/h2&gt;
&lt;p&gt;Assets are namespaced by location:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/assets/content/posts/06-page-bundles-and-images/&lt;/code&gt; — Post bundle assets&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/assets/content/pages/about/&lt;/code&gt; — Page bundle assets (if applicable)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/assets/shared/&lt;/code&gt; — Global shared assets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This namespace makes cache-busting and organization predictable.&lt;/p&gt;
&lt;h2 id="creating-a-bundle"&gt;Creating a Bundle&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Create a directory: &lt;code&gt;content/posts/my-post/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Move your post content to &lt;code&gt;index.md.template&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add images/assets to the same directory&lt;/li&gt;
&lt;li&gt;Kiln handles the rest!&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;mkdir -p content/posts/my-new-post
echo &amp;quot;---
id: {{ID-new}}
title: My New Post
---

# Welcome

![Image](./my-image.png)&amp;quot; &amp;gt; content/posts/my-new-post/index.md.template

cp ~/my-image.png content/posts/my-new-post/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="advanced-use-cases"&gt;Advanced Use Cases&lt;/h2&gt;
&lt;h3 id="multiple-images-in-one-post"&gt;Multiple images in one post&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;my-post/
├── index.md.template
├── diagram-1.svg
├── diagram-2.svg
├── screenshots/
│   ├── ui-before.png
│   └── ui-after.png
└── data.json
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="embedding-data-files"&gt;Embedding data files&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-markdown"&gt;{% include './data.json' %}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="using-images-in-templates"&gt;Using images in templates&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-liquid"&gt;&amp;lt;img src=&amp;quot;{{ page.relative_url }}diagram.png&amp;quot; alt=&amp;quot;Architecture&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="best-practices"&gt;Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Organize by type&lt;/strong&gt;: &lt;code&gt;images/&lt;/code&gt;, &lt;code&gt;data/&lt;/code&gt;, &lt;code&gt;documents/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use descriptive names&lt;/strong&gt;: &lt;code&gt;feature-comparison.svg&lt;/code&gt; not &lt;code&gt;img1.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compress media&lt;/strong&gt;: Reduce file sizes before bundling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document references&lt;/strong&gt;: In Markdown comments, list what assets are included&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Page bundles are a powerful way to organize scalable content sites!&lt;/p&gt;
&lt;p&gt;See the Kiln Architecture diagram below — this entire post is a page bundle!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Theming with Kiln</title>
    <link href="https://cscharf.de/blog/07-theming-with-kiln/" />
    <id>https://cscharf.de/blog/07-theming-with-kiln/</id>
    <updated>2026-08-11T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Kiln's theming system makes it easy to customize the look and feel of your site without touching core functionality.&lt;/p&gt;
&lt;h2 id="theme-structure"&gt;Theme Structure&lt;/h2&gt;
&lt;p&gt;A Kiln theme is organized as:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;themes/
└── default/
    ├── layouts/          # Page templates
    │   ├── default.html
    │   ├── post.html
    │   └── page.html
    ├── partials/         # Reusable components
    │   ├── header.html
    │   ├── footer.html
    │   └── nav.html
    └── static/           # CSS, JS, images
        ├── css/
        └── js/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="layouts"&gt;Layouts&lt;/h2&gt;
&lt;p&gt;Layouts are Liquid templates that wrap your content:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&amp;quot;{{ site.language }}&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
  {% include 'partials/head.html' %}
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  {% include 'partials/header.html' %}
  &amp;lt;main&amp;gt;
    {{ content }}
  &amp;lt;/main&amp;gt;
  {% include 'partials/footer.html' %}
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="partials"&gt;Partials&lt;/h2&gt;
&lt;p&gt;Reusable components reduce repetition:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;!-- partials/header.html --&amp;gt;
&amp;lt;header class=&amp;quot;site-header&amp;quot;&amp;gt;
  &amp;lt;h1&amp;gt;&amp;lt;a href=&amp;quot;/&amp;quot;&amp;gt;{{ site.title }}&amp;lt;/a&amp;gt;&amp;lt;/h1&amp;gt;
  {% include 'partials/nav.html' %}
&amp;lt;/header&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="css-variables"&gt;CSS Variables&lt;/h2&gt;
&lt;p&gt;The default Kiln theme uses CSS custom properties (variables) for easy customization:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-css"&gt;:root {
  --color-primary: #007acc;
  --color-secondary: #f0f0f0;
  --font-family-sans: system-ui, -apple-system, sans-serif;
  --font-size-base: 16px;
  --max-width: 65ch;
}

body {
  font-family: var(--font-family-sans);
  font-size: var(--font-size-base);
  max-width: var(--max-width);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Override these in your own CSS to customize the site instantly.&lt;/p&gt;
&lt;h2 id="creating-a-custom-theme"&gt;Creating a Custom Theme&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Copy &lt;code&gt;themes/default/&lt;/code&gt; to &lt;code&gt;themes/my-theme/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Modify layouts, partials, and CSS&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;site.yaml&lt;/code&gt;:
&lt;pre&gt;&lt;code class="language-yaml"&gt;theme: my-theme
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="asset-serving"&gt;Asset Serving&lt;/h2&gt;
&lt;p&gt;Static assets (CSS, images) in &lt;code&gt;themes/*/static/&lt;/code&gt; are served at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/css/style.css&lt;/code&gt; from &lt;code&gt;themes/default/static/css/style.css&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/images/logo.svg&lt;/code&gt; from &lt;code&gt;themes/default/static/images/logo.svg&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keep your static assets organized for easy maintainability.&lt;/p&gt;
&lt;p&gt;Theming in Kiln is flexible, fast, and beginner-friendly!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Deploy Your Site</title>
    <link href="https://cscharf.de/blog/08-deploy-your-site/" />
    <id>https://cscharf.de/blog/08-deploy-your-site/</id>
    <updated>2026-08-10T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Once you've built your Kiln site, deploying it is straightforward. Static sites can be hosted anywhere.&lt;/p&gt;
&lt;h2 id="build-output"&gt;Build Output&lt;/h2&gt;
&lt;p&gt;Running &lt;code&gt;kiln build&lt;/code&gt; generates a &lt;code&gt;_site/&lt;/code&gt; directory with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Static HTML files&lt;/li&gt;
&lt;li&gt;CSS and JavaScript&lt;/li&gt;
&lt;li&gt;Images and other assets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This entire directory is what you deploy.&lt;/p&gt;
&lt;h2 id="github-pages"&gt;GitHub Pages&lt;/h2&gt;
&lt;p&gt;GitHub Pages is perfect for Kiln sites hosted on GitHub:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Push your site to a GitHub repository&lt;/li&gt;
&lt;li&gt;In repository settings, enable GitHub Pages&lt;/li&gt;
&lt;li&gt;Set the source branch (usually &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;gh-pages&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Your site is live at &lt;code&gt;https://username.github.io/repo&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Automate this with GitHub Actions:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;name: Build and Deploy

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: '10.x'
      - run: dotnet run --project src/Kiln.Cli -- build .
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./_site
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="azure-static-web-apps"&gt;Azure Static Web Apps&lt;/h2&gt;
&lt;p&gt;Azure SWA offers global distribution and edge caching:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a Static Web App in Azure Portal&lt;/li&gt;
&lt;li&gt;Connect your GitHub repository&lt;/li&gt;
&lt;li&gt;Configure the build output directory: &lt;code&gt;_site&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Deploy automatically on every push&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="netlify"&gt;Netlify&lt;/h2&gt;
&lt;p&gt;Netlify's drag-and-drop interface makes deployment simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a &lt;code&gt;netlify.toml&lt;/code&gt;:
&lt;pre&gt;&lt;code class="language-toml"&gt;[build]
command = &amp;quot;dotnet run --project src/Kiln.Cli -- build .&amp;quot;
publish = &amp;quot;_site&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Connect your GitHub repository in Netlify Dashboard&lt;/li&gt;
&lt;li&gt;Your site is live with automatic deployments&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="vercel"&gt;Vercel&lt;/h2&gt;
&lt;p&gt;Vercel works similarly to Netlify:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Import your GitHub project&lt;/li&gt;
&lt;li&gt;Set build command: &lt;code&gt;dotnet run --project src/Kiln.Cli -- build .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set output directory: &lt;code&gt;_site&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Deploy with one click&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="custom-servers"&gt;Custom Servers&lt;/h2&gt;
&lt;p&gt;For any web server (Apache, Nginx, custom VPS):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build locally: &lt;code&gt;kiln build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Upload &lt;code&gt;_site/&lt;/code&gt; directory via FTP, SCP, or Git&lt;/li&gt;
&lt;li&gt;Configure your web server to serve the content&lt;/li&gt;
&lt;li&gt;Optionally set up automated deployments with webhooks&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="performance-tips"&gt;Performance Tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Enable gzip compression in your web server&lt;/li&gt;
&lt;li&gt;Use a CDN for global distribution&lt;/li&gt;
&lt;li&gt;Set proper cache headers for static assets&lt;/li&gt;
&lt;li&gt;Minify CSS and JavaScript (optional, can be added as build step)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deploying a Kiln site is as simple as uploading static files. Choose the platform that fits your needs!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Plugins and Slots</title>
    <link href="https://cscharf.de/blog/09-plugins-and-slots/" />
    <id>https://cscharf.de/blog/09-plugins-and-slots/</id>
    <updated>2026-08-09T00:00:00Z</updated>
    <content type="html">&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt; extend Kiln's functionality without modifying core code. &lt;strong&gt;Slots&lt;/strong&gt; are the extension points where plugins hook in.&lt;/p&gt;
&lt;h2 id="what-are-slots"&gt;What are Slots?&lt;/h2&gt;
&lt;p&gt;Slots are predefined hook points in Kiln's build pipeline where custom logic runs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Slot&lt;/th&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;content:loaded&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;After content loaded&lt;/td&gt;
&lt;td&gt;Modify frontmatter, metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;build:before&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Before site build&lt;/td&gt;
&lt;td&gt;Pre-process assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;build:after&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;After site build&lt;/td&gt;
&lt;td&gt;Post-process, validate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;page:rendered&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;After page rendered&lt;/td&gt;
&lt;td&gt;Modify HTML output&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="creating-a-plugin"&gt;Creating a Plugin&lt;/h2&gt;
&lt;p&gt;A plugin is a .NET class implementing &lt;code&gt;IKilnPlugin&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using Kiln.Core.Plugins;

public class MyCustomPlugin : IKilnPlugin
{
    public string Name =&amp;gt; &amp;quot;My Custom Plugin&amp;quot;;
    public string Version =&amp;gt; &amp;quot;1.0.0&amp;quot;;

    public void Register(IPluginContext context)
    {
        context.OnSlot(&amp;quot;content:loaded&amp;quot;, OnContentLoaded);
        context.OnSlot(&amp;quot;build:after&amp;quot;, OnBuildAfter);
    }

    private void OnContentLoaded(IContentMetadata metadata)
    {
        // Modify frontmatter here
        if (metadata.Tags.Count == 0)
        {
            metadata.Tags.Add(&amp;quot;untagged&amp;quot;);
        }
    }

    private void OnBuildAfter(IBuildContext context)
    {
        Console.WriteLine($&amp;quot;Build completed: {context.PagesGenerated} pages&amp;quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="installing-plugins"&gt;Installing Plugins&lt;/h2&gt;
&lt;p&gt;Plugins can be distributed as:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;NuGet Packages&lt;/strong&gt;: Add to project dependencies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Assemblies&lt;/strong&gt;: Place in &lt;code&gt;plugins/&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Source Files&lt;/strong&gt;: Include &lt;code&gt;.cs&lt;/code&gt; files in plugin directory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Register plugins in &lt;code&gt;site.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;plugins:
  - name: MyCustomPlugin
    enabled: true
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="plugin-use-cases"&gt;Plugin Use Cases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SEO Optimization&lt;/strong&gt;: Auto-generate meta tags, sitemaps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytics&lt;/strong&gt;: Track page generation, build time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Media Processing&lt;/strong&gt;: Resize images, generate WebP variants&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt;: Check broken links, missing images&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notifications&lt;/strong&gt;: Alert on build failures, new posts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="filesystem-plugin-location"&gt;Filesystem Plugin Location&lt;/h2&gt;
&lt;p&gt;Kiln scans &lt;code&gt;plugins/&lt;/code&gt; directory for plugin assemblies:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins/
├── MyPlugin.dll
├── MyPlugin.pdb
└── MyPlugin.deps.json
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="plugin-discovery"&gt;Plugin Discovery&lt;/h2&gt;
&lt;p&gt;Kiln automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Discovers plugins in &lt;code&gt;plugins/&lt;/code&gt; and registered NuGet packages&lt;/li&gt;
&lt;li&gt;Loads plugin assemblies&lt;/li&gt;
&lt;li&gt;Calls &lt;code&gt;Register()&lt;/code&gt; on each plugin&lt;/li&gt;
&lt;li&gt;Executes slot handlers in order&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="best-practices"&gt;Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keep it simple&lt;/strong&gt;: Focus on one responsibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document slots&lt;/strong&gt;: Explain what data is available&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handle errors&lt;/strong&gt;: Don't crash the build&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use meaningful names&lt;/strong&gt;: Clear plugin and slot names&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version your plugins&lt;/strong&gt;: Semantic versioning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins make Kiln infinitely extensible!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Configuration Deep Dive</title>
    <link href="https://cscharf.de/blog/10-configuration-deep-dive/" />
    <id>https://cscharf.de/blog/10-configuration-deep-dive/</id>
    <updated>2026-08-08T00:00:00Z</updated>
    <content type="html">&lt;p&gt;&lt;code&gt;site.yaml&lt;/code&gt; is the central configuration file for your Kiln site. This post covers all available options.&lt;/p&gt;
&lt;h2 id="site-metadata"&gt;Site Metadata&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;title: My Kiln Site
description: A blazingly fast static site generator
baseUrl: https://example.com
language: en
theme: default
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;: Site name (used in templates)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt;: Meta description tag&lt;/li&gt;
&lt;li&gt;&lt;code&gt;baseUrl&lt;/code&gt;: Full URL to your site&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt;: Language code (for HTML lang attribute)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;theme&lt;/code&gt;: Theme directory name&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="collections"&gt;Collections&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;collections:
  posts:
    directory: content/posts
    permalink: /blog/:slug/
    sort: date desc
    paginate: 10
    feed: true
    layout: post
    taxonomies:
      - tags
      - categories
  pages:
    directory: content/pages
    permalink: /:slug/
    sort: weight asc
    layout: page
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;directory&lt;/code&gt;: Source directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;permalink&lt;/code&gt;: URL pattern (&lt;code&gt;:slug&lt;/code&gt;, &lt;code&gt;:date&lt;/code&gt;, &lt;code&gt;:title&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sort&lt;/code&gt;: Field and direction (&lt;code&gt;date desc&lt;/code&gt;, &lt;code&gt;weight asc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;paginate&lt;/code&gt;: Items per page (pagination enabled if &amp;gt;0)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feed&lt;/code&gt;: Generate RSS feed?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layout&lt;/code&gt;: Default template name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;taxonomies&lt;/code&gt;: Applied taxonomy types&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="taxonomies"&gt;Taxonomies&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;taxonomies:
  tags:
    permalink: /tags/:slug/
    paginate: 20
    layout: taxonomy
  categories:
    permalink: /categories/:slug/
    paginate: 10
    layout: taxonomy
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;permalink&lt;/code&gt;: URL pattern for taxonomy pages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;paginate&lt;/code&gt;: Items per page&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layout&lt;/code&gt;: Template for category pages&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="menus"&gt;Menus&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;menus:
  main:
    - title: Home
      ref: posts/
    - title: About
      ref: pages/about
    - title: External
      url: https://example.com
      external: true
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;: Display text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ref&lt;/code&gt;: Link to collection/page&lt;/li&gt;
&lt;li&gt;&lt;code&gt;url&lt;/code&gt;: External URL (sets &lt;code&gt;external: true&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="build-options"&gt;Build Options&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;build:
  outputDirectory: _site
  cleanBefore: true
  minifyHtml: false
  minifyCss: false
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;outputDirectory&lt;/code&gt;: Where to generate the site&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cleanBefore&lt;/code&gt;: Remove old output before build?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minifyHtml&lt;/code&gt;: Compress HTML output?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minifyCss&lt;/code&gt;: Compress CSS files?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="development"&gt;Development&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;dev:
  port: 5555
  watch: true
  liveReload: true
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;port&lt;/code&gt;: Dev server port&lt;/li&gt;
&lt;li&gt;&lt;code&gt;watch&lt;/code&gt;: Watch files for changes?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;liveReload&lt;/code&gt;: Auto-refresh browser?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="advanced"&gt;Advanced&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;markdown:
  extensions:
    - strikethrough
    - tables
    - task-lists

feeds:
  - collection: posts
    permalink: /feed.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;markdown.extensions&lt;/code&gt;: Enable CommonMark extensions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feeds&lt;/code&gt;: RSS feeds per collection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full documentation at &lt;a href="https://github.com/PepperPix/Kiln"&gt;Kiln Docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Understanding these options gives you full control over your Kiln site!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Performance Tips and Optimization</title>
    <link href="https://cscharf.de/blog/11-performance-tips/" />
    <id>https://cscharf.de/blog/11-performance-tips/</id>
    <updated>2026-08-07T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Kiln is already fast, but here are tips to optimize your site further for speed and SEO.&lt;/p&gt;
&lt;h2 id="asset-namespace-optimization"&gt;Asset Namespace Optimization&lt;/h2&gt;
&lt;p&gt;Kiln's Asset Namespace feature organizes assets by content type and location:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;assets/
├── content/
│   ├── posts/
│   │   └── my-post/
│   │       └── diagram.png
│   └── pages/
│       └── about-logo.svg
├── shared/
│   ├── fonts/
│   └── icons/
└── vendor/
    └── scripts/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Assets are served at predictable URLs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/assets/content/posts/my-post/diagram.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/assets/shared/fonts/main.woff2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This structure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Colocates assets&lt;/strong&gt; with content (easier management)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enables cache busting&lt;/strong&gt; per content item&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allows aggressive caching&lt;/strong&gt; for shared assets&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduces build complexity&lt;/strong&gt; (no asset duplication)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="image-optimization"&gt;Image Optimization&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-markdown"&gt;![Article banner](./my-image.webp)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;WebP format&lt;/strong&gt; for modern browsers (smaller files)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compress PNG/JPEG&lt;/strong&gt; with tools like ImageOptim&lt;/li&gt;
&lt;li&gt;Provide &lt;strong&gt;descriptive alt text&lt;/strong&gt; for accessibility and SEO&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;responsive images&lt;/strong&gt; with srcset (optional plugin)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="css-performance"&gt;CSS Performance&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-css"&gt;/* Minimize CSS specificity */
.post-title { font-size: 2rem; }

/* Use CSS variables for theming */
:root {
  --spacing-unit: 1rem;
  --color-primary: #007acc;
}

/* Avoid @import in CSS (blocks rendering) */
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Minify CSS&lt;/strong&gt; via &lt;code&gt;site.yaml&lt;/code&gt; build options&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use CSS variables&lt;/strong&gt; for maintainability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Limit font files&lt;/strong&gt;: Load only necessary weights&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inline critical CSS&lt;/strong&gt; for above-the-fold content&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="build-performance"&gt;Build Performance&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;# Fast rebuild for large sites
kiln build --incremental

# Parallel processing (default)
kiln build --threads 8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kiln automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caches intermediate results&lt;/li&gt;
&lt;li&gt;Parallelizes page generation&lt;/li&gt;
&lt;li&gt;Skips unchanged files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For monitoring:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;kiln build --verbose  # Show timing per step
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="caching-headers"&gt;Caching Headers&lt;/h2&gt;
&lt;p&gt;Configure your web server for optimal caching:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-nginx"&gt;# nginx example
location /assets/ {
  expires 1y;
  add_header Cache-Control &amp;quot;public, immutable&amp;quot;;
}

location /css/ {
  expires 30d;
  add_header Cache-Control &amp;quot;public&amp;quot;;
}

location / {
  expires 1h;
  add_header Cache-Control &amp;quot;public&amp;quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="seo-performance"&gt;SEO Performance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Structured data&lt;/strong&gt;: Add JSON-LD to &lt;code&gt;head.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sitemap&lt;/strong&gt;: Enabled by default in RSS feeds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Graph&lt;/strong&gt;: Add tags in &lt;code&gt;partials/head.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heading hierarchy&lt;/strong&gt;: Use &lt;code&gt;h2&lt;/code&gt;, &lt;code&gt;h3&lt;/code&gt;, not multiple &lt;code&gt;h1&lt;/code&gt;s&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="monitoring"&gt;Monitoring&lt;/h2&gt;
&lt;p&gt;Use lighthouse or similar tools:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;# Google Lighthouse CLI
lighthouse https://example.com --output=html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Core Web Vitals&lt;/strong&gt;: LCP, FID, CLS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;First Contentful Paint&lt;/strong&gt;: &amp;lt;1.8s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Largest Contentful Paint&lt;/strong&gt;: &amp;lt;2.5s&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="content-best-practices"&gt;Content Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keep posts focused&lt;/strong&gt;: Easier to read, faster to load&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use clear headings&lt;/strong&gt;: Improves readability and SEO&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimize media&lt;/strong&gt;: Compress before uploading&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update old posts&lt;/strong&gt;: Refresh content for better search ranking&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Performance is a feature. Make it a priority from the start!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>What's Next? Your Kiln Journey Continues</title>
    <link href="https://cscharf.de/blog/12-whats-next/" />
    <id>https://cscharf.de/blog/12-whats-next/</id>
    <updated>2026-08-06T00:00:00Z</updated>
    <content type="html">&lt;p&gt;You've explored Kiln's core features. Here's how to continue your journey and contribute to the project.&lt;/p&gt;
&lt;h2 id="next-steps"&gt;Next Steps&lt;/h2&gt;
&lt;h3 id="build-your-own-site"&gt;Build Your Own Site&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Copy this theme&lt;/strong&gt;: Use the default Kiln theme as a starting point&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create custom collections&lt;/strong&gt;: Portfolio, documentation, wiki&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design your layout&lt;/strong&gt;: Modify CSS variables and templates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy&lt;/strong&gt;: Choose a platform (GitHub Pages, Netlify, Azure SWA)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Celebrate&lt;/strong&gt;: Share your Kiln-powered site with the community&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="explore-advanced-features"&gt;Explore Advanced Features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Extend Kiln with custom functionality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom taxonomies&lt;/strong&gt;: Organize content your way&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Liquid filters&lt;/strong&gt;: Create powerful templates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asset namespacing&lt;/strong&gt;: Better asset management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build hooks&lt;/strong&gt;: Pre/post-build automation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="learn-from-examples"&gt;Learn from Examples&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blog&lt;/strong&gt;: Multi-author blog with tags, categories, search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portfolio&lt;/strong&gt;: Project showcase with filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation site&lt;/strong&gt;: Multi-version docs with search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;: Product listings with filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-help"&gt;Getting Help&lt;/h2&gt;
&lt;h3 id="documentation"&gt;Documentation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/PepperPix/Kiln"&gt;GitHub README&lt;/a&gt; — Quick start and API reference&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/PepperPix/Kiln-Examples"&gt;Examples Repository&lt;/a&gt; — Real-world samples&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/PepperPix/Kiln/discussions"&gt;Discussion Board&lt;/a&gt; — Ask questions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="community"&gt;Community&lt;/h3&gt;
&lt;p&gt;Join our community:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub Discussions&lt;/strong&gt;: Ask questions, share projects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt;: Report bugs, request features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pull Requests&lt;/strong&gt;: Contribute code improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Twitter&lt;/strong&gt;: Follow for updates and announcements&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="roadmap"&gt;Roadmap&lt;/h2&gt;
&lt;p&gt;Planned features for Kiln:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt;: Built-in full-text search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;: Disqus/Utterances integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytics&lt;/strong&gt;: Native analytics dashboard&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin Panel&lt;/strong&gt;: Web-based content editor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database Backend&lt;/strong&gt;: SQLite, PostgreSQL support (coming)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internationalization&lt;/strong&gt;: Multi-language sites&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;: Product management&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check &lt;a href="https://github.com/PepperPix/Kiln/issues"&gt;GitHub Issues&lt;/a&gt; for active development.&lt;/p&gt;
&lt;h2 id="contributing"&gt;Contributing&lt;/h2&gt;
&lt;p&gt;Help make Kiln better:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Report bugs&lt;/strong&gt;: Found an issue? Create a GitHub issue with details&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suggest features&lt;/strong&gt;: Share ideas in Discussions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improve docs&lt;/strong&gt;: Fix typos, add examples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write plugins&lt;/strong&gt;: Share your extensions as NuGet packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code contributions&lt;/strong&gt;: Fork, create a branch, submit PR&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All contributions are welcome!&lt;/p&gt;
&lt;h2 id="say-thank-you"&gt;Say Thank You&lt;/h2&gt;
&lt;p&gt;If you love Kiln:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star&lt;/strong&gt; the &lt;a href="https://github.com/PepperPix/Kiln"&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📢 &lt;strong&gt;Share&lt;/strong&gt; your site with the community&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Mention&lt;/strong&gt; Kiln in your blog or talks&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Contribute&lt;/strong&gt; code or feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="final-thoughts"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Kiln is designed to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast&lt;/strong&gt;: Blazing-fast builds and deployments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple&lt;/strong&gt;: Markdown in, static HTML out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Powerful&lt;/strong&gt;: Flexible enough for any static site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community-driven&lt;/strong&gt;: Your feedback shapes the roadmap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you for exploring Kiln. Happy building! 🚀&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Questions? Join the community at &lt;a href="https://github.com/PepperPix/Kiln"&gt;github.com/PepperPix/Kiln&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
</feed>