Skip to content

Architecture

The platform uses a hub-and-spoke model. news-server is the central hub — everything talks to it. news-client sends editorial actions, child-site frontends read published content, and MongoDB stores all persistent data.

ComponentRole
news-serverCentral API — handles auth, storage, publishing, RSS ingestion, S3 uploads
news-clientAdmin dashboard — editors and publishers interact with the backend via this UI
MongoDBDatabase — stores articles, users, publishers, sites, tags, categories
AWS S3Media storage — images uploaded via pre-signed URLs
child-sites/*Reader frontends — fetch and display published content

Top-Level Request Flow

  1. Editor or publisher opens news-client in their browser.
  2. Dashboard sends authenticated requests (JWT Bearer token) to news-server.
  3. news-server reads/writes MongoDB and optionally generates S3 signed URLs for image uploads.
  4. When an article is published, it becomes available on the /api/v1/client endpoints.
  5. Child-site frontends send requests with an API key to fetch articles for their readers.

Publisher RSS feeds add a second ingest path alongside manual editing:

RSS Ingest Path

  1. A publisher saves their RSS feed URL via the self-service feed page.
  2. Admin approves the publisher.
  3. A cron job runs every hour and calls fetchAllFeeds().
  4. New feed items are saved as articles with isAggregated: true.
  5. Duplicate items are skipped using a unique rssFeedGuid index.
  6. Ingested articles flow through the same tag-based routing as manual articles.