diff --git a/apps/web/public/store.css b/apps/web/public/store.css
index 2a8eccc..449d7db 100644
--- a/apps/web/public/store.css
+++ b/apps/web/public/store.css
@@ -260,6 +260,7 @@ footer.foot .wrap { display: flex; gap: 28px; flex-wrap: wrap; justify-content:
footer.foot nav { display: flex; gap: 18px; flex-wrap: wrap; }
footer.foot a { text-decoration: none; }
footer.foot a:hover { color: var(--ink); }
+footer.foot nav.webring { flex-basis: 100%; justify-content: center; gap: 12px; font-size: 13px; }
.empty { padding: 40px; text-align: center; border: 1px dashed var(--line); border-radius: var(--radius); color: var(--muted); }
.pager { display: flex; gap: 10px; justify-content: center; padding: 26px 0; }
diff --git a/apps/web/src/app.js b/apps/web/src/app.js
index e4e5cae..9353bf4 100644
--- a/apps/web/src/app.js
+++ b/apps/web/src/app.js
@@ -381,6 +381,14 @@ const withMode = (mode) => INSTALL_SH.replace(/^#!\/bin\/sh\n/, `#!/bin/sh\nPWAM
app.get('/upgrade.sh', (c) => c.body(withMode('upgrade'), 200, { 'content-type': 'text/x-shellscript' }));
app.get('/uninstall.sh', (c) => c.body(withMode('uninstall'), 200, { 'content-type': 'text/x-shellscript' }));
app.get('/.well-known/pwamart.txt', (c) => c.text('pwamart.com lists itself.\n'));
+app.get('/.well-known/openwebring.json', (c) =>
+ c.json({
+ openwebring: '0.1',
+ site: { url: 'https://pwamart.com/', name: 'pwamart' },
+ made_by: 'both',
+ rings: [{ ring: 'https://rssamplifier.com/ring/profullstack', slug: 'pwamart-com' }],
+ }),
+);
app.get('/robots.txt', (c) =>
c.text(`User-agent: *\nAllow: /\nDisallow: /console\nDisallow: /api/\nSitemap: ${config.siteUrl}/sitemap.xml\n`),
);
diff --git a/apps/web/src/pages.js b/apps/web/src/pages.js
index f3a623b..0bc89cc 100644
--- a/apps/web/src/pages.js
+++ b/apps/web/src/pages.js
@@ -97,6 +97,12 @@ ${
Get featuredAdvertiseNewsletter
llms.txtGitHub
+