Agent skill

Promote Portfolio Component

by Dinil-Thilakarathne in Dinil-Thilakarathne/sona-ui

Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow.

MITAuto-check passedFrontend & Design

Install Promote Portfolio Component

skills CLI
$ npx skills add Dinil-Thilakarathne/sona-ui --skill promote-portfolio-component -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Dinil-Thilakarathne/sona-ui promote-portfolio-component --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/promote-portfolio-component .claude/skills/promote-portfolio-component && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
promote-portfolio-component
GitHub stars
118
Token cost
~2.2k tokens
SKILL.md length
1,090 words
Files
2
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow.

  • Works in 2 steps: Audit and propose → Promote into Sona UI
  • The user supplies a portfolio component path and asks to assess
  • SKILL.md covers Required input, Non-negotiable approval gate, Phase 1: Audit and propose and Phase 2: Promote into Sona UI, plus 1 more section
  • Calls bun and rg

What it does

Promote Portfolio Component is an agent skill from Dinil-Thilakarathne/sona-ui. Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow. Use when the user supplies a portfolio component path and asks to assess, migrate, graduate, productize, publish, or add it to Sona UI. First audit readiness and propose the reusable component boundary without editing either project; after explicit approval, adapt the selected component and complete Sona UI's component, demo, docs, registry…

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

It sits in Frontend & Design, covering React components and Audit readiness. It works with React. The repository describes itself as: A modern UI component library built with React and TailwindCSS to help you build beautiful and accessible web applications faster. The licence is MIT.

When your agent uses it

  • The user supplies a portfolio component path and asks to assess
  • Add it to Sona UI

Example prompts

  • “/promote-portfolio-component”

Workflow steps

2 steps, taken from the step headings in SKILL.md.

  1. Audit and propose
  2. Promote into Sona UI

What it can do on your machine

Read from SKILL.md and the folder at commit 9a72ffe. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bun
    • rg

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Promote Portfolio Component loads about 2.2k tokens when it runs. Until then it costs about 150 tokens; SKILL.md has 1,090 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~150
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Dinil-Thilakarathne/sona-ui at commit 9a72ffe, republished under its MIT licence (© Dinil-Thilakarathne). 1,090 words, ~2,214 tokens.

Download SKILL.mdSave it as .claude/skills/promote-portfolio-component/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
promote-portfolio-component
description
Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow. Use when the user supplies a portfolio component path and asks to assess, migrate, graduate, productize, publish, or add it to Sona UI. First audit readiness and propose the reusable component boundary without editing either project; after explicit approval, adapt the selected component and complete Sona UI's component, demo, docs, registry, navigation, playground, generation, and validation pipeline.

Promote a Portfolio Component

Move a proven portfolio interaction into Sona UI without flattening its craft, importing portfolio-specific coupling, or silently redesigning it. Treat the portfolio as the experimental/editorial layer and Sona UI as the reusable distribution layer.

Required input

Require a path to the source component, demo, or Craft. Resolve the real files with rg --files before forming a plan. Ask only for information that cannot be discovered from the supplied path and its local imports.

Do not assume that a visually finished experiment is library-ready. Do not modify or remove the portfolio source during promotion unless the user explicitly asks for that separate change.

Non-negotiable approval gate

Run this workflow in two distinct phases.

  1. Complete Phase 1 as a read-only audit.
  2. Present the promotion brief and identify every material decision.
  3. Stop and wait for explicit approval.
  4. Begin Phase 2 only after the user approves the brief or names a revised direction.

Treat layout, hierarchy, interaction, motion, semantics, visual language, component boundaries, and public API as material decisions. Ask before changing them. Small implementation details that preserve the approved result do not require another confirmation.

Phase 1: Audit and propose

Trace the complete source boundary

