From bulk-messenger
Creates interactive HTML web builders — self-contained single-file explorers that let users configure something visually through controls, see a live preview, and copy out a prompt. Use when the user asks to make a web builder, explorer, or interactive tool for a topic.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bulk-messenger:web-builderThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A web builder is a self-contained HTML file with interactive controls on one side, a live preview on the other, and a prompt output at the bottom with a copy button. The user adjusts controls, explores visually, then copies the generated prompt back into Claude.
A web builder is a self-contained HTML file with interactive controls on one side, a live preview on the other, and a prompt output at the bottom with a copy button. The user adjusts controls, explores visually, then copies the generated prompt back into Claude.
When the user asks for an interactive web builder, explorer, or visual tool for a topic — especially when the input space is large, visual, or structural and hard to express as plain text.
templates/:
templates/sms-composer.md — SMS template composition (message text, quick start, variables, phone preview)templates/preview.md — Message preview (shows personalized messages with template + contacts combined, iMessage-blue phone mockups)templates/:
templates/global-styles.md - Global styles referencetemplates/component-reference.md - Common html componentsKeep a single state object. Every control writes to it, every render reads from it.
const state = { /* all configurable values */ };
function updateAll() {
renderPreview(); // update the visual
updatePrompt(); // rebuild the prompt text
}
// Every control calls updateAll() on change
function updatePrompt() {
const parts = [];
// Only mention non-default values
if (state.borderRadius !== DEFAULTS.borderRadius) {
parts.push(`border-radius of ${state.borderRadius}px`);
}
// Use qualitative language alongside numbers
if (state.shadowBlur > 16) parts.push('a pronounced shadow');
else if (state.shadowBlur > 0) parts.push('a subtle shadow');
prompt.textContent = `Update the card to use ${parts.join(', ')}.`;
}
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub betoiii/betos-plugin-marketplace --plugin bulk-messenger