Build order: scaffold → requested features → low-effort additions → medium-effort additions. See PRD.md for full feature specs.
manifest.json (Manifest V3): name, version, permissions (storage), host
permissions, content-script registrations, popup, icons.chrome.storage.sync
({ master, <featureId>: bool }) with defaults.popup.html + popup.css + popup.js — title, master
toggle, one row per feature (checkbox + name + description), dim rows when
master is off.master.master) — global on/off; all features inert when off.mapsLink) — inject a “Maps” tab into the Search
nav linking the current query to google.com/maps/search/<q>. Re-run on
SPA navigation.imageSize) — inject dropdown into Google Images
toolbar; options rewrite the tbs param (Any / Larger than
2-70MP / Large / Medium / Icon) and reload; reflect current tbs.popupBlock) — override window.open at
document_start, allow only right after a genuine link click; neutralize
overlay popunders. Toggle, documented heuristics.viewImage) — direct full-res image link on Google
Images.cleanLinks) — strip /url?q= redirects + utm_* from
Search result links.noAiOverview) — collapse/remove the AI answer block.noAds) — remove “Sponsored” blocks from
Search (light-touch).forceRegion) — redirect google.<cc> →
google.com/ncr.autoConsent) — click through Google’s
“before you continue” interstitial.infiniteScroll) — auto-load next page of
Search/Images results.stripUtm) — remove utm_*/fbclid/gclid
from all URLs site-wide.reverseImage) — hover/right-click to
reverse-search any image.