preziotte/not-for-you

A browser extension that removes the algorithm from every major social platform.

10

stars

30

commits

HTML

primary language

Aug 28, 2026

updated

notforyou.app
browser-extension
chrome-extension
chronological-feed
digital-wellbeing
distraction-blocker
distraction-free
facebook
firefox-addon
firefox-extension
instagram
linkedin
privacy
productivity
reddit
social-media
threads
tiktok
twitter
wxt
youtube
Browse cluster: Browser Extensions & Add-ons

README

Not for You

A browser extension that removes the algorithm from every major social platform. No suggested posts, no recommended accounts, no "people you may know." Just the accounts you chose to follow, in the order they posted.

notforyou.app

Not for You. A browser extension that removes the algorithm from every major social platform. The extension popup sits alongside: a checkbox per option, grouped by platform.

What it changes

Every option below is a checkbox in the popup, on by default (except where noted), and can be turned off per platform.

PlatformFeedExtra options
YouTubeSubscriptions instead of the Home feedturn off autoplay, hide the Shorts row, hide "what to watch next"
InstagramFollowing instead of the Home feedhide the suggestions sidebar
TikTokFollowing instead of the "For You" feedhide the header bar
X/TwitterFollowing instead of the "For You" feedhide trends and suggestions
Redditleft alone, it is already followed-onlyhide promoted posts and ads, hide recommendations, use old Reddit (off by default)
LinkedInRecent instead of the Top sorthide promoted and suggested posts, hide the news sidebar
ThreadsFollowing instead of the "For You" feed
FacebookThe Feeds view instead of Homehide the Reels tab

Nothing else changes. Search, profiles, messages and posting all work exactly as before, and the popup can turn the whole thing off for a while (five minutes up to a day) when you want the algorithm back.

Install

Chrome Web Store (Chrome, Edge, Brave, Opera, Arc and the other Chromium browsers)

Firefox Add-ons

To run it from source instead:

npm install
npm run build

Then open chrome://extensions, turn on Developer mode, choose "Load unpacked" and pick .output/chrome-mv3.

For a Firefox build of your own, npm run build:firefox and load .output/firefox-mv3 as a temporary add-on from about:debugging.

How it works

Two mechanisms, and the first is always preferred:

  1. URL redirect. Where a platform has a real chronological route, the extension sends you there with a declarativeNetRequest rule: YouTube to /feed/subscriptions, Instagram to ?variant=following, Threads and TikTok to /following, Facebook to its Feeds view, and Reddit to old.reddit.com if you ask for it. Durable, and it degrades gracefully.
  2. DOM work. Only where no such route exists (X keeps snapping back to "For You"; LinkedIn buries its Recent sort in a dropdown) or to hide the leftover recommendation blocks that no URL avoids. This part is matched against the platforms' current markup and will break when they change it.

Redirects that a single-page app performs internally never hit the network, so lib/spa.ts catches those in the content script as a fallback.

Possible additions

Platforms worth supporting, roughly in the order they make sense to build.

PlatformWhy
TwitchHome is pure recommendations, and /directory/following/live is a clean redirect.
BlueskyThe closest fit to the premise, but Following is client state, so DOM work like X.
SubstackThe Notes home feed is algorithmic; /inbox is just what you subscribed to.
PinterestThe most algorithmic feed of the lot. Its Following view keeps coming and going.
Medium/following is chronological, the home feed is not.
TumblrThe dashboard grew a "For you" tab. Unclear whether Following is URL-addressable.
GitHubThe dashboard feed has For you and Following tabs. Small audience, tiny fix.

Privacy

No accounts, no servers, no analytics, and the extension makes no network requests of its own. The only thing stored is which platforms are enabled and their options, in the browser's own extension storage. The website is separate and does use Google Analytics to count visits. Full policy: notforyou.app/privacy.

Development

Built with WXT and TypeScript, Manifest V3 on every browser.

npm run dev         # load into Chrome with hot reload
npm run dev:firefox # the same in Firefox
npm run compile     # typecheck
npm run zip         # package for the Chrome Web Store
npm run zip:firefox # package for Firefox Add-ons
PathWhat lives there
lib/platforms.tsEvery platform: labels, match patterns, redirect rules. Start here.
entrypoints/The background script, one content script per platform, the popup.
lib/settings.tsStored settings and the temporary-disable timer.
site/public/The landing page and privacy policy, deployed to notforyou.app.
site/pages/Template and copy the per-platform pages are generated from.
site/main.tfTerraform for the site's S3 and CloudFront setup.

