</awol:Feed>
```
+The value of `rdf:about` on the root element needs to be the absolute
+U·R·L for your blog.
+
Your `entry.rdf` will look similar, but it needs a `sioc:content`
property :—
</awol:Entry>
```
+In this case, the `rdf:about` can be automatically filled in based on
+the path to the entry from the blog root.
+
As you can see from the above example, 🧸📔 Bjørn supports a
(nonstandard) `Markdown` value for `rdf:parseType` in addition to
`Literal`. Some words of caution regarding this :—
content will replace the first `<bjørn-content>` element. Metadata will
be inserted into the `<head>` for you automatically.
-To modify what content is generated, simply edit `build.js` :) .
+## 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");
+```
[CommonMark]: <https://commonmark.org>
[Deno]: <https://deno.land/>