web: footer credits (Simon-Pierre Boucher, contact@spboucher.ai, hosted on MacLustr), author metadata, contact on bot and API pages
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
4 changed files +27 −13
modified
apps/web/src/app/api/page.tsx
+1 −1
@@ -65,7 +65,7 @@ export default function ApiPage() { | ||
| 65 | 65 | const wss = base.replace(/^http/, "ws"); |
| 66 | 66 | return ( |
| 67 | 67 | <> |
| 68 | − <PageHeader compact kicker="Machine-readable WebSensor" title="API" description="WebSensor practises what it monitors: stable URLs, JSON, RSS, JSON-LD and a replayable WebSocket feed. Phase 1 is public and unauthenticated; rate limit 600 requests / minute / IP. Owner-scoped tools (watchlists, alerts, bookmarks, views, monitors) use an anonymous X-WebSensor-Owner token generated by your browser." /> | |
| 68 | + <PageHeader compact kicker="Machine-readable WebSensor" title="API" description="WebSensor practises what it monitors: stable URLs, JSON, RSS, JSON-LD and a replayable WebSocket feed. Phase 1 is public and unauthenticated; rate limit 600 requests / minute / IP. Owner-scoped tools (watchlists, alerts, bookmarks, views, monitors) use an anonymous X-WebSensor-Owner token generated by your browser. Higher limits, keys or questions: contact@spboucher.ai." /> | |
| 69 | 69 | <div className="grid grid-cols-1 gap-4 lg:grid-cols-[minmax(0,1fr)_400px]"> |
| 70 | 70 | <div className="flex min-w-0 flex-col gap-4"> |
| 71 | 71 | <Panel title="Public REST endpoints" dense> |
modified
apps/web/src/app/bot/page.tsx
+1 −1
@@ -11,7 +11,7 @@ export default function BotPage() { | ||
| 11 | 11 | <Panel title="Identification"> |
| 12 | 12 | <p className="text-[13px]">User agent:</p> |
| 13 | 13 | <pre className="mt-1 rounded-md border border-line bg-panel-2 p-2 font-mono text-[12px]">WebSensorBot/0.1 (+https://www.websensor.io/bot; contact@websensor.io)</pre> |
| 14 | − <p className="mt-3 text-[13px] text-fg-muted">Requests originate from a small, fixed set of addresses. Contact: <a href="mailto:contact@websensor.io" className="text-info hover:underline">contact@websensor.io</a>.</p> | |
| 14 | + <p className="mt-3 text-[13px] text-fg-muted">Requests originate from a small, fixed set of addresses. Contact: <a href="mailto:contact@spboucher.ai" className="text-info hover:underline">contact@spboucher.ai</a> (Simon-Pierre Boucher). WebSensor is hosted on <a href="https://www.maclustr.io" className="text-info hover:underline" target="_blank" rel="noopener noreferrer">MacLustr</a>.</p> | |
| 15 | 15 | </Panel> |
| 16 | 16 | <Panel title="What we fetch"> |
| 17 | 17 | <ul className="list-disc space-y-1 pl-5 text-[13px] text-fg-muted"> |
modified
apps/web/src/app/layout.tsx
+2 −0
@@ -18,6 +18,8 @@ export const metadata: Metadata = { | ||
| 18 | 18 | title: { default: "WebSensor — The Web is changing. We are watching.", template: "%s · WebSensor" }, |
| 19 | 19 | description: "WebSensor continuously watches the public web for meaningful changes, preserving evidence and connecting signals into real-world events.", |
| 20 | 20 | applicationName: "WebSensor", |
| 21 | + authors: [{ name: "Simon-Pierre Boucher", url: "https://www.maclustr.io" }], | |
| 22 | + creator: "Simon-Pierre Boucher", | |
| 21 | 23 | openGraph: { type: "website", siteName: "WebSensor", url: SITE_URL, title: "WebSensor — The Web is changing. We are watching.", description: "Real-time Internet change intelligence: what changed, where, when, whether it was silent, how important it is — with immutable evidence." }, |
| 22 | 24 | twitter: { card: "summary_large_image", title: "WebSensor — The Web is changing. We are watching.", description: "Detect what changed. Know why it matters." }, |
| 23 | 25 | alternates: { canonical: "/", types: { "application/rss+xml": `${SITE_URL}/api/v1/feed.rss` } }, |
modified
apps/web/src/components/footer.tsx
+23 −11
@@ -3,18 +3,30 @@ import Link from "next/link"; | ||
| 3 | 3 | export function Footer() { |
| 4 | 4 | return ( |
| 5 | 5 | <footer className="mt-10 border-t border-line pb-20 lg:pb-6"> |
| 6 | − <div className="mx-auto flex max-w-[1500px] flex-wrap items-center justify-between gap-3 px-3 py-4 text-[12px] text-fg-subtle sm:px-4"> | |
| 7 | − <div> | |
| 8 | − <span className="font-semibold text-fg-muted">WebSensor</span> — Detect What Changed. Know Why It Matters. | |
| 6 | + <div className="mx-auto flex max-w-[1600px] flex-col gap-3 px-3 py-4 text-[12px] text-fg-subtle sm:px-4"> | |
| 7 | + <div className="flex flex-wrap items-center justify-between gap-3"> | |
| 8 | + <div> | |
| 9 | + <span className="font-semibold text-fg-muted">WebSensor</span> — Detect What Changed. Know Why It Matters. | |
| 10 | + </div> | |
| 11 | + <nav className="flex flex-wrap gap-3" aria-label="Footer"> | |
| 12 | + <Link href="/api" className="hover:text-fg">API</Link> | |
| 13 | + <Link href="/health" className="hover:text-fg">Health</Link> | |
| 14 | + <Link href="/bot" className="hover:text-fg">Bot</Link> | |
| 15 | + <a href="/api/v1/feed.rss" className="hover:text-fg">RSS</a> | |
| 16 | + <Link href="/explore" className="hover:text-fg">Explore</Link> | |
| 17 | + <Link href="/country" className="hover:text-fg">Countries</Link> | |
| 18 | + </nav> | |
| 19 | + <div className="font-mono text-[11px]">All timestamps UTC</div> | |
| 20 | + </div> | |
| 21 | + <div className="flex flex-wrap items-center justify-between gap-x-4 gap-y-1 border-t border-line pt-3 text-[11.5px]"> | |
| 22 | + <div> | |
| 23 | + Built by <span className="text-fg-muted">Simon-Pierre Boucher</span> · <a href="mailto:contact@spboucher.ai" className="text-info hover:underline">contact@spboucher.ai</a> | |
| 24 | + </div> | |
| 25 | + <div> | |
| 26 | + Hosted on <a href="https://www.maclustr.io" target="_blank" rel="noopener noreferrer" className="text-info hover:underline">MacLustr</a>, an Apple-silicon compute cluster in Québec | |
| 27 | + </div> | |
| 28 | + <div className="font-mono text-[10.5px]">© {new Date().getUTCFullYear()} WebSensor</div> | |
| 9 | 29 | </div> |
| 10 | − <nav className="flex flex-wrap gap-3"> | |
| 11 | − <Link href="/api" className="hover:text-fg">API</Link> | |
| 12 | − <Link href="/health" className="hover:text-fg">Health</Link> | |
| 13 | − <Link href="/bot" className="hover:text-fg">Bot</Link> | |
| 14 | − <a href="/api/v1/feed.rss" className="hover:text-fg">RSS</a> | |
| 15 | − <Link href="/explore" className="hover:text-fg">Explore</Link> | |
| 16 | − </nav> | |
| 17 | − <div className="font-mono text-[11px]">All timestamps UTC</div> | |
| 18 | 30 | </div> |
| 19 | 31 | </footer> |
| 20 | 32 | ); |
| 21 | 33 | |