<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kirby on homelab</title>
    <link>https://homelab.nbkelley.com/tags/kirby/</link>
    <description>Recent content in Kirby on homelab</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://homelab.nbkelley.com/tags/kirby/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Self-Hosted CMS Options &amp; Landscape</title>
      <link>https://homelab.nbkelley.com/docs/services/cms-options/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/services/cms-options/</guid>
      <description>&lt;h1 id=&#34;self-hosted-cms-options--landscape&#34;&gt;Self-Hosted CMS Options &amp;amp; Landscape&lt;a class=&#34;anchor&#34; href=&#34;#self-hosted-cms-options--landscape&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;User seeks a self-hosted CMS for an Ubuntu VM, explicitly rejecting WordPress due to business practices.&lt;/li&gt;&#xA;&lt;li&gt;Preference for tools respected by the web development and self-hosting communities.&lt;/li&gt;&#xA;&lt;li&gt;Exploration of CMS categories: Monolithic, Flat-file, Static Site Generators (SSG), Headless CMS, and Custom.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;key-decisions&#34;&gt;Key Decisions&lt;a class=&#34;anchor&#34; href=&#34;#key-decisions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Rejected WordPress&lt;/strong&gt;: Cited business practices as a dealbreaker.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Favoring Developer-Respected Alternatives&lt;/strong&gt;: Leaned towards headless or modern flat-file CMS options.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Top Contenders Identified&lt;/strong&gt;: Directus (Headless), Strapi (Headless), Kirby (Flat-file), Payload CMS (Headless/TS), Ghost (Blogging).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cms-landscape--options&#34;&gt;CMS Landscape &amp;amp; Options&lt;a class=&#34;anchor&#34; href=&#34;#cms-landscape--options&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;monolithic-cms&#34;&gt;Monolithic CMS&lt;a class=&#34;anchor&#34; href=&#34;#monolithic-cms&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;WordPress&lt;/strong&gt;: Dominant (60% market), huge ecosystem, but rejected by user.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Drupal&lt;/strong&gt;: Flexible, steep learning curve.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Joomla&lt;/strong&gt;: Balanced ease/power, smaller community.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;flat-file-cms-no-database&#34;&gt;Flat-file CMS (No Database)&lt;a class=&#34;anchor&#34; href=&#34;#flat-file-cms-no-database&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Grav&lt;/strong&gt;: Fast, simple, file-based.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kirby&lt;/strong&gt;: Beautiful UI, file-based, commercial license (~$129), highly respected by designers/devs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;static-site-generators-ssg&#34;&gt;Static Site Generators (SSG)&lt;a class=&#34;anchor&#34; href=&#34;#static-site-generators-ssg&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Jekyll&lt;/strong&gt;: GitHub Pages compatible.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hugo&lt;/strong&gt;: Blazing fast, Go-based.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Eleventy&lt;/strong&gt;: Flexible, JS-based.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Next.js&lt;/strong&gt;: React-based, hybrid.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;headless-cms-api-driven&#34;&gt;Headless CMS (API-Driven)&lt;a class=&#34;anchor&#34; href=&#34;#headless-cms-api-driven&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Directus&lt;/strong&gt;: Community favorite. Node.js/Vue.js. Provides REST/GraphQL APIs, beautiful admin UI. Excellent for full frontend control.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Strapi&lt;/strong&gt;: Most popular headless. Node.js/React. Strong plugin ecosystem.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Payload CMS&lt;/strong&gt;: Rising star. TypeScript-first, excellent DX.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ghost&lt;/strong&gt;: Primarily for blogging/publishing. Markdown-native.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Contentful/Sanity&lt;/strong&gt;: Enterprise/Developer friendly, but often cloud-hosted (though self-hostable options exist).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;custom--build-your-own&#34;&gt;Custom / Build-Your-Own&lt;a class=&#34;anchor&#34; href=&#34;#custom--build-your-own&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The Guardian&amp;rsquo;s &amp;ldquo;Composer&amp;rdquo;&lt;/strong&gt;: Fully custom-built in Scala/Play Framework. Not recommended for small projects.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Server-Side&lt;/strong&gt;: PHP includes, Python (Django/Flask), Node.js (Express).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;recommended-stack-for-ubuntu&#34;&gt;Recommended Stack for Ubuntu&lt;a class=&#34;anchor&#34; href=&#34;#recommended-stack-for-ubuntu&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;For Maximum Control &amp;amp; Flexibility&lt;/strong&gt;: Directus or Payload CMS.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;For Content-Focused Sites&lt;/strong&gt;: Kirby or Statamic.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;For API-Driven Projects&lt;/strong&gt;: Strapi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Quick Start (Directus on Ubuntu)&lt;/strong&gt;:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install -y nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm create directus-project@latest my-cms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd my-cms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npx directus start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;historical-notes&#34;&gt;Historical Notes&lt;a class=&#34;anchor&#34; href=&#34;#historical-notes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conversation date: 2025-11-17.&lt;/li&gt;&#xA;&lt;li&gt;User explicitly stated a preference against WordPress due to business practices.&lt;/li&gt;&#xA;&lt;li&gt;Focus remains on self-hosted, developer-respected tools.&lt;/li&gt;&#xA;&lt;li&gt;Note: Directus and Strapi have evolved significantly since late 2025; verify current self-hosting requirements, licensing, and Docker compatibility for homelab deployment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;hugo-specific-configuration&#34;&gt;Hugo-Specific Configuration&lt;a class=&#34;anchor&#34; href=&#34;#hugo-specific-configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;project-structure&#34;&gt;Project Structure&lt;a class=&#34;anchor&#34; href=&#34;#project-structure&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;myblog/&#xA;├── config.toml   -- Main configuration (baseURL, languageCode, title, theme)&#xA;├── content/      -- Blog posts in Markdown&#xA;├── themes/       -- Installed themes (git submodules)&#xA;├── static/       -- Static assets (images, JS, CSS)&#xA;└── public/       -- Generated static files (deployed to Nginx)&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;key-configtoml-settings&#34;&gt;Key config.toml Settings&lt;a class=&#34;anchor&#34; href=&#34;#key-configtoml-settings&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;baseURL&lt;/code&gt; — Domain URL (e.g., &lt;code&gt;https://blog.nbkelley.com&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;theme&lt;/code&gt; — Must match theme folder name in &lt;code&gt;themes/&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;buildDrafts&lt;/code&gt; — &lt;code&gt;true&lt;/code&gt; during development, &lt;code&gt;false&lt;/code&gt; for production&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;paginate&lt;/code&gt; — Posts per page&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;creating-posts&#34;&gt;Creating Posts&lt;a class=&#34;anchor&#34; href=&#34;#creating-posts&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo new posts/my-post.md  &lt;span style=&#34;color:#75715e&#34;&gt;# Draft in content/posts/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo -D                     &lt;span style=&#34;color:#75715e&#34;&gt;# Build including drafts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo                        &lt;span style=&#34;color:#75715e&#34;&gt;# Production build to public/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;deployment-options&#34;&gt;Deployment Options&lt;a class=&#34;anchor&#34; href=&#34;#deployment-options&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Manual rsync&lt;/strong&gt;: &lt;code&gt;rsync -avz --delete public/ user@server:/var/www/html/blog&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Git webhook&lt;/strong&gt;: Server-side script that &lt;code&gt;git pull &amp;amp;&amp;amp; hugo &amp;amp;&amp;amp; cp -r public /var/www/html/blog&lt;/code&gt; on push&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cloudflare Pages&lt;/strong&gt;: Push Hugo source to GitHub, Cloudflare builds and deploys automatically&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;comments-for-static-sites&#34;&gt;Comments for Static Sites&lt;a class=&#34;anchor&#34; href=&#34;#comments-for-static-sites&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Utterances&lt;/strong&gt; — GitHub issues-based, no backend&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Disqus&lt;/strong&gt; — Traditional, JS-based&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hyvor Talk&lt;/strong&gt; — Self-hostable alternative&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-pages&#34;&gt;Related Pages&lt;a class=&#34;anchor&#34; href=&#34;#related-pages&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/services/hugo-cloudflare-pages/&#34;&gt;Hugo Deployment to Cloudflare Pages - Troubleshooting&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/development/hugo-git-submodule-pattern/&#34;&gt;Hugo Git Submodule Extraction Pattern&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/services/web-server-stack/&#34;&gt;Web Server Stack (Nginx + Apache)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&lt;a class=&#34;anchor&#34; href=&#34;#sources&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ingested/chats/106-Beginner Guide to Building Websites with Ubuntu.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ingested/chats/036-Setting Up Self-Hosted Blogs with Nginx.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;DeepSeek conversation: &amp;ldquo;Self-Hosted Websites on Ubuntu Server&amp;rdquo; (historical)&lt;/li&gt;&#xA;&lt;li&gt;DeepSeek conversation: &amp;ldquo;Setting Up Self-Hosted Blogs with Nginx&amp;rdquo; (chat 036)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
