Version: 0.1 (draft) Last updated: 2026-06-16 Owner: cyberhirsch Status: Draft for review
Sidekick is a lightweight Chrome extension (Manifest V3) that bundles several small, independent quality-of-life tweaks for everyday browsing — focused mostly on cleaning up and restoring functionality to Google Search that was degraded by EU regulation (DMA) or by Google’s own UI changes, plus a couple of general browsing-safety helpers.
The guiding principle: every feature is individually toggleable from a single popup with a checkbox. Off by default does nothing; on means it just works. No accounts, no servers, no telemetry.
storage.sync.Each feature has a stable id used as the storage key and the checkbox label.
master)What: A single global on/off at the top of the popup. When off, all
features are inert regardless of their individual state.
How: Content scripts read master && feature[id] before doing anything.
Priority: P0.
mapsLink)Problem: Under the EU Digital Markets Act, Google removed the integrated Maps experience (map thumbnail + the convenient “Maps” tab linking your query straight into Google Maps) from Search in Europe.
What we can do (honest scope):
https://www.google.com/maps/search/<current query>
(same tab or new tab — configurable later; default same tab).What we cannot do: Reconstruct the live local map pack with pins and business listings — that data is server-side and not exposed to the extension.
How: Content script on https://www.google.*/search*. Read the query from
the q URL param, build the Maps URL, insert an <a> styled to match Google’s
nav. Re-run on SPA navigation (Google rewrites results in place).
Priority: P0.
imageSize)Problem: Google’s advanced image-size filters (“Larger than N MP”, exact dimensions) are buried/removed from the standard Images UI.
What: Inject a dropdown into the Google Images results toolbar offering:
How: Each option maps to Google’s tbs URL parameter, e.g.
tbs=isz:lt,islt:10mp. On selection, rewrite the URL’s tbs param and reload.
Detect current selection from the existing tbs value to keep the dropdown in
sync. Content script on https://www.google.*/search* where tbm=isch.
Priority: P0.
popupBlock)Problem: Shady sites open a new ad tab (popunder) the first time you click
anywhere on the page, often via window.open or hidden target=_blank
overlay anchors.
What: Suppress programmatic new-tab/window opens that aren’t a deliberate user navigation, without breaking legitimate “open in new tab” clicks on real links.
How (layered, best-effort):
window.open in the page context; allow it only within a short window
immediately following a genuine user click on a real <a href> element;
otherwise return null.onclick/overlay elements that call window.open with no real
destination.target="_blank" from anchors that have no visible content
covering the page (overlay popunder pattern).Trade-offs / risks: Heuristic by nature; may occasionally block a wanted
popup or miss an aggressive one. Ships as a clearly-labeled toggle, default ON,
with the caveat documented. Real legitimate Ctrl/middle-click new tabs are
handled by the browser, not window.open, so those keep working.
Priority: P1.
These are not yet committed — listed for you to pick from.
| Feature | Description | Effort |
|---|---|---|
“View image” button (viewImage) |
Bring back the direct full-res image link in Google Images that Google removed in 2018. | Low |
Strip Google redirect/tracking (cleanLinks) |
Make Google result links point straight at the destination, removing /url?q= redirects and utm_* params. |
Low |
Hide AI Overview (noAiOverview) |
Collapse/remove the AI-generated answer block at the top of Search. | Low |
Hide sponsored results (noAds) |
Remove “Sponsored” blocks from Search results (light-touch, not a full ad blocker). | Low |
Auto-dismiss consent wall (autoConsent) |
Click through Google’s “before you continue” cookie interstitial automatically. | Med |
Force google.com / region (forceRegion) |
Redirect google.<cc> → google.com/ncr to dodge region-specific removals. |
Low |
Endless scroll (infiniteScroll) |
Auto-load the next page of Search/Images results on scroll. | Med |
Strip UTM everywhere (stripUtm) |
Remove utm_*/fbclid/gclid tracking params from all URLs site-wide. |
Med |
Reverse-image-search button (reverseImage) |
Right-click or hover button to Lens/reverse-search any image. | Med |
Recommended first additions: viewImage and cleanLinks (both low
effort, high daily value, and thematically consistent with the Google-fixing
core).
chrome.storage.sync; changes take effect on the next page
load (and live where cheap to do so).google-search.js — maps link, clean links, AI overview, ads, consent.google-images.js — image-size dropdown, view-image button.popup-blocker.js — injected into all pages, runs in page context (via a
page-injected script) to override window.open early (document_start).popup.html + popup.js + popup.css.chrome.storage.sync, single object { master, <featureId>: bool }.storage; host permissions scoped to *://*.google.com/*
for Google features; popup blocker needs <all_urls> content script at
document_start (call out in review as the broadest permission).tbs size mapping (reference for 4.3)Any size → (remove isz from tbs)
Larger than N → isz:lt,islt:{n}mp (n ∈ 2,4,6,8,10,12,15,20,40,70)
Large → isz:l
Medium → isz:m
Icon → isz:i
viewImage + cleanLinks (pending your choice).viewImage + cleanLinks.)google.com or all google.<cc> country domains? (Recommend all.)