A minimal, privacy-minded Chrome extension + landing site and small API to read articles without paywalls or clutter. This repository contains three main packages: the browser extension (extension/), a marketing landing/ site, and a small api-server/ used for optional backend features.
extension/— Chrome Extension (Manifest V3) source, built with Vite and packaged intono-fluff-reader.zip.landing/— React + Vite landing site that hosts marketing pages and the extension download link.api-server/— Express + TypeScript API server (optional) for any server-side features.lib/— shared libraries and generated API client code used by other packages.
- Chrome extension (MV3): popup, background service worker, and content script.
- Packaged
.zipfor Web Store submission (built fromextension/dist). - Landing site with install CTA, theme toggle (light/dark), and extension download fallback.
- Local dev scripts and a
vercel-buildscript to support CI builds.
- Node >= 18
- pnpm (recommended) — install via
npm i -g pnpm
- Install dependencies at repository root:
pnpm install- Run the landing app locally (dev):
PORT=5173 BASE_PATH=/ pnpm --dir landing dev- Run the API server locally (dev):
PORT=3000 pnpm --dir api-server dev- Build and load the extension for development:
pnpm --dir extension build
pnpm --dir extension zip
# Load the unpacked extension from extension/dist in chrome://extensionsBuild all packages:
pnpm run buildThere is also a robust script for CI (used for Vercel):
pnpm run vercel-buildThis runs the extension build + zip and copies the generated ZIP into landing/public (the copy step is guarded to avoid CI failures if the destination doesn't exist).
PORT— port for the API server or landing (when running locally)DATABASE_URL— (optional) database connection for the API serverVITE_CHROME_WEB_STORE_URL— optional Web Store URL used by the landing CTAVITE_EXTENSION_DOWNLOAD_URL— fallback download URL for the extension ZIP
- Build the extension:
pnpm --dir extension build
pnpm --dir extension zip-
The created file is
extension/no-fluff-reader.zip. For convenience the repo'szipscript copies this ZIP intolanding/publicwhen that folder exists. -
Submit the ZIP to the Chrome Web Store via the Developer Dashboard.
- Landing (static): Vercel or Netlify — set the build command to
pnpm run vercel-buildand publishlanding/dist/public. - API server: Render or Fly or Heroku — a simple Node service running the Express app on
PORT.
Please open issues or PRs against main. Keep changes small and focused. If you modify build scripts, ensure CI-friendly behavior (avoid cp failures; create directories before copying).
- If Vercel or other CI fails during the extension copy step, ensure the build command creates the
landing/publicdirectory before copying. The repository includesvercel-buildwhich does this safely.
MIT