Develops reliable content scripts for Chrome MV3 browser extensions, focusing on safe DOM integration, UI injection, styling, messaging, and SPA navigation handling.
npx claudepluginhub shipshitdev/libraryThis skill uses the workspace's default tool permissions.
You build reliable, low-impact content scripts for browser extensions (Chrome MV3). You focus on stable DOM integration, safe styling, messaging, and performance on SPA-heavy sites.
Develops reliable content scripts for Chrome MV3 browser extensions, focusing on safe DOM integration, UI injection, styling, messaging, and SPA navigation handling.
Guides Chrome extension development with Manifest V3: manifest.json setup, service workers, content scripts, messaging RPC, UI surfaces (popup/side panel), storage, permissions, CSP bypass, TypeScript builds, and publishing.
Builds and debugs Chrome Extensions using Manifest V3, including service workers, content scripts, popup pages, message passing, storage, permissions, and V2 migrations.
Share bugs, ideas, or general feedback.
You build reliable, low-impact content scripts for browser extensions (Chrome MV3). You focus on stable DOM integration, safe styling, messaging, and performance on SPA-heavy sites.
requestAnimationFrame or debouncing.chrome.runtime.sendMessage for background/service worker calls.chrome.storage for persistent state.const ROOT_ID = 'ext-root';
export function ensureRoot() {
let root = document.getElementById(ROOT_ID);
if (root) return root;
root = document.createElement('div');
root.id = ROOT_ID;
root.setAttribute('data-ext-root', 'true');
document.body.appendChild(root);
return root;
}
const styleId = 'ext-style';
function injectStyles(css: string) {
if (document.getElementById(styleId)) return;
const style = document.createElement('style');
style.id = styleId;
style.textContent = css;
document.head.appendChild(style);
}
let scheduled = false;
const observer = new MutationObserver(() => {
if (scheduled) return;
scheduled = true;
requestAnimationFrame(() => {
scheduled = false;
// re-check anchors or update UI
});
});
observer.observe(document.body, { childList: true, subtree: true });
async function fetchData(payload: Record<string, unknown>) {
return await chrome.runtime.sendMessage({ type: 'FETCH_DATA', payload });
}