From 12e5f75d4b178e7be8c91cc69a0c9f81665f9fb2 Mon Sep 17 00:00:00 2001
From: Anthony Ettinger
Date: Wed, 4 Nov 2026 00:11:10 +0000
Subject: [PATCH] Rebrand rssamplifier.com to rssamp.com
Public URLs, contact addresses and the display name move to rssamp.com and
RSSAmp. Deliberately unchanged: the GitHub repo URL, deploy paths, migrations,
the BullMQ queue name, the dataset corpus name, the x402 site key and the
RSSAmplifierBot token that webmasters match in robots.txt.
The OpenAccess client id moves too, because the callback is built from it and
rssamplifier.com will not be renewed.
Co-Authored-By: Claude Opus 5.5
---
.env.example | 4 ++--
.github/workflows/deploy-dev2.yml | 8 ++++----
README.md | 12 +++++------
apps/cli/README.md | 8 ++++----
apps/cli/package.json | 2 +-
apps/cli/src/index.js | 2 +-
apps/poller/src/index.js | 4 ++--
apps/web/next.config.mjs | 4 ++--
apps/web/public/.well-known/openaccess.json | 8 ++++----
apps/web/public/.well-known/openmcp.json | 6 +++---
apps/web/public/manifest.webmanifest | 2 +-
.../app/.well-known/openwebring.json/route.js | 4 ++--
.../src/app/.well-known/security.txt/route.js | 2 +-
apps/web/src/app/AddSocialSource.jsx | 2 +-
apps/web/src/app/CategoryIndex.jsx | 2 +-
apps/web/src/app/DockPlayer.jsx | 2 +-
apps/web/src/app/PitFooter.jsx | 2 +-
apps/web/src/app/SignupProfileFields.jsx | 2 +-
apps/web/src/app/[slug]/page.jsx | 2 +-
apps/web/src/app/about/page.jsx | 4 ++--
apps/web/src/app/advertise/page.jsx | 4 ++--
apps/web/src/app/api/dataset/route.js | 2 +-
.../app/api/following/feed/[format]/route.js | 6 +++---
apps/web/src/app/api/frame/route.js | 2 +-
apps/web/src/app/api/v1/daemon/route.js | 2 +-
apps/web/src/app/contact/page.jsx | 10 +++++-----
apps/web/src/app/crawlstats/page.jsx | 2 +-
apps/web/src/app/discover/page.jsx | 2 +-
apps/web/src/app/discoveries/[id]/page.jsx | 2 +-
apps/web/src/app/ig/page.jsx | 2 +-
apps/web/src/app/install.sh/route.js | 2 +-
apps/web/src/app/layout.jsx | 16 +++++++--------
apps/web/src/app/mcp/page.jsx | 4 ++--
apps/web/src/app/newsletter/manage/page.jsx | 4 ++--
apps/web/src/app/newsletter/page.jsx | 2 +-
apps/web/src/app/opengraph-image.jsx | 4 ++--
apps/web/src/app/opml/route.js | 10 +++++-----
apps/web/src/app/page.jsx | 6 +++---
apps/web/src/app/podcasts/page.jsx | 2 +-
apps/web/src/app/privacy/page.jsx | 8 ++++----
.../comments/[id]/[[...slug]]/page.jsx | 4 ++--
apps/web/src/app/r/page.jsx | 2 +-
.../src/app/ring/leaders/[[...path]]/route.js | 6 +++---
apps/web/src/app/ring/new/page.jsx | 2 +-
apps/web/src/app/sales/page.jsx | 12 +++++------
apps/web/src/app/search/page.jsx | 2 +-
apps/web/src/app/skill.md/route.js | 2 +-
apps/web/src/app/submissions/[id]/page.jsx | 2 +-
apps/web/src/app/submit/page.jsx | 8 ++++----
apps/web/src/app/terms/page.jsx | 4 ++--
.../src/app/topics/[keyword]/[group]/page.jsx | 2 +-
apps/web/src/app/topics/[keyword]/page.jsx | 2 +-
apps/web/src/app/view/[slug]/page.jsx | 2 +-
apps/web/src/app/x/page.jsx | 2 +-
apps/web/src/lib/apiguard.js | 4 ++--
apps/web/src/lib/authorRiver.js | 6 +++---
apps/web/src/lib/challenge.js | 2 +-
apps/web/src/lib/crawl-gateway.js | 4 ++--
apps/web/src/lib/dataset.js | 4 ++--
apps/web/src/lib/db.js | 2 +-
apps/web/src/lib/directoryRiver.js | 10 +++++-----
apps/web/src/lib/feedRiver.js | 2 +-
apps/web/src/lib/frameRemoval.js | 2 +-
apps/web/src/lib/frameable.js | 2 +-
apps/web/src/lib/leaderboard.js | 2 +-
apps/web/src/lib/llms.js | 2 +-
apps/web/src/lib/mcp/server.js | 6 +++---
apps/web/src/lib/mcp/tools.js | 4 ++--
apps/web/src/lib/newsletterApi.js | 2 +-
apps/web/src/lib/openaccess.js | 4 ++--
apps/web/src/lib/partners.js | 2 +-
apps/web/src/lib/profileAuth.js | 2 +-
apps/web/src/lib/ringLeaderboard.js | 2 +-
apps/web/src/lib/salesContact.js | 8 ++++----
apps/web/src/lib/searchRiver.js | 4 ++--
apps/web/src/lib/signInForm.js | 2 +-
apps/web/src/lib/socialPage.js | 4 ++--
apps/web/src/lib/socialRiver.js | 2 +-
apps/web/src/lib/thumbs.js | 2 +-
apps/web/src/lib/topicFeed.js | 6 +++---
apps/web/src/proxy.js | 10 +++++-----
apps/web/test/authThrottle.test.js | 6 +++---
apps/web/test/challenge.test.js | 4 ++--
apps/web/test/crawl-gateway.test.js | 12 +++++------
apps/web/test/crawlThrottle.test.js | 8 ++++----
apps/web/test/following-filter.test.js | 16 +++++++--------
apps/web/test/following.test.js | 4 ++--
apps/web/test/frame-removal.test.js | 2 +-
apps/web/test/mcp.test.js | 2 +-
apps/web/test/openprofile.test.js | 2 +-
apps/web/test/openwebring.test.js | 4 ++--
apps/web/test/paid-tier.test.js | 2 +-
apps/web/test/player.test.js | 4 ++--
apps/web/test/ring-embed.test.js | 4 ++--
apps/web/test/share.test.js | 2 +-
apps/web/test/subscribe.test.js | 6 +++---
apps/web/test/tiers.test.js | 6 +++---
apps/web/test/topic-set.test.js | 6 +++---
apps/web/test/webhooks.test.js | 2 +-
packages/auth/src/magic.js | 8 ++++----
packages/auth/src/passkey.js | 2 +-
packages/auth/test/apikey.test.js | 4 ++--
packages/auth/test/auth.test.js | 18 ++++++++---------
packages/feed/package.json | 2 +-
packages/feed/src/extract.js | 2 +-
packages/feed/src/fetch.js | 3 +--
packages/feed/src/frameable.js | 6 +++---
packages/feed/src/opml.js | 4 ++--
packages/feed/src/parse.js | 2 +-
packages/feed/src/reframe.js | 4 ++--
packages/feed/src/sanitize.js | 2 +-
packages/feed/src/syndicate.js | 4 ++--
packages/feed/test/frameable.test.js | 14 ++++++-------
packages/feed/test/parse.test.js | 2 +-
packages/feed/test/reframe.test.js | 6 +++---
packages/feed/test/sanitize.test.js | 2 +-
packages/feed/test/syndicate-ads.test.js | 6 +++---
packages/feed/test/syndicate.test.js | 20 +++++++++----------
packages/ingest/src/notify.js | 8 ++++----
packages/ingest/src/webring.js | 2 +-
packages/mail/src/send.js | 2 +-
packages/notify/scripts/vapid.js | 2 +-
packages/notify/src/hooks.js | 2 +-
packages/notify/src/newsletter.js | 12 +++++------
packages/notify/src/render.js | 2 +-
packages/notify/src/webpush.js | 2 +-
packages/notify/test/deliver.test.js | 2 +-
packages/social/src/facebook/fetch.js | 4 ++--
packages/social/src/instagram/fetch.js | 4 ++--
packages/social/src/reddit/fetch.js | 4 ++--
packages/social/src/x/normalize.js | 12 +++++------
packages/social/src/x/providers/http.js | 2 +-
scripts/seed-rings.mjs | 2 +-
133 files changed, 296 insertions(+), 297 deletions(-)
diff --git a/.env.example b/.env.example
index a0a8cf42..3454e302 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,4 @@
-# rssamplifier.com — copy to .env and fill in.
+# rssamp.com — copy to .env and fill in.
# Team copy lives in logicsrc: `logicsrc teams pull profullstack rssamplifier-com prod`
# PostgreSQL. `sslmode=require` asks for TLS without verifying the certificate,
@@ -24,7 +24,7 @@ CRAWL_AUXILIARY_WRITES=1
CRAWL_CATCHUP=0
# Public origin, used for canonical URLs, OPML, llms.txt and JSON-LD.
-SITE_URL=https://rssamplifier.com
+SITE_URL=https://rssamp.com
# Selling crawl access to AI training crawlers (GPTBot, ClaudeBot, CCBot,
# meta-externalagent, …): a dollar buys a day, settled in USDC by CoinPay. See
diff --git a/.github/workflows/deploy-dev2.yml b/.github/workflows/deploy-dev2.yml
index 23f2cc1e..ffadd2e4 100644
--- a/.github/workflows/deploy-dev2.yml
+++ b/.github/workflows/deploy-dev2.yml
@@ -1,4 +1,4 @@
-# Ship every merge to dev2, where rssamplifier.com runs since 2026-09-25 (it was
+# Ship every merge to dev2, where rssamp.com runs since 2026-09-25 (it was
# two Railway services, which deployed on merge by themselves). The box pulls the
# merged commit, rebuilds the web and poller images from the repo's Dockerfiles
# and restarts the compose stack under /home/anthony/www/rssamplifier.com.
@@ -52,8 +52,8 @@ jobs:
- name: Verify the site answers
run: |
for i in $(seq 1 10); do
- code=$(curl -s -o /dev/null -w '%{http_code}' https://rssamplifier.com/ || true)
- if [ "$code" = 200 ]; then echo "rssamplifier.com 200"; exit 0; fi
+ code=$(curl -s -o /dev/null -w '%{http_code}' https://rssamp.com/ || true)
+ if [ "$code" = 200 ]; then echo "rssamp.com 200"; exit 0; fi
echo "attempt $i: $code"; sleep 10
done
- echo "rssamplifier.com never returned 200"; exit 1
+ echo "rssamp.com never returned 200"; exit 1
diff --git a/README.md b/README.md
index a86e4b79..9ec49b29 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# rssamplifier.com
+# rssamp.com
An open, agent-first directory of independent blogs.
@@ -9,7 +9,7 @@ The point of difference is the machine-readable half: most of the web now blocks
this directory deliberately does the opposite. Everything is also published as JSON, OPML and plain
text so an agent can read the whole thing in one request.
-**Live:**
+**Live:**
## Layout
@@ -246,11 +246,11 @@ All send `access-control-allow-origin: *` and need no key.
| `/api/authors/{slug}/claim` | `POST` to claim an author as yourself; verified by the address they published or by their site linking back |
```bash
-curl -X POST https://rssamplifier.com/api/submit \
+curl -X POST https://rssamp.com/api/submit \
-H 'content-type: application/json' \
-d '{"urls":["example.com","another.blog"]}'
-curl -X POST https://rssamplifier.com/api/discover \
+curl -X POST https://rssamp.com/api/discover \
-H 'content-type: application/json' \
-d '{"keywords":["siberian huskies"]}'
```
@@ -342,7 +342,7 @@ than scrape it. It runs inside the web app — no second service, no second
deploy — and the endpoint is the same URL as its documentation page:
```bash
-claude mcp add --transport http rssamplifier https://rssamplifier.com/mcp
+claude mcp add --transport http rssamplifier https://rssamp.com/mcp
```
Ten tools: `search`, `list_feeds`, `get_feed`, `list_topics`, `get_topic`,
@@ -482,7 +482,7 @@ Talks to the public HTTP API, so it needs no credentials. Point it elsewhere wit
Two Railway services in the shared Profullstack project, both building from this repo with
`RAILWAY_DOCKERFILE_PATH` pointing at their own Dockerfile:
-- `rssamplifier.com` → `apps/web/Dockerfile`
+- `rssamp.com` → `apps/web/Dockerfile`
- `rssamplifier-poller` → `apps/poller/Dockerfile`
Secrets live in logicsrc: `logicsrc teams pull profullstack rssamplifier-com prod`.
diff --git a/apps/cli/README.md b/apps/cli/README.md
index b37150bf..cb3f2e59 100644
--- a/apps/cli/README.md
+++ b/apps/cli/README.md
@@ -1,10 +1,10 @@
# rssamplifier CLI
-The [RSS Amplifier](https://rssamplifier.com) directory, from a terminal. Find feeds by subject,
+The [RSSAmp](https://rssamp.com) directory, from a terminal. Find feeds by subject,
search tens of thousands of independent blogs, export OPML, submit a site. No key, no account.
```sh
-curl -fsSL https://rssamplifier.com/install.sh | sh
+curl -fsSL https://rssamp.com/install.sh | sh
```
That drops one file at `~/.local/bin/rssamp`. Node 22 or newer is the only requirement — there are
@@ -33,7 +33,7 @@ rssamp opml --topic homelab > homelab.opml
rssamp urls --topic homelab # one feed URL per line
```
-Run `rssamp --help` for the rest, or read .
+Run `rssamp --help` for the rest, or read .
## For scripts and agents
@@ -47,7 +47,7 @@ rssamp search "agentic coding" --json | jq -r '.posts[].url'
rssamp topic homelab --json | jq -r '.feeds[].feedUrl'
```
-An agent that can call MCP tools should use instead: same data,
+An agent that can call MCP tools should use instead: same data,
no subprocess, and the tools describe their own arguments.
## Pointing it elsewhere
diff --git a/apps/cli/package.json b/apps/cli/package.json
index 9e93436c..4f09001f 100644
--- a/apps/cli/package.json
+++ b/apps/cli/package.json
@@ -1,7 +1,7 @@
{
"name": "@profullstack/rssamplifier",
"version": "0.6.0",
- "description": "CLI for rssamplifier.com \u2014 find feeds by topic, search the directory, export OPML, submit blogs",
+ "description": "CLI for rssamp.com \u2014 find feeds by topic, search the directory, export OPML, submit blogs",
"type": "module",
"main": "src/index.js",
"bin": {
diff --git a/apps/cli/src/index.js b/apps/cli/src/index.js
index c05684ac..e656b49c 100755
--- a/apps/cli/src/index.js
+++ b/apps/cli/src/index.js
@@ -22,7 +22,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
export const VERSION = '0.6.0';
-const DEFAULT_API = 'https://rssamplifier.com';
+const DEFAULT_API = 'https://rssamp.com';
/**
* Every command, in the order they are worth learning.
diff --git a/apps/poller/src/index.js b/apps/poller/src/index.js
index 4b2027fe..3856c9ca 100644
--- a/apps/poller/src/index.js
+++ b/apps/poller/src/index.js
@@ -115,7 +115,7 @@ const ringIntervalMs = (Number(env['RING_SECONDS']) || 60) * 1000;
const ringRecheckDays = Number(env['RING_RECHECK_DAYS']) || 7;
const ringTopics = Number(env['RING_TOPICS']) || 20;
const ringSeedMs = (Number(env['RING_SEED_SECONDS']) || 21_600) * 1000;
-const ringBase = (env['SITE_URL'] || 'https://rssamplifier.com').replace(/\/+$/, '');
+const ringBase = (env['SITE_URL'] || 'https://rssamp.com').replace(/\/+$/, '');
// Items keyed for grouping per tick. Each one is a title hashed in process and
// a single-column update, so the batch is bounded by the write round trip
@@ -1183,7 +1183,7 @@ if (writeWorker) {
* The functions above are the jobs, unchanged; src/daemon.js says which run
* and how often. Its state lives beside ours in Postgres
* (scraper_daemon_runs, scraper_daemon_state), and its status document is what
- * https://rssamplifier.com/api/v1/daemon serves.
+ * https://rssamp.com/api/v1/daemon serves.
*/
const daemonStore = pgStore((text, params) => db.execute(text, params));
diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs
index eea6dac6..a8ee2151 100644
--- a/apps/web/next.config.mjs
+++ b/apps/web/next.config.mjs
@@ -331,8 +331,8 @@ const nextConfig = {
// straight through.
{
source: '/:path*',
- has: [{ type: 'host', value: 'www.rssamplifier.com' }],
- destination: 'https://rssamplifier.com/:path*',
+ has: [{ type: 'host', value: 'www.rssamp.com' }],
+ destination: 'https://rssamp.com/:path*',
permanent: true,
},
diff --git a/apps/web/public/.well-known/openaccess.json b/apps/web/public/.well-known/openaccess.json
index a42ac588..0ff16067 100644
--- a/apps/web/public/.well-known/openaccess.json
+++ b/apps/web/public/.well-known/openaccess.json
@@ -1,10 +1,10 @@
{
"openaccess": "0.1",
- "name": "RSS Amplifier",
- "url": "https://rssamplifier.com",
+ "name": "RSSAmp",
+ "url": "https://rssamp.com",
"operator": "https://logicsrc.com/.well-known/openprofile.md",
"redirect_uris": [
- "https://rssamplifier.com/api/v1/openaccess/callback"
+ "https://rssamp.com/api/v1/openaccess/callback"
],
"jwks": {
"keys": [
@@ -25,7 +25,7 @@
"honours": [
"profullstack.com/all-access"
],
- "webhooks": "https://rssamplifier.com/api/v1/openaccess/events",
+ "webhooks": "https://rssamp.com/api/v1/openaccess/events",
"hubs": [
"https://openaccess.logicsrc.com"
]
diff --git a/apps/web/public/.well-known/openmcp.json b/apps/web/public/.well-known/openmcp.json
index 4af6dd50..c3a7b469 100644
--- a/apps/web/public/.well-known/openmcp.json
+++ b/apps/web/public/.well-known/openmcp.json
@@ -1,9 +1,9 @@
{
"openmcp": "0.1",
- "mcp": "https://rssamplifier.com/api/mcp",
- "name": "RSS Amplifier",
+ "mcp": "https://rssamp.com/api/mcp",
+ "name": "RSSAmp",
"description": "An open directory of independent blogs, podcasts and feeds: search, topics, read a post.",
- "url": "https://rssamplifier.com",
+ "url": "https://rssamp.com",
"auth": {
"kind": "none"
},
diff --git a/apps/web/public/manifest.webmanifest b/apps/web/public/manifest.webmanifest
index 7bbf628a..f84eaaa6 100644
--- a/apps/web/public/manifest.webmanifest
+++ b/apps/web/public/manifest.webmanifest
@@ -1,5 +1,5 @@
{
- "name": "RSS Amplifier",
+ "name": "RSSAmp",
"short_name": "RSSAmp",
"description": "An open, agent-friendly directory of independent blogs. Submit a URL, a list or an OPML file.",
"start_url": "/?source=pwa",
diff --git a/apps/web/src/app/.well-known/openwebring.json/route.js b/apps/web/src/app/.well-known/openwebring.json/route.js
index db8ed0e1..b6655ef3 100644
--- a/apps/web/src/app/.well-known/openwebring.json/route.js
+++ b/apps/web/src/app/.well-known/openwebring.json/route.js
@@ -16,10 +16,10 @@ export const dynamic = 'force-dynamic';
export async function GET() {
const rings = await webrings.listRings(db());
const body = {
- ...hostFile({ base: siteUrl(), siteName: 'RSS Amplifier', rings }),
+ ...hostFile({ base: siteUrl(), siteName: 'RSSAmp', rings }),
// The rings this site is itself a member of, beside the ones it hosts.
made_by: 'both',
- rings: [{ ring: 'https://rssamplifier.com/ring/profullstack', slug: 'rssamplifier-com' }],
+ rings: [{ ring: 'https://rssamp.com/ring/profullstack', slug: 'rssamplifier-com' }],
};
return new Response(JSON.stringify(body, null, 2), {
diff --git a/apps/web/src/app/.well-known/security.txt/route.js b/apps/web/src/app/.well-known/security.txt/route.js
index 44bb1a14..ed9ee6a3 100644
--- a/apps/web/src/app/.well-known/security.txt/route.js
+++ b/apps/web/src/app/.well-known/security.txt/route.js
@@ -19,7 +19,7 @@ export function GET() {
const expires = new Date(Date.now() + 180 * 24 * 60 * 60 * 1000).toISOString();
const base = siteUrl();
- const body = `Contact: mailto:security@rssamplifier.com
+ const body = `Contact: mailto:security@rssamp.com
Expires: ${expires}
Preferred-Languages: en
Canonical: ${base}/.well-known/security.txt
diff --git a/apps/web/src/app/AddSocialSource.jsx b/apps/web/src/app/AddSocialSource.jsx
index a228c9a5..1131a3cb 100644
--- a/apps/web/src/app/AddSocialSource.jsx
+++ b/apps/web/src/app/AddSocialSource.jsx
@@ -43,7 +43,7 @@ export default function AddSocialSource({ network, label, input, canonical }) {
{label}
- Nobody has added this {platform.name} source to the directory yet. Add it and RSS Amplifier
+ Nobody has added this {platform.name} source to the directory yet. Add it and RSSAmp
will start collecting it — usually within a minute.
diff --git a/apps/web/src/app/CategoryIndex.jsx b/apps/web/src/app/CategoryIndex.jsx
index e4c8df26..17a532f7 100644
--- a/apps/web/src/app/CategoryIndex.jsx
+++ b/apps/web/src/app/CategoryIndex.jsx
@@ -99,7 +99,7 @@ export default async function CategoryIndex({ kind, page = 1, view = 'shows' })
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'CollectionPage',
- name: `${category.heading} · RSS Amplifier`,
+ name: `${category.heading} · RSSAmp`,
description: category.lede,
url: `${siteUrl()}${category.path}`,
hasPart: river
diff --git a/apps/web/src/app/DockPlayer.jsx b/apps/web/src/app/DockPlayer.jsx
index 083a0352..5dbf3115 100644
--- a/apps/web/src/app/DockPlayer.jsx
+++ b/apps/web/src/app/DockPlayer.jsx
@@ -385,7 +385,7 @@ export default function DockPlayer() {
navigator.mediaSession.metadata = new window.MediaMetadata({
title: track.title,
artist: track.show,
- album: 'RSS Amplifier',
+ album: 'RSSAmp',
artwork: track.image ? [{ src: track.image }] : [],
});
} catch {
diff --git a/apps/web/src/app/PitFooter.jsx b/apps/web/src/app/PitFooter.jsx
index a3cfcbeb..ca707106 100644
--- a/apps/web/src/app/PitFooter.jsx
+++ b/apps/web/src/app/PitFooter.jsx
@@ -1,4 +1,4 @@
-const SNIPPET_URL = 'https://pit.world/snippets/footer.html?site=rssamplifier.com';
+const SNIPPET_URL = 'https://pit.world/snippets/footer.html?site=rssamp.com';
/**
* The pit.world global footer: site name, Search, Ring, Publish here — the
diff --git a/apps/web/src/app/SignupProfileFields.jsx b/apps/web/src/app/SignupProfileFields.jsx
index c021c858..8fa2770c 100644
--- a/apps/web/src/app/SignupProfileFields.jsx
+++ b/apps/web/src/app/SignupProfileFields.jsx
@@ -21,7 +21,7 @@ export default function SignupProfileFields({ errors, defaultValues }) {
{/* On by default (the owner's call); unticked, the account starts off the list. */}
>
);
diff --git a/apps/web/src/app/[slug]/page.jsx b/apps/web/src/app/[slug]/page.jsx
index 8dd7573f..fa8c8e17 100644
--- a/apps/web/src/app/[slug]/page.jsx
+++ b/apps/web/src/app/[slug]/page.jsx
@@ -114,7 +114,7 @@ export async function generateMetadata({ params }) {
// image here would otherwise drop the site name and the type too.
openGraph: {
type: 'website',
- siteName: 'RSS Amplifier',
+ siteName: 'RSSAmp',
url,
title,
description,
diff --git a/apps/web/src/app/about/page.jsx b/apps/web/src/app/about/page.jsx
index 9bdc9409..ce95f2c2 100644
--- a/apps/web/src/app/about/page.jsx
+++ b/apps/web/src/app/about/page.jsx
@@ -4,7 +4,7 @@ import Toolbar from '../Toolbar.jsx';
export const metadata = {
title: 'About',
- description: 'What RSS Amplifier is, and why it is deliberately open to AI crawlers.',
+ description: 'What RSSAmp is, and why it is deliberately open to AI crawlers.',
};
export default function AboutPage() {
@@ -12,7 +12,7 @@ export default function AboutPage() {
<>
About
- RSS Amplifier is an open directory of independent blogs. Submit a URL, a list of URLs or an
+ RSSAmp is an open directory of independent blogs. Submit a URL, a list of URLs or an
OPML file; we find the feed, read it, and give the blog a permanent page.
diff --git a/apps/web/src/app/advertise/page.jsx b/apps/web/src/app/advertise/page.jsx
index 39ca7469..6cfd08b3 100644
--- a/apps/web/src/app/advertise/page.jsx
+++ b/apps/web/src/app/advertise/page.jsx
@@ -5,7 +5,7 @@ import Toolbar from '../Toolbar.jsx';
export const metadata = {
title: 'Advertise',
description:
- 'What RSS Amplifier reaches, and how to get into the ad rotation. Free to join, no monthly fee, and the creatives are made for you.',
+ 'What RSSAmp reaches, and how to get into the ad rotation. Free to join, no monthly fee, and the creatives are made for you.',
};
// Rendered per request, like every other page here that reads the directory,
@@ -60,7 +60,7 @@ export default async function AdvertisePage() {
<>
Advertise
- RSS Amplifier is an open directory of {fmt(feeds)} independent feeds. Ads here run through{' '}
+ RSSAmp is an open directory of {fmt(feeds)} independent feeds. Ads here run through{' '}
CrawlProof
diff --git a/apps/web/src/app/api/dataset/route.js b/apps/web/src/app/api/dataset/route.js
index 8005ab6f..82f6069b 100644
--- a/apps/web/src/app/api/dataset/route.js
+++ b/apps/web/src/app/api/dataset/route.js
@@ -118,7 +118,7 @@ export function GET() {
source:
'Public feeds their publishers chose to syndicate. The directory is open and anyone may submit to it.',
optOut:
- 'A publisher may be excluded from the corpus while staying in the directory, on request to hello@rssamplifier.com. Excluded feeds and every post and article belonging to them are absent from every dataset above.',
+ 'A publisher may be excluded from the corpus while staying in the directory, on request to hello@rssamp.com. Excluded feeds and every post and article belonging to them are absent from every dataset above.',
openApi: `Nothing here is a restriction on the open API: ${base}/api/feeds, /api/search, /opml and the MCP server all answer without an account.`,
},
},
diff --git a/apps/web/src/app/api/following/feed/[format]/route.js b/apps/web/src/app/api/following/feed/[format]/route.js
index 6d3b624b..4977934b 100644
--- a/apps/web/src/app/api/following/feed/[format]/route.js
+++ b/apps/web/src/app/api/following/feed/[format]/route.js
@@ -100,15 +100,15 @@ export async function GET(req, { params }) {
// this and the whole thing must be able to tell them apart in a list of
// feeds, and "Following" twice over cannot.
title: kinds
- ? `Following: ${CATEGORIES[kinds[0]].heading} — RSS Amplifier`
- : 'Following — RSS Amplifier',
+ ? `Following: ${CATEGORIES[kinds[0]].heading} — RSSAmp`
+ : 'Following — RSSAmp',
description: `Recent ${
kinds ? CATEGORIES[kinds[0]].item : 'posts'
} from the ${count(topics.length, 'topic')}, ${count(
authors.length,
'person',
'people',
- )} and ${count(feeds.length, 'blog')} this RSS Amplifier account follows.`,
+ )} and ${count(feeds.length, 'blog')} this RSSAmp account follows.`,
link: `${origin}/following${kinds ? `?kind=${kinds[0]}` : ''}`,
selfUrl: followingFeedUrl(origin, token, format, kinds),
},
diff --git a/apps/web/src/app/api/frame/route.js b/apps/web/src/app/api/frame/route.js
index e37d9ae6..9954cf9e 100644
--- a/apps/web/src/app/api/frame/route.js
+++ b/apps/web/src/app/api/frame/route.js
@@ -36,7 +36,7 @@ export const dynamic = 'force-dynamic';
*
* A hole in our origin. The response carries `Content-Security-Policy:
* sandbox`, which applies however the document is loaded, so somebody else's
- * markup can never run with rssamplifier.com's origin — not in the frame, and
+ * markup can never run with rssamp.com's origin — not in the frame, and
* not by pasting this URL into the address bar.
*/
diff --git a/apps/web/src/app/api/v1/daemon/route.js b/apps/web/src/app/api/v1/daemon/route.js
index 755cd3aa..7296513a 100644
--- a/apps/web/src/app/api/v1/daemon/route.js
+++ b/apps/web/src/app/api/v1/daemon/route.js
@@ -15,7 +15,7 @@ const NO_STORE = { 'cache-control': 'no-store' };
* the one fact a cached copy would hide.
*
* Same shape as every other site on @profullstack/scraper-daemon, so
- * `npx @profullstack/scraper-daemon status https://rssamplifier.com` reads it.
+ * `npx @profullstack/scraper-daemon status https://rssamp.com` reads it.
*/
export async function GET() {
try {
diff --git a/apps/web/src/app/contact/page.jsx b/apps/web/src/app/contact/page.jsx
index 071d3917..80706dcc 100644
--- a/apps/web/src/app/contact/page.jsx
+++ b/apps/web/src/app/contact/page.jsx
@@ -1,7 +1,7 @@
export const metadata = {
title: 'Contact',
description:
- 'How to reach the people who run RSS Amplifier: general questions, corrections to a listing, privacy requests and security reports.',
+ 'How to reach the people who run RSSAmp: general questions, corrections to a listing, privacy requests and security reports.',
};
/**
@@ -26,7 +26,7 @@ export default function ContactPage() {
<>
Contact
- RSS Amplifier is built and run by{' '}
+ RSSAmp is built and run by{' '}
Profullstack, Inc. There is no support queue and no
account system; the addresses below reach people.
@@ -38,7 +38,7 @@ export default function ContactPage() {
If an entry about your site is wrong, or you would like it removed, email{' '}
- hello@rssamplifier.com with the address of the
+ hello@rssamp.com with the address of the
page. We only index public feeds, and we remove on request without asking why.
@@ -55,13 +55,13 @@ export default function ContactPage() {
diff --git a/apps/web/src/app/crawlstats/page.jsx b/apps/web/src/app/crawlstats/page.jsx
index 3348fb89..c88e35b9 100644
--- a/apps/web/src/app/crawlstats/page.jsx
+++ b/apps/web/src/app/crawlstats/page.jsx
@@ -32,7 +32,7 @@ export const dynamic = 'force-dynamic';
export const metadata = {
title: 'Crawler status',
description:
- 'Live status of the RSS Amplifier crawler: how many feeds are due, what was fetched in the last hour, and which feeds are failing.',
+ 'Live status of the RSSAmp crawler: how many feeds are due, what was fetched in the last hour, and which feeds are failing.',
robots: { index: true, follow: true },
};
diff --git a/apps/web/src/app/discover/page.jsx b/apps/web/src/app/discover/page.jsx
index e2b083ca..0a290782 100644
--- a/apps/web/src/app/discover/page.jsx
+++ b/apps/web/src/app/discover/page.jsx
@@ -83,7 +83,7 @@ export default async function DiscoverPage({ searchParams }) {
For agents
Same endpoint, JSON in and JSON out:
-
{`curl -X POST https://rssamplifier.com/api/discover \\
+
{/*
* The stream carries the bar and the log; this is only what fills in the
diff --git a/apps/web/src/app/ig/page.jsx b/apps/web/src/app/ig/page.jsx
index 7ba2ac75..1cf0041c 100644
--- a/apps/web/src/app/ig/page.jsx
+++ b/apps/web/src/app/ig/page.jsx
@@ -12,7 +12,7 @@ export async function generateMetadata({ searchParams }) {
return {
title: page === 1 ? 'Instagram' : `Instagram · page ${page}`,
description:
- 'Instagram accounts and hashtags as feeds you can subscribe to — collected by RSS Amplifier and served from here, never from Instagram.',
+ 'Instagram accounts and hashtags as feeds you can subscribe to — collected by RSSAmp and served from here, never from Instagram.',
alternates: {
canonical: page === 1 ? `${siteUrl()}/ig` : `${siteUrl()}/ig?page=${page}`,
},
diff --git a/apps/web/src/app/install.sh/route.js b/apps/web/src/app/install.sh/route.js
index a3e528af..0eebf9a3 100644
--- a/apps/web/src/app/install.sh/route.js
+++ b/apps/web/src/app/install.sh/route.js
@@ -3,7 +3,7 @@ import { siteUrl } from '../../lib/db.js';
export const dynamic = 'force-dynamic';
/**
- * The installer, for `curl -fsSL https://rssamplifier.com/install.sh | sh`.
+ * The installer, for `curl -fsSL https://rssamp.com/install.sh | sh`.
*
* Generated rather than static so the URLs in it are this deployment's own:
* an installer served from a preview or a local run should install that
diff --git a/apps/web/src/app/layout.jsx b/apps/web/src/app/layout.jsx
index 24e6a513..b395a25b 100644
--- a/apps/web/src/app/layout.jsx
+++ b/apps/web/src/app/layout.jsx
@@ -21,16 +21,16 @@ export const revalidate = 3600;
export const metadata = {
metadataBase: new URL(siteUrl()),
title: {
- default: 'RSS Amplifier — an open directory of blogs, built for agents',
- template: '%s · RSS Amplifier',
+ default: 'RSSAmp — an open directory of blogs, built for agents',
+ template: '%s · RSSAmp',
},
description:
'Submit a URL, a list of URLs or an OPML file. Every blog gets its own page, and the whole directory is available as JSON, OPML and plain text for AI agents.',
- applicationName: 'RSS Amplifier',
+ applicationName: 'RSSAmp',
manifest: '/manifest.webmanifest',
appleWebApp: {
capable: true,
- title: 'RSS Amplifier',
+ title: 'RSSAmp',
statusBarStyle: 'default',
},
icons: {
@@ -90,7 +90,7 @@ export const metadata = {
},
openGraph: {
type: 'website',
- siteName: 'RSS Amplifier',
+ siteName: 'RSSAmp',
},
};
@@ -132,7 +132,7 @@ function siteJsonLd() {
{
'@type': 'WebSite',
'@id': `${url}/#website`,
- name: 'RSS Amplifier',
+ name: 'RSSAmp',
description:
'An open, agent-friendly directory of independent blogs, podcasts, music and video feeds.',
url,
@@ -217,7 +217,7 @@ export default function RootLayout({ children }) {
contrast, so there is no dark variant to swap in and no
wrapper to resolve — which also means nothing here
needs rechecking when the theme changes. */}
-
+
{/* A checkbox rather than a button, so the menu opens with no
@@ -289,7 +289,7 @@ export default function RootLayout({ children }) {
{/* One shared footer includes the human and machine-readable doors. */}