Skip to content

RSS feeds, spam check before publishing, light/dark switch - #4

Merged
fdb merged 4 commits into
mainfrom
claude/forum-rss-9f30eg
Oct 16, 2026
Merged

fdb merged 4 commits into
mainfrom
claude/forum-rss-9f30eg

Conversation

@fdb

@fdb fdb commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Before: the only way to follow the forum was to sign in and watch topics by email. A post the spam filter refused was stored visible and hidden a moment later, and nobody heard about it when the filter was down. In read-only mode a new member couldn't get past the name form. Dark mode followed the device only.

After: RSS 2.0 feeds under /feeds, listed on a new /feeds page under Help:

  • whole forum: new topics (/feeds/topics), every post (/feeds/posts), unanswered (/feeds/unanswered)
  • per category, archive included: new topics (/feeds/c/<slug>) or every post (/feeds/c/<slug>/posts)
  • one topic's replies (/feeds/t/<id>)
  • new posts matching a search (/feeds/search?q=…)

Every page announces its own feed with <link rel="alternate">, and lists and topics get a quiet RSS button. Refused posts are stored hidden from the start, so no page or feed can catch them; when the Anthropic API fails the admins get an email (at most one every six hours) while posts keep going out unchecked. Read-only mode lets /settings through. A sun/moon button in the header switches between light and dark; without a choice the device decides.

How: web/src/feeds.ts has the queries and the XML. Items carry the whole post in content:encoded (absolute links, images, attachment links) and a short excerpt in description; /p/<id> is a new stable link to a post. Feeds only show visible posts in visible topics, also to admins, are cached for five minutes and answer If-Modified-Since with a 304. createTopic/createReply take the filter's verdict and insert a refused post as spam without touching counts or watches. The theme choice is a cookie the server reads into <html data-theme>, so there is no flash; choosing the device's own mode again clears it.

New topics, every post and unanswered topics for the whole forum; new
topics or every post per category; replies to one topic; new posts
matching a search. Items carry the whole post with absolute links and its
attachments, and /p/<id> gives each post a stable link. Every page
announces its feed with <link rel="alternate"> and gets a quiet RSS
button; /feeds lists them all. Feeds show only visible posts, are cached
for five minutes and answer If-Modified-Since.
@fdb fdb changed the title Add RSS 2.0 feeds for topics, posts, and searches Add RSS feeds Oct 16, 2026
…spam filter is down

A refused post used to be stored visible and hidden a moment later, so a
reader or a feed fetched in between could see it. Now it is inserted as spam
and never touches the topic or category counts.

When the Anthropic API errors or times out, posts still go out unchecked, but
the admins get an email about it, at most one every six hours.
@fdb fdb changed the title Add RSS feeds Add RSS feeds; keep refused spam out of them Oct 16, 2026

fdb commented Oct 16, 2026

Copy link
Copy Markdown
Member Author

Workers Builds: nodebox-forum failed on 28f5625. It doesn't look like this PR's code: npm run ci:build (typecheck, tests, client build) and wrangler deploy --dry-run both pass locally on this commit, and the GitHub test job is green. The build log is only in the Cloudflare dashboard, which I can't open. web/DEPLOY.md says non-production branch builds are off, so the failure is probably Cloudflare refusing a branch build. Worth checking that a branch build can't run ci:deploy.


Generated by Claude Code

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🚀 Deploying Preview to Cloudflare 🚀

Preview Deployments by commit

Status Deployment URL Commit Updated (UTC) See this deployment's details
  • Build: Failed ❌

View logs ↗
ad4a248 2026-10-16T16:02:34.540Z View logs ↗
  • Build: Failed ❌

View logs ↗
28f5625 2026-10-16T15:35:04.761Z View logs ↗

The first sign-in ends on the name form, which saves through /settings, so
read-only mode turned new members away at the last step. Settings don't touch
posts, so they don't get in the way of the final import.
The sun/moon button switches to the other mode and remembers it in a cookie,
which the server reads so the page renders in the right mode without a flash.
Without a choice the device decides; picking the device's own mode again
forgets the choice.
@fdb fdb changed the title Add RSS feeds; keep refused spam out of them RSS feeds, spam check before publishing, light/dark switch Oct 16, 2026
@fdb
fdb merged commit 829250e into main Oct 16, 2026
1 of 2 checks passed
@fdb
fdb deleted the claude/forum-rss-9f30eg branch October 16, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants