+## Serving Content
+
+You will need a file server which supports index files with a `.xhtml`
+file extension. A sample `.rsync-filter` might be as follows :—
+
+```rsync-filter
+- /.rsync-filter
+-s .git
+-s .gitignore
+-s /README*
+-s /build.js
+-s /deno.json
+-s index#*.xhtml
+-s #*.rdf
+```
+
+## Customization
+
+Feel free to add styles, additional content, and whatever else you like
+to the template files (as well as the rest of the website).
+
+### Hooks
+
+🧸📔 Bjørn recognizes the following hooks (defined on the global
+object) when it runs :—
+
+- **`globalThis.bjørnTransformEntryHTML(document, metadata)`:**
+ Receives a document and a metadata object for each generated HTML
+ entry.
+
+- **`globalThis.bjørnTransformFeedAtom(document, metadata)`:** Receives
+ a document and a metadata object for each generated Atom feed index.
+
+- **`globalThis.bjørnTransformFeedHTML(document, metadata)`:** Receives
+ a document and a metadata object for each generated HTML feed index.
+
+- **`globalThis.bjørnTransformHead(headElement, metadata, type)`:**
+ Receives a `<head>` element, a metadata object, and a type value of
+ either `"entry"` or `"feed"`.
+
+- **`globalThis.bjørnTransformMetadata(metadata, type)`:** Receives a
+ metadata object, and a type value of either `"entry"` or `"feed"`.
+ Use this to provide any initial transformations to the metadata prior
+ to document generation.
+
+Naturally, when running 🧸📔 Bjørn normally from the command line, all
+of these hooks are undefined. You can write your own small build script
+to define them, and run that instead :—
+
+```js
+#!/usr/bin/env -S deno run --allow-read --allow-write
+// custom_build.js
+
+// Define your hooks first…
+globalThis.bjørnTransformHead = (headElement, metadata, type) => {
+ Array.from(headElement.children)
+ .find(($) => $.localName == "title")
+ .textContent += " | My Cool Site";
+};
+
+// Then run the script…
+await import("./build.js");
+```