LinkedIn Enhancer
by José DA COSTA
Productivity tools that enhance LinkedIn.
LinkedIn Enhancer adds practical productivity tools directly inside LinkedIn: it stops the feed from reloading when you switch tabs, hides ads and feed clutter, copies any post and its full comment thread as a ready-to-use AI prompt, and shows your relationship with each author. Every tool is a simple on/off toggle, nothing is uploaded, and all settings stay in your browser.
- Keep your scroll position and draft comment when you switch tabs
- One-click Copy button turns a post and its comments into an AI prompt
- Auto-expands long comment threads before copying, so nothing is missed
- Hide sponsored posts and LinkedIn's own Premium upsells
- Hide suggested posts and 'people to follow' recommendation cards
- See each author's connection degree and whether you follow them
- No data leaves your browser; every tool is an independent toggle
Available for
Builds install in your browser developer mode.
Why it helps
LinkedIn reloads your feed the moment you switch tabs, wiping your scroll position and any comment you were drafting. Sponsored posts, LinkedIn's own Premium upsells, suggested posts, and 'people to follow' cards push real updates out of view. And when a post sparks a good discussion in the comments, there is no clean way to pull the text out to think it through. This extension removes that friction in place.
Features
Stop the feed from auto-refreshing
Keeps your scroll position and your draft comment when you switch tabs.
Copy posts as an LLM-ready prompt
One click copies a post and its full comment thread, formatted for an LLM.
Hide ads and sponsored posts
Replaces sponsored and promoted content, plus LinkedIn's own Premium upsells, with a placeholder.
Hide suggestions and recommendations
Removes suggested posts and in-feed profile recommendation cards.
Relationship badge on posts
Shows the connection degree (1st/2nd/3rd) and whether you follow each author.
Update notifications
Tells you when a new build is published so you can download and install it.
Permissions
Release history
Added
- Per-category hidden counters in the popup and side panel. Each of the four "hide" toggles (sponsored posts, LinkedIn ads, post suggestions, profile recommendations) now shows a count pill of how many items it has removed on the active tab, breaking down the single total already painted on the toolbar icon. The counts are cumulative: because LinkedIn virtualizes the feed (off-screen posts are dropped from the DOM), each item is counted once the moment it is hidden and the running total keeps climbing as you scroll, rather than shrinking. Toggling a category off restores its items and resets its counter. A separator was also added before the relationship-status toggle for visual grouping.
Security
- Build leak gate (
pnpm security:build). A dependency-free script (scripts/check-build-security.mjs) scans every production build dir and fails if it ships a source map (.map, externalsourceMappingURL, or inline map /sourcesContent), an original source file, dev-server / HMR code (localhost:3000,vite-hmr, …) or an absolute dev path. It runs inpnpm validateand as a hard stop in the release workflow before anything is published, so a release can never leak source maps or code.
Removed
- Dropped Safari support. Packaging a Safari Web Extension requires Xcode,
and the MV3 migration it would need (for the stop-feed-refresh
world: 'MAIN'content script) leaked thesidePanelconfig through a WXT browser-detection quirk. All Safari targets, scripts, permissions and docs were removed. The extension now targets Chrome, Edge, Opera, Brave and Firefox.
Changed
- Firefox is now built as Manifest V3. The stop-feed-refresh tool needs a
world: 'MAIN'content script to override LinkedIn's page from inside its strict CSP, andworld: 'MAIN'only exists in MV3. Firefox 128+ supports it (already thestrict_min_version), so the feature now works on Firefox too. Chrome / Edge / Opera / Brave / Firefox are fully supported. CI builds all four browser targets.
Added
- Update notifier. Because the extension is installed manually (no store),
the background periodically (via
chrome.alarms) checks a public releases manifest and shows a one-time notification per version when a newer build is available, linking to the releases page. The options page shows the installed version and a "Check for updates" toggle to disable it entirely. Logic insrc/lib/update-check.ts.
Security
- The extension now makes ONE outbound network request: an anonymous update
check. It fetches a public static JSON
(
…/josedacosta-extensions-releases/…/extension.json) with no query string and no identifier, reading onlylatestVersion. This relaxes the previous "never phones home" posture; it is opt-out via thecheckForUpdatessetting and documented inPRIVACY.md. Newalarms+notificationspermissions back the feature.
Fixed
- Relationship badge now lands on the post author, not the resharer. On "X liked/commented on this" posts, the badge could attach to the reactor (e.g. a followed company) while showing the author's follow state — so it read "Non abonné" next to a page you actually follow. The 3rd-degree token is rendered "3e et +", which the degree matcher missed (length + missing "et +"), causing the fallback to the wrong actor. The matcher now accepts "3e et +" / "3rd+", so the badge anchors on the author's degree and reflects their relationship. (The notification level — the bell's "All / Most relevant / Off" — is not present in the feed HTML, so it cannot be shown per post.)
Added
- Update notifier. Because the extension is installed manually (no store),
the background periodically (via
chrome.alarms) checks a public releases manifest and shows a one-time notification per version when a newer build is available, linking to the releases page. The options page shows the installed version and a "Check for updates" toggle to disable it entirely. Logic insrc/lib/update-check.ts.
Security
- The extension now makes ONE outbound network request: an anonymous update
check. It fetches a public static JSON
(
…/josedacosta-extensions-releases/…/extension.json) with no query string and no identifier, reading onlylatestVersion. This relaxes the previous "never phones home" posture; it is opt-out via thecheckForUpdatessetting and documented inPRIVACY.md. Newalarms+notificationspermissions back the feature.
Fixed
- Relationship badge now lands on the post author, not the resharer. On "X liked/commented on this" posts, the badge could attach to the reactor (e.g. a followed company) while showing the author's follow state — so it read "Non abonné" next to a page you actually follow. The 3rd-degree token is rendered "3e et +", which the degree matcher missed (length + missing "et +"), causing the fallback to the wrong actor. The matcher now accepts "3e et +" / "3rd+", so the badge anchors on the author's degree and reflects their relationship. (The notification level — the bell's "All / Most relevant / Off" — is not present in the feed HTML, so it cannot be shown per post.)