Read the supplied file and recursively inspect its local imports. Locate:

  • the reusable component and the portfolio-only demo or page shell;
  • props, defaults, callbacks, refs, state ownership, and controlled/uncontrolled behavior;
  • CSS modules, global styles, tokens, fonts, icons, images, and other assets;
  • hooks, utilities, providers, aliases, framework APIs, and runtime packages;
  • animation runtime providers and feature-loading boundaries, including whether motion/react-m components depend on an application-level LazyMotion provider;
  • responsive, light/dark, keyboard, focus, reduced-motion, and cleanup behavior;
  • analytics, content, route, or application-specific coupling that must not enter the library.

Inspect actual files rather than relying on the visible entry file alone. Never read, list, or modify personal/journal/.

Apply the craft review

Read and use the repository-local apple-design and design-motion-principles skills. Review the component through the Emil, Jakub, and Jhey lenses, with attention to:

  • immediate pointer-down and keyboard feedback;
  • interruptible motion and spatial continuity;
  • direct manipulation, velocity handoff, and cancellation where applicable;
  • reduced motion, reduced transparency, contrast, focus, and touch behavior;
  • restrained typography and visual effects;
  • lifecycle cleanup, performance, and resize resilience.

Preserve expressive behavior that demonstrates craft. Propose removing or neutralizing portfolio-specific styling only when it prevents reuse, and make that an explicit approval item.

Define the distributable contract

Separate three layers:

  1. Library component — reusable behavior, stable API, styles, and required utilities.
  2. Sona demo — realistic content and composition that demonstrate the component without becoming part of its API.
  3. Portfolio shell — editorial copy, Craft layout, page navigation, analytics, and product-specific data that remain in the portfolio.

Prefer a focused API with useful composition points over a snapshot of demo-specific markup. Preserve existing props and behavior when they already form a sound public contract. Do not invent variant-only props, domain metaphors, or configuration merely to reproduce one demo.

Classify the result as one of:

  • Ready — the reusable boundary and adaptations are clear.
  • Ready with decisions — promotion is viable after the user chooses listed API, layout, or interaction decisions.
  • Not ready — essential accessibility, behavior, dependency, or ownership problems should be resolved in the portfolio first.
  • Portfolio-only — the value depends on its editorial context and would weaken as a general library component.
Present the promotion brief

Report a concise brief containing:

  • source entry and files that belong to the component boundary;
  • readiness classification and evidence;
  • proposed Sona component name, slug, category, and one-sentence purpose;
  • proposed public API, defaults, callbacks, ref behavior, and accessibility semantics;
  • dependencies and assets to carry, replace, or leave behind;
  • behavior and visual details that will remain unchanged;
  • proposed adaptations and why each is necessary;
  • unresolved material decisions as clearly named options;
  • planned Sona files and focused validation commands.

End Phase 1 by explicitly asking the user to approve or revise this brief. Do not create prototypes or production files yet.

Show full SKILL.md (440 more words)Show less

Phase 2: Promote into Sona UI

After approval, treat the approved brief as the contract. If implementation reveals a new material decision, pause and ask before continuing.

Adapt without redesigning
  • Copy only the approved reusable boundary; leave the portfolio source intact.
  • Preserve the proven rendered hierarchy, Motion ownership, presence mode, layoutId placement, transition values, and containing-block behavior before adding library adaptations. Do not restructure working interaction code as a speculative improvement.
  • Replace portfolio aliases, tokens, globals, providers, content, and framework coupling with Sona-local equivalents.
  • The portfolio uses an application-level LazyMotion optimization, but Sona components must not depend on that provider. When promoted source imports lightweight elements from motion/react-m, use the self-contained motion elements from motion/react in Sona unless the user explicitly approves a different runtime contract. Otherwise initial styles can apply while animate features never load for consumers.
  • Preserve props, defaults, callbacks, refs, accessibility, state behavior, and interaction timing unless the approved brief changes them.
  • Add only the minimum API, accessibility, token, and instance-isolation changes required for distribution. If an adaptation would alter the working DOM or animation structure, treat it as a material decision and ask first.
  • Keep reusable visuals neutral while retaining the approved expressive interaction.
  • Keep demo content in the demo; do not bake it into the component.
  • Declare every external source import in the component's exact src/registry/registry.json block.
