本文へ移動
cccskills
無料GitHub で公開

real-prototype

Implement several variations of a design directly inside the running app, on the real page/route, with a live switcher to toggle between them in the browser, then recommend one and fold the winner into the real code. Variants are real implementations judged against real data, layout, and density (not an isolated mockup). Use this skill whenever the user wants to try design options live in the app, prototype changes directly on a real page, add a variant switcher, compare layouts in-context, asks to "build a few versions of this page", "try variants on the real screen", "switch between designs in the app", "implement this with a toggle", or says "real-prototype this". For a safe standalone .html copy that never touches the app, use the prototype skill instead.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md7.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Real Prototype

Implement several variations directly on the real page in the running app, wired to a live switcher so the user flips between them in the browser, judged against the real header, sidebar, data, and density. Then recommend one and fold it into the real code.

A standalone mockup is a vacuum: every option looks fine in isolation. This skill is the opposite of that. The whole value is seeing variants in context. If the user wants a safe standalone .html copy that never touches the app, use the prototype skill instead.

Principles

  1. Real route, real data, throwaway rendering. Keep the existing data fetching, params, and auth on the page; only the rendered subtree swaps per variant. The wiring is throwaway; mark it clearly as a prototype.
  2. Read-only. Variants must not fire real mutations — point any write at a stub. The question is "what should this look like", not "does the backend work".
  3. No new top-level structure. Mount variants on the existing route, or inside the page that would naturally host the feature. Only create a throwaway route when the thing genuinely has no existing home, following the project's routing convention and with prototype in the path/name.
  4. Never ships to users. Gate the switcher (and ideally the variant branching) out of production builds (process.env.NODE_ENV !== 'production' or the project's equivalent) so a stray merge can't reach users.

Process

1. State the question and pick N

Default to 3 variants (2 for a quick A/B, 4-5 when the space is wide open; cap at 5). Write the plan in one line, e.g. "Three variants of the settings page, switchable via ?variant= on the existing /settings route." Confirm the route and granularity with the user if they're reachable.

2. Build structurally different variants

Draft each variant as its own component (VariantA, VariantB, ...), using the project's real component library and styling system so they look native. Variants must be structurally different — different layout, information hierarchy, or primary affordance, not just different colors. Three tweaked card grids isn't a prototype, it's wallpaper. If two come out similar, redo one with explicit "don't reuse that layout" guidance.

3. Wire them onto the real route

Render the variant chosen by a ?variant= URL search param, keeping all existing data fetching above the switch so every variant sees the same real data:

// pseudo-code — adapt to the project's framework
const variant = searchParams.get('variant') ?? 'A';
return (
  <>
    {variant === 'A' && <VariantA {...data} />}
    {variant === 'B' && <VariantB {...data} />}
    {variant === 'C' && <VariantC {...data} />}
    <PrototypeSwitcher variants={['A', 'B', 'C']} current={variant} />
  </>
);

4. Build the live switcher

A small fixed bar, visually distinct from the page (subtle shadow, comfortable padding, rounded pill) so it's obviously not part of the design being judged. Three parts: left arrow (previous, wraps), current variant label (key + name, e.g. B — Sidebar layout), right arrow (next, wraps).

Give it a frosted-glass (blur) background so it reads as a floating control over the page rather than a solid block that hides content behind it:

.prototype-switcher {
  background: rgba(20, 20, 20, 0.55);     /* translucent; lighten for light UIs */
  backdrop-filter: blur(12px) saturate(120%);
  -webkit-backdrop-filter: blur(12px) saturate(120%);  /* Safari */
  border: 1px solid rgba(255, 255, 255, 0.15);
  border-radius: 9999px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
  color: #fff;
}

Tune the translucency/text color to the page (a darker pill on light pages, lighter on dark) so the label stays readable. Keep the bar high-contrast enough to find at a glance despite the blur. Provide a solid-ish fallback color for browsers without backdrop-filter, so it never renders as an unreadable transparent strip.

Position it where it stays out of the way:

  • Default: fixed bottom-centre (position: fixed; bottom: 16px; left: 50%; transform: translateX(-50%)), with a high z-index so it floats above page content. This is unobtrusive on most layouts and easy to reach.

  • If the page already has something anchored bottom-centre (a sticky action bar, a chat launcher, a cookie banner, a mobile tab bar), move the switcher to a clear corner instead — bottom-right is the usual safe fallback, then bottom-left or top-right. Pick whichever corner the specific page leaves empty.

  • Don't let it cover primary content or controls. If the layout is full-height with no free edge, make the bar compact and add a small offset, or let it be drag-repositionable as a last resort.

  • Keep it fully visible at the target viewport(s) — check it doesn't collide with a mobile keyboard, safe-area insets, or a narrow-width layout.

  • Clicking an arrow updates the URL search param via the framework's router (router.replace / navigate) so the variant is shareable and reload-stable.

  • ← / → keys also cycle, but don't intercept them while an <input>, <textarea>, or [contenteditable] is focused.

  • Gate the whole bar out of production builds.

  • Put it in one shared component so it's reusable.

5. Hand it over

Give the user the URL and the ?variant= keys to flip through. Then recommend one: be a critic, name each variant's real weakness, say why your pick wins in this context, and explicitly invite the remix — "I want the header from B with the sidebar from C" is usually the design they actually want.

6. Fold the winner in and clean up

Once a variant wins, record which and why (commit message, PR description, or a short note). Then delete the losing variants and the switcher, and fold the winner into the real page. Rewrite it to production standards as you fold it in: the variant was built under prototype constraints (read-only, minimal error handling, throwaway wiring). Don't leave variant components or the switcher rotting in the repo, and for a throwaway route, promote the winner to a real route and delete the prototype one.

Anti-patterns

  • Variants that differ only in color or copy. Real variants disagree about structure.
  • Sharing too much between variants. A shared <Header> is fine; a shared <Layout> defeats the point — each variant should be free to throw out the layout.
  • Wiring variants to real mutations. Keep them read-only; stub any write.
  • Leaving the switcher shippable. Gate it out of production.
  • Promoting prototype code straight to production. Rewrite properly when folding the winner in.
  • An empty throwaway route when a real page exists. Mount on the real route so variants are judged against real data.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.

日本語の概要は準備中です。原文の説明を表示しています。

samuelpatro/.claude32026年9月3日 更新

Monitor a pull request through review and CI until it's green: verify every bot claim against the code, fix what's real, push back on what's wrong, rerun flaky checks. Use when the user asks to babysit, monitor, watch, or shepherd a PR, says "get this PR green" or "handle the review comments". Accepts an optional PR number/URL; defaults to the current branch's open PR.

日本語の概要は準備中です。原文の説明を表示しています。

samuelpatro/.claude32026年9月3日 更新

changelog

無料

Generate a single unified changelog from git history that works for everyone in the company (managers and non-tech colleagues as well as developers). Outputs Slack mrkdwn so it can be pasted straight into Slack. Defaults to Slovak (English only on explicit request) and to comparing the release branch (main) against develop to show unreleased changes; also supports date ranges like "today", "yesterday", "last week", or an explicit git range. User-invoked only via /changelog.

日本語の概要は準備中です。原文の説明を表示しています。

samuelpatro/.claude32026年9月3日 更新

commit

無料

Create atomic git commits with terse, exact Conventional Commits messages. Cuts noise, preserves intent. Subject ≤50 chars. Body only when "why" isn't obvious. Use when the user says "commit", "commit this", "/commit", or asks to stage and commit changes.

日本語の概要は準備中です。原文の説明を表示しています。

samuelpatro/.claude32026年9月3日 更新

Create atomic git commits with terse Conventional Commits messages, then push to remote. Subject ≤50 chars, body only when "why" isn't obvious. Never force pushes. Use when the user says "commit and push", "commit & push", "/commit-push", or asks to stage, commit, and push in one flow.

日本語の概要は準備中です。原文の説明を表示しています。

samuelpatro/.claude32026年9月3日 更新

create-pr

無料

Create branch, atomic commits, push, and open a pull request with terse, exact messages. Conventional branch + commit format. PR title ≤70 chars, body says "why", not "what". Use when the user says "create pr", "create pullrequest", "create pull request", "make pr", "open pr", "open pullrequest", "open pull request", "submit pr", "raise pr", "/create-pr", or asks to ship/send changes as a pull request (PR/pullrequest/pull-request, any spelling).

日本語の概要は準備中です。原文の説明を表示しています。

samuelpatro/.claude32026年9月3日 更新

samuelpatro のスキルをすべて見る

このスキルの問題を報告する