lib/platforms.ts is the single source of truth: content scripts take their match patterns from it via matchesFor(), and wxt.config.ts builds host_permissions from the same list, so the two cannot drift apart.

The social card at site/public/og.png is generated from site/og-image.html. Regenerating it after an edit is a headless screenshot; the command is in a comment at the top of that file.

The site

npm run dev:site    # preview site/public at http://127.0.0.1:8080
npm run build:pages # regenerate the per-platform pages into site/public
npm run build:site  # minified copy of site/public into site/.build

site/public is the source of truth and what you edit, with two exceptions. The per-platform pages (twitter.html, youtube.html and the rest) are generated: their copy lives in site/pages/platforms.mjs, their shell in site/pages/template.html, and the shared theme, hero and install regions are lifted out of index.html itself, so edit those and re-run build:pages rather than the output. site/.build is likewise generated, by build:site, which strips comments and minifies the inline CSS and JS for deployment.

Use npm run dev:site rather than any other static server. Every internal link is extensionless (/youtube, not /youtube.html), which works in production only because the CloudFront function in site/url-rewrite.js appends .html at the edge; scripts/serve-site.mjs applies the same rule locally, so a plain python -m http.server will 404 on every page but the homepage. Pass a port and a directory to preview something else, for example node scripts/serve-site.mjs 8081 site/.build to check the minified output.

Contributing

Platforms change their markup constantly, so the most useful thing you can file is a broken selector: which platform, which option, and what you see instead. Open an issue. Anything security-sensitive goes to email instead: see SECURITY.md.

Releases are cut by tag. Bump the version in package.json, write the CHANGELOG.md entry, then push a matching v1.2.3 tag: the release workflow rebuilds both store packages from that commit, checks the tag against package.json and attaches the zips to a draft release for upload.

License

MIT. See LICENSE.

Contributors

preziotte

29 commits

preziotte/not-for-you

A browser extension that removes the algorithm from every major social platform.

10

stars

30

commits

HTML

primary language

Aug 28, 2026

updated

notforyou.app
browser-extension
chrome-extension
chronological-feed
digital-wellbeing
distraction-blocker
distraction-free
facebook
firefox-addon
firefox-extension
instagram
linkedin
privacy
productivity
reddit
social-media
threads
tiktok
twitter
wxt
youtube
Browse cluster: Browser Extensions & Add-ons

README

Not for You

A browser extension that removes the algorithm from every major social platform. No suggested posts, no recommended accounts, no "people you may know." Just the accounts you chose to follow, in the order they posted.

notforyou.app

Not for You. A browser extension that removes the algorithm from every major social platform. The extension popup sits alongside: a checkbox per option, grouped by platform.

What it changes

Every option below is a checkbox in the popup, on by default (except where noted), and can be turned off per platform.

PlatformFeedExtra options
YouTubeSubscriptions instead of the Home feedturn off autoplay, hide the Shorts row, hide "what to watch next"
InstagramFollowing instead of the Home feedhide the suggestions sidebar
TikTokFollowing instead of the "For You" feedhide the header bar
X/TwitterFollowing instead of the "For You" feedhide trends and suggestions
Redditleft alone, it is already followed-onlyhide promoted posts and ads, hide recommendations, use old Reddit (off by default)
LinkedInRecent instead of the Top sorthide promoted and suggested posts, hide the news sidebar
ThreadsFollowing instead of the "For You" feed
FacebookThe Feeds view instead of Homehide the Reels tab

Nothing else changes. Search, profiles, messages and posting all work exactly as before, and the popup can turn the whole thing off for a while (five minutes up to a day) when you want the algorithm back.

Install

Chrome Web Store (Chrome, Edge, Brave, Opera, Arc and the other Chromium browsers)

Firefox Add-ons

To run it from source instead:

npm install
npm run build

Then open chrome://extensions, turn on Developer mode, choose "Load unpacked" and pick .output/chrome-mv3.

For a Firefox build of your own, npm run build:firefox and load .output/firefox-mv3 as a temporary add-on from about:debugging.