Complete the library pipeline

Read and follow the repository-local add-sona-component skill for the current Sona UI file structure and generation rules. Its canonical pipeline owns:

  • component source and prop JSDoc;
  • default and optional variant demos;
  • hand-authored registry metadata and dependencies;
  • MDX documentation;
  • component navigation;
  • playground controls and render wiring;
  • generated registry and prop-type artifacts.

Use current repository examples rather than assuming paths or schemas from memory. Do not hand-edit generated files.

Validate proportionally

At minimum, run:

bash
bun run build:registry
bun run check:registry
bun run typecheck

Run focused formatting or lint checks on changed hand-authored files when available. Inspect the generated public/r/<slug>.json and prop table entry to confirm all source files, dependencies, and documented props are present.

Static checks are not visual proof. The user normally owns browser review for Sona UI, so do not open or run a browser preview unless explicitly requested. Report static, build, registry, type, and rendered verification separately and precisely.

Completion report

State:

  • what was promoted and what intentionally stayed portfolio-only;
  • the final public API and any approved changes from the source;
  • every hand-authored and generated surface added;
  • validation commands and exact results;
  • whether browser interaction and visual review were performed or remain for the user.

Do not call the promotion complete if the registry payload omits a required file or dependency, the public API differs without approval, or a required check fails.

© Dinil-Thilakarathne, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/promote-portfolio-component of Dinil-Thilakarathne/sona-ui.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit 9a72ffe

Compare with similar skills

Promote Portfolio Component next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Promote Portfolio Component compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Promote Portfolio Component this skillDinil-Thilakarathne/sona-ui118—~2.2kAutomated safety check: PassMIT
Web Artifacts Builderanthropics/skills180k40 repos~769Automated safety check: PassApache-2.0
React Router Developmentremix-run/react-router57k1 repos~1.5kAutomated safety check: PassMIT
React UI State PatternsChrisWiles/claude-code-showcase6.1k8 repos~1.6kAutomated safety check: PassNone
React View Transitions Guidevercel-labs/next-beats16811 repos~3.1kAutomated safety check: PassMIT
Chakra UI v3 Builderchakra-ui/chakra-ui41k—~3.1kAutomated safety check: PassMIT

Similar skills

  • Web Artifacts Builder

    anthropics/skills

    Official

    Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.

    180k GitHub starsUsed in 40 repos~769 tokens
    Frontend & DesignAuto-check passed
  • React Router Development

    remix-run/react-router

    Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.

    57k GitHub starsUsed in 1 repo~1.5k tokens
    Frontend & DesignAuto-check passed
  • React UI State Patterns

    ChrisWiles/claude-code-showcase

    Sets patterns for React interfaces: when to show loading spinners or skeletons, how to surface errors, how to disable buttons during async work and how to handle empty lists.

    6.1k GitHub starsUsed in 8 repos~1.6k tokens
    Frontend & DesignAuto-check passed
  • React View Transitions Guide

    vercel-labs/next-beats

    Official

    Guides implementing animated page and state transitions in React with the native View Transition API, covering shared elements, list reorders and directional navigation.

    168 GitHub starsUsed in 11 repos~3.1k tokens
    Frontend & DesignAuto-check passed
  • Chakra UI v3 Builder

    chakra-ui/chakra-ui

    Builds responsive, accessible Chakra UI v3 components and layouts, sets up Chakra in new or existing projects, and designs themes with tokens, semantic tokens and recipes.

    41k GitHub stars~3.1k tokensUpdated 4 days ago
    Frontend & DesignAuto-check passed
  • Analyze and optimize React component performance issues (slow renders, re-render thrash, laggy lists, expensive computations).

    4k GitHub starsUsed in 5 repos~1.2k tokens
    Frontend & DesignAuto-check passed

More from Dinil-Thilakarathne/sona-ui

