<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Operations on OINK</title><link>https://lxghost.github.io/docs/admin/</link><description>Recent content in Operations on OINK</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 28 Aug 2026 00:08:16 +0800</lastBuildDate><atom:link href="https://lxghost.github.io/docs/admin/index.xml" rel="self" type="application/rss+xml"/><item><title>Local preview</title><link>https://lxghost.github.io/docs/admin/preview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/admin/preview/</guid><description>&lt;p&gt;Two commands cover the daily work: &lt;code&gt;hugo server&lt;/code&gt; previews changes locally, and&#10;&lt;code&gt;hugo&lt;/code&gt; produces a &lt;code&gt;public/&lt;/code&gt; deployable to any static host. The prerequisite is&#10;Hugo Extended (0.160.1 or newer) on the machine, plus Go&#10;when the theme comes in as a Hugo Module. The build depends on no Node.js, npm&#10;or PostCSS — those serve only this repository&amp;rsquo;s own regression checks.&lt;/p&gt;&#10;&lt;h2 id="hugo-server"&gt;The preview server&#10;&lt;/h2&gt;&#10;&lt;p&gt;From the site root (the directory holding &lt;code&gt;hugo.yml&lt;/code&gt;):&lt;/p&gt;</description></item><item><title>Deploy</title><link>https://lxghost.github.io/docs/admin/deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/admin/deploy/</guid><description>&lt;p&gt;An OINK site&amp;rsquo;s output is a plain static directory, deployable anywhere that&#10;hosts static files, with no Node runtime, no server-side rendering and no build&#10;plugin. The host&amp;rsquo;s side is three things: run one command with the right Hugo&#10;version, publish &lt;code&gt;public/&lt;/code&gt;, and keep &lt;code&gt;baseURL&lt;/code&gt; matching the final address.&lt;/p&gt;&#10;&lt;p&gt;The prerequisite is a warning-free&#10;&lt;a href="https://lxghost.github.io/docs/admin/preview/#production-build"&gt;production build&lt;/a&gt; locally.&lt;/p&gt;&#10;&lt;h2 id="baseurl"&gt;Getting baseURL right&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;baseURL&lt;/code&gt; is the commonest source of failure, and it fails quietly: the page&#10;opens, but the search index 404s, page action links point at the wrong place,&#10;and some assets do not load.&lt;/p&gt;</description></item><item><title>Comments</title><link>https://lxghost.github.io/docs/admin/comments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/admin/comments/</guid><description>&lt;p&gt;OINK&amp;rsquo;s comments run on &lt;a href="https://giscus.app/"&gt;giscus&lt;/a&gt;: each page maps to one&#10;GitHub Discussion, readers sign in with a GitHub account to post, and&#10;maintainers moderate in GitHub Discussions. The theme provides no comment&#10;backend of its own and bundles no provider other than giscus.&lt;/p&gt;&#10;&lt;p&gt;The prerequisite is a public GitHub repository; a visitor cannot read a private&#10;repository&amp;rsquo;s Discussions.&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;This is one of the few features in the theme that makes an outbound request&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;A page with comments enabled loads a script and an iframe from&#10;&lt;code&gt;https://giscus.app&lt;/code&gt;, which does not work in a network-isolated environment.&#10;It is off by default and loads only when explicitly enabled. Where a site has&#10;a privacy policy, this external data boundary belongs in it.&lt;/p&gt;</description></item><item><title>Analytics and SEO</title><link>https://lxghost.github.io/docs/admin/analytics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/admin/analytics/</guid><description>&lt;p&gt;The theme loads no analytics, form or advertising script by default, and makes&#10;no outbound request until configured. Connecting one takes explicit&#10;configuration, and that external data boundary belongs in the site&amp;rsquo;s privacy&#10;statement. SEO is the opposite: canonical, hreflang, the &lt;code&gt;robots&lt;/code&gt; meta, Open&#10;Graph and Twitter cards are generated per page by the theme, and what you have&#10;to get right is &lt;code&gt;baseURL&lt;/code&gt; and each page&amp;rsquo;s &lt;code&gt;description&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="google-analytics"&gt;Connecting Google Analytics&#10;&lt;/h2&gt;&#10;&lt;p&gt;Use Hugo&amp;rsquo;s built-in service configuration with a GA4 measurement ID:&lt;/p&gt;</description></item><item><title>Upgrade</title><link>https://lxghost.github.io/docs/admin/upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/admin/upgrade/</guid><description>&lt;p&gt;Upgrading OINK is changing one pinned module version and confirming the site&#10;still builds warning-free. Most content needs no change; where it does — 0.4&#10;shortcodes becoming v5&amp;rsquo;s native Markdown forms — a dry-run-first migration tool&#10;does it, so hundreds of files need not be edited by hand.&lt;/p&gt;&#10;&lt;p&gt;An upgrade changes rendered output. Create an upgrade branch before starting,&#10;and the cost of backing out is discarding a branch.&lt;/p&gt;&#10;&lt;h2 id="release-notes"&gt;Read the release notes first&#10;&lt;/h2&gt;&#10;&lt;p&gt;Every version&amp;rsquo;s changes, breaking changes and upgrade notes are in its release&#10;notes; read the target version&amp;rsquo;s before upgrading:&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://lxghost.github.io/docs/admin/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/admin/troubleshooting/</guid><description>&lt;p&gt;When something goes wrong, run a clean production build first and read from the&#10;first error; the ones after it are usually cascades:&lt;/p&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-16e2780a-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="2" role="group" aria-labelledby="td-code-16e2780a-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-16e2780a-fence-0-title" title="Terminal"&gt;Terminal&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-16e2780a-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf public resources/_gen&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo --gc --minify --printPathWarnings --panicOnWarning --logLevel info&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;An npm, PostCSS, Autoprefixer or browser-asset download step in the log means&#10;upstream Docsy&amp;rsquo;s process has crept into the configuration. A consuming OINK&#10;build is one Hugo command.&lt;/p&gt;&#10;&lt;p&gt;The four tables below are organized as symptom → cause → fix. Find the symptom&#10;row; there is no need to read from the top.&lt;/p&gt;</description></item></channel></rss>