How it works

Two mechanisms, and the first is always preferred:

  1. URL redirect. Where a platform has a real chronological route, the extension sends you there with a declarativeNetRequest rule: YouTube to /feed/subscriptions, Instagram to ?variant=following, Threads and TikTok to /following, Facebook to its Feeds view, and Reddit to old.reddit.com if you ask for it. Durable, and it degrades gracefully.
  2. DOM work. Only where no such route exists (X keeps snapping back to "For You"; LinkedIn buries its Recent sort in a dropdown) or to hide the leftover recommendation blocks that no URL avoids. This part is matched against the platforms' current markup and will break when they change it.

Redirects that a single-page app performs internally never hit the network, so lib/spa.ts catches those in the content script as a fallback.

Possible additions

Platforms worth supporting, roughly in the order they make sense to build.

PlatformWhy
TwitchHome is pure recommendations, and /directory/following/live is a clean redirect.
BlueskyThe closest fit to the premise, but Following is client state, so DOM work like X.
SubstackThe Notes home feed is algorithmic; /inbox is just what you subscribed to.
PinterestThe most algorithmic feed of the lot. Its Following view keeps coming and going.
Medium/following is chronological, the home feed is not.
TumblrThe dashboard grew a "For you" tab. Unclear whether Following is URL-addressable.
GitHubThe dashboard feed has For you and Following tabs. Small audience, tiny fix.

Privacy

No accounts, no servers, no analytics, and the extension makes no network requests of its own. The only thing stored is which platforms are enabled and their options, in the browser's own extension storage. The website is separate and does use Google Analytics to count visits. Full policy: notforyou.app/privacy.

Development

Built with WXT and TypeScript, Manifest V3 on every browser.

npm run dev         # load into Chrome with hot reload
npm run dev:firefox # the same in Firefox
npm run compile     # typecheck
npm run zip         # package for the Chrome Web Store
npm run zip:firefox # package for Firefox Add-ons
PathWhat lives there
lib/platforms.tsEvery platform: labels, match patterns, redirect rules. Start here.
entrypoints/The background script, one content script per platform, the popup.
lib/settings.tsStored settings and the temporary-disable timer.
site/public/The landing page and privacy policy, deployed to notforyou.app.
site/pages/Template and copy the per-platform pages are generated from.
site/main.tfTerraform for the site's S3 and CloudFront setup.

lib/platforms.ts is the single source of truth: content scripts take their match patterns from it via matchesFor(), and wxt.config.ts builds host_permissions from the same list, so the two cannot drift apart.

The social card at site/public/og.png is generated from site/og-image.html. Regenerating it after an edit is a headless screenshot; the command is in a comment at the top of that file.

The site

npm run dev:site    # preview site/public at http://127.0.0.1:8080
npm run build:pages # regenerate the per-platform pages into site/public
npm run build:site  # minified copy of site/public into site/.build

site/public is the source of truth and what you edit, with two exceptions. The per-platform pages (twitter.html, youtube.html and the rest) are generated: their copy lives in site/pages/platforms.mjs, their shell in site/pages/template.html, and the shared theme, hero and install regions are lifted out of index.html itself, so edit those and re-run build:pages rather than the output. site/.build is likewise generated, by build:site, which strips comments and minifies the inline CSS and JS for deployment.

Use npm run dev:site rather than any other static server. Every internal link is extensionless (/youtube, not /youtube.html), which works in production only because the CloudFront function in site/url-rewrite.js appends .html at the edge; scripts/serve-site.mjs applies the same rule locally, so a plain python -m http.server will 404 on every page but the homepage. Pass a port and a directory to preview something else, for example node scripts/serve-site.mjs 8081 site/.build to check the minified output.

Contributing

Platforms change their markup constantly, so the most useful thing you can file is a broken selector: which platform, which option, and what you see instead. Open an issue. Anything security-sensitive goes to email instead: see SECURITY.md.

Releases are cut by tag. Bump the version in package.json, write the CHANGELOG.md entry, then push a matching v1.2.3 tag: the release workflow rebuilds both store packages from that commit, checks the tag against package.json and attaches the zips to a draft release for upload.

License

MIT. See LICENSE.

Contributors

preziotte

29 commits

Languages

HTML

90.9%

TypeScript

4.0%

JavaScript

3.5%