237 Commits

Author SHA1 Message Date
speedy75015-crypto
e2effd5775
fix(data): make catalog snapshot hashes line-ending independent (#478)
* fix(data): regenerate stale catalog-summary snapshot hashes

catalog-summary.json was not regenerated after google-fonts.csv,
google-font-licenses.json, icons.csv and phosphor-icons-upstream.json
changed, so `npm --prefix cli run verify:data` fails on a clean
checkout of main:

  validate:semantic          4 stale snapshot errors
  validate:catalog-summary   "catalog-summary.json is stale"
  test:python                1 failure / 153
  check:assets               2 files out of sync

Regenerated with the existing --verified-at 2026-08-26: only the four
sha256 fields change. The date is a human attestation that the font
catalog was checked against the upstream google/fonts repository, so it
is deliberately left untouched -- no such verification was performed
here.

verify:data now exits 0.

Note: prepublishOnly runs sync:assets before verify:data, which
regenerates the snapshot at publish time. That is why released packages
are unaffected and the drift stayed invisible on main.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UidECV1wVBD8SW6Abuj71

* fix(data): make catalog snapshot hashes line-ending independent

Root cause of the stale snapshot restored in the previous commit.

bd19ab9 (#462) regenerated catalog-summary.json from a CRLF checkout.
Every recorded sha256 was the CRLF hash of its source file, so the
check failed on every LF platform. The four committed values are
exactly sha256(crlf_bytes):

  google-fonts.csv              committed d03194d2…  = CRLF hash
  google-font-licenses.json     committed 7c35e410…  = CRLF hash
  icons.csv                     committed 272ccf0e…  = CRLF hash
  phosphor-icons-upstream.json  committed 81c37fb3…  = CRLF hash

Two conditions had to combine: the digest hashed raw bytes, and no
.gitattributes pinned these files to LF, so Windows checkouts get CRLF
by default. Restoring the hashes alone would let the next contributor
on Windows reproduce the same commit.

Three changes:

- normalize line endings in generate-catalog-summary.py's digest(), so
  the snapshot no longer depends on the checkout
- apply the same normalization in validate_data.py, which independently
  recomputes the hashes and has to agree with the generator
- add .gitattributes pinning src/ui-ux-pro-max/data/*.{csv,json} to LF,
  so a Windows checkout matches the committed bytes in the first place

sync-assets.mjs already normalizes to LF, so this only extends an
existing project convention to the two places that were missing it.

Adds test_catalog_summary_line_endings.py: LF and CRLF inputs must
digest identically, the committed snapshot must match the normalized
sources, and a simulated CRLF checkout must still produce the recorded
hashes. The third case fails against the pre-fix digest.

verify:data exits 0; the Python suite goes from 153 to 156 tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UidECV1wVBD8SW6Abuj71

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 14:14:59 +07:00
Clark Cant
40d8b6facf
Merge pull request #480 from Yoruxyv/docs/indonesian-readme
docs: add Indonesian README
2026-09-02 13:44:47 +07:00
Dendroculus
c21a7b095f
docs: add Indonesian README 2026-09-02 10:38:23 +07:00
djatadougbewilfried-star
f23267105a
fix(design-system): make the skill work outside a vendored checkout and on Windows (#460)
* fix(design-system): resolve project root from cwd, not __file__

fetch-background.py and html-token-validator.py derived PROJECT_ROOT with five
.parent hops, which only reaches the project root when the skill is vendored at
<project>/.claude/skills/design-system/scripts/. Installed at user level
(~/.claude/skills/) or as a plugin, PROJECT_ROOT pointed outside the project, so
both scripts silently ran against no tokens at all.

Resolve from the working directory instead, matching generate-tokens.cjs and
validate-tokens.cjs which already use process.cwd(). DESIGN_SYSTEM_PROJECT_ROOT
overrides it when the project root cannot be inferred.

slide_search_core.py is left alone: it resolves skill-relative data, which is
the correct use of __file__.

Refs #459

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(design-system): stop findProjectRoot from hanging on Windows

embed-tokens.cjs walked up the tree with `while (dir !== '/')`. On Windows the
filesystem root is 'C:\', so that condition is never true, and path.dirname('C:\')
returns 'C:\' unchanged -- the loop spins forever at 100% CPU instead of erroring
out, whenever assets/design-tokens.css is not found above the cwd.

Stop when dirname stops changing, which terminates on every platform.

Refs #459

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(design-system): force UTF-8 stdout so emoji output works on cp1252 consoles

search-slides.py --context and html-token-validator.py print emoji. On a Windows
console the default encoding is cp1252, so the first emoji raises
UnicodeEncodeError and the command dies with a traceback instead of output --
this takes out --context, the entry point of the contextual slide system.

Reuse the guard already shipped in src/ui-ux-pro-max/scripts/search.py.

Refs #459

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(design-system): decode subprocess output as UTF-8 in validate-tokens tests

test_validate_tokens.py drives validate-tokens.cjs through subprocess.run with
text=True but no explicit encoding, so Python decodes the pipe with the locale
codec. On Windows (cp1252) the validator's emoji output raises UnicodeDecodeError
inside the reader thread, result.stdout comes back as None, and the assertion
fails with a confusing `TypeError: argument of type 'NoneType' is not a
container` -- this suite cannot pass on Windows at all today.

Pin the pipe and the fixture write to UTF-8. The validator itself was never at
fault: run by hand it flags the hardcoded hex correctly.

Note: brand/scripts/tests/test_sync_brand_to_tokens.py uses the same
text=True-without-encoding pattern and is one emoji away from failing the same
way. Left alone to keep this PR scoped to design-system.

Refs #459

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 01:42:36 +07:00
nhatlong90
bd19ab9070
fix(cli): support cross-platform python execution on windows (#462)
- replaced hardcoded python3 in npm scripts with a node wrapper to support windows natively without breaking unix systems

- updated stale catalog-summary.json snapshot

Co-authored-by: khietan <118370929+khietan@users.noreply.github.com>
2026-09-01 01:13:07 +07:00
notbucki
c7d413e7c3
fix(design): use skill-relative script paths + CI path contract (#474 finding 1) (#476)
Replace all 22 hard-coded ~/.claude/skills/design/scripts/... invocations
in the design skill with skill-relative paths (python3 scripts/...), the
same convention the brand and design-system sub-skills already use. The
user-level path only works in one install context: under a marketplace/
plugin install the skill lives in the plugin cache, and under project-level
CLI installs there is no ~/.claude/skills/design/ either.

Edited .claude/skills/design/SKILL.md (source of truth) and regenerated
the CLI copy with cli/scripts/sync-assets.mjs; --check passes.

Adds a path-contract step to check-asset-sync.yml that fails if any
SKILL.md (either copy) reintroduces a ~/.claude/skills/ invocation, and
widens the workflow's path filters to .claude/skills/** so the contract
actually fires on sub-skill edits.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 00:21:02 +07:00
Mortal
d95bdf5669
fix(banner): make workflow self-contained (#473)
Remove references to tools and sibling skills that are not bundled with banner-design. Add plugin, asset, and Claude CLI installation path-contract coverage.
2026-08-31 23:44:38 +07:00
Clark Cant
d279284fb1
Merge pull request #471 from Yongveloper/docs/korean-readme
docs: add Korean README
2026-08-31 12:11:48 +07:00
yongveloper
e9bd28180f fix(docs): avoid Hangul diagram misalignment
GitHub renders Hangul with fallback font metrics that differ from
ASCII spacing. Replace right-bordered diagrams with borderless layouts
so alignment no longer depends on browser-specific font rendering.
2026-08-31 01:12:55 +09:00
yongveloper
5f2b160e3b docs: add Korean README 2026-08-31 01:00:40 +09:00
nb213
8bd29e7754
feat(design): add Atlas Cloud logo provider (#447)
Signed-off-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
Co-authored-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
2026-08-27 16:15:36 +07:00
Clark Cant
e4f4547369
Merge pull request #464 from loulanyue/fix/detect-claude-plugin
fix(cli): detect .claude-plugin directory for Claude Code in detectAIType
2026-08-26 13:57:16 +07:00
loulanyue
3e6be6d538 fix(cli): detect .claude-plugin directory for Claude Code in detectAIType 2026-08-26 14:42:00 +08:00
Clark Cant
e353a50876
Merge pull request #461 from djatadougbewilfried-star/fix/brand-test-encoding
test(brand): decode subprocess output as UTF-8 so the suite can pass on Windows
2026-08-25 22:27:04 +07:00
Wilfried Djata
a8f4e7e1ec test(brand): decode subprocess output as UTF-8 and cover the error path
test_sync_brand_to_tokens.py drives sync-brand-to-tokens.cjs through
subprocess.run with text=True but no explicit encoding, so Python decodes the
pipe with the locale codec. Three of the script's messages carry emoji whose
UTF-8 bytes land on cp1252's undefined slots: 0x8F in the "no base hex found"
warning (sync-brand-to-tokens.cjs:132), 0x9D in the "brand guidelines not found"
error (:198), and 0x8F in the dry-run notice (:223). Decoding then raises inside
subprocess's reader thread, the stream comes back as None, and any assertion
against it fails with `TypeError: argument of type 'NoneType' is not a
container` -- which hides the real result behind an unrelated error.

The existing test passes today only because the bundled starter fixture happens
to take none of those three paths.

Pin the pipe to UTF-8, extracted into a shared _run helper to match the idiom in
design-system's test module, and add a regression test for the missing-guidelines
path -- the default state of any project that has not run the brand skill yet.
That test fails without the encoding fix (stderr is None) and passes with it.

Follow-up to #460

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 14:33:39 +00:00
Clark Cant
9f1824aa7b
Merge pull request #458 from Fermilus-coder/test/droid-script-path-coverage
test(cli): add droid to script-path rendering coverage
2026-08-25 17:26:23 +07:00
Fermilus-coder
e084ceb4ee test(cli): add droid to script-path rendering coverage
droid's install root (.factory) doesn't match its platform
identifier, the same mismatch pattern already covered for codex
(.agents). Extends the existing test cases rather than adding new
assertions.
2026-08-24 21:48:33 -06:00
Clark Cant
c87cdc226f
Merge pull request #452 from tuananh31j/main
docs: add Vietnamese README
2026-08-24 23:56:41 +07:00
Rafli Surya Wijaya
13179471f9
docs: add openclaw to AI assistant CLI initialization list in README (#456) 2026-08-24 20:55:43 +07:00
tuananh31j
2872e4cc23 docs: add Vietnamese README 2026-08-22 11:11:21 +07:00
lodderjasper99-lang
bc826e2267
docs: fix outdated manual sync steps in CONTRIBUTING.md (#450)
The manual cp commands only synced cli/assets/, skipping the
.claude/skills/ui-ux-pro-max/ mirror that the sync-assets tooling
also updates. Following the doc literally left that copy stale
and would fail the "Check asset sync" CI check. Use the actual
npm run sync:assets script (as documented in CLAUDE.md) instead.
2026-08-20 18:49:06 +07:00
Clark Cant
8a1a6d8573
Merge pull request #448 from Dessalines39394/fix/star-history-chart
fix(docs): restore broken star history chart
2026-08-19 01:16:41 +07:00
Dessalines39394
7b1db583ee fix(docs): restore broken star history chart
The star history chart in README.md and README.zh.md is currently broken and fails to render because of GitHub stargazer API restrictions. Point the chart and its link to a working endpoint so visitors can still see the project's growth over time.
2026-08-18 17:51:32 +00:00
Viet Tran
a38d04c3d5
feat(search): overhaul relevance and curated design data
Overhaul BM25 relevance, reasoning and data-quality contracts; refresh UI styles and framework guidance; add resilient text, chip, badge and micro-interaction guidance; strengthen release, provenance and catalog refresh gates; update bilingual documentation.
v2.15.0
2026-08-14 00:08:23 +07:00
Viet Tran
97eb2a2003
docs: clarify asset sync workflow (#443)
Replace stale symlink instructions with the current real-file mirror and validated sync workflow.
2026-08-12 17:20:38 +07:00
Viet Tran
7c1806cc0a
docs: clarify Claude ZIP upload limit (#442)
Clarify that the full repository archive is not a Claude.ai skill upload artifact and direct Claude Code users to the supported Marketplace and CLI installation paths.\n\nCloses #235.
2026-08-12 16:43:41 +07:00
Viet Tran
0ed327fc18
fix(cli): generate runnable script paths (#181)
Resolve platform-root-relative script paths for local and global installs, with regression coverage across Claude, Codex, Copilot, and Kiro.
v2.14.2
2026-08-12 16:34:27 +07:00
PengQi Shi
abb7f2fd5a
fix: bump skill.json version to 2.13.0 (#438)
Bumps skill.json, marketplace.json, and plugin.json version from 2.11.0 to 2.13.0 to match the latest GitHub release.
v2.14.1
2026-08-06 08:29:01 +07:00
PengQi Shi
f4d3b71dbe
feat(ci): auto-bump skill JSON versions after release (#439)
Adds a workflow that triggers on release published, checks out main,
updates the version field in skill.json, marketplace.json, and plugin.json
to match the release tag, then opens a PR automatically.
v2.14.0
2026-08-06 08:02:05 +07:00
Yadnesh Teli
4d140cf8ff
feat(cli): add --global flag to uipro update and support --ai universal target (#435, #436) (#437)
* feat(cli): add --global flag to update command and support --ai universal (#435, #436)

* fix(cli): support dist package.json resolution in update command
v2.13.0
2026-08-03 19:30:53 +07:00
Yong Tang
14ddef5c05
feat(gallery): add Style Detail Modal with phone UI controls preview (#155)
Click any StyleCard to open a full-screen modal showing the style applied
to 9 interactive phone UI controls (buttons, inputs, toggles, checkboxes,
radios, cards, badges, slider, nav bar) inside an iPhone mockup frame.

Co-authored-by: yongtang <jlinux@msn.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
v2.12.0
2026-08-01 08:29:30 +07:00
vkayatas
b0ebb1797e
fix(copilot): generate .prompt.md file for VS Code Copilot slash commands (#328)
* fix(copilot): generate .prompt.md file for VS Code Copilot slash commands

VS Code Copilot requires reusable prompts to be files named
`<name>.prompt.md` directly in `.github/prompts/`. The previous
config generated `.github/prompts/ui-ux-pro-max/PROMPT.md` (a folder
with PROMPT.md inside), which is not recognized as a slash command.

Changes:
- copilot.json: set skillPath to 'prompts', filename to
  'ui-ux-pro-max.prompt.md', add dataPath for data/scripts location
- copilot.json: use 'mode: agent' frontmatter (VS Code format) instead
  of 'name' field
- template.ts: add dataPath support so data/scripts go to a separate
  directory from the prompt file when configured
- template.ts: rewrite hardcoded script paths to platform-specific
  scriptPath for platforms that differ from the default
- uninstall.ts: handle copilot-specific file layout during uninstall

After this fix, `uipro init --ai copilot` produces:
  .github/prompts/ui-ux-pro-max.prompt.md  (slash command file)
  .github/prompts/ui-ux-pro-max/data/      (search database)
  .github/prompts/ui-ux-pro-max/scripts/   (search engine)

* fix(copilot): apply prompt-file layout fix to canonical source template

Address review feedback on PR #328:
- Update src/ui-ux-pro-max/templates/platforms/copilot.json (source of
  truth) with the same .prompt.md layout fix that was previously applied
  only to the packaged CLI asset copy
- Sync cli/assets/templates/platforms/copilot.json byte-for-byte from
  the source template (also fixes stale '15 technology stacks' count;
  there are 16 stack CSVs)

Smoke check (uipro init --ai copilot --offline):
  .github/prompts/ui-ux-pro-max.prompt.md  (slash command, mode: agent)
  .github/prompts/ui-ux-pro-max/data/      (search database)
  .github/prompts/ui-ux-pro-max/scripts/   (search engine)
uninstall --ai copilot removes both the prompt file and data directory.

---------

Co-authored-by: vkayata <volkan.kayatas@mercedes-benz.com>
v2.11.5
2026-07-31 23:02:31 +07:00
Lin Junrong
ec1f2a9027
fix(design-system): resolve palette and anti-patterns against the style's mode (#428) (#434)
generate() ranked style, palette and anti-patterns independently, so a
dark-primary style could come back with a light palette and a
"Dark mode by default" anti-pattern in the same output. The palette is
what users copy into CSS variables, so the output shipped a light theme
with dark-theme styling instructions attached.

Resolve the mode first -- from the query keywords and the style's own
Light/Dark Mode columns -- then pick a palette whose Background matches
it and drop mode-contradicting anti-pattern clauses.

Only the dark case filters palettes. Light keeps the existing top-hit
behaviour so queries that never mention a mode are untouched, and dark
falls back to the top hit when colors.csv has no dark ramp for the
product type.

Adds scripts/tests/test_design_system_mode.py (stdlib unittest, matching
test_core.py) and syncs cli/assets + .claude/skills via sync-assets.mjs.
v2.11.4
2026-07-31 18:00:15 +07:00
Kc
4857a2c5ef
fix(cli): sync shadcn test asset (#433) v2.11.3 2026-07-28 12:00:07 +07:00
Clark Cant
3b5df75479
Merge pull request #430 from scarletkc/codex/fix-codex-agents-skill-path
fix(codex): install skills under .agents
v2.11.2
2026-07-27 13:30:30 +07:00
Kc
98a80d8630
test: expect pinned shadcn CLI version
Align the test expectation with the pinned shadcn@2.3.0 fallback implementation.
2026-07-27 13:01:28 +07:00
Kc
310810de9a docs: label shared .agents uninstall path 2026-07-27 12:31:40 +08:00
Kc
43e8d4a5b0
fix(cli): run TypeScript fallback with Node (#431) v2.11.1 2026-07-27 11:30:18 +07:00
Kc
38e3de0bfe fix(cli): handle shared .agents targets 2026-07-27 12:29:21 +08:00
Kc
3321626663 fix(codex): install skills under .agents 2026-07-27 12:16:38 +08:00
amazscript
1307d97a72
docs: don't hardcode React Native as the project stack (#427)
Step 1 of the workflow told the agent the stack was always React Native
("this project's only tech stack"), a leftover from the skill's origin as
a React Native project. In a generic skill this actively misleads: agents
pick React Native guidance for web, Flutter or desktop work, and skip the
matching `--stack` file entirely.

Replace it with stack inference plus an explicit platform question, and
point at the Available Stacks list so the right rules get loaded.

Also flags that several rule sections are scoped to App UI, so mobile-only
concerns (safe areas, haptics, bottom nav, Dynamic Type) are not applied
to desktop-web work.

Co-authored-by: decilapdenis <decilapdenis@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 22:51:36 +07:00
contato43agency-commits
5c0946f661
docs: fix stale stats in skill.json and marketplace.json (#425)
The description strings still reported 161 color palettes, 73 font
pairings, 99 UX guidelines, and 17 tech stacks -- numbers that predate
the current data set. README.md and .claude-plugin/plugin.json already
report the correct counts (192 palettes, 74 pairings, 98 guidelines,
22 stacks); this brings the two remaining stale files in line.
2026-07-21 05:49:56 +07:00
Young Munger
b484e8338c
Add website design stack starter kit under stack/ (#424)
A ready-to-use Claude Code environment for website design, bundling:
- .mcp.json: Playwright + Chrome DevTools + shadcn MCP servers
- CLAUDE.md: the design loop (plan -> commit to a look -> build -> screenshot -> review)
- .claude/agents/design-review.md: 7-phase design-review subagent (WCAG AA, responsive)
- .claude/commands: /design-review, /design-plan
- scripts/design-audit.mjs: standalone multi-viewport screenshot + heuristic audit
- .github/workflows/design-review.yml: CI design gate (template)
- docs/: STACK, SETUP, WORKFLOW
- examples/juniper-audit/: a real audit run (report + 6 viewport screenshots)

Pairs with the ui-ux-pro-max skill (knowledge layer) and the official
frontend-design plugin (taste layer). Lives on its own branch as a
self-contained starter; copy stack/ out to seed a standalone repo.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-20 03:57:13 +07:00
sunilchandarjr
f8ac5e1266
Fix .claude/skills data drift, harden search engine, tighten SKILL.md (#412)
Merged by github-maintain cron. Approved by @clark-cant and @jizc. Pre-existing pytest failure on main (ui-styling/shadcn test) is unrelated to PR scope.
2026-07-15 01:32:50 +07:00
Clark Cant
fe3f65e5d0
Merge pull request #423: chore: bump version to 2.11.0 in skill metadata files
chore: bump version to 2.11.0 in skill metadata files
2026-07-14 10:02:33 +07:00
XiaOldMan
1781c3122c chore: 版本号同步至 v2.11.0 2026-07-14 10:38:00 +08:00
Clark Cant
e2964b533e
Merge pull request #408 from Cb2i/chore/repo-health-and-e2e-tests
chore: repo health files, CI test wiring, and a real SVG bug fix
2026-07-14 05:30:34 +07:00
Abraham040203
0468898265
docs: sync --domain and --stack lists with search.py --help (#411)
- CLAUDE.md: add missing domains (icons, react, web, google-fonts);
  domain list now matches all 12 --help choices (gsap landed via #402,
  stack list already synced by #404)
- README.md / README.zh.md: complete Desktop row in Supported Stacks
  (add WPF, WinUI 3, Avalonia, Uno Platform, UWP); fix stack count
  (13+ -> 22); replace nonexistent --max-length flag with --json in
  Troubleshooting
- templates/base/skill-content.md (+ cli/assets mirror): add
  icons/google-fonts/gsap rows to search tables, drop invalid 'prompt'
  domain, list all 22 stacks instead of 2

Co-authored-by: 文敏華 <guanweijie@wenminhuadeMacBook-Air.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 16:32:25 +07:00
Inf Sein
6142b07395
feat(cli): add CodeWhale platform support for uipro init --ai codewhale (#413)
* feat(cli): add CodeWhale platform support for uipro init --ai codewhale

* docs: Update README
v2.11.0
2026-07-13 16:30:22 +07:00
Andras Polgar
3da52ff1ca
security: harden skill against agent-audit risk patterns (#417)
Addresses the behavioral patterns that plausibly triggered the Gen
(Agent Trust Hub) High Risk rating on skills.sh, without changing
runtime functionality:

- Prerequisites no longer instruct agents to run sudo/brew/apt/winget
  install commands; agents must ask the user to install Python instead
  (SKILL.md, skill-content.md template, README.md, README.zh.md)
- Soften coercive invocation language ("Must Use" -> "Primary Use
  Cases") and replace keyword-stuffed frontmatter descriptions with
  factual ones (SKILL.md, quick-reference.md, claude/droid.json,
  plugin.json)
- Remove design.csv, draft.csv and _sync_all.py: unused by the runtime
  (not registered in core.py CSV_CONFIG) and containing prompt-shaped
  "System Prompt: ... You are ..." blocks that read as injection risk
- Fix path traversal in --persist: new safe_slug() restricts project
  and page names to [a-z0-9_-], so ../ in -p/--page can no longer
  escape the design-system/ output folder

Verified: validate-csv.py (35 files), smoke-domains (12/12),
smoke-stacks (22/22), check:assets in sync, persist traversal attempt
stays confined.

Co-authored-by: Andras Polgar <5525341+ruredi@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-10 21:30:06 +07:00