Best fit
- The user generated something they like 80% of, and wants to dial
- You're presenting a design system / brand and want the audience to
- You're shipping a stand-alone demo (e.g. a portfolio piece) and
nexu-io/open-design
Use it for design tasks; the detail page covers purpose, installation, and practical steps.
npx skills add https://github.com/nexu-io/open-design --skill "design-templates/tweaks"Source checked Jul 28, 2026·Refresh due Oct 26, 2026
Reorganized from the pinned upstream SKILL.md
Wrap any HTML artifact with a side panel of live controls that rewrite CSS custom properties in real time and persist to localStorage. Inspired by the huashu-design tweak pattern.
npx skills add https://github.com/nexu-io/open-design --skill "design-templates/tweaks"The pinned source contains enough sections and task detail for a source-grounded deep guide; automated content is still not an independent test.
1,490 source words · 22 usable sections
Best fit
Design outputs
Design process
Sections are extracted automatically from the pinned SKILL.md and link back to the source.
Read assets/wrap.html — it ships the panel + bridge as an inert template. Your job is to:
Same options as the critique skill:
Same options as the critique skill:
Read the artifact's CSS first. For each knob, decide yes / no:
Open assets/wrap.html's block — copy its custom-property naming scheme (--accent, --scale, etc.). In the user's artifact, find every place those concerns live and rewrite:
SkillSignal prompt templates
These prompts were written by SkillSignal from the source structure; they are not upstream text.
Source-grounded prompt
Use for a design task while explicitly checking the source sections.
Use tweaks for this design task: [task]. Inputs and constraints: [details]. Work through these pinned SKILL.md sections: “Implementation primitives”, “Workflow”, “Step 1 — Acquire the artifact”, “Step 2 — Decide which knobs apply”, “Step 3 — Lift hard-coded values into custom properties”. Cite the concrete requirements that shape each step, do not invent capabilities absent from the source, and verify the result against: [acceptance criteria].
Design checklist
The source section “Implementation primitives” has been checked.
The source section “Workflow” has been checked.
The source section “Step 1 — Acquire the artifact” has been checked.
The source section “Step 2 — Decide which knobs apply” has been checked.
Source output checked: One sentence before the artifact ("Wrapped X with a 3-knob tweak panel — accent / scale / mode."). Stop after .
Choose a different workflow
Use it for design tasks; the detail page covers purpose, installation, and practical steps.
A separate implementation from nexu-io/open-design; compare its source, maintenance signals, and permission requirements.
Open source detailWhen the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
A separate implementation from coreyhaines31/marketingskills; compare its source, maintenance signals, and permission requirements.
Open source detailWhen the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
A separate implementation from coreyhaines31/marketingskills; compare its source, maintenance signals, and permission requirements.
Open source detailFAQ
Wrap any HTML artifact with a side panel of live controls that rewrite CSS custom properties in real time and persist to localStorage. Inspired by the huashu-design tweak pattern.
The source record exposes this install command: npx skills add https://github.com/nexu-io/open-design --skill "design-templates/tweaks". Inspect the command and pinned source before running it.
Quality breakdown
Based on traceable docs and repository signals; stars are not treated as quality.
Compare before choosing
These links are selected from shared tasks, functions, stacks, platforms, and same-name variants. Compare the source owner, documentation, permissions, and maintenance signals.
Use it for design tasks; the detail page covers purpose, installation, and practical steps.
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
Grounded design brief from the adopted corpus — style, WCAG-checked color tokens, typography, layout pattern, anti-patterns. Use on ui-design-brief or any which-style/palette/font/chart decision.
Write and maintain DESIGN.md + PRODUCT.md — captures visual decisions and interaction patterns so design tasks stay consistent across sessions without re-scanning past work.
Wrap any HTML artifact with a side panel of live controls that rewrite
CSS custom properties in real time and persist to localStorage.
Inspired by the huashu-design tweak pattern.
A single self-contained HTML file with two layers:
--accent, --scale, --density, --mode, --motion.localStorage keyed
by the artifact identifier.The user can:
Pick a subset that suits the artifact. Don't ship all 5 if only 2 matter — clutter is a regression.
--accent — Accent colorA select with 5–8 curated swatches (don't ship a free color picker — the user will pick a bad color and blame you).
const ACCENT_PRESETS = [
{ id: 'rust', val: '#c96442', label: 'Rust' },
{ id: 'cobalt', val: '#2c4d8e', label: 'Cobalt' },
{ id: 'sage', val: '#4a7a3f', label: 'Sage' },
{ id: 'plum', val: '#7a3f6a', label: 'Plum' },
{ id: 'graphite',val: '#3a3a3a', label: 'Graphite' },
];
The artifact uses var(--accent) everywhere it had a hard-coded
accent before. Border / link / pull-quote rule / CTA all flip
together.
--scale — Type scale (0.85 / 1.0 / 1.15)Three settings: Compact (0.85), Normal (1.0), Generous (1.15).
All font-size declarations multiply by var(--scale) via
calc(... * var(--scale)).
Don't go beyond ±15% — beyond that the layout breaks (column flow, breakpoints, line counts).
--density — Layout density (Tight / Normal / Roomy)Three settings that swap the spacing scale: Tight (0.75) /
Normal (1.0) / Roomy (1.4). All padding / gap / margin
declarations multiply by var(--density).
This is the highest-impact knob — it's also the most fragile, so every layout-critical container must declare its base spacing in custom properties before you wrap.
--mode — Light / DarkA 2-state toggle. Sets data-mode="light" vs "dark" on the
<html> element and the artifact's :root selector responds with
two color sets.
If the artifact already has a media-query-based dark mode, replace it with the data-attr version — the user's choice should win over their OS.
--motion — Off / Subtle / LivelyThree settings. Maps to a CSS variable --motion-mult that scales
all transition-duration / animation-duration declarations:
0s (also disables WebGL canvases / decorative animation).1.0 (the artifact's authored timing).1.6 (slower transitions, more visible motion).Respect prefers-reduced-motion: default to Off if the user has
that set, regardless of stored preference.
The Open Design viewer toolbar has a Tweaks toggle that drives panel visibility from outside the iframe. For the toggle to bind to your panel, your artifact must speak one of these two protocols (pick one; don't mix). The toolbar enables itself the moment it sees either signal.
Use this when the panel mounts via JS (React, vanilla, anything dynamic).
Artifact → host:
{ type: '__edit_mode_available', visible?: boolean } to
window.parent. Tells the toolbar a panel exists; the optional visible
reports the panel's initial state so the toolbar toggle starts in sync.
Omit visible for the common "panel is already on screen" case (the host
treats a missing field as true so the legacy zero-arg message keeps
working). Pass visible: false to declare a default-closed panel.{ type: '__edit_mode_dismissed' }. Toolbar flips to "off".Host → artifact:
{ type: '__activate_edit_mode' } — open the panel (setOpen(true)).{ type: '__deactivate_edit_mode' } — close the panel (setOpen(false)).Minimal listener:
window.addEventListener('message', (e) => {
const t = e?.data?.type;
if (t === '__activate_edit_mode') setOpen(true);
else if (t === '__deactivate_edit_mode') setOpen(false);
});
// Or, for a default-closed panel:
// window.parent.postMessage({ type: '__edit_mode_available', visible: open }, '*');
window.parent.postMessage({ type: '__edit_mode_available' }, '*');
// in your close handler:
const dismiss = () => {
setOpen(false);
window.parent.postMessage({ type: '__edit_mode_dismissed' }, '*');
};
Panel may default to open or closed — the host syncs its toggle to whichever state the artifact reports.
assets/wrap.html)Use this only when you wrap the template verbatim. The artifact ships a
.tw-panel element and toggles a .tw-hidden class for visibility. The
viewer's iframe bridge (in apps/web/src/runtime/srcdoc.ts) hides the
panel on initial paint, watches the class via MutationObserver, and
relays state both directions. No JS required in the artifact beyond what
the template already includes.
Selectors are fixed: .tw-panel (the panel root) and .tw-hidden (the
hidden state). If you rename either, the bridge can't find it.
Don't invent a third protocol or rename either set of identifiers. The toolbar toggle only binds to A or B. Custom panels with custom classes and no postMessage will leave the toolbar greyed out.
Read assets/wrap.html — it ships the panel + bridge as an
inert template. Your job is to:
#hex / Npx / Nrem and convert).wrap.html.assets/wrap.html's KNOBS array to keep only the knobs
you decided are relevant to this artifact. Don't ship 5 if 2
matter.STORAGE_KEY to a unique slug (tweaks-<artifact-slug>).The bridge in wrap.html:
localStorage[STORAGE_KEY] JSON on first paint.document.documentElement.style.setProperty('--accent', ...).change event and writes back.Same options as the critique skill:
index.html in the project folder).Read the artifact's CSS first. For each knob, decide yes / no:
--accent — yes if the artifact has 1 accent color used ≥ 3 times.--scale — yes if the artifact is type-driven (article, deck,
pricing page).--density — yes if the artifact has consistent gap / padding
rhythm (deck, dashboard, landing). No for runbooks (already dense).--mode — yes if the artifact has authored dark mode tokens, or
you're willing to derive them.--motion — yes if the artifact has any transition / animation
worth scaling. No for static reports / critique reports.Default: 3 knobs is the sweet spot. Five is too busy, one is not worth a panel.
Open assets/wrap.html's <style> block — copy its custom-property
naming scheme (--accent, --scale, etc.). In the user's artifact,
find every place those concerns live and rewrite:
color: #c96442 → color: var(--accent)font-size: 18px → font-size: calc(18px * var(--scale))padding: 24px 32px → padding: calc(24px * var(--density)) calc(32px * var(--density))transition: opacity 200ms → transition: opacity calc(200ms * var(--motion-mult))If the artifact uses clamp() or vw already, multiply the
outer value by the custom property — don't tear apart clamp(...).
Copy the artifact's <style> and <body> into the marked regions
of wrap.html. Keep the panel + bridge intact.
Open the result, click each knob at least once, refresh the page, confirm the choice persists. If a knob breaks the layout — remove it, don't ship it.
<artifact identifier="tweaks-<artifact-slug>" type="text/html" title="<Artifact Title> · Tweaks">
<!doctype html>
<html>...</html>
</artifact>
One sentence before the artifact ("Wrapped X with a 3-knob tweak
panel — accent / scale / mode."). Stop after </artifact>.
tweaks-<slug>, not a global
key. Two artifacts open in two tabs must not share state.prefers-reduced-motion — default to Off for motion
if the user has that set, override only on explicit click.