Declutter Reddit, X and social feeds with JustZix
Social feeds are engineered to keep you scrolling: promoted posts, "suggested" communities, trending sidebars, infinite related content. JustZix lets you carve that away with CSS rules scoped to each site, so your feed shows the people you actually follow.
Reddit: drop promoted posts and bait
Create a CSS rule matching *://*.reddit.com/*. Modern Reddit renders posts as shreddit-ad-post and article elements, and ads carry a promoted marker you can target.
/* Native promoted posts in the feed */
shreddit-ad-post,
shreddit-comments-page-ad,
article:has(shreddit-ad-post) { display: none !important; }
/* "Popular communities" and recommendation rails */
reddit-recommendation-rail,
shreddit-recommended-communities-list { display: none !important; }
If you also want a quieter sidebar, hide the trending carousels:
/* Trending today / discovery widgets */
shreddit-trending-searches-container,
faceplate-tracker[source="trending"] { display: none !important; }
X / Twitter: timeline back to follows
On X, promoted tweets include a small "Ad" label rendered as a span inside the post. Create a CSS rule for *://x.com/* (add a second rule for twitter.com if you still hit the old domain). Use :has() to match a post that contains that label.
/* Promoted tweets carry an "Ad" label span */
article:has(span:is(:scope *)):has([data-testid="placementTracking"]) {
display: none !important;
}
/* "Who to follow" and "Discover more" modules */
[aria-label="Timeline: Trending now"],
div[data-testid="UserCell"]:has(a[href$="/connect_people"]) {
display: none !important;
}
X also injects "You might like" and "More Tweets" blocks mid-timeline. They share the cellInnerDiv wrapper, so target the heading text\'s container:
/* Collapse injected suggestion cells */
div[data-testid="cellInnerDiv"]:has(h2 span) { display: none !important; }
Tune that last one carefully — if it hides too much, narrow it to a specific heading. CSS selectors are reversible: delete the rule and the feed is back to default.
A universal "calm feed" starter
Some patterns repeat across sites. This generic CSS rule, scoped to whichever feed you choose, hides common engagement-bait widgets by accessible name.
/* Generic: hide elements labelled as ads or sponsored */
[aria-label*="Sponsored" i],
[aria-label*="Promoted" i],
[data-ad-slot] { display: none !important; }
The i flag makes the match case-insensitive, so "Sponsored", "sponsored" and "SPONSORED" all match.
Smooth out reflow with JavaScript
Hiding cards with display: none can leave the infinite scroller briefly confused. A tiny JS rule scoped to your feed keeps the layout tidy by removing flagged nodes outright after they render.
const SELECTOR = 'shreddit-ad-post';
function prune() {
document.querySelectorAll(SELECTOR).forEach(el => el.remove());
}
prune();
new MutationObserver(prune).observe(document.body, {
childList: true, subtree: true
});
This only removes nodes that already match your CSS selector — no network calls, no data leaves the page. It is purely a layout convenience.
Keep rules scoped
The point of JustZix is precision. A Reddit rule should never run on X, and vice versa — separate rules with separate URL matches keep them isolated and easy to toggle. When a site redesigns, you edit one selector instead of debugging a sprawling script.
Browse our ready-made examples for more feed recipes, or see the YouTube tweaks guide for video-side cleanup. Not installed yet? Download JustZix and start with the promoted-post rule above.
Rate this post
No ratings yet — be the first.