← All tools Syndicate elsewhere Open tool

Syndicate elsewhere

A simple, local-first publishing dashboard for syndicating blog posts and podcast episodes from RSS feeds to social platforms like Bluesky and Mastodon.

Overview

Syndicate Elsewhere is a lightweight, single-page HTML/JavaScript app that acts as a manual syndication inbox. It reads one or more RSS feeds, identifies content that has not yet been syndicated, and presents a queue of publishable items. You can review, edit, and publish a generated social post to one or more destinations with a single click.

The application is intentionally local-first, single-user, and manual rather than automated. RSS remains the source of truth — the app only stores references to feed entries plus your publication state. Everything lives in browser localStorage; there is no backend.

Features

Usage

  1. Open index.html in a browser (or run npm start from the repo root).
  2. Go to Settings and enable Bluesky and/or Mastodon, entering your credentials. Use Test Connection to verify.
  3. Go to Feeds, add an RSS feed (Name, URL, Type), optionally Validate Feed, then Save Feed.
  4. Click ↻ Refresh Feeds in the header.
  5. On the Queue, click Compose & Publish on a card, edit the draft, choose destinations, and Publish Selected.
  6. Return later and refresh — only content you haven't fully published (and haven't skipped) appears.

CORS proxy

Most RSS feeds do not send CORS headers, so browsers block fetching them directly. Syndicate Elsewhere tries a direct fetch first and falls back to a configurable CORS proxy (set in Settings → General). The Bluesky and Mastodon APIs themselves are called directly and support CORS.

The default proxy is /rss-proxy?url=, served by the bundled Netlify edge function at netlify/edge-functions/rss-proxy.ts (the deployed equivalent of a Cloudflare Worker). It works automatically on the deployed Netlify site, or locally when you run netlify dev. The function only proxies http(s) URLs and refuses localhost / private-network targets to avoid being an abusable open proxy.

For other local setups (e.g. opening the file directly or npm start), either run netlify dev, or change the proxy to a public one such as https://api.allorigins.win/raw?url=, or clear it to disable the fallback.

Templates

Each content type has an editable template. Available variables:

{title} · {url} · {summary} · {shortDescription} · {description} · {author} · {feedName} · {publishedDate}

Defaults:

Blog:    New post: {title}\n\n{url}
Podcast: New episode: {title}\n\n{shortDescription}\n\nListen: {url}

Data & Security

All state — feeds, templates, credentials, and publication history — is stored under the syndicateElsewhere key in browser localStorage. Credentials (Bluesky app password, Mastodon token) are stored in plain text locally, which is acceptable for a single-user, local-first tool with no shared backend. Use app passwords / scoped tokens, and use Reset All Data to wipe everything.

Technical Details

Browser Compatibility

Works in modern Chrome, Firefox, Safari, and Edge.

Roadmap

Planned future enhancements include image/OpenGraph support, platform-specific drafts and preview cards, LinkedIn (OAuth), scheduling, batch publishing, AI-assisted drafts, and additional destinations (Threads, Discord, Ghost, Micro.blog, etc.).

License

See repository root for license information.