# Adding a Feed Post

The **Feed** section (`/feed/`) is for short announcements and social-media
style updates — things that don't warrant a full [`content/blog/`](../content/blog)
article, but are still worth publishing and syndicating via RSS.

Feed posts work exactly like blog posts (one markdown file per post, in its
own directory), but live under `content/feed/` instead of `content/blog/`,
and are published under `/feed/` instead of `/blog/`.

Both sections share a single combined RSS feed at
[`/rss.xml`](https://datacontroller.io/rss.xml) (see `gatsby-plugin-feed` in
[`gatsby-config.js`](../gatsby-config.js)), so a new Feed post automatically
appears in the RSS feed the next time the site is built — no extra
configuration required.

A visible "RSS Feed" link (pointing to `/rss.xml`) is rendered in two places
so visitors can discover and subscribe to it:

- The site-wide [`Footer`](../src/components/footer/index.tsx), under
  "Other Resources".
- The "Subscribe" section of the shared
  [`SideBar`](../src/templates/sidebar.tsx), shown on Blog and Feed list/post
  pages.

## 1. Create a new post directory

Create a new folder under `content/feed/`, named after the post slug (this
becomes the URL):

```
content/feed/my-new-announcement/index.md
```

## 2. Write the frontmatter + content

```md
---
title: 'My New Announcement'
description: A one or two sentence summary used for SEO and RSS.
date: '2024-06-01 09:00:00'
author: 'Your Name'
authorLink: https://www.linkedin.com/in/yourprofile/
tags:
  - Announcements
---

Your announcement content goes here, written in regular Markdown.
```

Notes on frontmatter fields:

| Field         | Required | Notes                                                                 |
| ------------- | -------- | ---------------------------------------------------------------------- |
| `title`       | Yes      | Post title, used on the page, in the sidebar and in the RSS item.      |
| `description` | Yes      | Short summary, used for SEO meta tags and the RSS item description.    |
| `date`        | Yes      | Format `'YYYY-MM-DD HH:MM:SS'`. Controls sort order and the archive.   |
| `author`      | Yes      | Displayed under the post title.                                        |
| `authorLink`  | No       | If set, the author name links out (e.g. to a LinkedIn profile).        |
| `tags`        | Yes      | One or more tags. Used for the sidebar category list and RSS `<category>`. |
| `previewImg`  | No       | Optional relative path to an image in the same folder (e.g. `'./cover.png'`). Feed posts commonly omit this since they're short-form. |

## 3. Add any images (optional)

If you use `previewImg` or reference images in the body, place the image
files in the same post directory and reference them with a relative path,
the same as for blog posts.

## 4. Build / preview

```shell
npm run develop
```

Your new post will be available at `/my-new-announcement/`, and will appear:

- On the [`/feed/`](https://datacontroller.io/feed/) listing page (with
  pagination, sidebar archives and tag categories under `/feed/...`).
- In the site search index.
- In the combined RSS feed at `/rss.xml`, alongside blog posts.

## How it differs from a Blog post

| Aspect            | Blog                          | Feed                              |
| ------------------ | ------------------------------ | ----------------------------------- |
| Content directory  | `content/blog/`                | `content/feed/`                     |
| Listing page        | `/blog/`                       | `/feed/`                            |
| Year archive        | `/{year}/`                     | `/feed/{year}/`                     |
| Category page       | `/category/{tag}/`             | `/feed/category/{tag}/`             |
| Template            | `src/templates/blog-post.tsx`, `src/templates/blog-list.tsx` | `src/templates/feed-post.tsx`, `src/templates/feed-list.tsx` |
| RSS                 | Included in `/rss.xml`         | Included in `/rss.xml`              |

Feed archive/category routes are prefixed with `/feed/` specifically to avoid
colliding with the equivalent Blog routes, since both content types are
rendered by the shared [`src/templates/sidebar.tsx`](../src/templates/sidebar.tsx)
component (via its `basePath` prop).
