---
title: "Your [Sad And Shallow] Moat Is Gone"
description: "How I replaced Inoreader's paid programmatic RSS feature in three minutes using Val Town and Townie, plus a self-hosted Go fallback — and why SaaS paywalls on commodity features are indefensible moats."
pubDatetime: 2026-05-02T10:00:00Z
author: hrbrmstr
tags: ["rss", "val-town", "inoreader", "webflow", "aisi", "web-scraping", "saas", "golang", "townie", "ai-agents"]
---
> Original: [Your [Sad And Shallow] Moat Is Gone](https://ai.rud.is/posts/2026-05-02-your-moat-is-gone)

I was reading the U.K. government's AI Security Institute (AISI) [evaluation of OpenAI's GPT-5.5 cyber capabilities](https://www.aisi.gov.uk/blog/our-evaluation-of-openais-gpt-5-5-cyber-capabilities) after tapping the link in a post on Mastodon. After scanning it, I wondered why I didn't have the blog in my Inoreader RSS feed, when I got reminded by Inoreader as to the reason:

![Inoreader showing no RSS feed for AISI's blog](./img/moat-01.png)

AISI sadly uses WebFlow _(I have no idea why anyone uses that daft platform for blog content; I helped maintain the blog for my previous employer for the first two years of my employ there and WebFlow is just plain terrible bloatware.)_, and you have to do some machinations to get it to also spit out an RSS feed from their "collections".

I tapped the "Create Web feed" button _(TIL "Sentence case" for buttons is the widely recommended default, made popular by Google's Material Design, Apple's HIG, and other contemporary design systems)_ since that's one reason I use Inoreader _(yes, I know FreshRSS can do that too but I'm a die-hard Inoreader user)_:

![Inoreader showing it was able to create a web feed](./img/moat-02.png)

Even before their use of "AI", Inoreader was pretty good at finding the right HTML elements to use as components for a scraped feed.

I happily tapped "Follow feed" button:

![Inoreader trying to grift more money out of me](img/moat-03.png)

and then remembered why it was not in my feed.

I am not giving Inoreader any more money just for the privilege of having more programmtic RSS feeds. So, I headed over to [Val Town](https://www.val.town/). In their own parlance, it's the "Zapier for know-code engineers". I've been using them off and on for a few years because the CEO is a great communicator, understands builders, and is neither afraid of "AI" nor has "AI Psychosis" _(like a few of my former work colleages desperately, obviously have)_.

Val Town has had their own agent — Townie — since I started using their service. Even a few years ago, they did a a bang up job with it's system prompts and tools that it ended up being a great way to both shortcut create a quick app, and then quickly add features to any app. It also comes with SQLite databases for each Val, the ability to run jobs on a timer, and a bunch more features _(this post is not an advert for Val Town, so you can poke at what else it has on your own)_.

I looked at the HTML structure _(NOTE: if you come across a WebFlow-based blog, do "view source" vs "inspect element" since they do love their needless post-load javascript machinations)_, and then gave Townie this prompt:

>`https://www.aisi.gov.uk/blog has no RSS feed. We need to build a Val that will expose an RSS feed for it.`
>
>`The structure is clean and highly iterable—each entry has consistent element ordering. You can reliably grab generics by index since they appear in the same sequence for every entry.`
>
>`Let's use SQLite to keep a database of blog entries and run this once every day to scrape and store the latest entries then when a user requests the RSS feed, we can serve it from the database.`

~Three-minutes later, the feed had a [landing page](https://hrbrmstr--a9fd1110460d11f1b63242b51c65c3df.web.val.run/)

![Val Town AISI RSS App Landing Page](img/val-town-rss-app-landing-page.png)

an actual RSS feed: <https://hrbrmstr--a9fd1110460d11f1b63242b51c65c3df.web.val.run/feed>, and entries in Inoreader:

![Inoreader article listing for AISI's blog](img/moat-04.png)

The Val Town cron job was automatically set up and given a first run, and I even have a nice architecture flowchart:

![Flowchart of how the app works](img/val-town-aisi-flowchart.png)

| File | Type | Role |
|------|------|------|
| `feed.ts` | HTTP | Serves RSS at `/feed` and a landing page at `/` |
| `cron.ts` | Interval | Runs **daily** to scrape the blog |
| `scraper.ts` | Script | Parses the Webflow HTML using Cheerio, upserts to SQLite |
| `rss.ts` | Script | Generates valid RSS 2.0 XML from the database |
| `main.ts` | Script | One-time DB schema setup (already run) |


By default, Val Town projects are public, so you can [see all the work Townie did](https://www.val.town/x/hrbrmstr/aisi-rss).

If you bring your own agent (which I could have done with Ollama-via-OpenCode wired up to Val Town's excellent MCP or CLI), Val Town is free _(though access to Townie, the ability to have private Vals, custom domains, and more is 100% worth the super cheap annual sub)_.

I didn't even bother to spend the same likely three-minutes digesting how much Inoreader would have wanted to charge me so I could get more programmatic feed credits. It likely would have cost as much as the Val Town annual sub, where I get unlimited programmatic RSS feeds for free.

While Townie was cranking, I also used OpenCode and MiniMax 2.7 to wire up a proper [Golang feed generator](https://git.sr.ht/~hrbrmstr/aisi-blog-fetcher) for the AISI blog so I can self-host it for "free" in the event Val Town ever goes away.

If Inoreader's _(or any other SaaS)_ business model _relies_ on nickle-and-diming users for features like this, they have no moat. In fact, I can help drain this particular moat by offering to set up programamtic feeds for anyone _(yay unlimited Vals)_ if they run into a sad blog or site that refuses to do the right thing and have RSS feeds.

