Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

Building Margin: A Privacy-First News Reader Inside Chrome's Side Panel

Description and use

Margin launched successfully on the Chrome Web Store, offering a privacy‑first, backend‑free news reader with a smooth onboarding flow, predictable swipe navigation, and a simple paid tier—all built with minimal tooling.

Problem

Existing news readers rely on infinite scroll, backend servers, and algorithmic feeds, compromising privacy and user control. There was no privacy‑first, lightweight reader that could live in Chrome’s side panel and respect user gestures for opening.

Outcome

Margin launched successfully on the Chrome Web Store, offering a privacy‑first, backend‑free news reader with a smooth onboarding flow, predictable swipe navigation, and a simple paid tier—all built with minimal tooling.

Workflow

  • Set up MV3 extension with @crxjs/vite-plugin and Preact for UI
  • Implement sidePanel.open() logic that requires a user gesture: open a welcome tab on install and show in‑panel welcome on first open
  • Create swipe detection that advances one card per gesture using idle gap and direction reversal
  • Fetch RSS feeds and article pages directly from publishers, store cards in chrome.storage.local
  • Integrate Chrome’s built‑in Summarizer for optional on‑device AI summaries with tri‑state preference
  • Add paid tier by validating a license key against Lemon Squeezy’s public API and storing it locally

Evidence

Margin is a news reader that lives in the browser's side panel and shows one bite‑sized story at a time, instead of an infinite‑scroll feed.

Source

Margin has no backend. RSS feeds and article pages are fetched directly from publishers, from the user's machine.

Source

For the optional Plus tier, I used Lemon Squeezy as merchant of record: checkout happens on their hosted page, the user gets a license key by email, and the extension activates/validates that key against Lemon Squeezy's public License API.

Source

  • Record date: 2026-09-06T12:37:39.595Z