<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Neo-CMS</title>
  <link>https://neo-cms.neocities.org/</link>
  <description>A tiny flat-file CMS for Neocities. Drop files in /content and list them here.</description>
  <lastBuildDate>Mon, 16 Mar 2026 23:21:38 +0000</lastBuildDate>
  <atom:link href="https://neo-cms.neocities.org/feed.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>Neo-CMS</title>
    <link>https://neo-cms.neocities.org#home</link>
    <guid isPermaLink="true">https://neo-cms.neocities.org#home</guid>
    <description>A tiny flat-file CMS for Neocities.</description>
    <content:encoded><![CDATA[Welcome to [Neo-CMS](https://github.com/CrowderSoup/Neo-CMS), a tiny flat-file CMS made for Neocities. It is a single `index.html` file that reads markdown from `/content` and renders it as static HTML in the browser.

- Drop a new `.md` file inside `/content`.
- Add it to `content/index.json`.
- Add front matter (title, slug, description, menu). Done.

---

## What you get

- Markdown rendering for headings, lists, links, and code.
- Hash-based routing so every page has a shareable URL.
- No build step, no dependencies, no database.
- Minimal IndieWeb affordances like `rel="me"` links.
- Webmentions via `webmention.io`.

> This stays intentionally small. Tweak the HTML, adjust the CSS, and make it your own.

## What this is not

- Not a full-featured CMS.
- Not WordPress, Ghost, or a site builder.
- Not meant for plugins or multi-user workflows.

## Example code

```
const words = ["plain", "fast", "cute"];
console.log(words.join(" / "));
```

## Links

Check out [Neocities](https://neocities.org) or add your own links here.]]></content:encoded>
  </item>
  <item>
    <title>How it works</title>
    <link>https://neo-cms.neocities.org#how-it-works</link>
    <guid isPermaLink="true">https://neo-cms.neocities.org#how-it-works</guid>
    <description>Put files in /content. Add them here. Done.</description>
    <content:encoded><![CDATA[This is a single HTML file that reads markdown files with `fetch()` and renders them as static HTML. It is designed for simple personal sites on Neocities.

## The flow

1. Open `content/index.json`.
2. Add your markdown file path to the `files` array.
3. Add YAML front matter to the markdown file.
4. Refresh the page.

## Why it is simple

- There is no build step.
- There is no database.
- You control the file structure.

> If you want to keep it even simpler, remove the descriptions and let the first `#` heading be the page title.

## IndieWeb support (minimal)

Neo-CMS includes a few IndieWeb affordances without any heavy federation.

### IndieAuth identity links

Add `rel="me"` links in `index.html` so other sites can verify your identity when you sign in elsewhere. There is no login UI here.

Update `content/index.json` with your live URL so webmention targets resolve correctly:

```
"url": "https://example.com"
```

### Webmentions

Neo-CMS uses [webmention.io](https://webmention.io/) to receive inbound webmentions. Add your site on webmention.io, then paste the endpoint into `content/index.json` and `index.html`:

```
"webmentionEndpoint": "https://webmention.io/example.com/webmention"
```

```
<link rel="webmention" href="https://webmention.io/example.com/webmention" />
<link rel="pingback" href="https://webmention.io/example.com/xmlrpc" />
```

When another site links to a page, its webmention appears beneath the content as a reaction or comment.

If a page needs a custom target URL, add a `url` field to its front matter. Neo-CMS uses it when querying webmention.io.]]></content:encoded>
  </item>
  <item>
    <title>Notes</title>
    <link>https://neo-cms.neocities.org#notes</link>
    <guid isPermaLink="true">https://neo-cms.neocities.org#notes</guid>
    <description>Loose thoughts, quick updates, and drafts.</description>
    <content:encoded><![CDATA[Small scraps of content. Replace this with your own notes.

- Write short updates.
- Keep a list of links.
- Paste a quote you like.

> "Nothing fancy. Just files." - you, probably]]></content:encoded>
  </item>
  <item>
    <title>Changelog</title>
    <link>https://neo-cms.neocities.org#changelog</link>
    <guid isPermaLink="true">https://neo-cms.neocities.org#changelog</guid>
    <description>Tiny release log.</description>
    <content:encoded><![CDATA[## 0.2

- Dynamic `<title>` and Open Graph meta tags updated on every navigation
- RSS feed (`feed.xml`) generated at deploy time via `scripts/generate_feed.py`
- Sitemap (`sitemap.xml`) generated at deploy time via `scripts/generate_sitemap.py`
- Microformats2 support: `h-card` on the brand card, `h-entry` wrapping each page
- RSS autodiscovery `<link>` in `<head>` and RSS link in the site footer
- `author` config in `content/index.json` under `indieweb`
- Content linter (`scripts/validate.py`) runs before deploy and fails CI on errors
- CI pipeline updated with validate, generate-feed, and generate-sitemap steps

## 0.1

- Initial structure
- Basic markdown parsing
- Styled layout
- Minimal IndieAuth `rel="me"` identity links
- Webmention.io for inbound mentions]]></content:encoded>
  </item>
</channel>
</rss>