All 10 skills in this repo
  • Oklch Skill

    Dinil-Thilakarathne/sona-ui

    OKLCH color space for web projects. An agent skill from Dinil-Thilakarathne/sona-ui.

    118 GitHub starsUsed in 1 repo~1.2k tokens
    Auto-check passed
  • Sona UI

    Dinil-Thilakarathne/sona-ui

    Discover and integrate Sona UI registry components. An agent skill from Dinil-Thilakarathne/sona-ui.

    118 GitHub stars~1.1k tokensUpdated 4 days ago
    Auto-check passed
  • Smooth Shadow Ring

    Dinil-Thilakarathne/sona-ui

    A skill your agent uses when styling any elevated surface (card, dialog, popover, dropdown, menu, tooltip, sheet, toast) in a Tailwind project that has shadow-plugin installed.

    118 GitHub starsUsed in 1 repo~1k tokens
    Auto-check passed
  • Add Sona Component

    Dinil-Thilakarathne/sona-ui

    Integrate a new component into the Sona UI library end to end — the full per-component pipeline of writing the component, demo, docs, registry entry, nav link, playground controls, regenerating the…

    118 GitHub stars~2.2k tokensUpdated 4 days ago
    Auto-check passed
  • Component Anatomy

    Dinil-Thilakarathne/sona-ui

    Create a source-backed Inspection Board around an existing Sona UI component for social demonstrations and later documentation experiments.

    118 GitHub stars~1.9k tokensUpdated 4 days ago
    Auto-check passed
  • Design Motion Principles

    Dinil-Thilakarathne/sona-ui

    Motion and interaction design expert based on Emil Kowalski, Jakub Krehel, and Jhey Tompkins' techniques.

    118 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed

Works with

Questions about Promote Portfolio Component

What does Promote Portfolio Component do?

Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow. Promote Portfolio Component is an agent skill from Dinil-Thilakarathne/sona-ui. Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow.

When should I use Promote Portfolio Component?

Promote Portfolio Component fits situations like: the user supplies a portfolio component path and asks to assess; add it to Sona UI.

How do I install Promote Portfolio Component in Claude Code?

Run `npx skills add Dinil-Thilakarathne/sona-ui --skill promote-portfolio-component -a claude-code`. Or copy the skill folder (.agents/skills/promote-portfolio-component in Dinil-Thilakarathne/sona-ui) into .claude/skills/promote-portfolio-component in your project. Claude Code loads it when a task matches its description.

How do I install Promote Portfolio Component in Codex?

Run `npx skills add Dinil-Thilakarathne/sona-ui --skill promote-portfolio-component -a codex`. Or copy the skill folder (.agents/skills/promote-portfolio-component in Dinil-Thilakarathne/sona-ui) into .agents/skills/promote-portfolio-component in your project. Codex loads it when a task matches its description.

Can I use Promote Portfolio Component in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Dinil-Thilakarathne/sona-ui --skill promote-portfolio-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/promote-portfolio-component, .gemini/skills/promote-portfolio-component, .github/skills/promote-portfolio-component and .opencode/skills/promote-portfolio-component in your project.

What does Promote Portfolio Component need to run?

Going by SKILL.md and its folder, Promote Portfolio Component needs the command-line tools its instructions call (bun and rg).

Does Promote Portfolio Component access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Promote Portfolio Component safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Promote Portfolio Component use?

Promote Portfolio Component is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Promote Portfolio Component use?

About 2.2k tokens (SKILL.md is roughly 8.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Promote Portfolio Component?

Skills that share tags, products or a category with Promote Portfolio Component: Web Artifacts Builder (anthropics/skills, 180k stars), React Router Development (remix-run/react-router, 57k stars), React UI State Patterns (ChrisWiles/claude-code-showcase, 6.1k stars) and React View Transitions Guide (vercel-labs/next-beats, 168 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Promote Portfolio Component?

Dinil-Thilakarathne (a GitHub user) maintains it in Dinil-Thilakarathne/sona-ui, which has 118 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.

Source: Dinil-Thilakarathne/sona-ui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.