From magic-powers
Build extension UI — popup, options page, side panel, and devtools panel — with React/Vue or vanilla JS.
npx claudepluginhub kienbui1995/magic-powers --plugin magic-powersThis skill uses the workspace's default tool permissions.
- Building popup, options page, side panel, or devtools panel
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
| Surface | File | Trigger | Size |
|---|---|---|---|
| Popup | popup.html | Toolbar icon click | 800×600px max |
| Options page | options.html | Right-click → Options | Full browser tab |
| Side panel | sidepanel.html | chrome.sidePanel API | Persistent panel |
| DevTools panel | devtools.html | DevTools → custom tab | DevTools pane |
| New tab override | newtab.html | New tab | Full page |
chrome.storage on open; save to storage on changechrome.runtime.sendMessage// popup.js
document.addEventListener('DOMContentLoaded', async () => {
const { count } = await chrome.storage.local.get('count');
document.getElementById('count').textContent = count ?? 0;
});
// manifest.json
"options_ui": {
"page": "options.html",
"open_in_tab": true
}
chrome.storage.sync for user preferences (syncs across devices)// manifest.json
"side_panel": { "default_path": "sidepanel.html" },
"permissions": ["sidePanel"]
// Open side panel on action click
chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true });
Use Plasmo or WXT for React/Vue extensions:
# Plasmo
npm create plasmo@latest
# WXT
npm create wxt@latest
Handles: manifest generation, HMR in dev, production build, MV3 compatibility.
Vanilla JS for simple extensions — no framework overhead, faster popup load.
chrome.storage on open (not relying on background state)?chrome.storage.sync for user preferences?<script> — move all JS to external fileswindow.close() in popup closes the popup, not the browser window