Active Noise Cancellation for your eyes.
The first AI-powered active noise cancellation for your social feed.
Quick Install β’ Features β’ Configuration β’ Architecture β’ Testing β’ Contributing β’ Privacy Policy β’ π»π³ BαΊ£n TiαΊΏng Viα»t
ZenFeed is an open-source Chrome Extension that brings Active Noise Cancellation to your eyes. Just like noise-canceling headphones filter out background chatter, ZenFeed automatically identifies and collapses visual noise (gambling ads, toxic drama, movie spoilers, predatory loans, pyramid schemes) on your Facebook News Feed and your Threads home feeds in real time using natural language criteria you define.
Powered by the Jev (TypeSafe AI) System One architecture, ZenFeed delivers sub-200ms evaluation latency, ultra-low cost ($0.042 / 1M tokens), zero layout shift (Zero-CLS), and 100% BYOK privacy with no intermediate proxy servers.
- π§ Active Noise Cancellation for Eyes: Automatically collapses or softly blurs posts matching your personal criteria before they interrupt your attention.
- β‘ Sub-200ms Decision Speed: Ultra-fast Bernoulli Boolean classification via Jev System One with calibrated confidence scoring.
- π 100% BYOK (Bring Your Own Key) & Privacy First: Direct client-to-AI communication over TLS 1.3. No intermediate tracking servers, no telemetry, no cookies captured, never touches private messages or credentials.
- π― Atomic Questions & Whitelist Guard: Evaluates violation criteria and whitelist exceptions independently. A whitelist exemption needs its own 70% bar and must be at least as strong as the violation, so lowering or raising the hide threshold cannot silently keep or drop those posts. For example: block unwanted job spam while safely preserving IT & AI developer job opportunities!
- ποΈ Reading-Zone Aware & Zero-CLS:
- Preserves layout height when blurring posts to prevent disruptive page jumping (CLS = 0).
- Delay collapse if a post is currently in the active reading viewport (top 65%).
- Provides a discreet badge instead of collapsing posts you have already interacted with (liked, commented, expanded).
- πΎ Two-Tier Smart Caching (IndexedDB LRU): Evaluates identical content (repeated ads, multi-tab browsing, re-scrolling) exactly once. Re-scrolling old posts costs 0 tokens.
- π οΈ 1-Click Filter Presets: Built-in presets for Anti-Gambling, Anti-Spoiler, Anti-Celebrity Drama, and Anti-Crypto Scams.
π Add ZenFeed to Chrome (Official Chrome Web Store)
Click Add to Chrome on the official store page for instant 1-click install and automatic background updates.
- Download the latest release ZIP: π Download zenfeed-v1.2.1.zip (Direct 1-Click) or browse all versions at ZenFeed Releases.
- Extract the ZIP file:
Unzip
zenfeed-v1.2.1.zipto a folder on your computer (e.g.Downloads/zenfeed-v1.2.1).π‘ Important: Make sure to extract the archive fully (on Windows: right-click
zenfeed-v1.2.1.zipβ Extract All...). When loading the extension, choose the directory that directly containsmanifest.json. - Open Chrome Extensions Manager:
In Chrome, Edge, Brave, or Cα»c Cα»c, navigate to:
chrome://extensions - Enable Developer Mode: Turn on the Developer mode toggle in the top-right corner.
- Load Unpacked Extension:
Click the Load unpacked button in the top-left corner and select the extracted folder (the folder containing
manifest.json). - Pin to Toolbar: Click the puzzle piece icon on your browser toolbar and pin ZenFeed for easy access.
# Clone the repository
git clone https://github.com/PiPyL/jev-zenfeed.git
cd jev-zenfeed
# Run test suite to verify everything is passing
npm test
# Run syntax and lint checks
npm run lintThen follow steps 3β6 above, selecting the cloned jev-zenfeed directory.
- Click the ZenFeed icon in your browser toolbar to open the settings popup.
- Leave OpenRouter selected (recommended). Create a key at openrouter.ai/settings/keys, paste the
sk-or-β¦key, and allow access to openrouter.ai when Chrome asks. If you already have a TypeSafe key, choose TypeSafe instead. (Optional: click "Customize Endpoint" for a proxy or a local mock server). - Click β‘ Test Connection to verify your API key works.
- Select a pre-configured Preset or type your custom filter criteria in plain natural language:
- Example Criteria:
"online gambling, casino ads, loan sharks, gossip drama, cryptocurrency scams" - Optional Whitelist:
"tech news, AI, software engineering, scientific discoveries"
- Example Criteria:
- Set your confidence threshold (default: 70%).
- Click Apply (or press
Ctrl/Cmd+Enter). The settings immediately apply to all open Facebook and Threads tabs!
Per-platform policies: the Common Β· Facebook Β· Threads bar under the header switch picks what the form edits. Both platforms start on Common; click Customize this platform to give just Facebook or Threads its own copy of the policy (switch, criteria, threshold, display modeβ¦), or Use Common again to discard it. Your API key and interface language stay shared.
jev-zenfeed/
βββ manifest.json # Chrome Manifest V3 declaration
βββ package.json # Project scripts & repository metadata
βββ LICENSE # MIT Open Source License
βββ CONTRIBUTING.md # Guidelines for open-source contributors
βββ icons/ # Vector-based brand icons (16, 32, 48, 128px)
βββ src/
β βββ background/
β β βββ background.js # Service Worker: batch queue, badges, lifecycle
β β βββ decision-cache.js # Two-tier cache (session + IndexedDB LRU)
β β βββ jev-client.js # TypeSafe Jev API client (Atomic prompt construction)
β βββ content/
β β βββ content.js # MutationObserver & IntersectionObserver engine (platform-agnostic)
β β βββ fb-selectors.js # Resilient Facebook DOM selectors (News Feed post cards)
β β βββ text-extractor.js # Facebook post body extraction, sanitization, and FNV-1a hash
β β βββ th-selectors.js # Resilient Threads DOM selectors (home feed post cards)
β β βββ th-text-extractor.js # Threads post body extraction, sanitization, and FNV-1a hash
β β βββ content.css # Zero-CLS blur overlay and collapsed banner styles
β β βββ fb-selectors.js # Resilient DOM selectors adapting to FB layout changes
β β βββ text-extractor.js # Post body extraction, sanitization, and FNV-1a hash
β β βββ ui-overlay.js # Banner creation, blur overlay, and "show anyway" button
β βββ utils/
β β βββ settings-defaults.js # Canonical settings schema & normalization
β β βββ fast-hash.js # Fast FNV-1a non-cryptographic content hashing
β β βββ clip-text.js # Token-saving head+tail clipping for long posts
β β βββ logger.js # Batched non-intrusive logging to storage.session
β β βββ i18n.js # Internationalization (English / Vietnamese)
β β βββ zen-data.js # Calming quotes & statistics for blurred overlays
β β βββ flashcards-data.js # Micro-learning cards during gentle blur
β βββ popup/
β βββ popup.html # Calm Tech settings popup interface
β βββ popup.css # Styled with Fraunces, Be Vietnam Pro & warm paper palette
β βββ popup.js # Settings persistence, validation & API connectivity test
βββ scripts/
β βββ build-zip.js # Automated packaging script for GitHub Releases
βββ test/
βββ test-jev-mock.js # Automated Node.js integration tests (30 test suites)
βββ content-harness.html # DOM content-script test harness on simulated Facebook feed
βββ threads-content-harness.html # DOM content-script test harness on simulated Threads feed
βββ run-harness-headless.js# Headless Chrome runner for content harness
βββ mock-jev-server.js # Standalone local mock server for Jev API
βββ static-server.js # Local static HTTP server for test harness
ZenFeed includes a comprehensive automated test suite verifying manifest validity, atomic question prompt safety, cache consistency, network resilience, and UI behavior.
# Run unit & integration tests (runs against local mock server)
npm test
# Run syntax lint checks across all scripts
npm run lint
# Package release ZIP archive (outputs to dist/zenfeed-v1.2.1.zip)
npm run build:zip
# Start browser-based DOM test harness
npm run harness
# Then open http://localhost:8765/test/content-harness.html
# Or run headless DOM harness via Chrome
npm run harness:headlessContributions, issues, and feature requests are very welcome! Please check CONTRIBUTING.md for details on how to get started.
- Fork the Project:
https://github.com/PiPyL/jev-zenfeed - Create your Feature Branch (
git checkout -b feat/AmazingFeature) - Run tests to ensure everything passes (
npm test && npm run lint) - Commit your Changes (
git commit -m 'feat: Add some AmazingFeature') - Push to the Branch (
git push origin feat/AmazingFeature) - Open a Pull Request
If ZenFeed helps protect your mental peace while browsing Facebook or Threads, please consider giving this repository a Star β! It motivates continued development and helps more people find quietude for their eyes.
This project is licensed under the MIT License - see the LICENSE file for details.