# Feeds Hunim's feed system turns any directory into a blog with automatic post indexing and RSS feed generation. ## Enabling a feed Add an `index.md` to a directory with `type: feed` in its frontmatter: ``` src/ blog/ index.md ← type: feed first-post.md second-post.md ``` `src/blog/index.md`: ```markdown --- title: My Blog type: feed --- Welcome to my blog! ``` Hunim will: 1. Collect all `.md` files in `blog/` (except `index.md`) as posts. 2. Sort posts by `date` descending (newest first). 3. Render each post using `templates/blog_list.html` (if it exists). 4. Generate `public/blog/index.xml` — a valid RSS feed. ## Listing posts on the index page Instead of maintaining a list of links to your posts by hand, drop a `{{ .PostList }}` placeholder into the feed's `index.md`. Hunim replaces it with the sorted (newest-first) list of posts: ```markdown --- title: My Blog type: feed --- Welcome to my blog! {{ .PostList }} ``` Each post is rendered as a paragraph linking to the post, followed by its formatted publish date: ```html

Second Post November 19, 2024

Hello World July 29, 2024

``` Post titles are rendered as inline markdown, so backticks and other inline formatting in a title carry through. Dates are formatted as `Month d, yyyy`, matching the date shown on each post page. ## Feed template Create a template named after the feed directory with a `_list` suffix: | Feed directory | Template file | |----------------|---------------| | `src/blog/` | `templates/blog_list.html` | | `src/news/` | `templates/news_list.html` | | `src/articles/` | `templates/articles_list.html` | If the template does not exist, Hunim falls back to `templates/default.html`. Feed post templates can include Hugo-style `with` blocks to link between posts in the feed: ```html
{{ .Content }}
``` Posts are ordered newest-first, matching `{{ .PostList }}`. `{{ with .PrevInSection }}` renders only when there is an older neighboring post, so the newest post shows only that link. `{{ with .NextInSection }}` renders only when there is a newer neighboring post, so the oldest post shows only that link. ## Post frontmatter Each post should include `title`, `date`, and optionally `author` and `desc`: ```markdown --- title: My First Post author: Jane Doe date: Mon, 19 Nov 2024 12:00:00 PST desc: An introduction to my new blog. --- # My First Post Content goes here. ``` Posts without a `date` appear at the end of the list (after all dated posts). ### Excluding a post Set `desc: no-index` to keep a post out of both the RSS feed and the `{{ .PostList }}` index. The post is still built as a standalone page, but it also gets a `` tag so search engines skip it: ```markdown --- title: Draft Notes date: Mon, 19 Nov 2024 12:00:00 PST desc: no-index --- ``` ## RSS feed Hunim generates a standards-compliant RSS 2.0 feed at `{feeddir}/index.xml`. The feed uses: - `title` — from `hunim.toml` - `link` — from `baseURL` in `hunim.toml` - Each item's `title`, `link`, `pubDate`, and `description` — from post frontmatter ### Feed autodiscovery Hunim automatically advertises the feed for autodiscovery. Every page in a feed directory (the feed index and each post) gets a `` injected into its ``, as long as the template renders `{{ .MetaTags }}`: ```html ``` The `title` comes from the feed's `index.md` frontmatter and the `href` points at the generated `index.xml`. You don't need to add this tag yourself. ## Example structure ``` src/ blog/ index.md # type: feed hello-world.md second-post.md templates/ blog_list.html # Applied to individual posts public/ # Generated output blog/ index.html index.xml # RSS feed hello-world second-post ```