Self-hosted Feed Loader
Beacon ships fully static — pages are HTML you upload to any host. A few widgets still need a server in front of cross-origin APIs that don’t send Access-Control-Allow-Origin:
- Feed cards — RSS, Atom, and YouTube feeds (most providers don’t allow direct browser access)
- Letterboxd tile — RSS feed
Beacon solves this with a thin caching proxy running on Cloudflare Workers. It is the only infrastructure dependency Beacon has, and it’s opt-in: every Beacon site has a Custom feed loader field (Wizard → Code).
Two ways to use it
Section titled “Two ways to use it”1. Use the Ignyte-hosted default
Section titled “1. Use the Ignyte-hosted default”https://rss.ignyte.me/fetch?url= is what every new Beacon site points at out of the box. It’s free, low-volume, and operated by the Beacon maintainer. Fine for personal sites.
No setup needed — leave the wizard field blank.
2. Deploy your own copy
Section titled “2. Deploy your own copy”For higher-traffic sites, privacy concerns about routing visitor requests through someone else’s worker, or anyone who’d rather own the dependency. Cloudflare Workers’ free tier covers around 100,000 requests per day, which is more than enough for a personal Beacon site.
Deployment
Section titled “Deployment”-
Install wrangler (Cloudflare’s worker CLI) if you don’t have it:
Terminal window npm install -g wranglerwrangler login -
Create a KV namespace (used to cache successful responses and serve them when the upstream feed is down):
Terminal window wrangler kv namespace create FEED_CACHEWrangler prints an
id. Copy it. -
Edit
worker/wrangler.tomlin your Beacon folder. Replace the existingidunder[[kv_namespaces]]with the one wrangler just gave you. Optionally rename the worker (thename = "rss-proxy"line) so it doesn’t collide with anyone else’s. -
Deploy:
Terminal window cd workerwrangler deployWrangler prints a URL like
https://rss-proxy.<your-account>.workers.dev. -
(Optional) Custom domain. In the Cloudflare dashboard, go to Workers & Pages → your worker → Settings → Triggers → Custom Domains, and add a subdomain you control (e.g.
rss.example.com). Cloudflare provisions the TLS cert automatically. -
Plug it into Beacon. Open the wizard, go to Code → Custom feed loader, and paste:
https://rss-proxy.<your-account>.workers.dev/fetch?url=Or
https://rss.example.com/fetch?url=if you set a custom domain. The?url=suffix matters — Beacon URL-encodes the upstream feed URL after it. -
Save and rebuild. Your generated site now routes feed and Letterboxd fetches through your worker.
What the worker does
Section titled “What the worker does”See worker/rss-proxy.js in your Beacon folder for the source. In short:
- Accepts
?url=<encoded-upstream>and fetches that URL server-side, returning the body withAccess-Control-Allow-Origin: *. - 5-minute KV cache: re-requests within that window are served from cache (zero upstream load).
- 10-second upstream timeout. If the upstream is down or slow, it falls back to the last successful cached response, so feeds keep showing during outages.
- 2 MB response cap and
http(s)-only URL validation — prevents the worker from being abused as a generic anonymizer.
Removing the dependency entirely
Section titled “Removing the dependency entirely”If you don’t use feed cards or the Letterboxd tile, you can ignore the proxy entirely — none of the other widgets touch it. Now Playing, Now Reading, GitHub, Chess.com, Weather, and Countdown call their APIs directly from the browser (or, in the case of snapshot tiles, are captured at wizard-save time).