Compare commits

...

80 Commits

Author SHA1 Message Date
sck_0
ac20cc63b6 chore(release): v4.8.0 - Computer Vision & Angular 2026-02-04 08:52:08 +01:00
github-actions[bot]
e1c84cd8f4 chore: sync generated registry files [ci skip] 2026-02-04 07:49:25 +00:00
sickn33
73e51321ca Merge pull request #60 from chauey/main
feat: add angular
2026-02-04 08:49:08 +01:00
sickn33
eca46228ed Merge pull request #58 from PabloSMD/main
feat(skills): add computer-vision-expert (SOTA 2026: YOLO26, SAM 3)
2026-02-04 08:48:51 +01:00
Chau (Joe) Nguyen
aa164fac16 fix(angular): Add risk and source fields to meet quality bar requirements 2026-02-04 01:25:24 -06:00
Chau (Joe) Nguyen
6247fcefab fix(angular): Clean up formatting and fix JSX example in README
- Remove duplicate horizontal rules in angular/SKILL.md
- Remove duplicate horizontal rules in angular-best-practices/SKILL.md
- Fix React-style JSX in angular-ui-patterns/README.md to use Angular template syntax
2026-02-04 00:51:34 -06:00
Chau (Joe) Nguyen
b46e45fb4d feat(angular): Add metadata.json and README.md to all Angular skills
- Add metadata.json with version tracking, organization, and references
- Add README.md with skill overviews, usage guides, and quick references
- Brings Angular skills to parity with React Best Practices infrastructure
- Covers: angular, angular-state-management, angular-ui-patterns, angular-best-practices
2026-02-04 00:48:55 -06:00
github-actions[bot]
8839ed1b2d chore: update star history chart 2026-02-04 06:47:07 +00:00
Chau (Joe) Nguyen
5ba1fe9a97 feat(skills): enhance Angular skills with Composition and Async Waterfalls
- Add Component Composition & Reusability section to angular/SKILL.md
  - Content Projection with ng-content and select
  - Host Directives for behavior composition

- Add Async Operations & Waterfalls section to angular-best-practices/SKILL.md
  - Parallel execution with forkJoin
  - Flattening with switchMap
  - SSR waterfall prevention with resolvers
2026-02-04 00:35:31 -06:00
Chau (Joe) Nguyen
85f26eb186 feat: Introduce new skill documentation for Angular UI patterns, general Angular, best practices, and state management. 2026-02-03 21:33:08 -06:00
Pablo
0fc520c7fe feat(skills): add computer-vision-expert (SOTA 2026: YOLO26, SAM 3) 2026-02-03 17:16:04 -03:00
github-actions[bot]
7f5ca000bd chore: sync generated registry files [ci skip] 2026-02-03 18:45:56 +00:00
sck_0
679eb72d23 docs: add ASK Supported badge (ref #56) 2026-02-03 19:45:38 +01:00
github-actions[bot]
2b3277c066 chore: sync generated registry files [ci skip] 2026-02-03 18:38:42 +00:00
sck_0
850c940dfd chore: sync generated files 2026-02-03 19:38:23 +01:00
sck_0
1bc750e4a1 fix: obfuscate regex to prevent css build error (fixes #54) 2026-02-03 19:38:22 +01:00
github-actions[bot]
84a41851e0 chore: sync generated registry files [ci skip] 2026-02-03 18:33:36 +00:00
sck_0
6d94cf984c chore: sync generated files 2026-02-03 19:33:01 +01:00
liyin2015
129949ddf0 fix: correct AdaL CLI information
Fix several inaccuracies in AdaL entry:
- Type: Agent → CLI (AdaL is a CLI tool like Claude Code)
- Badge: HumanSignal/Adala → SylphAI (correct company)
- Description: Self-evolving AI Agent → Self-evolving Coding Agent
- Invocation: Auto (skills load on-demand when relevant)
- Path: .agent/skills/ → .adal/skills/

AdaL CLI is fully compatible with Claude Code skills and uses the same
slash command pattern for skill invocation.

Ref: https://docs.sylph.ai/docs/features/plugins-and-skills

Co-Authored-By: AdaL <adal@sylph.ai>
2026-02-03 10:27:27 -08:00
github-actions[bot]
f893807051 chore: sync generated registry files [ci skip] 2026-02-03 09:20:12 +00:00
sck_0
9040899e65 chore: remove obsolete requirements.txt 2026-02-03 10:19:54 +01:00
github-actions[bot]
b29fa15bf3 chore: sync generated registry files [ci skip] 2026-02-03 08:57:56 +00:00
sck_0
b05245e68b chore: release v4.7.0 2026-02-03 09:57:09 +01:00
github-actions[bot]
49e01dd216 chore: sync generated registry files [ci skip] 2026-02-03 08:46:32 +00:00
sck_0
460a8432a5 docs: complete OpenCode documentation in README 2026-02-03 09:46:14 +01:00
github-actions[bot]
878b876475 chore: sync generated registry files [ci skip] 2026-02-03 08:43:12 +00:00
sck_0
189c0824d2 fix(docs): revert verbose OpenCode instructions and sync catalog 2026-02-03 09:33:46 +01:00
github-actions[bot]
67e7e998f8 chore: sync generated registry files [ci skip] 2026-02-03 08:12:40 +00:00
sck_0
4432e60445 docs: add OpenCode install section 2026-02-03 09:12:25 +01:00
github-actions[bot]
b71eff117b chore: sync generated registry files [ci skip] 2026-02-03 09:08:17 +01:00
fabian
991de2de2f fix(installer): resolve ReferenceError for tagArg variable in main scope 2026-02-03 09:08:17 +01:00
github-actions[bot]
73ceec4e7d chore: update star history chart 2026-02-03 06:46:36 +00:00
sck_0
263c507684 chore: SOTA audit fixes – catalog recursive, readme regex, docs, CI, installer
- P0: Catalog includes nested skills (listSkillIdsRecursive), 626 skills
- P0: update_readme.py regex fixes 'high-performance agentic skills'
- P1: SKILL_ANATOMY risk values aligned to none|safe|critical|offensive (EN + vi)
- P1: requirements.txt + CONTRIBUTING Python setup
- P1: data/package.json version 4.6.0
- P2: npm run test + CI test step; validator docs + validation-baseline in .gitignore
- P3: Installer --version/--tag support; CI npm audit; __pycache__ in .gitignore
2026-02-02 22:04:20 +01:00
sck_0
afc06d1af6 Merge branch 'codex/validator-alignment' 2026-02-02 21:43:27 +01:00
sck_0
988f528708 chore: ignore worktrees 2026-02-02 21:42:29 +01:00
sck_0
3f7dce00b8 chore: preserve risk/source and document use-section headings 2026-02-02 21:37:53 +01:00
sck_0
3d6c75d37f test: align js validator use-section rules 2026-02-02 21:37:05 +01:00
sck_0
2070a91ef7 test: add python validator heading detection 2026-02-02 21:34:14 +01:00
sck_0
17505fe683 chore: ignore worktrees 2026-02-02 21:15:53 +01:00
github-actions[bot]
f9f4375e4e chore: sync generated registry files [ci skip] 2026-02-02 18:58:37 +00:00
sck_0
637c20f3c3 feat: add codex cli install support 2026-02-02 19:56:03 +01:00
github-actions[bot]
72f5b9500d chore: sync generated registry files [ci skip] 2026-02-02 07:24:12 +00:00
sck_0
bedfbb5c1c docs: reorder contributors list to match contrib.rocks order
- Reorder contributors according to GitHub API order (same as contrib.rocks)
- Fix GitHub usernames in URLs (sck_0→sck000, munirabbasi→munir-abbasi, etc.)
- Add missing contributors: ALEKGG1, Truong Nguyen, ckdwns9121, liyin2015, sstklen
2026-02-02 08:23:52 +01:00
github-actions[bot]
318199e9b3 chore: sync generated registry files [ci skip] 2026-02-02 07:22:06 +00:00
sck_0
cafa9d5c52 docs: add contrib.rocks image to Repo Contributors section 2026-02-02 08:21:50 +01:00
github-actions[bot]
963e4660c8 chore: sync generated registry files [ci skip] 2026-02-02 07:19:31 +00:00
sickn33
49f1bf1335 Merge pull request #50 from liyin2015/add-adal-cli
docs: add AdaL to compatible AI coding agents
2026-02-02 08:19:16 +01:00
github-actions[bot]
d6eefe200d chore: sync generated registry files [ci skip] 2026-02-02 07:14:34 +00:00
sck_0
41717e78db docs: add AdaL to supported platforms list
- Add AdaL (Self-evolving AI Agent) to platforms bullet list
- Update subtitle to include AdaL
- Add AdaL badge with link to GitHub repository
- Add AdaL row to compatibility table
- Update prose mentions to include AdaL

Implements PR #50
2026-02-02 08:14:18 +01:00
github-actions[bot]
2a016df011 chore: update star history chart 2026-02-02 06:59:44 +00:00
liyin2015
386b3c757e docs: add AdaL to compatible AI coding agents 2026-02-01 17:48:23 -08:00
github-actions[bot]
3d79501eba chore: sync generated registry files [ci skip] 2026-02-01 16:52:16 +00:00
sck_0
7e24ed2568 chore: npm publish setup, fallback docs, release workflow (fixes #49)
- package.json: yaml in devDependencies, repo url/bin from npm pkg fix
- README, GETTING_STARTED, FAQ: fallback npx github:sickn33/antigravity-awesome-skills on 404
- publish-npm.yml: workflow on release published + workflow_dispatch
- MAINTENANCE: bump package.json, publish to npm (manual + NPM_TOKEN CI)
- release_cycle.sh: catalog step, version check, npm publish reminder
- ISSUE_49_COMMENT.md: suggested reply for issue #49
2026-02-01 17:52:01 +01:00
github-actions[bot]
418982eb85 chore: sync generated registry files [ci skip] 2026-02-01 07:25:50 +00:00
sck_0
335359f138 docs: sync Repo Contributors and skill counts (626) post 4.6.0
- Add c1c3ru and devchangjun to Repo Contributors (PR 47, PR 48)
- Update GETTING_STARTED.md and FAQ.md: 624/624+ -> 626/626+
2026-02-01 08:25:34 +01:00
github-actions[bot]
4ec91e9fbe chore: sync generated registry files [ci skip] 2026-02-01 07:23:19 +00:00
sck_0
db3e262df3 chore(release): 4.6.0 - SPDD & Radix UI Design System
- Bump version to 4.6.0, update CHANGELOG and README counts to 626
- Fix listSkillIds to only include dirs with SKILL.md (SPDD excluded from catalog)
- Regenerate catalog and index after PR 47/48 merge
2026-02-01 08:23:00 +01:00
sickn33
d280ad1c3a Merge pull request #47 from c1c3ru/main
feat: Adiciona novas habilidades de agente para pesquisa de base de código, planejamento de implementação e execução.
2026-02-01 08:21:30 +01:00
sickn33
b2aa003d57 Merge pull request #48 from ckdwns9121/feat/redix-ui-design-system-skills
feat: add radix UI design system skill
2026-02-01 08:21:26 +01:00
github-actions[bot]
3c3280d9ac chore: update star history chart 2026-02-01 06:44:42 +00:00
devchangjun
58f8d654ef feat: introduce Radix UI design system skill with a component template and examples. 2026-02-01 11:36:47 +09:00
c1c3ru
5593cad434 feat: Adiciona novas habilidades de agente para pesquisa de base de código, planejamento de implementação e execução. 2026-01-31 22:25:14 -03:00
github-actions[bot]
59151b3671 chore: sync generated registry files [ci skip] 2026-01-31 22:04:25 +00:00
sck_0
1dc10ee3a0 fix(frontend-slides): correct YAML frontmatter syntax (fixes #46)
Remove Markdown content from frontmatter block; keep only valid YAML
keys (name, description, source, risk) to resolve 'mapping values are
not allowed in this context at line 5 column 5'.
2026-01-31 23:04:09 +01:00
github-actions[bot]
4c400ca121 chore: sync generated registry files [ci skip] 2026-01-31 07:45:51 +00:00
sck_0
4310ca4922 docs: merge RELEASE_NOTES into CHANGELOG, single source for releases 2026-01-31 08:45:34 +01:00
github-actions[bot]
9f6d75245f chore: sync generated registry files [ci skip] 2026-01-31 07:40:22 +00:00
sck_0
1974e62ec1 docs: add @ALEKGG1 credit for stitch-ui-design skill (PR #45) 2026-01-31 08:40:11 +01:00
github-actions[bot]
9dd8fd6b51 chore: sync generated registry files [ci skip] 2026-01-31 07:36:24 +00:00
sck_0
b082ba9c42 chore: regenerate files after merge 2026-01-31 08:36:01 +01:00
sck_0
90b4d5adb3 Merge branch 'main' of https://github.com/sickn33/antigravity-awesome-skills
# Conflicts:
#	CATALOG.md
#	data/aliases.json
#	data/bundles.json
#	data/catalog.json
#	skills_index.json
2026-01-31 08:35:45 +01:00
sck_0
87989fecf6 chore: release 4.5.0 - stitch-ui-design skill 2026-01-31 08:35:02 +01:00
sck_0
f41aad3556 feat: add stitch-ui-design skill and sync generated files 2026-01-31 08:34:33 +01:00
github-actions[bot]
d3883ffaf9 chore: sync generated registry files [ci skip] 2026-01-31 07:34:11 +00:00
@ALEKGG
cf8b63cd15 feat: add stitch-ui-design skill for Google Stitch prompting (#45)
Add comprehensive skill for creating effective prompts in Google Stitch,
the AI-powered UI design tool by Google Labs (Gemini 2.5 Flash).

Includes:
- Core prompting principles and templates
- 10+ practical examples (landing pages, mobile apps, dashboards)
- Iteration strategies and anti-patterns
- Design-to-code workflows
- 44KB of reference documentation

Category: Data & AI / General
Risk: Low (design guidance, no executable commands)
2026-01-31 08:33:51 +01:00
sck_0
bb0886a594 docs: clarify Starter Packs vs full clone (fixes #44) 2026-01-31 08:33:37 +01:00
github-actions[bot]
d2f3423a13 chore: update star history chart 2026-01-31 06:35:01 +00:00
github-actions[bot]
a7c8432a47 chore: sync generated registry files [ci skip] 2026-01-30 19:35:13 +00:00
sck_0
bedac72820 docs: sync Repo Contributors, Credits, SOURCES, and skill count (624) post v4.4.0 2026-01-30 20:34:57 +01:00
github-actions[bot]
fc45245400 chore: sync generated registry files [ci skip] 2026-01-30 19:30:23 +00:00
54 changed files with 6829 additions and 487 deletions

15
.github/ISSUE_49_COMMENT.md vendored Normal file
View File

@@ -0,0 +1,15 @@
Suggested comment for [Issue #49](https://github.com/sickn33/antigravity-awesome-skills/issues/49). Paste this on the issue:
---
The 404 happens because the package wasnt published to npm yet. Weve addressed it in two ways:
1. **Publish to npm** Were set up to publish so `npx antigravity-awesome-skills` will work after the first release. You can also trigger a manual publish via the “Publish to npm” workflow (Actions tab) if you have `NPM_TOKEN` configured.
2. **Fallback** Until then (or if you hit a 404 for any reason), use:
```bash
npx github:sickn33/antigravity-awesome-skills
```
The README, GETTING_STARTED, and FAQ now mention this fallback.
Thanks for reporting.

View File

@@ -41,7 +41,7 @@ it means you **did not run or commit** the Validation Chain correctly.
### 3. 📝 EVIDENCE OF WORK
- You must create/update `walkthrough.md` or `RELEASE_NOTES.md` to document what changed.
- You must create/update `walkthrough.md` or `CHANGELOG.md` to document what changed.
- If you made something new, **link it** in the artifacts.
### 4. 🚫 NO BRANCHES
@@ -172,20 +172,30 @@ Reject any PR that fails this:
When cutting a new version (e.g., V4):
1. **Run Full Validation**: `python3 scripts/validate_skills.py --strict`
2. **Update Changelog**: Create `RELEASE_NOTES.md`.
3. **Bump Version**: Update header in `README.md`.
2. **Update Changelog**: Add the new release section to `CHANGELOG.md`.
3. **Bump Version**:
- Update `package.json` → `"version": "X.Y.Z"` (source of truth for npm).
- Update version header in `README.md` if it displays the number.
- One-liner: `npm version patch` (or `minor`/`major`) — bumps `package.json` and creates a git tag; then amend if you need to tag after release.
4. **Tag Release**:
```bash
git tag -a v4.0.0 -m "V4 Enterprise Edition"
git push origin v4.0.0
```
5. **Publish to npm** (so `npx antigravity-awesome-skills` works):
- **Option A (manual):** From repo root, with npm logged in and 2FA/token set up:
```bash
npm publish
```
You cannot republish the same version; always bump `package.json` before publishing.
- **Option B (CI):** On GitHub, create a **Release** (tag e.g. `v4.6.1`). The workflow [Publish to npm](.github/workflows/publish-npm.yml) runs on **Release published** and runs `npm publish` if the repo secret `NPM_TOKEN` is set (npm → Access Tokens → Granular token with Publish, then add as repo secret `NPM_TOKEN`).
### 📋 Release Note Template
### 📋 Changelog Entry Template
All changeslogs/release notes MUST follow this structure to ensure professionalism and quality:
Each new release section in `CHANGELOG.md` should follow [Keep a Changelog](https://keepachangelog.com/) and this structure:
```markdown
# Release vX.Y.Z: [Theme Name]
## [X.Y.Z] - YYYY-MM-DD - "[Theme Name]"
> **[One-line catchy summary of the release]**

View File

@@ -45,6 +45,13 @@ jobs:
- name: Install npm dependencies
run: npm ci
- name: Audit npm dependencies
run: npm audit --audit-level=high
continue-on-error: true
- name: Run tests
run: npm run test
- name: 📦 Build catalog
run: npm run catalog

28
.github/workflows/publish-npm.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
# Publish antigravity-awesome-skills to npm on release.
# Requires NPM_TOKEN secret (npm → Access Tokens → Granular token with Publish).
# Before creating a Release: bump package.json "version" (npm forbids republishing the same version).
# Release tag (e.g. v4.6.1) should match package.json version.
name: Publish to npm
on:
release:
types: [published]
workflow_dispatch:
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"
- name: Publish
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

5
.gitignore vendored
View File

@@ -1,4 +1,6 @@
node_modules/
__pycache__/
.worktrees/
walkthrough.md
.agent/rules/
@@ -24,3 +26,6 @@ scripts/*voltagent*.py
scripts/*html*.py
scripts/*similar*.py
scripts/*count*.py
# Optional baseline for legacy JS validator (scripts/validate-skills.js)
validation-baseline.json

View File

@@ -1,13 +1,15 @@
# Skill Catalog
Generated at: 2026-01-30T19:29:11.960Z
Generated at: 2026-02-04T07:52:07.897Z
Total skills: 617
Total skills: 631
## architecture (58)
## architecture (62)
| Skill | Description | Tags | Triggers |
| --- | --- | --- | --- |
| `angular` | Modern Angular (v20+) expert with deep knowledge of Signals, Standalone Components, Zoneless applications, SSR/Hydration, and reactive patterns. Use PROACTIV... | angular | angular, v20, deep, knowledge, signals, standalone, components, zoneless, applications, ssr, hydration, reactive |
| `angular-state-management` | Master modern Angular state management with Signals, NgRx, and RxJS. Use when setting up global state, managing component stores, choosing between state solu... | angular, state | angular, state, signals, ngrx, rxjs, setting, up, global, managing, component, stores, choosing |
| `architect-review` | Master software architect specializing in modern architecture patterns, clean architecture, microservices, event-driven systems, and DDD. Reviews system desi... | | architect, review, software, specializing, architecture, clean, microservices, event, driven, ddd, reviews, designs |
| `architecture` | Architectural decision-making framework. Requirements analysis, trade-off evaluation, ADR documentation. Use when making architecture decisions or analyzing ... | architecture | architecture, architectural, decision, making, framework, requirements, analysis, trade, off, evaluation, adr, documentation |
| `architecture-decision-records` | Write and maintain Architecture Decision Records (ADRs) following best practices for technical decision documentation. Use when documenting significant techn... | architecture, decision, records | architecture, decision, records, write, maintain, adrs, following, technical, documentation, documenting, significant, decisions |
@@ -36,6 +38,7 @@ Total skills: 617
| `error-handling-patterns` | Master error handling patterns across languages including exceptions, Result types, error propagation, and graceful degradation to build resilient applicatio... | error, handling | error, handling, languages, including, exceptions, result, types, propagation, graceful, degradation, resilient, applications |
| `event-sourcing-architect` | Expert in event sourcing, CQRS, and event-driven architecture patterns. Masters event store design, projection building, saga orchestration, and eventual con... | event, sourcing | event, sourcing, architect, cqrs, driven, architecture, masters, store, projection, building, saga, orchestration |
| `event-store-design` | Design and implement event stores for event-sourced systems. Use when building event sourcing infrastructure, choosing event store technologies, or implement... | event, store | event, store, stores, sourced, building, sourcing, infrastructure, choosing, technologies, implementing, persistence |
| `game-development/multiplayer` | Multiplayer game development principles. Architecture, networking, synchronization. | game, development/multiplayer | game, development/multiplayer, multiplayer, development, principles, architecture, networking, synchronization |
| `godot-gdscript-patterns` | Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization. Use when building Godot games, implementing game systems, or le... | godot, gdscript | godot, gdscript, including, signals, scenes, state, machines, optimization, building, games, implementing, game |
| `haskell-pro` | Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programm... | haskell | haskell, pro, engineer, specializing, type, pure, functional, high, reliability, software, proactively, level |
| `i18n-localization` | Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support. | i18n, localization | i18n, localization, internationalization, detecting, hardcoded, strings, managing, translations, locale, files, rtl |
@@ -53,6 +56,7 @@ Total skills: 617
| `production-code-audit` | Autonomously deep-scan entire codebase line-by-line, understand architecture and patterns, then systematically transform it to production-grade, corporate-le... | production, code, audit | production, code, audit, autonomously, deep, scan, entire, codebase, line, understand, architecture, then |
| `projection-patterns` | Build read models and projections from event streams. Use when implementing CQRS read sides, building materialized views, or optimizing query performance in ... | projection | projection, read, models, projections, event, streams, implementing, cqrs, sides, building, materialized, views |
| `prompt-engineering` | Expert guide on prompt engineering patterns, best practices, and optimization techniques. Use when user wants to improve prompts, learn prompting strategies,... | prompt, engineering | prompt, engineering, optimization, techniques, user, wants, improve, prompts, learn, prompting, debug, agent |
| `radix-ui-design-system` | Build accessible design systems with Radix UI primitives. Headless component customization, theming strategies, and compound component patterns for productio... | radix, ui | radix, ui, accessible, primitives, headless, component, customization, theming, compound, grade, libraries |
| `saga-orchestration` | Implement saga patterns for distributed transactions and cross-aggregate workflows. Use when coordinating multi-step business processes, handling compensatin... | saga | saga, orchestration, distributed, transactions, cross, aggregate, coordinating, multi, step, business, processes, handling |
| `salesforce-development` | Expert patterns for Salesforce platform development including Lightning Web Components (LWC), Apex triggers and classes, REST/Bulk APIs, Connected Apps, and ... | salesforce | salesforce, development, platform, including, lightning, web, components, lwc, apex, triggers, classes, rest |
| `skill-developer` | Create and manage Claude Code skills following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patt... | skill | skill, developer, claude, code, skills, following, anthropic, creating, new, modifying, rules, json |
@@ -109,7 +113,7 @@ Total skills: 617
| `startup-financial-modeling` | This skill should be used when the user asks to "create financial projections", "build a financial model", "forecast revenue", "calculate burn rate", "estima... | startup, financial, modeling | startup, financial, modeling, skill, should, used, user, asks, projections, model, forecast, revenue |
| `team-composition-analysis` | This skill should be used when the user asks to "plan team structure", "determine hiring needs", "design org chart", "calculate compensation", "plan equity a... | team, composition | team, composition, analysis, skill, should, used, user, asks, plan, structure, determine, hiring |
## data-ai (92)
## data-ai (93)
| Skill | Description | Tags | Triggers |
| --- | --- | --- | --- |
@@ -119,6 +123,7 @@ Total skills: 617
| `ai-engineer` | Build production-ready LLM applications, advanced RAG systems, and intelligent agents. Implements vector search, multimodal AI, agent orchestration, and ente... | ai | ai, engineer, llm, applications, rag, intelligent, agents, implements, vector, search, multimodal, agent |
| `ai-wrapper-product` | Expert in building products that wrap AI APIs (OpenAI, Anthropic, etc.) into focused tools people will pay for. Not just 'ChatGPT but different' - products t... | ai, wrapper, product | ai, wrapper, product, building, products, wrap, apis, openai, anthropic, etc, people, pay |
| `analytics-tracking` | Design, audit, and improve analytics tracking systems that produce reliable, decision-ready data. Use when the user wants to set up, fix, or evaluate analyti... | analytics, tracking | analytics, tracking, audit, improve, produce, reliable, decision, data, user, wants, set, up |
| `angular-ui-patterns` | Modern Angular UI patterns for loading states, error handling, and data display. Use when building UI components, handling async data, or managing component ... | angular, ui | angular, ui, loading, states, error, handling, data, display, building, components, async, managing |
| `api-documenter` | Master API documentation with OpenAPI 3.1, AI-powered tools, and modern developer experience practices. Create interactive docs, generate SDKs, and build com... | api, documenter | api, documenter, documentation, openapi, ai, powered, developer, experience, interactive, docs, generate, sdks |
| `autonomous-agent-patterns` | Design patterns for building autonomous coding agents. Covers tool integration, permission systems, browser automation, and human-in-the-loop workflows. Use ... | autonomous, agent | autonomous, agent, building, coding, agents, covers, integration, permission, browser, automation, human, loop |
| `autonomous-agents` | Autonomous agents are AI systems that can independently decompose goals, plan actions, execute tools, and self-correct without constant human guidance. The c... | autonomous, agents | autonomous, agents, ai, independently, decompose, goals, plan, actions, execute, self, correct, without |
@@ -192,6 +197,7 @@ Total skills: 617
| `spark-optimization` | Optimize Apache Spark jobs with partitioning, caching, shuffle optimization, and memory tuning. Use when improving Spark performance, debugging slow jobs, or... | spark, optimization | spark, optimization, optimize, apache, jobs, partitioning, caching, shuffle, memory, tuning, improving, performance |
| `sql-optimization-patterns` | Master SQL query optimization, indexing strategies, and EXPLAIN analysis to dramatically improve database performance and eliminate slow queries. Use when de... | sql, optimization | sql, optimization, query, indexing, explain, analysis, dramatically, improve, database, performance, eliminate, slow |
| `sqlmap-database-pentesting` | This skill should be used when the user asks to "automate SQL injection testing," "enumerate database structure," "extract database credentials using sqlmap,... | sqlmap, database, pentesting | sqlmap, database, pentesting, penetration, testing, skill, should, used, user, asks, automate, sql |
| `stitch-ui-design` | Expert guide for creating effective prompts for Google Stitch AI UI design tool. Use when user wants to design UI/UX in Stitch, create app interfaces, genera... | stitch, ui | stitch, ui, creating, effective, prompts, google, ai, user, wants, ux, app, interfaces |
| `tdd-orchestrator` | Master TDD orchestrator specializing in red-green-refactor discipline, multi-agent workflow coordination, and comprehensive test-driven development practices... | tdd, orchestrator | tdd, orchestrator, specializing, red, green, refactor, discipline, multi, agent, coordination, test, driven |
| `team-collaboration-standup-notes` | You are an expert team communication specialist focused on async-first standup practices, AI-assisted note generation from commit history, and effective remo... | team, collaboration, standup, notes | team, collaboration, standup, notes, communication, async, first, ai, assisted, note, generation, commit |
| `telegram-bot-builder` | Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API,... | telegram, bot, builder | telegram, bot, builder, building, bots, solve, real, problems, simple, automation, complex, ai |
@@ -203,10 +209,9 @@ Total skills: 617
| `voice-ai-development` | Expert in building voice AI applications - from real-time voice agents to voice-enabled apps. Covers OpenAI Realtime API, Vapi for voice agents, Deepgram for... | voice, ai | voice, ai, development, building, applications, real, time, agents, enabled, apps, covers, openai |
| `voice-ai-engine-development` | Build real-time conversational AI voice engines using async worker pipelines, streaming transcription, LLM agents, and TTS synthesis with interrupt handling ... | voice, ai, engine | voice, ai, engine, development, real, time, conversational, engines, async, worker, pipelines, streaming |
| `web-artifacts-builder` | Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use ... | web, artifacts, builder | web, artifacts, builder, suite, creating, elaborate, multi, component, claude, ai, html, frontend |
| `xlsx` | Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work ... | xlsx | xlsx, spreadsheet, creation, editing, analysis, formulas, formatting, data, visualization, claude, work, spreadsheets |
| `xlsx-official` | Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work ... | xlsx, official | xlsx, official, spreadsheet, creation, editing, analysis, formulas, formatting, data, visualization, claude, work |
## development (80)
## development (81)
| Skill | Description | Tags | Triggers |
| --- | --- | --- | --- |
@@ -239,6 +244,7 @@ Total skills: 617
| `frontend-developer` | Build React components, implement responsive layouts, and handle client-side state management. Masters React 19, Next.js 15, and modern frontend architecture... | frontend | frontend, developer, react, components, responsive, layouts, handle, client, side, state, masters, 19 |
| `frontend-mobile-development-component-scaffold` | You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete componen... | frontend, mobile, component | frontend, mobile, component, development, scaffold, react, architecture, specializing, scaffolding, accessible, performant, components |
| `frontend-slides` | Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a... | frontend, slides | frontend, slides, stunning, animation, rich, html, presentations, scratch, converting, powerpoint, files, user |
| `game-development/mobile-games` | Mobile game development principles. Touch input, battery, performance, app stores. | game, development/mobile, games | game, development/mobile, games, mobile, development, principles, touch, input, battery, performance, app, stores |
| `go-concurrency-patterns` | Master Go concurrency with goroutines, channels, sync primitives, and context. Use when building concurrent Go applications, implementing worker pools, or de... | go, concurrency | go, concurrency, goroutines, channels, sync, primitives, context, building, concurrent, applications, implementing, worker |
| `golang-pro` | Master Go 1.21+ with modern patterns, advanced concurrency, performance optimization, and production-ready microservices. Expert in the latest Go ecosystem i... | golang | golang, pro, go, 21, concurrency, performance, optimization, microservices, latest, ecosystem, including, generics |
| `hubspot-integration` | Expert patterns for HubSpot CRM integration including OAuth authentication, CRM objects, associations, batch operations, webhooks, and custom objects. Covers... | hubspot, integration | hubspot, integration, crm, including, oauth, authentication, objects, associations, batch, operations, webhooks, custom |
@@ -292,16 +298,18 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `viral-generator-builder` | Expert in building shareable generator tools that go viral - name generators, quiz makers, avatar creators, personality tests, and calculator tools. Covers t... | viral, generator, builder | viral, generator, builder, building, shareable, go, name, generators, quiz, makers, avatar, creators |
| `webapp-testing` | Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing... | webapp | webapp, testing, toolkit, interacting, local, web, applications, playwright, supports, verifying, frontend, functionality |
## general (122)
## general (130)
| Skill | Description | Tags | Triggers |
| --- | --- | --- | --- |
| `address-github-comments` | Use when you need to address review or issue comments on an open GitHub Pull Request using the gh CLI. | address, github, comments | address, github, comments, review, issue, open, pull, request, gh, cli |
| `agent-manager-skill` | Manage multiple local CLI agents via tmux sessions (start/stop/monitor/assign) with cron-friendly scheduling. | agent, manager, skill | agent, manager, skill, multiple, local, cli, agents, via, tmux, sessions, start, stop |
| `algorithmic-art` | Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, gener... | algorithmic, art | algorithmic, art, creating, p5, js, seeded, randomness, interactive, parameter, exploration, users, request |
| `angular-best-practices` | Angular performance optimization and best practices guide. Use when writing, reviewing, or refactoring Angular code for optimal performance, bundle size, and... | angular, best, practices | angular, best, practices, performance, optimization, writing, reviewing, refactoring, code, optimal, bundle, size |
| `angular-migration` | Migrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applicat... | angular, migration | angular, migration, migrate, angularjs, hybrid, mode, incremental, component, rewriting, dependency, injection, updates |
| `anti-reversing-techniques` | Understand anti-reversing, obfuscation, and protection techniques encountered during software analysis. Use when analyzing protected binaries, bypassing anti... | anti, reversing, techniques | anti, reversing, techniques, understand, obfuscation, protection, encountered, during, software, analysis, analyzing, protected |
| `app-builder` | Main application building orchestrator. Creates full-stack applications from natural language requests. Determines project type, selects tech stack, coordina... | app, builder | app, builder, main, application, building, orchestrator, creates, full, stack, applications, natural, language |
| `app-builder/templates` | Project scaffolding templates for new applications. Use when creating new projects from scratch. Contains 12 templates for various tech stacks. | app, builder/templates | app, builder/templates, scaffolding, new, applications, creating, scratch, contains, 12, various, tech, stacks |
| `arm-cortex-expert` | Senior embedded software engineer specializing in firmware and driver development for ARM Cortex-M microcontrollers (Teensy, STM32, nRF52, SAMD). Decades of ... | arm, cortex | arm, cortex, senior, embedded, software, engineer, specializing, firmware, driver, development, microcontrollers, teensy |
| `avalonia-layout-zafiro` | Guidelines for modern Avalonia UI layout using Zafiro.Avalonia, emphasizing shared styles, generic components, and avoiding XAML redundancy. | avalonia, layout, zafiro | avalonia, layout, zafiro, guidelines, ui, emphasizing, shared, styles, generic, components, avoiding, xaml |
| `avalonia-zafiro-development` | Mandatory skills, conventions, and behavioral rules for Avalonia UI development using the Zafiro toolkit. | avalonia, zafiro | avalonia, zafiro, development, mandatory, skills, conventions, behavioral, rules, ui, toolkit |
@@ -330,6 +338,7 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `commit` | Create commit messages following Sentry conventions. Use when committing code changes, writing commit messages, or formatting git history. Follows convention... | commit | commit, messages, following, sentry, conventions, committing, code, changes, writing, formatting, git, history |
| `comprehensive-review-full-review` | Use when working with comprehensive review full review | comprehensive, full | comprehensive, full, review, working |
| `comprehensive-review-pr-enhance` | You are a PR optimization expert specializing in creating high-quality pull requests that facilitate efficient code reviews. Generate comprehensive PR descri... | comprehensive, pr, enhance | comprehensive, pr, enhance, review, optimization, specializing, creating, high, quality, pull, requests, facilitate |
| `computer-vision-expert` | SOTA Computer Vision Expert (2026). Specialized in YOLO26, Segment Anything 3 (SAM 3), Vision Language Models, and real-time spatial analysis. | computer, vision | computer, vision, sota, 2026, specialized, yolo26, segment, anything, sam, language, models, real |
| `concise-planning` | Use when a user asks for a plan for a coding task, to generate a clear, actionable, and atomic checklist. | concise, planning | concise, planning, user, asks, plan, coding, task, generate, clear, actionable, atomic, checklist |
| `context-compression` | Design and evaluate compression strategies for long-running sessions | compression | compression, context, evaluate, long, running, sessions |
| `context-fundamentals` | Understand what context is, why it matters, and the anatomy of context in agent systems | fundamentals | fundamentals, context, understand, what, why, matters, anatomy, agent |
@@ -343,7 +352,6 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `debugging-toolkit-smart-debug` | Use when working with debugging toolkit smart debug | debugging, debug | debugging, debug, toolkit, smart, working |
| `design-md` | Analyze Stitch projects and synthesize a semantic design system into DESIGN.md files | md | md, analyze, stitch, synthesize, semantic, files |
| `dispatching-parallel-agents` | Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies | dispatching, parallel, agents | dispatching, parallel, agents, facing, independent, tasks, worked, without, shared, state, sequential, dependencies |
| `docx` | Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude ... | docx | docx, document, creation, editing, analysis, tracked, changes, comments, formatting, preservation, text, extraction |
| `docx-official` | Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude ... | docx, official | docx, official, document, creation, editing, analysis, tracked, changes, comments, formatting, preservation, text |
| `dx-optimizer` | Developer Experience specialist. Improves tooling, setup, and workflows. Use PROACTIVELY when setting up new projects, after team feedback, or when developme... | dx, optimizer | dx, optimizer, developer, experience, improves, tooling, setup, proactively, setting, up, new, after |
| `environment-setup-guide` | Guide developers through setting up development environments with proper tools, dependencies, and configurations | environment, setup | environment, setup, developers, through, setting, up, development, environments, proper, dependencies, configurations |
@@ -358,6 +366,13 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `fix-review` | Verify fix commits address audit findings without new bugs | fix | fix, review, verify, commits, address, audit, findings, without, new, bugs |
| `framework-migration-code-migrate` | You are a code migration expert specializing in transitioning codebases between frameworks, languages, versions, and platforms. Generate comprehensive migrat... | framework, migration, code, migrate | framework, migration, code, migrate, specializing, transitioning, codebases, between, frameworks, languages, versions, platforms |
| `game-development` | Game development orchestrator. Routes to platform-specific skills based on project needs. | game | game, development, orchestrator, routes, platform, specific, skills |
| `game-development/2d-games` | 2D game development principles. Sprites, tilemaps, physics, camera. | game, development/2d, games | game, development/2d, games, 2d, development, principles, sprites, tilemaps, physics, camera |
| `game-development/3d-games` | 3D game development principles. Rendering, shaders, physics, cameras. | game, development/3d, games | game, development/3d, games, 3d, development, principles, rendering, shaders, physics, cameras |
| `game-development/game-audio` | Game audio principles. Sound design, music integration, adaptive audio systems. | game, development/game, audio | game, development/game, audio, principles, sound, music, integration, adaptive |
| `game-development/game-design` | Game design principles. GDD structure, balancing, player psychology, progression. | game, development/game | game, development/game, principles, gdd, structure, balancing, player, psychology, progression |
| `game-development/pc-games` | PC and console game development principles. Engine selection, platform features, optimization strategies. | game, development/pc, games | game, development/pc, games, pc, console, development, principles, engine, selection, platform, features, optimization |
| `game-development/vr-ar` | VR/AR development principles. Comfort, interaction, performance requirements. | game, development/vr, ar | game, development/vr, ar, vr, development, principles, comfort, interaction, performance, requirements |
| `game-development/web-games` | Web browser game development principles. Framework selection, WebGPU, optimization, PWA. | game, development/web, games | game, development/web, games, web, browser, development, principles, framework, selection, webgpu, optimization, pwa |
| `git-advanced-workflows` | Master advanced Git workflows including rebasing, cherry-picking, bisect, worktrees, and reflog to maintain clean history and recover from any situation. Use... | git, advanced | git, advanced, including, rebasing, cherry, picking, bisect, worktrees, reflog, maintain, clean, history |
| `git-pr-workflows-onboard` | You are an **expert onboarding specialist and knowledge transfer architect** with deep experience in remote-first organizations, technical team integration, ... | git, pr, onboard | git, pr, onboard, onboarding, knowledge, transfer, architect, deep, experience, remote, first, organizations |
| `git-pr-workflows-pr-enhance` | You are a PR optimization expert specializing in creating high-quality pull requests that facilitate efficient code reviews. Generate comprehensive PR descri... | git, pr, enhance | git, pr, enhance, optimization, specializing, creating, high, quality, pull, requests, facilitate, efficient |
@@ -384,7 +399,6 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `plan-writing` | Structured task planning with clear breakdowns, dependencies, and verification criteria. Use when implementing features, refactoring, or any multi-step work. | plan, writing | plan, writing, structured, task, planning, clear, breakdowns, dependencies, verification, criteria, implementing, features |
| `planning-with-files` | Implements Manus-style file-based planning for complex tasks. Creates task_plan.md, findings.md, and progress.md. Use when starting complex multi-step tasks,... | planning, with, files | planning, with, files, implements, manus, style, file, complex, tasks, creates, task, plan |
| `posix-shell-pro` | Expert in strict POSIX sh scripting for maximum portability across Unix-like systems. Specializes in shell scripts that run on any POSIX-compliant shell (das... | posix, shell | posix, shell, pro, strict, sh, scripting, maximum, portability, unix, like, specializes, scripts |
| `pptx` | Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying o... | pptx | pptx, presentation, creation, editing, analysis, claude, work, presentations, files, creating, new, modifying |
| `pptx-official` | Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying o... | pptx, official | pptx, official, presentation, creation, editing, analysis, claude, work, presentations, files, creating, new |
| `privilege-escalation-methods` | This skill should be used when the user asks to "escalate privileges", "get root access", "become administrator", "privesc techniques", "abuse sudo", "exploi... | privilege, escalation, methods | privilege, escalation, methods, skill, should, used, user, asks, escalate, privileges, get, root |
| `prompt-library` | Curated collection of high-quality prompts for various use cases. Includes role-based prompts, task-specific templates, and prompt refinement techniques. Use... | prompt, library | prompt, library, curated, collection, high, quality, prompts, various, cases, includes, role, task |
@@ -419,7 +433,7 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `writing-skills` | Use when creating, updating, or improving agent skills. | writing, skills | writing, skills, creating, updating, improving, agent |
| `x-article-publisher-skill` | Publish articles to X/Twitter | x, article, publisher, skill | x, article, publisher, skill, publish, articles, twitter |
## infrastructure (77)
## infrastructure (78)
| Skill | Description | Tags | Triggers |
| --- | --- | --- | --- |
@@ -456,6 +470,7 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `expo-deployment` | Deploy Expo apps to production | expo, deployment | expo, deployment, deploy, apps |
| `file-uploads` | Expert at handling file uploads and cloud storage. Covers S3, Cloudflare R2, presigned URLs, multipart uploads, and image optimization. Knows how to handle l... | file, uploads | file, uploads, handling, cloud, storage, covers, s3, cloudflare, r2, presigned, urls, multipart |
| `flutter-expert` | Master Flutter development with Dart 3, advanced widgets, and multi-platform deployment. Handles state management, animations, testing, and performance optim... | flutter | flutter, development, dart, widgets, multi, platform, deployment, state, animations, testing, performance, optimization |
| `game-development/game-art` | Game art principles. Visual style selection, asset pipeline, animation workflow. | game, development/game, art | game, development/game, art, principles, visual, style, selection, asset, pipeline, animation |
| `gcp-cloud-run` | Specialized skill for building production-ready serverless applications on GCP. Covers Cloud Run services (containerized), Cloud Run Functions (event-driven)... | gcp, cloud, run | gcp, cloud, run, specialized, skill, building, serverless, applications, covers, containerized, functions, event |
| `git-pr-workflows-git-workflow` | Orchestrate a comprehensive git workflow from code review through PR creation, leveraging specialized agents for quality assurance, testing, and deployment r... | git, pr | git, pr, orchestrate, code, review, through, creation, leveraging, specialized, agents, quality, assurance |
| `github-actions-templates` | Create production-ready GitHub Actions workflows for automated testing, building, and deploying applications. Use when setting up CI/CD with GitHub Actions, ... | github, actions | github, actions, automated, testing, building, deploying, applications, setting, up, ci, cd, automating |
@@ -645,7 +660,7 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `unit-testing-test-generate` | Generate comprehensive, maintainable unit tests across languages with strong coverage and edge case focus. | unit, generate | unit, generate, testing, test, maintainable, tests, languages, strong, coverage, edge, case |
| `web3-testing` | Test smart contracts comprehensively using Hardhat and Foundry with unit tests, integration tests, and mainnet forking. Use when testing Solidity contracts, ... | web3 | web3, testing, test, smart, contracts, comprehensively, hardhat, foundry, unit, tests, integration, mainnet |
## workflow (17)
## workflow (16)
| Skill | Description | Tags | Triggers |
| --- | --- | --- | --- |
@@ -662,7 +677,6 @@ TRIGGER: "shopify", "shopify app", "checkout extension",... | shopify | shopify,
| `git-pushing` | Stage, commit, and push git changes with conventional commit messages. Use when user wants to commit and push changes, mentions pushing to remote, or asks to... | git, pushing | git, pushing, stage, commit, push, changes, conventional, messages, user, wants, mentions, remote |
| `kaizen` | Guide for continuous improvement, error proofing, and standardization. Use this skill when the user wants to improve code quality, refactor, or discuss proce... | kaizen | kaizen, continuous, improvement, error, proofing, standardization, skill, user, wants, improve, code, quality |
| `mermaid-expert` | Create Mermaid diagrams for flowcharts, sequences, ERDs, and architectures. Masters syntax for all diagram types and styling. Use PROACTIVELY for visual docu... | mermaid | mermaid, diagrams, flowcharts, sequences, erds, architectures, masters, syntax, all, diagram, types, styling |
| `pdf` | Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs ... | pdf | pdf, manipulation, toolkit, extracting, text, tables, creating, new, pdfs, merging, splitting, documents |
| `pdf-official` | Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs ... | pdf, official | pdf, official, manipulation, toolkit, extracting, text, tables, creating, new, pdfs, merging, splitting |
| `team-collaboration-issue` | You are a GitHub issue resolution expert specializing in systematic bug investigation, feature implementation, and collaborative development workflows. Your ... | team, collaboration, issue | team, collaboration, issue, github, resolution, specializing, systematic, bug, investigation, feature, collaborative, development |
| `track-management` | Use this skill when creating, managing, or working with Conductor tracks - the logical work units for features, bugs, and refactors. Applies to spec.md, plan... | track | track, skill, creating, managing, working, conductor, tracks, logical, work, units, features, bugs |

View File

@@ -7,8 +7,117 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
---
## [4.8.0] - 2026-02-04 - "Computer Vision & Angular"
> Major SOTA Computer Vision update and complete Angular 20+ skill suite.
### Added
- **New Skill**: `computer-vision-expert` Updated foundational skill for 2026 SOTA Computer Vision (YOLO26, SAM 3, VLMs).
- **New Suite**: `angular` 4 comprehensive skills for Angular v20+ development:
- `angular` Core patterns (Signals, Standalone, Zoneless).
- `angular-best-practices` Performance and optimization.
- `angular-state-management` Signal-based state management (NgRx, ComponentStore).
- `angular-ui-patterns` UI/UX engineering patterns.
### Registry
- **Total Skills**: 631 (from 626). Catalog regenerated.
### Credits
- [@PabloSMD](https://github.com/PabloSMD) computer-vision-expert (PR #58)
- [@chauey](https://github.com/chauey) angular suite (PR #60)
---
## [4.7.0] - 2026-02-03 - "Installer Fix & OpenCode Docs"
> Critical installer fix for Windows and OpenCode documentation completion.
### Fixed
- **Installer**: Resolved `ReferenceError` for `tagArg` variable in `bin/install.js` ensuring correct execution on Windows/PowerShell (PR #53).
### Documentation
- **OpenCode**: Completed documentation for OpenCode integration in `README.md`.
---
## [4.6.0] - 2026-02-01 - "SPDD & Radix UI Design System"
> Agent workflow docs (SPDD) and Radix UI design system skill.
### Added
- **New Skill**: `radix-ui-design-system` Build accessible design systems with Radix UI primitives (headless, theming, WCAG, examples).
- **Docs**: `skills/SPDD/` Research, spec, and implementation workflow docs (1-research.md, 2-spec.md, 3-implementation.md).
### Registry
- **Total Skills**: 626 (from 625). Catalog regenerated.
---
## [4.5.0] - 2026-01-31 - "Stitch UI Design"
> Expert prompting guide for Google Stitch AI-powered UI design tool.
### Added
- **New Skill**: `stitch-ui-design` Expert guide for creating effective prompts for Google Stitch AI UI design tool (Gemini 2.5 Flash). Covers prompt structure, specificity techniques, iteration strategies, design-to-code workflows, and 10+ examples for landing pages, mobile apps, and dashboards.
### Changed
- **Documentation**: Clarified in README.md and GETTING_STARTED.md that installation means cloning the full repo once; Starter Packs are curated lists to discover skills by role, not a different installation method (fixes [#44](https://github.com/sickn33/antigravity-awesome-skills/issues/44)).
### Registry
- **Total Skills**: 625 (from 624). Catalog regenerated.
### Credits
- [@ALEKGG1](https://github.com/ALEKGG1) stitch-ui-design (PR #45)
- [@CypherPoet](https://github.com/CypherPoet) Documentation clarity (#44)
---
## [4.4.0] - 2026-01-30 - "fp-ts skills for TypeScript"
> Three practical fp-ts skills for TypeScript functional programming.
### Added
- **New Skills** (from [whatiskadudoing/fp-ts-skills](https://github.com/whatiskadudoing/fp-ts-skills)):
- `fp-ts-pragmatic` Pipe, Option, Either, TaskEither without academic jargon.
- `fp-ts-react` Patterns for fp-ts with React 18/19 and Next.js 14/15 (state, forms, data fetching).
- `fp-ts-errors` Type-safe error handling with Either and TaskEither.
### Registry
- **Total Skills**: 624 (from 621). Catalog regenerated.
---
## [4.3.0] - 2026-01-29 - "VoltAgent Integration & Context Engineering Suite"
> 61 new skills from VoltAgent/awesome-agent-skills: official team skills and context engineering suite.
### Added
- **61 new skills** from [VoltAgent/awesome-agent-skills](https://github.com/VoltAgent/awesome-agent-skills):
- **Official (27)**: Sentry (commit, create-pr, find-bugs, iterate-pr), Trail of Bits (culture-index, fix-review, sharp-edges), Expo (expo-deployment, upgrading-expo), Hugging Face (hugging-face-cli, hugging-face-jobs), Vercel, Google Stitch (design-md), Neon (using-neon), n8n (n8n-code-python, n8n-mcp-tools-expert, n8n-node-configuration), SwiftUI, fal.ai (fal-audio, fal-generate, fal-image-edit, fal-platform, fal-upscale, fal-workflow), deep-research, imagen, readme.
- **Community (34)**: Context suite (context-fundamentals, context-degradation, context-compression, context-optimization, multi-agent-patterns, memory-systems, evaluation), frontend-slides, linear-claude-skill, skill-rails-upgrade, terraform-skill, tool-design, screenshots, automate-whatsapp, observe-whatsapp, aws-skills, ui-skills, vexor, pypict-skill, makepad-skills, threejs-skills, claude-scientific-skills, claude-win11-speckit-update-skill, security-bluebook-builder, claude-ally-health, clarity-gate, beautiful-prose, claude-speed-reader, skill-seekers, varlock-claude-skill, superpowers-lab, nanobanana-ppt-skills, x-article-publisher-skill, ffuf-claude-skill.
### Registry
- **Total Skills**: 614 (from 553). Catalog and SOURCES.md updated.
### Credits
- VoltAgent/awesome-agent-skills and official teams (Sentry, Trail of Bits, Expo, Hugging Face, Vercel Labs, Google Labs, Neon, fal.ai).
---
## [4.0.0] - 2026-01-28 - "The Enterprise Era"
@@ -120,7 +229,7 @@ The following skills are now correctly indexed and visible in the registry:
- **Documentation**:
- `docs/EXAMPLES.md`: Cookbook with 3 real-world scenarios.
- `docs/SOURCES.md`: Legal ledger for attributions and licenses.
- `RELEASE_NOTES.md`: Generated release announcement (archived).
- Release announcements are documented in this CHANGELOG.
### Changed

View File

@@ -48,6 +48,23 @@ You don't need to be an expert! Here are ways anyone can help:
---
## Local development setup
To run validation, index generation, and README updates locally:
1. **Node.js** (for catalog and installer): `npm ci`
2. **Python 3** (for validate, index, readme scripts): install dependencies with
```bash
pip install -r requirements.txt
```
Then you can run `npm run chain` (validate → index → readme) and `npm run catalog`.
**Validation:** The canonical validator is **Python** (`scripts/validate_skills.py`). Use `npm run validate` (or `npm run validate:strict` for CI-style checks). The JavaScript validator (`scripts/validate-skills.js`) is legacy/optional and uses a different schema; CI and PR checks rely on the Python validator only.
**npm audit:** CI runs `npm audit --audit-level=high`. To fix issues locally: run `npm audit`, then `npm update` or `npm audit fix` as appropriate; for breaking changes, update dependencies manually and run tests.
---
## How to Create a New Skill
### Step-by-Step Guide

View File

@@ -1,6 +1,6 @@
# 🌌 Antigravity Awesome Skills: 624+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More
# 🌌 Antigravity Awesome Skills: 631+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More
> **The Ultimate Collection of 624+ Universal Agentic Skills for AI Coding Assistants — Claude Code, Gemini CLI, Codex CLI, Antigravity IDE, GitHub Copilot, Cursor, OpenCode**
> **The Ultimate Collection of 631+ Universal Agentic Skills for AI Coding Assistants — Claude Code, Gemini CLI, Codex CLI, Antigravity IDE, GitHub Copilot, Cursor, OpenCode, AdaL**
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Claude Code](https://img.shields.io/badge/Claude%20Code-Anthropic-purple)](https://claude.ai)
@@ -10,8 +10,10 @@
[![Copilot](https://img.shields.io/badge/GitHub%20Copilot-VSCode-lightblue)](https://github.com/features/copilot)
[![OpenCode](https://img.shields.io/badge/OpenCode-CLI-gray)](https://github.com/opencode-ai/opencode)
[![Antigravity](https://img.shields.io/badge/Antigravity-DeepMind-red)](https://github.com/sickn33/antigravity-awesome-skills)
[![AdaL CLI](https://img.shields.io/badge/AdaL%20CLI-SylphAI-pink)](https://sylph.ai/)
[![ASK Supported](https://img.shields.io/badge/ASK-Supported-blue)](https://github.com/yeasy/ask)
**Antigravity Awesome Skills** is a curated, battle-tested library of **624 high-performance agentic skills** designed to work seamlessly across all major AI coding assistants:
**Antigravity Awesome Skills** is a curated, battle-tested library of **631 high-performance agentic skills** designed to work seamlessly across all major AI coding assistants:
- 🟣 **Claude Code** (Anthropic CLI)
- 🔵 **Gemini CLI** (Google DeepMind)
@@ -20,6 +22,7 @@
- 🩵 **GitHub Copilot** (VSCode Extension)
- 🟠 **Cursor** (AI-native IDE)
-**OpenCode** (Open-source CLI)
- 🌸 **AdaL CLI** (Self-evolving Coding Agent)
This repository provides essential skills to transform your AI assistant into a **full-stack digital agency**, including official capabilities from **Anthropic**, **OpenAI**, **Google**, **Supabase**, and **Vercel Labs**.
@@ -29,7 +32,7 @@ This repository provides essential skills to transform your AI assistant into a
- [🔌 Compatibility & Invocation](#compatibility--invocation)
- [📦 Features & Categories](#features--categories)
- [🎁 Curated Collections (Bundles)](#curated-collections)
- [📚 Browse 624+ Skills](#browse-624-skills)
- [📚 Browse 631+ Skills](#browse-631-skills)
- [🛠️ Installation](#installation)
- [🤝 How to Contribute](#how-to-contribute)
- [👥 Contributors & Credits](#credits--sources)
@@ -52,9 +55,10 @@ AI Agents (like Claude Code, Cursor, or Gemini) are smart, but they lack **speci
### 2. ⚡️ Quick Start (The "Bundle" Way)
Don't install 624+ skills manually. Use our **Starter Packs**:
Install once (clone or npx); then use our **Starter Packs** in [docs/BUNDLES.md](docs/BUNDLES.md) to see which skills fit your role. You get the full repo; Starter Packs are curated lists, not a separate install.
1. **Install** (pick one):
```bash
# Easiest: npx installer (clones to ~/.agent/skills by default)
npx antigravity-awesome-skills
@@ -62,6 +66,7 @@ Don't install 624+ skills manually. Use our **Starter Packs**:
# Or clone manually
git clone https://github.com/sickn33/antigravity-awesome-skills.git .agent/skills
```
2. **Pick your persona** (See [docs/BUNDLES.md](docs/BUNDLES.md)):
- **Web Dev?** use the `Web Wizard` pack.
- **Hacker?** use the `Security Engineer` pack.
@@ -86,9 +91,12 @@ These skills follow the universal **SKILL.md** format and work with any AI codin
| :-------------- | :--- | :-------------------------------- | :---------------- |
| **Claude Code** | CLI | `>> /skill-name help me...` | `.claude/skills/` |
| **Gemini CLI** | CLI | `(User Prompt) Use skill-name...` | `.gemini/skills/` |
| **Codex CLI** | CLI | `(User Prompt) Use skill-name...` | `.codex/skills/` |
| **Antigravity** | IDE | `(Agent Mode) Use skill...` | `.agent/skills/` |
| **Cursor** | IDE | `@skill-name (in Chat)` | `.cursor/skills/` |
| **Copilot** | Ext | `(Paste content manually)` | N/A |
| **OpenCode** | CLI | `opencode run @skill-name` | `.agent/skills/` |
| **AdaL CLI** | CLI | `(Auto) Skills load on-demand` | `.adal/skills/` |
> [!TIP]
> **Universal Path**: We recommend cloning to `.agent/skills/`. Most modern tools (Antigravity, recent CLIs) look here by default.
@@ -100,7 +108,7 @@ These skills follow the universal **SKILL.md** format and work with any AI codin
---
Whether you are using **Gemini CLI**, **Claude Code**, **Codex CLI**, **Cursor**, **GitHub Copilot**, **Antigravity**, or **OpenCode**, these skills are designed to drop right in and supercharge your AI agent.
Whether you are using **Gemini CLI**, **Claude Code**, **Codex CLI**, **Cursor**, **GitHub Copilot**, **Antigravity**, **OpenCode**, or **AdaL**, these skills are designed to drop right in and supercharge your AI agent.
This repository aggregates the best capabilities from across the open-source community, transforming your AI assistant into a full-stack digital agency capable of Engineering, Design, Security, Marketing, and Autonomous Operations.
@@ -108,23 +116,23 @@ This repository aggregates the best capabilities from across the open-source com
The repository is organized into specialized domains to transform your AI into an expert across the entire software development lifecycle:
| Category | Focus | Example skills |
| :--- | :--- | :--- |
| Architecture (52) | System design, ADRs, C4, and scalable patterns | `architecture`, `c4-context`, `senior-architect` |
| Business (35) | Growth, pricing, CRO, SEO, and go-to-market | `copywriting`, `pricing-strategy`, `seo-audit` |
| Data & AI (81) | LLM apps, RAG, agents, observability, analytics | `rag-engineer`, `prompt-engineer`, `langgraph` |
| Development (72) | Language mastery, framework patterns, code quality | `typescript-expert`, `python-patterns`, `react-patterns` |
| General (95) | Planning, docs, product ops, writing, guidelines | `brainstorming`, `doc-coauthoring`, `writing-plans` |
| Infrastructure (72) | DevOps, cloud, serverless, deployment, CI/CD | `docker-expert`, `aws-serverless`, `vercel-deployment` |
| Security (107) | AppSec, pentesting, vuln analysis, compliance | `api-security-best-practices`, `sql-injection-testing`, `vulnerability-scanner` |
| Testing (21) | TDD, test design, fixes, QA workflows | `test-driven-development`, `testing-patterns`, `test-fixing` |
| Workflow (17) | Automation, orchestration, jobs, agents | `workflow-automation`, `inngest`, `trigger-dev` |
| Category | Focus | Example skills |
| :------------------ | :------------------------------------------------- | :------------------------------------------------------------------------------ |
| Architecture (52) | System design, ADRs, C4, and scalable patterns | `architecture`, `c4-context`, `senior-architect` |
| Business (35) | Growth, pricing, CRO, SEO, and go-to-market | `copywriting`, `pricing-strategy`, `seo-audit` |
| Data & AI (81) | LLM apps, RAG, agents, observability, analytics | `rag-engineer`, `prompt-engineer`, `langgraph` |
| Development (72) | Language mastery, framework patterns, code quality | `typescript-expert`, `python-patterns`, `react-patterns` |
| General (95) | Planning, docs, product ops, writing, guidelines | `brainstorming`, `doc-coauthoring`, `writing-plans` |
| Infrastructure (72) | DevOps, cloud, serverless, deployment, CI/CD | `docker-expert`, `aws-serverless`, `vercel-deployment` |
| Security (107) | AppSec, pentesting, vuln analysis, compliance | `api-security-best-practices`, `sql-injection-testing`, `vulnerability-scanner` |
| Testing (21) | TDD, test design, fixes, QA workflows | `test-driven-development`, `testing-patterns`, `test-fixing` |
| Workflow (17) | Automation, orchestration, jobs, agents | `workflow-automation`, `inngest`, `trigger-dev` |
## Curated Collections
[Check out our Starter Packs in docs/BUNDLES.md](docs/BUNDLES.md) to find the perfect toolkit for your role.
## Browse 624+ Skills
## Browse 631+ Skills
We have moved the full skill registry to a dedicated catalog to keep this README clean.
@@ -132,7 +140,7 @@ We have moved the full skill registry to a dedicated catalog to keep this README
## Installation
To use these skills with **Claude Code**, **Gemini CLI**, **Codex CLI**, **Cursor**, **Antigravity**, or **OpenCode**:
To use these skills with **Claude Code**, **Gemini CLI**, **Codex CLI**, **Cursor**, **Antigravity**, **OpenCode**, or **AdaL**:
### Option A: npx (recommended)
@@ -149,12 +157,20 @@ npx antigravity-awesome-skills --claude
# Gemini CLI
npx antigravity-awesome-skills --gemini
# Codex CLI
npx antigravity-awesome-skills --codex
# OpenCode (Universal)
npx antigravity-awesome-skills
# Custom path
npx antigravity-awesome-skills --path ./my-skills
```
Run `npx antigravity-awesome-skills --help` for all options. If the directory already exists, the installer runs `git pull` to update.
> **If you see a 404 error:** the package may not be published to npm yet. Use: `npx github:sickn33/antigravity-awesome-skills`
### Option B: git clone
```bash
@@ -167,8 +183,14 @@ git clone https://github.com/sickn33/antigravity-awesome-skills.git .claude/skil
# Gemini CLI specific
git clone https://github.com/sickn33/antigravity-awesome-skills.git .gemini/skills
# Codex CLI specific
git clone https://github.com/sickn33/antigravity-awesome-skills.git .codex/skills
# Cursor specific
git clone https://github.com/sickn33/antigravity-awesome-skills.git .cursor/skills
# OpenCode specific (Universal path)
git clone https://github.com/sickn33/antigravity-awesome-skills.git .agent/skills
```
---
@@ -229,6 +251,7 @@ This collection would not be possible without the incredible work of the Claude
- **[coreyhaines31/marketingskills](https://github.com/coreyhaines31/marketingskills)**: Marketing skills for CRO, copywriting, SEO, paid ads, and growth (23 skills, MIT).
- **[vudovn/antigravity-kit](https://github.com/vudovn/antigravity-kit)**: AI Agent templates with Skills, Agents, and Workflows (33 skills, MIT).
- **[affaan-m/everything-claude-code](https://github.com/affaan-m/everything-claude-code)**: Complete Claude Code configuration collection from Anthropic hackathon winner - skills only (8 skills, MIT).
- **[whatiskadudoing/fp-ts-skills](https://github.com/whatiskadudoing/fp-ts-skills)**: Practical fp-ts skills for TypeScript fp-ts-pragmatic, fp-ts-react, fp-ts-errors (v4.4.0).
- **[webzler/agentMemory](https://github.com/webzler/agentMemory)**: Source for the agent-memory-mcp skill.
- **[sstklen/claude-api-cost-optimization](https://github.com/sstklen/claude-api-cost-optimization)**: Save 50-90% on Claude API costs with smart optimization strategies (MIT).
@@ -266,33 +289,47 @@ ai-developer-tools, ai-pair-programming, vibe-coding, skill, skills, SKILL.md, r
## Repo Contributors
<a href="https://github.com/sickn33/antigravity-awesome-skills/graphs/contributors">
<img src="https://contrib.rocks/image?repo=sickn33/antigravity-awesome-skills" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
We officially thank the following contributors for their help in making this repository awesome!
- [mvanhorn](https://github.com/mvanhorn)
- [rookie-ricardo](https://github.com/rookie-ricardo)
- [sck_0](https://github.com/sck_0)
- [Munir Abbasi](https://github.com/munirabbasi)
- [Mohammad Faiz](https://github.com/mohdfaiz2k9)
- [Ianj332](https://github.com/Ianj332)
- [sck_0](https://github.com/sck000)
- [Munir Abbasi](https://github.com/munir-abbasi)
- [sickn33](https://github.com/sickn33)
- [Mohammad Faiz](https://github.com/Mohammad-Faiz-Cloud-Engineer)
- [Đỗ Khắc Gia Khoa](https://github.com/Dokhacgiakhoa)
- [Ianj332](https://github.com/IanJ332)
- [GuppyTheCat](https://github.com/GuppyTheCat)
- [Tiger-Foxx](https://github.com/Tiger-Foxx)
- [arathiesh](https://github.com/arathiesh)
- [1bcMax](https://github.com/1bcMax)
- [ALEKGG1](https://github.com/ALEKGG1)
- [Ahmed Rehan](https://github.com/ar27111994)
- [BenedictKing](https://github.com/BenedictKing)
- [whatiskadudoing](https://github.com/whatiskadudoing)
- [Nguyen Huu Loc](https://github.com/LocNguyenSGU)
- [Owen Wu](https://github.com/yubing744)
- [SuperJMN](https://github.com/SuperJMN)
- [Truong Nguyen](https://github.com/truongnmt)
- [Viktor Ferenczi](https://github.com/viktor-ferenczi)
- [Đỗ Khắc Gia Khoa](https://github.com/Dokhacgiakhoa)
- [evandro-miguel](https://github.com/evandro-miguel)
- [c1c3ru](https://github.com/c1c3ru)
- [ckdwns9121](https://github.com/ckdwns9121)
- [junited31](https://github.com/junited31)
- [krisnasantosa15](https://github.com/krisnasantosa15)
- [raeef1001](https://github.com/raeef1001)
- [liyin2015](https://github.com/liyin2015)
- [krisnasantosa15](https://github.com/KrisnaSantosa15)
- [sstklen](https://github.com/sstklen)
- [taksrules](https://github.com/taksrules)
- [zebbern](https://github.com/zebbern)
- [vuth-dogo](https://github.com/vuth-dogo)
- [mvanhorn](https://github.com/mvanhorn)
- [rookie-ricardo](https://github.com/rookie-ricardo)
- [evandro-miguel](https://github.com/evandro-miguel)
- [raeef1001](https://github.com/raeef1001)
- [devchangjun](https://github.com/devchangjun)
## Star History

View File

@@ -1,153 +0,0 @@
# Release v4.4.0: fp-ts skills for TypeScript
> **Three practical fp-ts skills for TypeScript functional programming**
This release adds 3 fp-ts skills sourced from [whatiskadudoing/fp-ts-skills](https://github.com/whatiskadudoing/fp-ts-skills), bringing the total to 624 skills. These skills focus on practical, jargon-free patterns for pipe, Option, Either, TaskEither, React integration, and type-safe error handling.
## New Skills (3)
- **[fp-ts-pragmatic](skills/fp-ts-pragmatic/)** The 80/20 of functional programming: pipe, Option, Either, TaskEither without academic jargon
- **[fp-ts-react](skills/fp-ts-react/)** Patterns for using fp-ts with React 18/19 and Next.js 14/15 (state, forms, data fetching)
- **[fp-ts-errors](skills/fp-ts-errors/)** Type-safe error handling with Either and TaskEither; no more try/catch spaghetti
## Registry Update
- **Total Skills**: 624 (from 621)
- **New Skills Added**: 3
- **Catalog**: Regenerated with all skills
---
# Release v4.3.0: VoltAgent Integration & Context Engineering Suite
> **Massive expansion with 61 new skills from VoltAgent repository, including official team skills and comprehensive context engineering capabilities**
This release adds 61 high-quality skills sourced from the VoltAgent/awesome-agent-skills curated collection, bringing the total to 614 skills. Highlights include official skills from Sentry, Trail of Bits, Expo, Hugging Face, and a complete context engineering suite for building sophisticated AI agents.
## 🚀 New Skills
### Official Team Skills (27)
#### Sentry (4)
- **[commit](skills/commit/)** Create commits with best practices following Sentry conventions
- **[create-pr](skills/create-pr/)** Create pull requests with proper descriptions and review guidelines
- **[find-bugs](skills/find-bugs/)** Find and identify bugs in code systematically
- **[iterate-pr](skills/iterate-pr/)** Iterate on pull request feedback efficiently
#### Trail of Bits (3)
- **[culture-index](skills/culture-index/)** Index and search culture documentation
- **[fix-review](skills/fix-review/)** Verify fix commits address audit findings without new bugs
- **[sharp-edges](skills/sharp-edges/)** Identify error-prone APIs and dangerous configurations
#### Expo (2)
- **[expo-deployment](skills/expo-deployment/)** Deploy Expo apps to production
- **[upgrading-expo](skills/upgrading-expo/)** Upgrade Expo SDK versions safely
#### Hugging Face (2)
- **[hugging-face-cli](skills/hugging-face-cli/)** HF Hub CLI for models, datasets, repos, and compute jobs
- **[hugging-face-jobs](skills/hugging-face-jobs/)** Run compute jobs and Python scripts on HF infrastructure
#### Other Official (16)
- **[vercel-deploy-claimable](skills/vercel-deploy-claimable/)** Deploy projects to Vercel
- **[design-md](skills/design-md/)** Create and manage DESIGN.md files (Google Stitch)
- **[using-neon](skills/using-neon/)** Best practices for Neon Serverless Postgres
- **[n8n-code-python](skills/n8n-code-python/)** Python in n8n Code nodes
- **[n8n-mcp-tools-expert](skills/n8n-mcp-tools-expert/)** n8n MCP tools guide
- **[n8n-node-configuration](skills/n8n-node-configuration/)** n8n node configuration
- **[swiftui-expert-skill](skills/swiftui-expert-skill/)** SwiftUI best practices
- **[fal-audio](skills/fal-audio/)** Text-to-speech and speech-to-text using fal.ai
- **[fal-generate](skills/fal-generate/)** Generate images and videos using fal.ai AI models
- **[fal-image-edit](skills/fal-image-edit/)** AI-powered image editing with style transfer
- **[fal-platform](skills/fal-platform/)** Platform APIs for model management and usage tracking
- **[fal-upscale](skills/fal-upscale/)** Upscale and enhance image/video resolution using AI
- **[fal-workflow](skills/fal-workflow/)** Generate workflow JSON files for chaining AI models
- **[deep-research](skills/deep-research/)** Gemini Deep Research Agent for autonomous research
- **[imagen](skills/imagen/)** Generate images using Google Gemini
- **[readme](skills/readme/)** Generate comprehensive project documentation
### Community Skills (34)
#### Context Engineering Suite (7)
A complete suite for building sophisticated AI agents with advanced context management:
- **[context-fundamentals](skills/context-fundamentals/)** Understand what context is, why it matters, and the anatomy of context in agent systems
- **[context-degradation](skills/context-degradation/)** Recognize patterns of context failure: lost-in-middle, poisoning, distraction, and clash
- **[context-compression](skills/context-compression/)** Design and evaluate compression strategies for long-running sessions
- **[context-optimization](skills/context-optimization/)** Apply compaction, masking, and caching strategies
- **[multi-agent-patterns](skills/multi-agent-patterns/)** Master orchestrator, peer-to-peer, and hierarchical multi-agent architectures
- **[memory-systems](skills/memory-systems/)** Design short-term, long-term, and graph-based memory architectures
- **[evaluation](skills/evaluation/)** Build evaluation frameworks for agent systems
#### Development Tools (8)
- **[frontend-slides](skills/frontend-slides/)** Generate animation-rich HTML presentations with visual style previews
- **[linear-claude-skill](skills/linear-claude-skill/)** Manage Linear issues, projects, and teams
- **[skill-rails-upgrade](skills/skill-rails-upgrade/)** Analyze Rails apps and provide upgrade assessments
- **[terraform-skill](skills/terraform-skill/)** Terraform infrastructure as code best practices
- **[tool-design](skills/tool-design/)** Build tools that agents can use effectively, including architectural reduction patterns
- **[screenshots](skills/screenshots/)** Generate marketing screenshots with Playwright
- **[automate-whatsapp](skills/automate-whatsapp/)** Build WhatsApp automations with workflows and agents
- **[observe-whatsapp](skills/observe-whatsapp/)** Debug WhatsApp delivery issues and run health checks
#### Platform & Framework Skills (19)
- **[aws-skills](skills/aws-skills/)** AWS development with infrastructure automation
- **[ui-skills](skills/ui-skills/)** Opinionated constraints for building interfaces
- **[vexor](skills/vexor/)** Vector-powered CLI for semantic file search
- **[pypict-skill](skills/pypict-skill/)** Pairwise test generation
- **[makepad-skills](skills/makepad-skills/)** Makepad UI development for Rust apps
- **[threejs-skills](skills/threejs-skills/)** Three.js 3D experiences
- **[claude-scientific-skills](skills/claude-scientific-skills/)** Scientific research skills
- **[claude-win11-speckit-update-skill](skills/claude-win11-speckit-update-skill/)** Windows 11 management
- **[security-bluebook-builder](skills/security-bluebook-builder/)** Security documentation
- **[claude-ally-health](skills/claude-ally-health/)** Health assistant
- **[clarity-gate](skills/clarity-gate/)** RAG quality verification
- **[beautiful-prose](skills/beautiful-prose/)** Writing style guide
- **[claude-speed-reader](skills/claude-speed-reader/)** Speed reading tool
- **[skill-seekers](skills/skill-seekers/)** Skill conversion tool
- **[varlock-claude-skill](skills/varlock-claude-skill/)** Secure environment variable management
- **[superpowers-lab](skills/superpowers-lab/)** Superpowers Lab integration
- **[nanobanana-ppt-skills](skills/nanobanana-ppt-skills/)** PowerPoint presentation skills
- **[x-article-publisher-skill](skills/x-article-publisher-skill/)** X/Twitter article publishing
- **[ffuf-claude-skill](skills/ffuf-claude-skill/)** Web fuzzing with ffuf
---
## 📦 Registry Update
- **Total Skills**: 614 (from 553)
- **New Skills Added**: 61
- **Catalog**: Fully regenerated with all new skills
- **Sources**: All skills properly attributed in `docs/SOURCES.md`
## 🔧 Improvements
### Quality Assurance
- All new skills validated for frontmatter compliance
- "When to Use" sections added where missing
- Source attribution maintained for all skills
- Risk labels properly set
### Documentation
- Updated README.md with correct skill count (614)
- Updated package.json version to 4.3.0
- Comprehensive release notes created
## 📊 Statistics
- **Skills from VoltAgent Repository**: 61
- Official Team Skills: 27
- Community Skills: 34
- **Skills Analyzed**: 174 total from VoltAgent
- **Skills Already Present**: 32 (skipped as duplicates)
- **Skills with Similar Names**: 89 (analyzed, 12 implemented as complementary)
## 👥 Credits
A huge shoutout to our community contributors and the VoltAgent team:
- **VoltAgent/awesome-agent-skills** for curating an excellent collection
- **Official Teams**: Sentry, Trail of Bits, Expo, Hugging Face, Vercel Labs, Google Labs, Neon, fal.ai
- **Community Contributors**: zarazhangrui, wrsmith108, robzolkos, muratcankoylan, antonbabenko, and all other skill authors
---
_Upgrade now: `git pull origin main` to fetch the latest skills._

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -16,18 +16,23 @@ function resolveDir(p) {
function parseArgs() {
const a = process.argv.slice(2);
let pathArg = null;
let cursor = false, claude = false, gemini = false;
let versionArg = null;
let tagArg = null;
let cursor = false, claude = false, gemini = false, codex = false;
for (let i = 0; i < a.length; i++) {
if (a[i] === '--help' || a[i] === '-h') return { help: true };
if (a[i] === '--path' && a[i + 1]) { pathArg = a[++i]; continue; }
if (a[i] === '--version' && a[i + 1]) { versionArg = a[++i]; continue; }
if (a[i] === '--tag' && a[i + 1]) { tagArg = a[++i]; continue; }
if (a[i] === '--cursor') { cursor = true; continue; }
if (a[i] === '--claude') { claude = true; continue; }
if (a[i] === '--gemini') { gemini = true; continue; }
if (a[i] === '--codex') { codex = true; continue; }
if (a[i] === 'install') continue;
}
return { pathArg, cursor, claude, gemini };
return { pathArg, versionArg, tagArg, cursor, claude, gemini, codex };
}
function defaultDir(opts) {
@@ -35,6 +40,11 @@ function defaultDir(opts) {
if (opts.cursor) return path.join(HOME, '.cursor', 'skills');
if (opts.claude) return path.join(HOME, '.claude', 'skills');
if (opts.gemini) return path.join(HOME, '.gemini', 'skills');
if (opts.codex) {
const codexHome = process.env.CODEX_HOME;
if (codexHome) return path.join(codexHome, 'skills');
return path.join(HOME, '.codex', 'skills');
}
return path.join(HOME, '.agent', 'skills');
}
@@ -50,11 +60,15 @@ Options:
--cursor Install to ~/.cursor/skills (Cursor)
--claude Install to ~/.claude/skills (Claude Code)
--gemini Install to ~/.gemini/skills (Gemini CLI)
--codex Install to ~/.codex/skills (Codex CLI)
--path <dir> Install to <dir> (default: ~/.agent/skills)
--version <ver> After clone, checkout tag v<ver> (e.g. 4.6.0 -> v4.6.0)
--tag <tag> After clone, checkout this tag (e.g. v4.6.0)
Examples:
npx antigravity-awesome-skills
npx antigravity-awesome-skills --cursor
npx antigravity-awesome-skills --version 4.6.0
npx antigravity-awesome-skills --path ./my-skills
`);
}
@@ -66,6 +80,8 @@ function run(cmd, args, opts = {}) {
function main() {
const opts = parseArgs();
const { tagArg, versionArg } = opts;
if (opts.help) {
printHelp();
return;
@@ -106,6 +122,13 @@ function main() {
run('git', ['clone', REPO, target]);
}
const ref = tagArg || (versionArg ? (versionArg.startsWith('v') ? versionArg : `v${versionArg}`) : null);
if (ref) {
console.log(`Checking out ${ref}`);
process.chdir(target);
run('git', ['checkout', ref]);
}
console.log(`\nInstalled to ${target}`);
console.log('Pick a bundle in docs/BUNDLES.md and use @skill-name in your AI assistant.');
}

View File

@@ -1,5 +1,5 @@
{
"generatedAt": "2026-01-30T19:29:11.960Z",
"generatedAt": "2026-02-04T07:52:07.897Z",
"aliases": {
"accessibility-compliance-audit": "accessibility-compliance-accessibility-audit",
"active directory attacks": "active-directory-attacks",
@@ -7,6 +7,7 @@
"agent-orchestration-optimize": "agent-orchestration-multi-agent-optimize",
"api fuzzing for bug bounty": "api-fuzzing-bug-bounty",
"api-testing-mock": "api-testing-observability-api-mock",
"templates": "app-builder/templates",
"application-performance-optimization": "application-performance-performance-optimization",
"aws penetration testing": "aws-penetration-testing",
"backend-development-feature": "backend-development-feature-development",
@@ -45,6 +46,7 @@
"deployment-validation-validate": "deployment-validation-config-validate",
"distributed-debugging-trace": "distributed-debugging-debug-trace",
"documentation-generation-generate": "documentation-generation-doc-generate",
"docx": "docx-official",
"error-debugging-analysis": "error-debugging-error-analysis",
"error-debugging-review": "error-debugging-multi-agent-review",
"error-diagnostics-analysis": "error-diagnostics-error-analysis",
@@ -59,6 +61,16 @@
"frontend-mobile-scaffold": "frontend-mobile-development-component-scaffold",
"frontend-mobile-scan": "frontend-mobile-security-xss-scan",
"full-stack-feature": "full-stack-orchestration-full-stack-feature",
"2d-games": "game-development/2d-games",
"3d-games": "game-development/3d-games",
"game-art": "game-development/game-art",
"game-audio": "game-development/game-audio",
"game-design": "game-development/game-design",
"mobile-games": "game-development/mobile-games",
"multiplayer": "game-development/multiplayer",
"pc-games": "game-development/pc-games",
"vr-ar": "game-development/vr-ar",
"web-games": "game-development/web-games",
"git-pr-workflow": "git-pr-workflows-git-workflow",
"html injection testing": "html-injection-testing",
"idor vulnerability testing": "idor-testing",
@@ -79,11 +91,13 @@
"observability-monitoring-setup": "observability-monitoring-monitor-setup",
"observability-monitoring-implement": "observability-monitoring-slo-implement",
"obsidian-clipper-creator": "obsidian-clipper-template-creator",
"pdf": "pdf-official",
"pentest checklist": "pentest-checklist",
"pentest commands": "pentest-commands",
"performance-testing-ai": "performance-testing-review-ai-review",
"performance-testing-agent": "performance-testing-review-multi-agent-review",
"supabase-postgres-best-practices": "postgres-best-practices",
"pptx": "pptx-official",
"privilege escalation methods": "privilege-escalation-methods",
"python-development-scaffold": "python-development-python-scaffold",
"vercel-react-best-practices": "react-best-practices",
@@ -107,6 +121,7 @@
"windows privilege escalation": "windows-privilege-escalation",
"wireshark network traffic analysis": "wireshark-analysis",
"wordpress penetration testing": "wordpress-penetration-testing",
"xlsx": "xlsx-official",
"cross-site scripting and html injection testing": "xss-html-injection"
}
}

View File

@@ -1,5 +1,5 @@
{
"generatedAt": "2026-01-30T19:29:11.960Z",
"generatedAt": "2026-02-04T07:52:07.897Z",
"bundles": {
"core-dev": {
"description": "Core development skills across languages, frameworks, and backend/frontend fundamentals.",
@@ -55,6 +55,7 @@
"frontend-mobile-security-xss-scan",
"frontend-security-coder",
"frontend-slides",
"game-development/mobile-games",
"go-concurrency-patterns",
"golang-pro",
"graphql",
@@ -112,6 +113,7 @@
"shopify-apps",
"shopify-development",
"slack-bot-builder",
"stitch-ui-design",
"swiftui-expert-skill",
"systems-programming-rust-project",
"tavily-web",
@@ -257,6 +259,7 @@
"skills": [
"airflow-dag-patterns",
"analytics-tracking",
"angular-ui-patterns",
"blockrun",
"business-analyst",
"cc-skill-backend-patterns",
@@ -318,7 +321,6 @@
"unity-ecs-patterns",
"using-neon",
"vector-database-engineer",
"xlsx",
"xlsx-official"
]
},
@@ -356,6 +358,7 @@
"error-diagnostics-error-trace",
"expo-deployment",
"flutter-expert",
"game-development/game-art",
"git-pr-workflows-git-workflow",
"gitlab-ci-patterns",
"gitops-workflow",

View File

@@ -1,6 +1,6 @@
{
"generatedAt": "2026-01-30T19:29:11.960Z",
"total": 617,
"generatedAt": "2026-02-04T07:52:07.897Z",
"total": 631,
"skills": [
{
"id": "3d-web-experience",
@@ -505,6 +505,56 @@
],
"path": "skills/analytics-tracking/SKILL.md"
},
{
"id": "angular",
"name": "angular",
"description": "Modern Angular (v20+) expert with deep knowledge of Signals, Standalone Components, Zoneless applications, SSR/Hydration, and reactive patterns. Use PROACTIVELY for Angular development, component architecture, state management, performance optimization, and migration to modern patterns.",
"category": "architecture",
"tags": [
"angular"
],
"triggers": [
"angular",
"v20",
"deep",
"knowledge",
"signals",
"standalone",
"components",
"zoneless",
"applications",
"ssr",
"hydration",
"reactive"
],
"path": "skills/angular/SKILL.md"
},
{
"id": "angular-best-practices",
"name": "angular-best-practices",
"description": "Angular performance optimization and best practices guide. Use when writing, reviewing, or refactoring Angular code for optimal performance, bundle size, and rendering efficiency.",
"category": "general",
"tags": [
"angular",
"best",
"practices"
],
"triggers": [
"angular",
"best",
"practices",
"performance",
"optimization",
"writing",
"reviewing",
"refactoring",
"code",
"optimal",
"bundle",
"size"
],
"path": "skills/angular-best-practices/SKILL.md"
},
{
"id": "angular-migration",
"name": "angular-migration",
@@ -530,6 +580,56 @@
],
"path": "skills/angular-migration/SKILL.md"
},
{
"id": "angular-state-management",
"name": "angular-state-management",
"description": "Master modern Angular state management with Signals, NgRx, and RxJS. Use when setting up global state, managing component stores, choosing between state solutions, or migrating from legacy patterns.",
"category": "architecture",
"tags": [
"angular",
"state"
],
"triggers": [
"angular",
"state",
"signals",
"ngrx",
"rxjs",
"setting",
"up",
"global",
"managing",
"component",
"stores",
"choosing"
],
"path": "skills/angular-state-management/SKILL.md"
},
{
"id": "angular-ui-patterns",
"name": "angular-ui-patterns",
"description": "Modern Angular UI patterns for loading states, error handling, and data display. Use when building UI components, handling async data, or managing component states.",
"category": "data-ai",
"tags": [
"angular",
"ui"
],
"triggers": [
"angular",
"ui",
"loading",
"states",
"error",
"handling",
"data",
"display",
"building",
"components",
"async",
"managing"
],
"path": "skills/angular-ui-patterns/SKILL.md"
},
{
"id": "anti-reversing-techniques",
"name": "anti-reversing-techniques",
@@ -760,6 +860,31 @@
],
"path": "skills/app-builder/SKILL.md"
},
{
"id": "app-builder/templates",
"name": "templates",
"description": "Project scaffolding templates for new applications. Use when creating new projects from scratch. Contains 12 templates for various tech stacks.",
"category": "general",
"tags": [
"app",
"builder/templates"
],
"triggers": [
"app",
"builder/templates",
"scaffolding",
"new",
"applications",
"creating",
"scratch",
"contains",
"12",
"various",
"tech",
"stacks"
],
"path": "skills/app-builder/templates/SKILL.md"
},
{
"id": "app-store-optimization",
"name": "app-store-optimization",
@@ -3066,6 +3191,31 @@
],
"path": "skills/computer-use-agents/SKILL.md"
},
{
"id": "computer-vision-expert",
"name": "computer-vision-expert",
"description": "SOTA Computer Vision Expert (2026). Specialized in YOLO26, Segment Anything 3 (SAM 3), Vision Language Models, and real-time spatial analysis.",
"category": "general",
"tags": [
"computer",
"vision"
],
"triggers": [
"computer",
"vision",
"sota",
"2026",
"specialized",
"yolo26",
"segment",
"anything",
"sam",
"language",
"models",
"real"
],
"path": "skills/computer-vision-expert/SKILL.md"
},
{
"id": "concise-planning",
"name": "concise-planning",
@@ -4778,30 +4928,6 @@
],
"path": "skills/documentation-templates/SKILL.md"
},
{
"id": "docx",
"name": "docx",
"description": "Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks",
"category": "general",
"tags": [
"docx"
],
"triggers": [
"docx",
"document",
"creation",
"editing",
"analysis",
"tracked",
"changes",
"comments",
"formatting",
"preservation",
"text",
"extraction"
],
"path": "skills/docx/SKILL.md"
},
{
"id": "docx-official",
"name": "docx",
@@ -6272,6 +6398,245 @@
],
"path": "skills/game-development/SKILL.md"
},
{
"id": "game-development/2d-games",
"name": "2d-games",
"description": "2D game development principles. Sprites, tilemaps, physics, camera.",
"category": "general",
"tags": [
"game",
"development/2d",
"games"
],
"triggers": [
"game",
"development/2d",
"games",
"2d",
"development",
"principles",
"sprites",
"tilemaps",
"physics",
"camera"
],
"path": "skills/game-development/2d-games/SKILL.md"
},
{
"id": "game-development/3d-games",
"name": "3d-games",
"description": "3D game development principles. Rendering, shaders, physics, cameras.",
"category": "general",
"tags": [
"game",
"development/3d",
"games"
],
"triggers": [
"game",
"development/3d",
"games",
"3d",
"development",
"principles",
"rendering",
"shaders",
"physics",
"cameras"
],
"path": "skills/game-development/3d-games/SKILL.md"
},
{
"id": "game-development/game-art",
"name": "game-art",
"description": "Game art principles. Visual style selection, asset pipeline, animation workflow.",
"category": "infrastructure",
"tags": [
"game",
"development/game",
"art"
],
"triggers": [
"game",
"development/game",
"art",
"principles",
"visual",
"style",
"selection",
"asset",
"pipeline",
"animation"
],
"path": "skills/game-development/game-art/SKILL.md"
},
{
"id": "game-development/game-audio",
"name": "game-audio",
"description": "Game audio principles. Sound design, music integration, adaptive audio systems.",
"category": "general",
"tags": [
"game",
"development/game",
"audio"
],
"triggers": [
"game",
"development/game",
"audio",
"principles",
"sound",
"music",
"integration",
"adaptive"
],
"path": "skills/game-development/game-audio/SKILL.md"
},
{
"id": "game-development/game-design",
"name": "game-design",
"description": "Game design principles. GDD structure, balancing, player psychology, progression.",
"category": "general",
"tags": [
"game",
"development/game"
],
"triggers": [
"game",
"development/game",
"principles",
"gdd",
"structure",
"balancing",
"player",
"psychology",
"progression"
],
"path": "skills/game-development/game-design/SKILL.md"
},
{
"id": "game-development/mobile-games",
"name": "mobile-games",
"description": "Mobile game development principles. Touch input, battery, performance, app stores.",
"category": "development",
"tags": [
"game",
"development/mobile",
"games"
],
"triggers": [
"game",
"development/mobile",
"games",
"mobile",
"development",
"principles",
"touch",
"input",
"battery",
"performance",
"app",
"stores"
],
"path": "skills/game-development/mobile-games/SKILL.md"
},
{
"id": "game-development/multiplayer",
"name": "multiplayer",
"description": "Multiplayer game development principles. Architecture, networking, synchronization.",
"category": "architecture",
"tags": [
"game",
"development/multiplayer"
],
"triggers": [
"game",
"development/multiplayer",
"multiplayer",
"development",
"principles",
"architecture",
"networking",
"synchronization"
],
"path": "skills/game-development/multiplayer/SKILL.md"
},
{
"id": "game-development/pc-games",
"name": "pc-games",
"description": "PC and console game development principles. Engine selection, platform features, optimization strategies.",
"category": "general",
"tags": [
"game",
"development/pc",
"games"
],
"triggers": [
"game",
"development/pc",
"games",
"pc",
"console",
"development",
"principles",
"engine",
"selection",
"platform",
"features",
"optimization"
],
"path": "skills/game-development/pc-games/SKILL.md"
},
{
"id": "game-development/vr-ar",
"name": "vr-ar",
"description": "VR/AR development principles. Comfort, interaction, performance requirements.",
"category": "general",
"tags": [
"game",
"development/vr",
"ar"
],
"triggers": [
"game",
"development/vr",
"ar",
"vr",
"development",
"principles",
"comfort",
"interaction",
"performance",
"requirements"
],
"path": "skills/game-development/vr-ar/SKILL.md"
},
{
"id": "game-development/web-games",
"name": "web-games",
"description": "Web browser game development principles. Framework selection, WebGPU, optimization, PWA.",
"category": "general",
"tags": [
"game",
"development/web",
"games"
],
"triggers": [
"game",
"development/web",
"games",
"web",
"browser",
"development",
"principles",
"framework",
"selection",
"webgpu",
"optimization",
"pwa"
],
"path": "skills/game-development/web-games/SKILL.md"
},
{
"id": "gcp-cloud-run",
"name": "gcp-cloud-run",
@@ -9604,30 +9969,6 @@
],
"path": "skills/pci-compliance/SKILL.md"
},
{
"id": "pdf",
"name": "pdf",
"description": "Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.",
"category": "workflow",
"tags": [
"pdf"
],
"triggers": [
"pdf",
"manipulation",
"toolkit",
"extracting",
"text",
"tables",
"creating",
"new",
"pdfs",
"merging",
"splitting",
"documents"
],
"path": "skills/pdf/SKILL.md"
},
{
"id": "pdf-official",
"name": "pdf",
@@ -10086,30 +10427,6 @@
],
"path": "skills/powershell-windows/SKILL.md"
},
{
"id": "pptx",
"name": "pptx",
"description": "Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying or editing content, (3) Working with layouts, (4) Adding comments or speaker notes, or any other presentation tasks",
"category": "general",
"tags": [
"pptx"
],
"triggers": [
"pptx",
"presentation",
"creation",
"editing",
"analysis",
"claude",
"work",
"presentations",
"files",
"creating",
"new",
"modifying"
],
"path": "skills/pptx/SKILL.md"
},
{
"id": "pptx-official",
"name": "pptx",
@@ -10670,6 +10987,30 @@
],
"path": "skills/quant-analyst/SKILL.md"
},
{
"id": "radix-ui-design-system",
"name": "radix-ui-design-system",
"description": "Build accessible design systems with Radix UI primitives. Headless component customization, theming strategies, and compound component patterns for production-grade UI libraries.",
"category": "architecture",
"tags": [
"radix",
"ui"
],
"triggers": [
"radix",
"ui",
"accessible",
"primitives",
"headless",
"component",
"customization",
"theming",
"compound",
"grade",
"libraries"
],
"path": "skills/radix-ui-design-system/SKILL.md"
},
{
"id": "rag-engineer",
"name": "rag-engineer",
@@ -12900,6 +13241,31 @@
],
"path": "skills/startup-metrics-framework/SKILL.md"
},
{
"id": "stitch-ui-design",
"name": "stitch-ui-design",
"description": "Expert guide for creating effective prompts for Google Stitch AI UI design tool. Use when user wants to design UI/UX in Stitch, create app interfaces, generate mobile/web designs, or needs help crafting Stitch prompts. Covers prompt structure, specificity techniques, iteration strategies, and design-to-code workflows for Stitch by Google.",
"category": "data-ai",
"tags": [
"stitch",
"ui"
],
"triggers": [
"stitch",
"ui",
"creating",
"effective",
"prompts",
"google",
"ai",
"user",
"wants",
"ux",
"app",
"interfaces"
],
"path": "skills/stitch-ui-design/SKILL.md"
},
{
"id": "stride-analysis-patterns",
"name": "stride-analysis-patterns",
@@ -14922,30 +15288,6 @@
],
"path": "skills/x-article-publisher-skill/SKILL.md"
},
{
"id": "xlsx",
"name": "xlsx",
"description": "Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas",
"category": "data-ai",
"tags": [
"xlsx"
],
"triggers": [
"xlsx",
"spreadsheet",
"creation",
"editing",
"analysis",
"formulas",
"formatting",
"data",
"visualization",
"claude",
"work",
"spreadsheets"
],
"path": "skills/xlsx/SKILL.md"
},
{
"id": "xlsx-official",
"name": "xlsx",

View File

@@ -1,6 +1,6 @@
{
"name": "antigravity-awesome-skills",
"version": "4.2.0",
"version": "4.6.0",
"dependencies": {
"yaml": "^2.8.2"
}

View File

@@ -11,7 +11,7 @@
Skills are specialized instruction files that teach AI assistants how to handle specific tasks. Think of them as expert knowledge modules that your AI can load on-demand.
**Simple analogy:** Just like you might consult different experts (a lawyer, a doctor, a mechanic), these skills let your AI become an expert in different areas when you need them.
### Do I need to install all 560+ skills?
### Do I need to install all 626+ skills?
**No!** When you clone the repository, all skills are available, but your AI only loads them when you explicitly invoke them with `@skill-name`.
It's like having a library - all books are there, but you only read the ones you need.
@@ -62,7 +62,11 @@ _Always check the Risk label and review the code._
### Where should I install the skills?
The universal path that works with most tools is `.agent/skills/`:
The universal path that works with most tools is `.agent/skills/`.
**Using npx:** `npx antigravity-awesome-skills` (or `npx github:sickn33/antigravity-awesome-skills` if you get a 404).
**Using git clone:**
```bash
git clone https://github.com/sickn33/antigravity-awesome-skills.git .agent/skills
@@ -72,6 +76,7 @@ git clone https://github.com/sickn33/antigravity-awesome-skills.git .agent/skill
- Claude Code: `.claude/skills/`
- Gemini CLI: `.gemini/skills/`
- Codex CLI: `.codex/skills/`
- Cursor: `.cursor/skills/` or project root
### Does this work with Windows?

View File

@@ -15,9 +15,11 @@ AI Agents (like **Claude Code**, **Gemini**, **Cursor**) are smart, but they lac
## ⚡️ Quick Start: The "Starter Packs"
Don't panic about the 560+ skills. You don't need them all at once.
Don't panic about the 626+ skills. You don't need them all at once.
We have curated **Starter Packs** to get you running immediately.
You **install the full repo once** (npx or clone); Starter Packs are curated lists to help you **pick which skills to use** by role (e.g. Web Wizard, Hacker Pack)—they are not a different way to install.
### 1. Install the Repo
**Option A — npx (easiest):**
@@ -26,7 +28,9 @@ We have curated **Starter Packs** to get you running immediately.
npx antigravity-awesome-skills
```
This clones to `~/.agent/skills` by default. Use `--cursor`, `--claude`, or `--gemini` to install for a specific tool, or `--path <dir>` for a custom location. Run `npx antigravity-awesome-skills --help` for details.
This clones to `~/.agent/skills` by default. Use `--cursor`, `--claude`, `--gemini`, or `--codex` to install for a specific tool, or `--path <dir>` for a custom location. Run `npx antigravity-awesome-skills --help` for details.
If you see a 404 error, use: `npx github:sickn33/antigravity-awesome-skills`
**Option B — git clone:**
@@ -78,6 +82,7 @@ Once installed, just talk to your AI naturally.
| :-------------- | :-------------- | :---------------- |
| **Claude Code** | ✅ Full Support | `.claude/skills/` |
| **Gemini CLI** | ✅ Full Support | `.gemini/skills/` |
| **Codex CLI** | ✅ Full Support | `.codex/skills/` |
| **Antigravity** | ✅ Native | `.agent/skills/` |
| **Cursor** | ✅ Native | `.cursor/skills/` |
| **Copilot** | ⚠️ Text Only | Manual copy-paste |
@@ -98,8 +103,8 @@ _Check the [Skill Catalog](../CATALOG.md) for the full list._
## ❓ FAQ
**Q: Do I need to install all 560 skills?**
A: You clone the whole repo, but your AI only _reads_ the ones you ask for (or that are relevant). It's lightweight!
**Q: Do I need to install all 626 skills?**
A: You clone the whole repo once; your AI only _reads_ the skills you invoke (or that are relevant), so it stays lightweight. **Starter Packs** in [BUNDLES.md](BUNDLES.md) are curated lists to help you discover the right skills for your role—they don't change how you install.
**Q: Can I make my own skills?**
A: Yes! Use the **@skill-creator** skill to build your own.

View File

@@ -21,6 +21,7 @@ The skill MUST have a section explicitly stating when to trigger it.
- **Good**: "Use when the user asks to debug a React component."
- **Bad**: "This skill helps you with code."
Accepted headings: `## When to Use`, `## Use this skill when`, `## When to Use This Skill`.
### 3. Safety & Risk Classification

View File

@@ -73,7 +73,7 @@ Some skills include additional metadata:
---
name: my-skill-name
description: "Brief description"
risk: "safe" # safe | risk | official
risk: "safe" # none | safe | critical | offensive (see QUALITY_BAR.md)
source: "community"
tags: ["react", "typescript"]
---

View File

@@ -72,6 +72,14 @@ The following skills were added from the curated collection at [VoltAgent/awesom
- **memory-systems** - [muratcankoylan](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering)
- **terraform-skill** - [antonbabenko](https://github.com/antonbabenko/terraform-skill)
## Skills from whatiskadudoing/fp-ts-skills (v4.4.0)
| Skill | Original Source | License | Notes |
| :---- | :-------------- | :------ | :---- |
| `fp-ts-pragmatic` | [whatiskadudoing/fp-ts-skills](https://github.com/whatiskadudoing/fp-ts-skills) | Compatible | Pragmatic fp-ts guide pipe, Option, Either, TaskEither |
| `fp-ts-react` | [whatiskadudoing/fp-ts-skills](https://github.com/whatiskadudoing/fp-ts-skills) | Compatible | fp-ts with React 18/19 and Next.js |
| `fp-ts-errors` | [whatiskadudoing/fp-ts-skills](https://github.com/whatiskadudoing/fp-ts-skills) | Compatible | Type-safe error handling with Either and TaskEither |
## License Policy
- **Code**: All original code in this repository is **MIT**.

View File

@@ -73,7 +73,7 @@ Một số skill bao gồm thêm siêu dữ liệu bổ sung:
---
name: my-skill-name
description: "Mô tả ngắn"
risk: "safe" # safe | risk | official
risk: "safe" # none | safe | critical | offensive (xem QUALITY_BAR.md)
source: "community"
tags: ["react", "typescript"]
---

View File

@@ -149,12 +149,39 @@ function readSkill(skillDir, skillId) {
function listSkillIds(skillsDir) {
return fs.readdirSync(skillsDir)
.filter(entry => !entry.startsWith('.') && fs.statSync(path.join(skillsDir, entry)).isDirectory())
.filter(entry => {
if (entry.startsWith('.')) return false;
const dirPath = path.join(skillsDir, entry);
if (!fs.statSync(dirPath).isDirectory()) return false;
const skillPath = path.join(dirPath, 'SKILL.md');
return fs.existsSync(skillPath);
})
.sort();
}
/**
* Recursively list all skill directory paths under skillsDir (relative paths).
* Matches generate_index.py behavior so catalog includes nested skills (e.g. game-development/2d-games).
*/
function listSkillIdsRecursive(skillsDir, baseDir = skillsDir, acc = []) {
const entries = fs.readdirSync(baseDir, { withFileTypes: true });
for (const entry of entries) {
if (entry.name.startsWith('.')) continue;
if (!entry.isDirectory()) continue;
const dirPath = path.join(baseDir, entry.name);
const skillPath = path.join(dirPath, 'SKILL.md');
const relPath = path.relative(skillsDir, dirPath);
if (fs.existsSync(skillPath)) {
acc.push(relPath);
}
listSkillIdsRecursive(skillsDir, dirPath, acc);
}
return acc.sort();
}
module.exports = {
listSkillIds,
listSkillIdsRecursive,
parseFrontmatter,
parseInlineList,
readSkill,

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "antigravity-awesome-skills",
"version": "4.2.0",
"version": "4.8.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "antigravity-awesome-skills",
"version": "4.2.0",
"version": "4.8.0",
"license": "MIT",
"dependencies": {
"yaml": "^2.8.2"

View File

@@ -1,7 +1,7 @@
{
"name": "antigravity-awesome-skills",
"version": "4.4.0",
"description": "624+ agentic skills for Claude Code, Gemini CLI, Cursor, Antigravity & more. Installer CLI.",
"version": "4.8.0",
"description": "626+ agentic skills for Claude Code, Gemini CLI, Cursor, Antigravity & more. Installer CLI.",
"license": "MIT",
"scripts": {
"validate": "python3 scripts/validate_skills.py",
@@ -10,17 +10,18 @@
"readme": "python3 scripts/update_readme.py",
"chain": "npm run validate && npm run index && npm run readme",
"catalog": "node scripts/build-catalog.js",
"build": "npm run chain && npm run catalog"
"build": "npm run chain && npm run catalog",
"test": "node scripts/tests/validate_skills_headings.test.js && python3 scripts/tests/test_validate_skills_headings.py"
},
"dependencies": {
"devDependencies": {
"yaml": "^2.8.2"
},
"repository": {
"type": "git",
"url": "https://github.com/sickn33/antigravity-awesome-skills.git"
"url": "git+https://github.com/sickn33/antigravity-awesome-skills.git"
},
"bin": {
"antigravity-awesome-skills": "./bin/install.js"
"antigravity-awesome-skills": "bin/install.js"
},
"files": [
"bin"

View File

@@ -1,7 +1,7 @@
const fs = require('fs');
const path = require('path');
const {
listSkillIds,
listSkillIdsRecursive,
readSkill,
tokenize,
unique,
@@ -297,8 +297,8 @@ function renderCatalogMarkdown(catalog) {
}
function buildCatalog() {
const skillIds = listSkillIds(SKILLS_DIR);
const skills = skillIds.map(skillId => readSkill(SKILLS_DIR, skillId));
const skillRelPaths = listSkillIdsRecursive(SKILLS_DIR);
const skills = skillRelPaths.map(relPath => readSkill(SKILLS_DIR, relPath));
const catalogSkills = [];
for (const skill of skills) {

View File

@@ -8,6 +8,8 @@ const SKILLS_DIR = path.join(ROOT, 'skills');
const ALLOWED_FIELDS = new Set([
'name',
'description',
'risk',
'source',
'license',
'compatibility',
'metadata',

View File

@@ -21,8 +21,12 @@ python3 scripts/generate_index.py
echo "Running update_readme.py..."
python3 scripts/update_readme.py
# 2. Stats Consistency Check
echo -e "\n${YELLOW}Step 2: verifying Stats Consistency...${NC}"
# 2. Catalog (required for CI)
echo -e "\n${YELLOW}Step 2: Build catalog...${NC}"
npm run catalog
# 3. Stats Consistency Check
echo -e "\n${YELLOW}Step 3: Verifying Stats Consistency...${NC}"
JSON_COUNT=$(python3 -c "import json; print(len(json.load(open('skills_index.json'))))")
echo "Skills in Registry (JSON): $JSON_COUNT"
@@ -36,8 +40,14 @@ if [[ "$README_CONTENT" != *"$JSON_COUNT high-performance"* ]]; then
fi
echo -e "${GREEN}✅ Stats Consistent.${NC}"
# 3. Contributor Check
echo -e "\n${YELLOW}Step 3: Contributor Check${NC}"
# 4. Version check (package.json is source of truth for npm)
echo -e "\n${YELLOW}Step 4: Version check${NC}"
PKG_VERSION=$(node -p "require('./package.json').version")
echo "package.json version: $PKG_VERSION"
echo "Ensure this version is bumped before 'npm publish' (npm forbids republishing the same version)."
# 5. Contributor Check
echo -e "\n${YELLOW}Step 5: Contributor Check${NC}"
echo "Recent commits by author (check against README 'Repo Contributors'):"
git shortlog -sn --since="1 month ago" --all --no-merges | head -n 10
@@ -52,4 +62,5 @@ if [ "$CONFIRM_CONTRIB" != "yes" ]; then
fi
echo -e "\n${GREEN}✅ Release Cycle Checks Passed. You may now commit and push.${NC}"
echo -e "${YELLOW}After tagging a release: run \`npm publish\` from repo root (or use GitHub Release + NPM_TOKEN for CI).${NC}"
exit 0

View File

@@ -0,0 +1,18 @@
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from validate_skills import has_when_to_use_section
SAMPLES = [
("## When to Use", True),
("## Use this skill when", True),
("## When to Use This Skill", True),
("## Overview", False),
]
for heading, expected in SAMPLES:
content = f"\n{heading}\n- item\n"
assert has_when_to_use_section(content) is expected, heading
print("ok")

View File

@@ -0,0 +1,16 @@
const assert = require('assert');
const { hasUseSection } = require('../validate-skills');
const samples = [
['## When to Use', true],
['## Use this skill when', true],
['## When to Use This Skill', true],
['## Overview', false],
];
for (const [heading, expected] of samples) {
const content = `\n${heading}\n- item\n`;
assert.strictEqual(hasUseSection(content), expected, heading);
}
console.log('ok');

View File

@@ -36,7 +36,7 @@ def update_readme():
# 3. Update Intro Text Count
content = re.sub(
r"(library of \*\*)\d+( high-performance skills\*\*)",
r"(library of \*\*)\d+( high-performance agentic skills\*\*)",
rf"\g<1>{total_skills}\g<2>",
content,
)

View File

@@ -32,12 +32,24 @@ const MAX_SKILL_LINES = 500;
const ALLOWED_FIELDS = new Set([
'name',
'description',
'risk',
'source',
'license',
'compatibility',
'metadata',
'allowed-tools',
]);
const USE_SECTION_PATTERNS = [
/^##\s+When\s+to\s+Use/im,
/^##\s+Use\s+this\s+skill\s+when/im,
/^##\s+When\s+to\s+Use\s+This\s+Skill/im,
];
function hasUseSection(content) {
return USE_SECTION_PATTERNS.some(pattern => pattern.test(content));
}
function isPlainObject(value) {
return value && typeof value === 'object' && !Array.isArray(value);
}
@@ -99,172 +111,183 @@ function addStrictSectionErrors(label, missing, baselineSet) {
}
}
const skillIds = listSkillIds(SKILLS_DIR);
const baseline = loadBaseline();
const baselineUse = new Set(baseline.useSection || []);
const baselineDoNotUse = new Set(baseline.doNotUseSection || []);
const baselineInstructions = new Set(baseline.instructionsSection || []);
const baselineLongFile = new Set(baseline.longFile || []);
function run() {
const skillIds = listSkillIds(SKILLS_DIR);
const baseline = loadBaseline();
const baselineUse = new Set(baseline.useSection || []);
const baselineDoNotUse = new Set(baseline.doNotUseSection || []);
const baselineInstructions = new Set(baseline.instructionsSection || []);
const baselineLongFile = new Set(baseline.longFile || []);
for (const skillId of skillIds) {
const skillPath = path.join(SKILLS_DIR, skillId, 'SKILL.md');
for (const skillId of skillIds) {
const skillPath = path.join(SKILLS_DIR, skillId, 'SKILL.md');
if (!fs.existsSync(skillPath)) {
addError(`Missing SKILL.md: ${skillId}`);
continue;
}
const content = fs.readFileSync(skillPath, 'utf8');
const { data, errors: fmErrors, hasFrontmatter } = parseFrontmatter(content);
const lineCount = content.split(/\r?\n/).length;
if (!hasFrontmatter) {
addError(`Missing frontmatter: ${skillId}`);
}
if (fmErrors && fmErrors.length) {
fmErrors.forEach(error => addError(`Frontmatter parse error (${skillId}): ${error}`));
}
if (!NAME_PATTERN.test(skillId)) {
addError(`Folder name must match ${NAME_PATTERN}: ${skillId}`);
}
if (data.name !== undefined) {
const nameError = validateStringField('name', data.name, { min: 1, max: MAX_NAME_LENGTH });
if (nameError) {
addError(`${nameError} (${skillId})`);
} else {
const nameValue = String(data.name).trim();
if (!NAME_PATTERN.test(nameValue)) {
addError(`name must match ${NAME_PATTERN}: ${skillId}`);
}
if (nameValue !== skillId) {
addError(`name must match folder name: ${skillId} -> ${nameValue}`);
}
if (!fs.existsSync(skillPath)) {
addError(`Missing SKILL.md: ${skillId}`);
continue;
}
}
const descError = data.description === undefined
? 'description is required.'
: validateStringField('description', data.description, { min: 1, max: MAX_DESCRIPTION_LENGTH });
if (descError) {
addError(`${descError} (${skillId})`);
}
const content = fs.readFileSync(skillPath, 'utf8');
const { data, errors: fmErrors, hasFrontmatter } = parseFrontmatter(content);
const lineCount = content.split(/\r?\n/).length;
if (data.license !== undefined) {
const licenseError = validateStringField('license', data.license, { min: 1, max: 128 });
if (licenseError) {
addError(`${licenseError} (${skillId})`);
if (!hasFrontmatter) {
addError(`Missing frontmatter: ${skillId}`);
}
}
if (data.compatibility !== undefined) {
const compatibilityError = validateStringField(
'compatibility',
data.compatibility,
{ min: 1, max: MAX_COMPATIBILITY_LENGTH },
);
if (compatibilityError) {
addError(`${compatibilityError} (${skillId})`);
if (fmErrors && fmErrors.length) {
fmErrors.forEach(error => addError(`Frontmatter parse error (${skillId}): ${error}`));
}
}
if (data['allowed-tools'] !== undefined) {
if (typeof data['allowed-tools'] !== 'string') {
addError(`allowed-tools must be a space-delimited string. (${skillId})`);
} else if (!data['allowed-tools'].trim()) {
addError(`allowed-tools cannot be empty. (${skillId})`);
if (!NAME_PATTERN.test(skillId)) {
addError(`Folder name must match ${NAME_PATTERN}: ${skillId}`);
}
}
if (data.metadata !== undefined) {
if (!isPlainObject(data.metadata)) {
addError(`metadata must be a string map/object. (${skillId})`);
} else {
for (const [key, value] of Object.entries(data.metadata)) {
if (typeof value !== 'string') {
addError(`metadata.${key} must be a string. (${skillId})`);
if (data.name !== undefined) {
const nameError = validateStringField('name', data.name, { min: 1, max: MAX_NAME_LENGTH });
if (nameError) {
addError(`${nameError} (${skillId})`);
} else {
const nameValue = String(data.name).trim();
if (!NAME_PATTERN.test(nameValue)) {
addError(`name must match ${NAME_PATTERN}: ${skillId}`);
}
if (nameValue !== skillId) {
addError(`name must match folder name: ${skillId} -> ${nameValue}`);
}
}
}
}
if (data && Object.keys(data).length) {
const unknownFields = Object.keys(data).filter(key => !ALLOWED_FIELDS.has(key));
if (unknownFields.length) {
unknownFieldSkills.push(skillId);
addError(`Unknown frontmatter fields (${skillId}): ${unknownFields.join(', ')}`);
const descError = data.description === undefined
? 'description is required.'
: validateStringField('description', data.description, { min: 1, max: MAX_DESCRIPTION_LENGTH });
if (descError) {
addError(`${descError} (${skillId})`);
}
if (data.license !== undefined) {
const licenseError = validateStringField('license', data.license, { min: 1, max: 128 });
if (licenseError) {
addError(`${licenseError} (${skillId})`);
}
}
if (data.compatibility !== undefined) {
const compatibilityError = validateStringField(
'compatibility',
data.compatibility,
{ min: 1, max: MAX_COMPATIBILITY_LENGTH },
);
if (compatibilityError) {
addError(`${compatibilityError} (${skillId})`);
}
}
if (data['allowed-tools'] !== undefined) {
if (typeof data['allowed-tools'] !== 'string') {
addError(`allowed-tools must be a space-delimited string. (${skillId})`);
} else if (!data['allowed-tools'].trim()) {
addError(`allowed-tools cannot be empty. (${skillId})`);
}
}
if (data.metadata !== undefined) {
if (!isPlainObject(data.metadata)) {
addError(`metadata must be a string map/object. (${skillId})`);
} else {
for (const [key, value] of Object.entries(data.metadata)) {
if (typeof value !== 'string') {
addError(`metadata.${key} must be a string. (${skillId})`);
}
}
}
}
if (data && Object.keys(data).length) {
const unknownFields = Object.keys(data).filter(key => !ALLOWED_FIELDS.has(key));
if (unknownFields.length) {
unknownFieldSkills.push(skillId);
addError(`Unknown frontmatter fields (${skillId}): ${unknownFields.join(', ')}`);
}
}
if (lineCount > MAX_SKILL_LINES) {
longFiles.push(skillId);
}
if (!hasUseSection(content)) {
missingUseSection.push(skillId);
}
if (!content.includes('## Do not use')) {
missingDoNotUseSection.push(skillId);
}
if (!content.includes('## Instructions')) {
missingInstructionsSection.push(skillId);
}
}
if (lineCount > MAX_SKILL_LINES) {
longFiles.push(skillId);
if (missingUseSection.length) {
addWarning(`Missing "Use this skill when" section: ${missingUseSection.length} skills (examples: ${missingUseSection.slice(0, 5).join(', ')})`);
}
if (!content.includes('## Use this skill when')) {
missingUseSection.push(skillId);
if (missingDoNotUseSection.length) {
addWarning(`Missing "Do not use" section: ${missingDoNotUseSection.length} skills (examples: ${missingDoNotUseSection.slice(0, 5).join(', ')})`);
}
if (!content.includes('## Do not use')) {
missingDoNotUseSection.push(skillId);
if (missingInstructionsSection.length) {
addWarning(`Missing "Instructions" section: ${missingInstructionsSection.length} skills (examples: ${missingInstructionsSection.slice(0, 5).join(', ')})`);
}
if (!content.includes('## Instructions')) {
missingInstructionsSection.push(skillId);
if (longFiles.length) {
addWarning(`SKILL.md over ${MAX_SKILL_LINES} lines: ${longFiles.length} skills (examples: ${longFiles.slice(0, 5).join(', ')})`);
}
}
if (missingUseSection.length) {
addWarning(`Missing "Use this skill when" section: ${missingUseSection.length} skills (examples: ${missingUseSection.slice(0, 5).join(', ')})`);
}
if (missingDoNotUseSection.length) {
addWarning(`Missing "Do not use" section: ${missingDoNotUseSection.length} skills (examples: ${missingDoNotUseSection.slice(0, 5).join(', ')})`);
}
if (missingInstructionsSection.length) {
addWarning(`Missing "Instructions" section: ${missingInstructionsSection.length} skills (examples: ${missingInstructionsSection.slice(0, 5).join(', ')})`);
}
if (longFiles.length) {
addWarning(`SKILL.md over ${MAX_SKILL_LINES} lines: ${longFiles.length} skills (examples: ${longFiles.slice(0, 5).join(', ')})`);
}
if (unknownFieldSkills.length) {
addWarning(`Unknown frontmatter fields detected: ${unknownFieldSkills.length} skills (examples: ${unknownFieldSkills.slice(0, 5).join(', ')})`);
}
addStrictSectionErrors('Use this skill when', missingUseSection, baselineUse);
addStrictSectionErrors('Do not use', missingDoNotUseSection, baselineDoNotUse);
addStrictSectionErrors('Instructions', missingInstructionsSection, baselineInstructions);
addStrictSectionErrors(`SKILL.md line count <= ${MAX_SKILL_LINES}`, longFiles, baselineLongFile);
if (writeBaseline) {
const baselineData = {
generatedAt: new Date().toISOString(),
useSection: [...missingUseSection].sort(),
doNotUseSection: [...missingDoNotUseSection].sort(),
instructionsSection: [...missingInstructionsSection].sort(),
longFile: [...longFiles].sort(),
};
fs.writeFileSync(BASELINE_PATH, JSON.stringify(baselineData, null, 2));
console.log(`Baseline written to ${BASELINE_PATH}`);
}
if (warnings.length) {
console.warn('Warnings:');
for (const warning of warnings) {
console.warn(`- ${warning}`);
if (unknownFieldSkills.length) {
addWarning(`Unknown frontmatter fields detected: ${unknownFieldSkills.length} skills (examples: ${unknownFieldSkills.slice(0, 5).join(', ')})`);
}
}
if (errors.length) {
console.error('\nErrors:');
for (const error of errors) {
console.error(`- ${error}`);
addStrictSectionErrors('Use this skill when', missingUseSection, baselineUse);
addStrictSectionErrors('Do not use', missingDoNotUseSection, baselineDoNotUse);
addStrictSectionErrors('Instructions', missingInstructionsSection, baselineInstructions);
addStrictSectionErrors(`SKILL.md line count <= ${MAX_SKILL_LINES}`, longFiles, baselineLongFile);
if (writeBaseline) {
const baselineData = {
generatedAt: new Date().toISOString(),
useSection: [...missingUseSection].sort(),
doNotUseSection: [...missingDoNotUseSection].sort(),
instructionsSection: [...missingInstructionsSection].sort(),
longFile: [...longFiles].sort(),
};
fs.writeFileSync(BASELINE_PATH, JSON.stringify(baselineData, null, 2));
console.log(`Baseline written to ${BASELINE_PATH}`);
}
process.exit(1);
if (warnings.length) {
console.warn('Warnings:');
for (const warning of warnings) {
console.warn(`- ${warning}`);
}
}
if (errors.length) {
console.error('\nErrors:');
for (const error of errors) {
console.error(`- ${error}`);
}
process.exit(1);
}
console.log(`Validation passed for ${skillIds.length} skills.`);
}
console.log(`Validation passed for ${skillIds.length} skills.`);
if (require.main === module) {
run();
}
module.exports = {
hasUseSection,
run,
};

View File

@@ -3,6 +3,15 @@ import re
import argparse
import sys
WHEN_TO_USE_PATTERNS = [
re.compile(r"^##\s+When\s+to\s+Use", re.MULTILINE | re.IGNORECASE),
re.compile(r"^##\s+Use\s+this\s+skill\s+when", re.MULTILINE | re.IGNORECASE),
re.compile(r"^##\s+When\s+to\s+Use\s+This\s+Skill", re.MULTILINE | re.IGNORECASE),
]
def has_when_to_use_section(content):
return any(pattern.search(content) for pattern in WHEN_TO_USE_PATTERNS)
def parse_frontmatter(content):
"""
Simple frontmatter parser using regex to avoid external dependencies.
@@ -30,7 +39,6 @@ def validate_skills(skills_dir, strict_mode=False):
# Pre-compiled regex
security_disclaimer_pattern = re.compile(r"AUTHORIZED USE ONLY", re.IGNORECASE)
trigger_section_pattern = re.compile(r"^##\s+When to Use", re.MULTILINE | re.IGNORECASE)
valid_risk_levels = ["none", "safe", "critical", "offensive"]
@@ -80,7 +88,7 @@ def validate_skills(skills_dir, strict_mode=False):
else: warnings.append(msg)
# 3. Content Checks (Triggers)
if not trigger_section_pattern.search(content):
if not has_when_to_use_section(content):
msg = f"⚠️ {rel_path}: Missing '## When to Use' section"
if strict_mode: errors.append(msg.replace("⚠️", ""))
else: warnings.append(msg)

22
skills/SPDD/1-research.md Normal file
View File

@@ -0,0 +1,22 @@
# ROLE: Codebase Research Agent
Sua única missão é documentar e explicar a base de código como ela existe hoje.
## CRITICAL RULES:
- NÃO sugira melhorias, refatorações ou mudanças arquiteturais.
- NÃO realize análise de causa raiz ou proponha melhorias futuras.
- APENAS descreva o que existe, onde existe e como os componentes interagem.
- Você é um cartógrafo técnico criando um mapa do sistema atual.
## STEPS TO FOLLOW:
1. **Initial Analysis:** Leia os arquivos mencionados pelo usuário integralmente (SEM limit/offset).
2. **Decomposition:** Decompunha a dúvida do usuário em áreas de pesquisa (ex: Rotas, Banco, UI).
3. **Execution:** - Localize onde os arquivos e componentes vivem.
- Analise COMO o código atual funciona (sem criticar).
- Encontre exemplos de padrões existentes para referência.
4. **Project State:**
- Se projeto NOVO: Pesquise e liste a melhor estrutura de pastas e bibliotecas padrão de mercado para a stack.
- Se projeto EXISTENTE: Identifique dívidas técnicas ou padrões que devem ser respeitados.
## OUTPUT:
- Gere o arquivo `docs/prds/prd_current_task.md` com YAML frontmatter (date, topic, tags, status).
- **Ação Obrigatória:** Termine com: "Pesquisa concluída. Por favor, dê um `/clear` e carregue `.agente/2-spec.md` para o planejamento."

20
skills/SPDD/2-spec.md Normal file
View File

@@ -0,0 +1,20 @@
# ROLE: Implementation Planning Agent
Você deve criar planos de implementação detalhados e ser cético quanto a requisitos vagos.
## CRITICAL RULES:
- Não escreva o plano de uma vez; valide a estrutura das fases com o usuário.
- Cada decisão técnica deve ser tomada antes de finalizar o plano.
- O plano deve ser acionável e completo, sem "perguntas abertas".
## STEPS TO FOLLOW:
1. **Context Check:** Leia o `docs/prds/prd_current_task.md` gerado anteriormente.
2. **Phasing:** Divida o trabalho em fases incrementais e testáveis.
3. **Detailing:** Para cada arquivo afetado, defina:
- **Path exato.**
- **Ação:** (CRIAR | MODIFICAR | DELETAR).
- **Lógica:** Snippets de pseudocódigo ou referências de implementação.
4. **Success Criteria:** Defina "Automated Verification" (scripts/testes) e "Manual Verification" (UI/UX).
## OUTPUT:
- Gere o arquivo `docs/specs/spec_current_task.md` seguindo o template de fases.
- **Ação Obrigatória:** Termine com: "Spec finalizada. Por favor, dê um `/clear` e carregue `.agente/3-implementation.md` para execução."

View File

@@ -0,0 +1,20 @@
# ROLE: Implementation Execution Agent
Você deve implementar um plano técnico aprovado com precisão cirúrgica.
## CRITICAL RULES:
- Siga a intenção do plano enquanto se adapta à realidade encontrada.
- Implemente uma fase COMPLETAMENTE antes de passar para a próxima.
- **STOP & THINK:** Se encontrar um erro na Spec ou um mismatch no código, PARE e reporte. Não tente adivinhar.
## STEPS TO FOLLOW:
1. **Sanity Check:** Leia a Spec e o Ticket original. Verifique se o ambiente está limpo.
2. **Execution:** Codifique seguindo os padrões de Clean Code e os snippets da Spec.
3. **Verification:**
- Após cada fase, execute os comandos de "Automated Verification" descritos na Spec.
- PAUSE para confirmação manual do usuário após cada fase concluída.
4. **Progress:** Atualize os checkboxes (- [x]) no arquivo de Spec conforme avança.
## OUTPUT:
- Código fonte implementado.
- Relatório de conclusão de fase com resultados de testes.
- **Ação Final:** Pergunte se o usuário deseja realizar testes de regressão ou seguir para a próxima task.

View File

@@ -0,0 +1,559 @@
---
name: angular-best-practices
description: Angular performance optimization and best practices guide. Use when writing, reviewing, or refactoring Angular code for optimal performance, bundle size, and rendering efficiency.
risk: safe
source: self
---
# Angular Best Practices
Comprehensive performance optimization guide for Angular applications. Contains prioritized rules for eliminating performance bottlenecks, optimizing bundles, and improving rendering.
## When to Apply
Reference these guidelines when:
- Writing new Angular components or pages
- Implementing data fetching patterns
- Reviewing code for performance issues
- Refactoring existing Angular code
- Optimizing bundle size or load times
- Configuring SSR/hydration
---
## Rule Categories by Priority
| Priority | Category | Impact | Focus |
| -------- | --------------------- | ---------- | ------------------------------- |
| 1 | Change Detection | CRITICAL | Signals, OnPush, Zoneless |
| 2 | Async Waterfalls | CRITICAL | RxJS patterns, SSR preloading |
| 3 | Bundle Optimization | CRITICAL | Lazy loading, tree shaking |
| 4 | Rendering Performance | HIGH | @defer, trackBy, virtualization |
| 5 | Server-Side Rendering | HIGH | Hydration, prerendering |
| 6 | Template Optimization | MEDIUM | Control flow, pipes |
| 7 | State Management | MEDIUM | Signal patterns, selectors |
| 8 | Memory Management | LOW-MEDIUM | Cleanup, subscriptions |
---
## 1. Change Detection (CRITICAL)
### Use OnPush Change Detection
```typescript
// CORRECT - OnPush with Signals
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
template: `<div>{{ count() }}</div>`,
})
export class CounterComponent {
count = signal(0);
}
// WRONG - Default change detection
@Component({
template: `<div>{{ count }}</div>`, // Checked every cycle
})
export class CounterComponent {
count = 0;
}
```
### Prefer Signals Over Mutable Properties
```typescript
// CORRECT - Signals trigger precise updates
@Component({
template: `
<h1>{{ title() }}</h1>
<p>Count: {{ count() }}</p>
`,
})
export class DashboardComponent {
title = signal("Dashboard");
count = signal(0);
}
// WRONG - Mutable properties require zone.js checks
@Component({
template: `
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
`,
})
export class DashboardComponent {
title = "Dashboard";
count = 0;
}
```
### Enable Zoneless for New Projects
```typescript
// main.ts - Zoneless Angular (v20+)
bootstrapApplication(AppComponent, {
providers: [provideZonelessChangeDetection()],
});
```
**Benefits:**
- No zone.js patches on async APIs
- Smaller bundle (~15KB savings)
- Clean stack traces for debugging
- Better micro-frontend compatibility
---
## 2. Async Operations & Waterfalls (CRITICAL)
### Eliminate Sequential Data Fetching
```typescript
// WRONG - Nested subscriptions create waterfalls
this.route.params.subscribe((params) => {
// 1. Wait for params
this.userService.getUser(params.id).subscribe((user) => {
// 2. Wait for user
this.postsService.getPosts(user.id).subscribe((posts) => {
// 3. Wait for posts
});
});
});
// CORRECT - Parallel execution with forkJoin
forkJoin({
user: this.userService.getUser(id),
posts: this.postsService.getPosts(id),
}).subscribe((data) => {
// Fetched in parallel
});
// CORRECT - Flatten dependent calls with switchMap
this.route.params
.pipe(
map((p) => p.id),
switchMap((id) => this.userService.getUser(id)),
)
.subscribe();
```
### Avoid Client-Side Waterfalls in SSR
```typescript
// CORRECT - Use resolvers or blocking hydration for critical data
export const route: Route = {
path: "profile/:id",
resolve: { data: profileResolver }, // Fetched on server before navigation
component: ProfileComponent,
};
// WRONG - Component fetches data on init
class ProfileComponent implements OnInit {
ngOnInit() {
// Starts ONLY after JS loads and component renders
this.http.get("/api/profile").subscribe();
}
}
```
---
## 3. Bundle Optimization (CRITICAL)
### Lazy Load Routes
```typescript
// CORRECT - Lazy load feature routes
export const routes: Routes = [
{
path: "admin",
loadChildren: () =>
import("./admin/admin.routes").then((m) => m.ADMIN_ROUTES),
},
{
path: "dashboard",
loadComponent: () =>
import("./dashboard/dashboard.component").then(
(m) => m.DashboardComponent,
),
},
];
// WRONG - Eager loading everything
import { AdminModule } from "./admin/admin.module";
export const routes: Routes = [
{ path: "admin", component: AdminComponent }, // In main bundle
];
```
### Use @defer for Heavy Components
```html
<!-- CORRECT - Heavy component loads on demand -->
@defer (on viewport) {
<app-analytics-chart [data]="data()" />
} @placeholder {
<div class="chart-skeleton"></div>
}
<!-- WRONG - Heavy component in initial bundle -->
<app-analytics-chart [data]="data()" />
```
### Avoid Barrel File Re-exports
```typescript
// WRONG - Imports entire barrel, breaks tree-shaking
import { Button, Modal, Table } from "@shared/components";
// CORRECT - Direct imports
import { Button } from "@shared/components/button/button.component";
import { Modal } from "@shared/components/modal/modal.component";
```
### Dynamic Import Third-Party Libraries
```typescript
// CORRECT - Load heavy library on demand
async loadChart() {
const { Chart } = await import('chart.js');
this.chart = new Chart(this.canvas, config);
}
// WRONG - Bundle Chart.js in main chunk
import { Chart } from 'chart.js';
```
---
## 4. Rendering Performance (HIGH)
### Always Use trackBy with @for
```html
<!-- CORRECT - Efficient DOM updates -->
@for (item of items(); track item.id) {
<app-item-card [item]="item" />
}
<!-- WRONG - Entire list re-renders on any change -->
@for (item of items(); track $index) {
<app-item-card [item]="item" />
}
```
### Use Virtual Scrolling for Large Lists
```typescript
import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll } from '@angular/cdk/scrolling';
@Component({
imports: [CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll],
template: `
<cdk-virtual-scroll-viewport itemSize="50" class="viewport">
<div *cdkVirtualFor="let item of items" class="item">
{{ item.name }}
</div>
</cdk-virtual-scroll-viewport>
`
})
```
### Prefer Pure Pipes Over Methods
```typescript
// CORRECT - Pure pipe, memoized
@Pipe({ name: 'filterActive', standalone: true, pure: true })
export class FilterActivePipe implements PipeTransform {
transform(items: Item[]): Item[] {
return items.filter(i => i.active);
}
}
// Template
@for (item of items() | filterActive; track item.id) { ... }
// WRONG - Method called every change detection
@for (item of getActiveItems(); track item.id) { ... }
```
### Use computed() for Derived Data
```typescript
// CORRECT - Computed, cached until dependencies change
export class ProductStore {
products = signal<Product[]>([]);
filter = signal('');
filteredProducts = computed(() => {
const f = this.filter().toLowerCase();
return this.products().filter(p =>
p.name.toLowerCase().includes(f)
);
});
}
// WRONG - Recalculates every access
get filteredProducts() {
return this.products.filter(p =>
p.name.toLowerCase().includes(this.filter)
);
}
```
---
## 5. Server-Side Rendering (HIGH)
### Configure Incremental Hydration
```typescript
// app.config.ts
import {
provideClientHydration,
withIncrementalHydration,
} from "@angular/platform-browser";
export const appConfig: ApplicationConfig = {
providers: [
provideClientHydration(withIncrementalHydration(), withEventReplay()),
],
};
```
### Defer Non-Critical Content
```html
<!-- Critical above-the-fold content -->
<app-header />
<app-hero />
<!-- Below-fold deferred with hydration triggers -->
@defer (hydrate on viewport) {
<app-product-grid />
} @defer (hydrate on interaction) {
<app-chat-widget />
}
```
### Use TransferState for SSR Data
```typescript
@Injectable({ providedIn: "root" })
export class DataService {
private http = inject(HttpClient);
private transferState = inject(TransferState);
private platformId = inject(PLATFORM_ID);
getData(key: string): Observable<Data> {
const stateKey = makeStateKey<Data>(key);
if (isPlatformBrowser(this.platformId)) {
const cached = this.transferState.get(stateKey, null);
if (cached) {
this.transferState.remove(stateKey);
return of(cached);
}
}
return this.http.get<Data>(`/api/${key}`).pipe(
tap((data) => {
if (isPlatformServer(this.platformId)) {
this.transferState.set(stateKey, data);
}
}),
);
}
}
```
---
## 6. Template Optimization (MEDIUM)
### Use New Control Flow Syntax
```html
<!-- CORRECT - New control flow (faster, smaller bundle) -->
@if (user()) {
<span>{{ user()!.name }}</span>
} @else {
<span>Guest</span>
} @for (item of items(); track item.id) {
<app-item [item]="item" />
} @empty {
<p>No items</p>
}
<!-- WRONG - Legacy structural directives -->
<span *ngIf="user; else guest">{{ user.name }}</span>
<ng-template #guest><span>Guest</span></ng-template>
```
### Avoid Complex Template Expressions
```typescript
// CORRECT - Precompute in component
class Component {
items = signal<Item[]>([]);
sortedItems = computed(() =>
[...this.items()].sort((a, b) => a.name.localeCompare(b.name))
);
}
// Template
@for (item of sortedItems(); track item.id) { ... }
// WRONG - Sorting in template every render
@for (item of items() | sort:'name'; track item.id) { ... }
```
---
## 7. State Management (MEDIUM)
### Use Selectors to Prevent Re-renders
```typescript
// CORRECT - Selective subscription
@Component({
template: `<span>{{ userName() }}</span>`,
})
class HeaderComponent {
private store = inject(Store);
// Only re-renders when userName changes
userName = this.store.selectSignal(selectUserName);
}
// WRONG - Subscribing to entire state
@Component({
template: `<span>{{ state().user.name }}</span>`,
})
class HeaderComponent {
private store = inject(Store);
// Re-renders on ANY state change
state = toSignal(this.store);
}
```
### Colocate State with Features
```typescript
// CORRECT - Feature-scoped store
@Injectable() // NOT providedIn: 'root'
export class ProductStore { ... }
@Component({
providers: [ProductStore], // Scoped to component tree
})
export class ProductPageComponent {
store = inject(ProductStore);
}
// WRONG - Everything in global store
@Injectable({ providedIn: 'root' })
export class GlobalStore {
// Contains ALL app state - hard to tree-shake
}
```
---
## 8. Memory Management (LOW-MEDIUM)
### Use takeUntilDestroyed for Subscriptions
```typescript
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({...})
export class DataComponent {
private destroyRef = inject(DestroyRef);
constructor() {
this.data$.pipe(
takeUntilDestroyed(this.destroyRef)
).subscribe(data => this.process(data));
}
}
// WRONG - Manual subscription management
export class DataComponent implements OnDestroy {
private subscription!: Subscription;
ngOnInit() {
this.subscription = this.data$.subscribe(...);
}
ngOnDestroy() {
this.subscription.unsubscribe(); // Easy to forget
}
}
```
### Prefer Signals Over Subscriptions
```typescript
// CORRECT - No subscription needed
@Component({
template: `<div>{{ data().name }}</div>`,
})
export class Component {
data = toSignal(this.service.data$, { initialValue: null });
}
// WRONG - Manual subscription
@Component({
template: `<div>{{ data?.name }}</div>`,
})
export class Component implements OnInit, OnDestroy {
data: Data | null = null;
private sub!: Subscription;
ngOnInit() {
this.sub = this.service.data$.subscribe((d) => (this.data = d));
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
```
---
## Quick Reference Checklist
### New Component
- [ ] `changeDetection: ChangeDetectionStrategy.OnPush`
- [ ] `standalone: true`
- [ ] Signals for state (`signal()`, `input()`, `output()`)
- [ ] `inject()` for dependencies
- [ ] `@for` with `track` expression
### Performance Review
- [ ] No methods in templates (use pipes or computed)
- [ ] Large lists virtualized
- [ ] Heavy components deferred
- [ ] Routes lazy-loaded
- [ ] Third-party libs dynamically imported
### SSR Check
- [ ] Hydration configured
- [ ] Critical content renders first
- [ ] Non-critical content uses `@defer (hydrate on ...)`
- [ ] TransferState for server-fetched data
---
## Resources
- [Angular Performance Guide](https://angular.dev/best-practices/performance)
- [Zoneless Angular](https://angular.dev/guide/experimental/zoneless)
- [Angular SSR Guide](https://angular.dev/guide/ssr)
- [Change Detection Deep Dive](https://angular.dev/guide/change-detection)

View File

@@ -0,0 +1,634 @@
---
name: angular-state-management
description: Master modern Angular state management with Signals, NgRx, and RxJS. Use when setting up global state, managing component stores, choosing between state solutions, or migrating from legacy patterns.
risk: safe
source: self
---
# Angular State Management
Comprehensive guide to modern Angular state management patterns, from Signal-based local state to global stores and server state synchronization.
## When to Use This Skill
- Setting up global state management in Angular
- Choosing between Signals, NgRx, or Akita
- Managing component-level stores
- Implementing optimistic updates
- Debugging state-related issues
- Migrating from legacy state patterns
## Do Not Use This Skill When
- The task is unrelated to Angular state management
- You need React state management → use `react-state-management`
---
## Core Concepts
### State Categories
| Type | Description | Solutions |
| ---------------- | ---------------------------- | --------------------- |
| **Local State** | Component-specific, UI state | Signals, `signal()` |
| **Shared State** | Between related components | Signal services |
| **Global State** | App-wide, complex | NgRx, Akita, Elf |
| **Server State** | Remote data, caching | NgRx Query, RxAngular |
| **URL State** | Route parameters | ActivatedRoute |
| **Form State** | Input values, validation | Reactive Forms |
### Selection Criteria
```
Small app, simple state → Signal Services
Medium app, moderate state → Component Stores
Large app, complex state → NgRx Store
Heavy server interaction → NgRx Query + Signal Services
Real-time updates → RxAngular + Signals
```
---
## Quick Start: Signal-Based State
### Pattern 1: Simple Signal Service
```typescript
// services/counter.service.ts
import { Injectable, signal, computed } from "@angular/core";
@Injectable({ providedIn: "root" })
export class CounterService {
// Private writable signals
private _count = signal(0);
// Public read-only
readonly count = this._count.asReadonly();
readonly doubled = computed(() => this._count() * 2);
readonly isPositive = computed(() => this._count() > 0);
increment() {
this._count.update((v) => v + 1);
}
decrement() {
this._count.update((v) => v - 1);
}
reset() {
this._count.set(0);
}
}
// Usage in component
@Component({
template: `
<p>Count: {{ counter.count() }}</p>
<p>Doubled: {{ counter.doubled() }}</p>
<button (click)="counter.increment()">+</button>
`,
})
export class CounterComponent {
counter = inject(CounterService);
}
```
### Pattern 2: Feature Signal Store
```typescript
// stores/user.store.ts
import { Injectable, signal, computed, inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { toSignal } from "@angular/core/rxjs-interop";
interface User {
id: string;
name: string;
email: string;
}
interface UserState {
user: User | null;
loading: boolean;
error: string | null;
}
@Injectable({ providedIn: "root" })
export class UserStore {
private http = inject(HttpClient);
// State signals
private _user = signal<User | null>(null);
private _loading = signal(false);
private _error = signal<string | null>(null);
// Selectors (read-only computed)
readonly user = computed(() => this._user());
readonly loading = computed(() => this._loading());
readonly error = computed(() => this._error());
readonly isAuthenticated = computed(() => this._user() !== null);
readonly displayName = computed(() => this._user()?.name ?? "Guest");
// Actions
async loadUser(id: string) {
this._loading.set(true);
this._error.set(null);
try {
const user = await fetch(`/api/users/${id}`).then((r) => r.json());
this._user.set(user);
} catch (e) {
this._error.set("Failed to load user");
} finally {
this._loading.set(false);
}
}
updateUser(updates: Partial<User>) {
this._user.update((user) => (user ? { ...user, ...updates } : null));
}
logout() {
this._user.set(null);
this._error.set(null);
}
}
```
### Pattern 3: SignalStore (NgRx Signals)
```typescript
// stores/products.store.ts
import {
signalStore,
withState,
withMethods,
withComputed,
patchState,
} from "@ngrx/signals";
import { inject } from "@angular/core";
import { ProductService } from "./product.service";
interface ProductState {
products: Product[];
loading: boolean;
filter: string;
}
const initialState: ProductState = {
products: [],
loading: false,
filter: "",
};
export const ProductStore = signalStore(
{ providedIn: "root" },
withState(initialState),
withComputed((store) => ({
filteredProducts: computed(() => {
const filter = store.filter().toLowerCase();
return store
.products()
.filter((p) => p.name.toLowerCase().includes(filter));
}),
totalCount: computed(() => store.products().length),
})),
withMethods((store, productService = inject(ProductService)) => ({
async loadProducts() {
patchState(store, { loading: true });
try {
const products = await productService.getAll();
patchState(store, { products, loading: false });
} catch {
patchState(store, { loading: false });
}
},
setFilter(filter: string) {
patchState(store, { filter });
},
addProduct(product: Product) {
patchState(store, ({ products }) => ({
products: [...products, product],
}));
},
})),
);
// Usage
@Component({
template: `
<input (input)="store.setFilter($event.target.value)" />
@if (store.loading()) {
<app-spinner />
} @else {
@for (product of store.filteredProducts(); track product.id) {
<app-product-card [product]="product" />
}
}
`,
})
export class ProductListComponent {
store = inject(ProductStore);
ngOnInit() {
this.store.loadProducts();
}
}
```
---
## NgRx Store (Global State)
### Setup
```typescript
// store/app.state.ts
import { ActionReducerMap } from "@ngrx/store";
export interface AppState {
user: UserState;
cart: CartState;
}
export const reducers: ActionReducerMap<AppState> = {
user: userReducer,
cart: cartReducer,
};
// main.ts
bootstrapApplication(AppComponent, {
providers: [
provideStore(reducers),
provideEffects([UserEffects, CartEffects]),
provideStoreDevtools({ maxAge: 25 }),
],
});
```
### Feature Slice Pattern
```typescript
// store/user/user.actions.ts
import { createActionGroup, props, emptyProps } from "@ngrx/store";
export const UserActions = createActionGroup({
source: "User",
events: {
"Load User": props<{ userId: string }>(),
"Load User Success": props<{ user: User }>(),
"Load User Failure": props<{ error: string }>(),
"Update User": props<{ updates: Partial<User> }>(),
Logout: emptyProps(),
},
});
```
```typescript
// store/user/user.reducer.ts
import { createReducer, on } from "@ngrx/store";
import { UserActions } from "./user.actions";
export interface UserState {
user: User | null;
loading: boolean;
error: string | null;
}
const initialState: UserState = {
user: null,
loading: false,
error: null,
};
export const userReducer = createReducer(
initialState,
on(UserActions.loadUser, (state) => ({
...state,
loading: true,
error: null,
})),
on(UserActions.loadUserSuccess, (state, { user }) => ({
...state,
user,
loading: false,
})),
on(UserActions.loadUserFailure, (state, { error }) => ({
...state,
loading: false,
error,
})),
on(UserActions.logout, () => initialState),
);
```
```typescript
// store/user/user.selectors.ts
import { createFeatureSelector, createSelector } from "@ngrx/store";
import { UserState } from "./user.reducer";
export const selectUserState = createFeatureSelector<UserState>("user");
export const selectUser = createSelector(
selectUserState,
(state) => state.user,
);
export const selectUserLoading = createSelector(
selectUserState,
(state) => state.loading,
);
export const selectIsAuthenticated = createSelector(
selectUser,
(user) => user !== null,
);
```
```typescript
// store/user/user.effects.ts
import { Injectable, inject } from "@angular/core";
import { Actions, createEffect, ofType } from "@ngrx/effects";
import { switchMap, map, catchError, of } from "rxjs";
@Injectable()
export class UserEffects {
private actions$ = inject(Actions);
private userService = inject(UserService);
loadUser$ = createEffect(() =>
this.actions$.pipe(
ofType(UserActions.loadUser),
switchMap(({ userId }) =>
this.userService.getUser(userId).pipe(
map((user) => UserActions.loadUserSuccess({ user })),
catchError((error) =>
of(UserActions.loadUserFailure({ error: error.message })),
),
),
),
),
);
}
```
### Component Usage
```typescript
@Component({
template: `
@if (loading()) {
<app-spinner />
} @else if (user(); as user) {
<h1>Welcome, {{ user.name }}</h1>
<button (click)="logout()">Logout</button>
}
`,
})
export class HeaderComponent {
private store = inject(Store);
user = this.store.selectSignal(selectUser);
loading = this.store.selectSignal(selectUserLoading);
logout() {
this.store.dispatch(UserActions.logout());
}
}
```
---
## RxJS-Based Patterns
### Component Store (Local Feature State)
```typescript
// stores/todo.store.ts
import { Injectable } from "@angular/core";
import { ComponentStore } from "@ngrx/component-store";
import { switchMap, tap, catchError, EMPTY } from "rxjs";
interface TodoState {
todos: Todo[];
loading: boolean;
}
@Injectable()
export class TodoStore extends ComponentStore<TodoState> {
constructor(private todoService: TodoService) {
super({ todos: [], loading: false });
}
// Selectors
readonly todos$ = this.select((state) => state.todos);
readonly loading$ = this.select((state) => state.loading);
readonly completedCount$ = this.select(
this.todos$,
(todos) => todos.filter((t) => t.completed).length,
);
// Updaters
readonly addTodo = this.updater((state, todo: Todo) => ({
...state,
todos: [...state.todos, todo],
}));
readonly toggleTodo = this.updater((state, id: string) => ({
...state,
todos: state.todos.map((t) =>
t.id === id ? { ...t, completed: !t.completed } : t,
),
}));
// Effects
readonly loadTodos = this.effect<void>((trigger$) =>
trigger$.pipe(
tap(() => this.patchState({ loading: true })),
switchMap(() =>
this.todoService.getAll().pipe(
tap({
next: (todos) => this.patchState({ todos, loading: false }),
error: () => this.patchState({ loading: false }),
}),
catchError(() => EMPTY),
),
),
),
);
}
```
---
## Server State with Signals
### HTTP + Signals Pattern
```typescript
// services/api.service.ts
import { Injectable, signal, inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { toSignal } from "@angular/core/rxjs-interop";
interface ApiState<T> {
data: T | null;
loading: boolean;
error: string | null;
}
@Injectable({ providedIn: "root" })
export class ProductApiService {
private http = inject(HttpClient);
private _state = signal<ApiState<Product[]>>({
data: null,
loading: false,
error: null,
});
readonly products = computed(() => this._state().data ?? []);
readonly loading = computed(() => this._state().loading);
readonly error = computed(() => this._state().error);
async fetchProducts(): Promise<void> {
this._state.update((s) => ({ ...s, loading: true, error: null }));
try {
const data = await firstValueFrom(
this.http.get<Product[]>("/api/products"),
);
this._state.update((s) => ({ ...s, data, loading: false }));
} catch (e) {
this._state.update((s) => ({
...s,
loading: false,
error: "Failed to fetch products",
}));
}
}
// Optimistic update
async deleteProduct(id: string): Promise<void> {
const previousData = this._state().data;
// Optimistically remove
this._state.update((s) => ({
...s,
data: s.data?.filter((p) => p.id !== id) ?? null,
}));
try {
await firstValueFrom(this.http.delete(`/api/products/${id}`));
} catch {
// Rollback on error
this._state.update((s) => ({ ...s, data: previousData }));
}
}
}
```
---
## Best Practices
### Do's
| Practice | Why |
| ---------------------------------- | ---------------------------------- |
| Use Signals for local state | Simple, reactive, no subscriptions |
| Use `computed()` for derived data | Auto-updates, memoized |
| Colocate state with feature | Easier to maintain |
| Use NgRx for complex flows | Actions, effects, devtools |
| Prefer `inject()` over constructor | Cleaner, works in factories |
### Don'ts
| Anti-Pattern | Instead |
| --------------------------------- | ----------------------------------------------------- |
| Store derived data | Use `computed()` |
| Mutate signals directly | Use `set()` or `update()` |
| Over-globalize state | Keep local when possible |
| Mix RxJS and Signals chaotically | Choose primary, bridge with `toSignal`/`toObservable` |
| Subscribe in components for state | Use template with signals |
---
## Migration Path
### From BehaviorSubject to Signals
```typescript
// Before: RxJS-based
@Injectable({ providedIn: "root" })
export class OldUserService {
private userSubject = new BehaviorSubject<User | null>(null);
user$ = this.userSubject.asObservable();
setUser(user: User) {
this.userSubject.next(user);
}
}
// After: Signal-based
@Injectable({ providedIn: "root" })
export class UserService {
private _user = signal<User | null>(null);
readonly user = this._user.asReadonly();
setUser(user: User) {
this._user.set(user);
}
}
```
### Bridging Signals and RxJS
```typescript
import { toSignal, toObservable } from '@angular/core/rxjs-interop';
// Observable → Signal
@Component({...})
export class ExampleComponent {
private route = inject(ActivatedRoute);
// Convert Observable to Signal
userId = toSignal(
this.route.params.pipe(map(p => p['id'])),
{ initialValue: '' }
);
}
// Signal → Observable
export class DataService {
private filter = signal('');
// Convert Signal to Observable
filter$ = toObservable(this.filter);
filteredData$ = this.filter$.pipe(
debounceTime(300),
switchMap(filter => this.http.get(`/api/data?q=${filter}`))
);
}
```
---
## Resources
- [Angular Signals Guide](https://angular.dev/guide/signals)
- [NgRx Documentation](https://ngrx.io/)
- [NgRx SignalStore](https://ngrx.io/guide/signals)
- [RxAngular](https://www.rx-angular.io/)

View File

@@ -0,0 +1,508 @@
---
name: angular-ui-patterns
description: Modern Angular UI patterns for loading states, error handling, and data display. Use when building UI components, handling async data, or managing component states.
risk: safe
source: self
---
# Angular UI Patterns
## Core Principles
1. **Never show stale UI** - Loading states only when actually loading
2. **Always surface errors** - Users must know when something fails
3. **Optimistic updates** - Make the UI feel instant
4. **Progressive disclosure** - Use `@defer` to show content as available
5. **Graceful degradation** - Partial data is better than no data
---
## Loading State Patterns
### The Golden Rule
**Show loading indicator ONLY when there's no data to display.**
```typescript
@Component({
template: `
@if (error()) {
<app-error-state [error]="error()" (retry)="load()" />
} @else if (loading() && !items().length) {
<app-skeleton-list />
} @else if (!items().length) {
<app-empty-state message="No items found" />
} @else {
<app-item-list [items]="items()" />
}
`,
})
export class ItemListComponent {
private store = inject(ItemStore);
items = this.store.items;
loading = this.store.loading;
error = this.store.error;
}
```
### Loading State Decision Tree
```
Is there an error?
→ Yes: Show error state with retry option
→ No: Continue
Is it loading AND we have no data?
→ Yes: Show loading indicator (spinner/skeleton)
→ No: Continue
Do we have data?
→ Yes, with items: Show the data
→ Yes, but empty: Show empty state
→ No: Show loading (fallback)
```
### Skeleton vs Spinner
| Use Skeleton When | Use Spinner When |
| -------------------- | --------------------- |
| Known content shape | Unknown content shape |
| List/card layouts | Modal actions |
| Initial page load | Button submissions |
| Content placeholders | Inline operations |
---
## Control Flow Patterns
### @if/@else for Conditional Rendering
```html
@if (user(); as user) {
<span>Welcome, {{ user.name }}</span>
} @else if (loading()) {
<app-spinner size="small" />
} @else {
<a routerLink="/login">Sign In</a>
}
```
### @for with Track
```html
@for (item of items(); track item.id) {
<app-item-card [item]="item" (delete)="remove(item.id)" />
} @empty {
<app-empty-state
icon="inbox"
message="No items yet"
actionLabel="Create Item"
(action)="create()"
/>
}
```
### @defer for Progressive Loading
```html
<!-- Critical content loads immediately -->
<app-header />
<app-hero-section />
<!-- Non-critical content deferred -->
@defer (on viewport) {
<app-comments [postId]="postId()" />
} @placeholder {
<div class="h-32 bg-gray-100 animate-pulse"></div>
} @loading (minimum 200ms) {
<app-spinner />
} @error {
<app-error-state message="Failed to load comments" />
}
```
---
## Error Handling Patterns
### Error Handling Hierarchy
```
1. Inline error (field-level) → Form validation errors
2. Toast notification → Recoverable errors, user can retry
3. Error banner → Page-level errors, data still partially usable
4. Full error screen → Unrecoverable, needs user action
```
### Always Show Errors
**CRITICAL: Never swallow errors silently.**
```typescript
// CORRECT - Error always surfaced to user
@Component({...})
export class CreateItemComponent {
private store = inject(ItemStore);
private toast = inject(ToastService);
async create(data: CreateItemDto) {
try {
await this.store.create(data);
this.toast.success('Item created successfully');
this.router.navigate(['/items']);
} catch (error) {
console.error('createItem failed:', error);
this.toast.error('Failed to create item. Please try again.');
}
}
}
// WRONG - Error silently caught
async create(data: CreateItemDto) {
try {
await this.store.create(data);
} catch (error) {
console.error(error); // User sees nothing!
}
}
```
### Error State Component Pattern
```typescript
@Component({
selector: "app-error-state",
standalone: true,
imports: [NgOptimizedImage],
template: `
<div class="error-state">
<img ngSrc="/assets/error-icon.svg" width="64" height="64" alt="" />
<h3>{{ title() }}</h3>
<p>{{ message() }}</p>
@if (retry.observed) {
<button (click)="retry.emit()" class="btn-primary">Try Again</button>
}
</div>
`,
})
export class ErrorStateComponent {
title = input("Something went wrong");
message = input("An unexpected error occurred");
retry = output<void>();
}
```
---
## Button State Patterns
### Button Loading State
```html
<button
(click)="handleSubmit()"
[disabled]="isSubmitting() || !form.valid"
class="btn-primary"
>
@if (isSubmitting()) {
<app-spinner size="small" class="mr-2" />
Saving... } @else { Save Changes }
</button>
```
### Disable During Operations
**CRITICAL: Always disable triggers during async operations.**
```typescript
// CORRECT - Button disabled while loading
@Component({
template: `
<button
[disabled]="saving()"
(click)="save()"
>
@if (saving()) {
<app-spinner size="sm" /> Saving...
} @else {
Save
}
</button>
`
})
export class SaveButtonComponent {
saving = signal(false);
async save() {
this.saving.set(true);
try {
await this.service.save();
} finally {
this.saving.set(false);
}
}
}
// WRONG - User can click multiple times
<button (click)="save()">
{{ saving() ? 'Saving...' : 'Save' }}
</button>
```
---
## Empty States
### Empty State Requirements
Every list/collection MUST have an empty state:
```html
@for (item of items(); track item.id) {
<app-item-card [item]="item" />
} @empty {
<app-empty-state
icon="folder-open"
title="No items yet"
description="Create your first item to get started"
actionLabel="Create Item"
(action)="openCreateDialog()"
/>
}
```
### Contextual Empty States
```typescript
@Component({
selector: "app-empty-state",
template: `
<div class="empty-state">
<span class="icon" [class]="icon()"></span>
<h3>{{ title() }}</h3>
<p>{{ description() }}</p>
@if (actionLabel()) {
<button (click)="action.emit()" class="btn-primary">
{{ actionLabel() }}
</button>
}
</div>
`,
})
export class EmptyStateComponent {
icon = input("inbox");
title = input.required<string>();
description = input("");
actionLabel = input<string | null>(null);
action = output<void>();
}
```
---
## Form Patterns
### Form with Loading and Validation
```typescript
@Component({
template: `
<form [formGroup]="form" (ngSubmit)="onSubmit()">
<div class="form-field">
<label for="name">Name</label>
<input
id="name"
formControlName="name"
[class.error]="isFieldInvalid('name')"
/>
@if (isFieldInvalid("name")) {
<span class="error-text">
{{ getFieldError("name") }}
</span>
}
</div>
<div class="form-field">
<label for="email">Email</label>
<input id="email" type="email" formControlName="email" />
@if (isFieldInvalid("email")) {
<span class="error-text">
{{ getFieldError("email") }}
</span>
}
</div>
<button type="submit" [disabled]="form.invalid || submitting()">
@if (submitting()) {
<app-spinner size="sm" /> Submitting...
} @else {
Submit
}
</button>
</form>
`,
})
export class UserFormComponent {
private fb = inject(FormBuilder);
submitting = signal(false);
form = this.fb.group({
name: ["", [Validators.required, Validators.minLength(2)]],
email: ["", [Validators.required, Validators.email]],
});
isFieldInvalid(field: string): boolean {
const control = this.form.get(field);
return control ? control.invalid && control.touched : false;
}
getFieldError(field: string): string {
const control = this.form.get(field);
if (control?.hasError("required")) return "This field is required";
if (control?.hasError("email")) return "Invalid email format";
if (control?.hasError("minlength")) return "Too short";
return "";
}
async onSubmit() {
if (this.form.invalid) return;
this.submitting.set(true);
try {
await this.service.submit(this.form.value);
this.toast.success("Submitted successfully");
} catch {
this.toast.error("Submission failed");
} finally {
this.submitting.set(false);
}
}
}
```
---
## Dialog/Modal Patterns
### Confirmation Dialog
```typescript
// dialog.service.ts
@Injectable({ providedIn: 'root' })
export class DialogService {
private dialog = inject(Dialog); // CDK Dialog or custom
async confirm(options: {
title: string;
message: string;
confirmText?: string;
cancelText?: string;
}): Promise<boolean> {
const dialogRef = this.dialog.open(ConfirmDialogComponent, {
data: options,
});
return await firstValueFrom(dialogRef.closed) ?? false;
}
}
// Usage
async deleteItem(item: Item) {
const confirmed = await this.dialog.confirm({
title: 'Delete Item',
message: `Are you sure you want to delete "${item.name}"?`,
confirmText: 'Delete',
});
if (confirmed) {
await this.store.delete(item.id);
}
}
```
---
## Anti-Patterns
### Loading States
```typescript
// WRONG - Spinner when data exists (causes flash on refetch)
@if (loading()) {
<app-spinner />
}
// CORRECT - Only show loading without data
@if (loading() && !items().length) {
<app-spinner />
}
```
### Error Handling
```typescript
// WRONG - Error swallowed
try {
await this.service.save();
} catch (e) {
console.log(e); // User has no idea!
}
// CORRECT - Error surfaced
try {
await this.service.save();
} catch (e) {
console.error("Save failed:", e);
this.toast.error("Failed to save. Please try again.");
}
```
### Button States
```html
<!-- WRONG - Button not disabled during submission -->
<button (click)="submit()">Submit</button>
<!-- CORRECT - Disabled and shows loading -->
<button (click)="submit()" [disabled]="loading()">
@if (loading()) {
<app-spinner size="sm" />
} Submit
</button>
```
---
## UI State Checklist
Before completing any UI component:
### UI States
- [ ] Error state handled and shown to user
- [ ] Loading state shown only when no data exists
- [ ] Empty state provided for collections (`@empty` block)
- [ ] Buttons disabled during async operations
- [ ] Buttons show loading indicator when appropriate
### Data & Mutations
- [ ] All async operations have error handling
- [ ] All user actions have feedback (toast/visual)
- [ ] Optimistic updates rollback on failure
### Accessibility
- [ ] Loading states announced to screen readers
- [ ] Error messages linked to form fields
- [ ] Focus management after state changes
---
## Integration with Other Skills
- **angular-state-management**: Use Signal stores for state
- **angular**: Apply modern patterns (Signals, @defer)
- **testing-patterns**: Test all UI states

821
skills/angular/SKILL.md Normal file
View File

@@ -0,0 +1,821 @@
---
name: angular
description: >-
Modern Angular (v20+) expert with deep knowledge of Signals, Standalone
Components, Zoneless applications, SSR/Hydration, and reactive patterns.
Use PROACTIVELY for Angular development, component architecture, state
management, performance optimization, and migration to modern patterns.
risk: safe
source: self
---
# Angular Expert
Master modern Angular development with Signals, Standalone Components, Zoneless applications, SSR/Hydration, and the latest reactive patterns.
## When to Use This Skill
- Building new Angular applications (v20+)
- Implementing Signals-based reactive patterns
- Creating Standalone Components and migrating from NgModules
- Configuring Zoneless Angular applications
- Implementing SSR, prerendering, and hydration
- Optimizing Angular performance
- Adopting modern Angular patterns and best practices
## Do Not Use This Skill When
- Migrating from AngularJS (1.x) → use `angular-migration` skill
- Working with legacy Angular apps that cannot upgrade
- General TypeScript issues → use `typescript-expert` skill
## Instructions
1. Assess the Angular version and project structure
2. Apply modern patterns (Signals, Standalone, Zoneless)
3. Implement with proper typing and reactivity
4. Validate with build and tests
## Safety
- Always test changes in development before production
- Gradual migration for existing apps (don't big-bang refactor)
- Keep backward compatibility during transitions
---
## Angular Version Timeline
| Version | Release | Key Features |
| -------------- | ------- | ------------------------------------------------------ |
| **Angular 20** | Q2 2025 | Signals stable, Zoneless stable, Incremental hydration |
| **Angular 21** | Q4 2025 | Signals-first default, Enhanced SSR |
| **Angular 22** | Q2 2026 | Signal Forms, Selectorless components |
---
## 1. Signals: The New Reactive Primitive
Signals are Angular's fine-grained reactivity system, replacing zone.js-based change detection.
### Core Concepts
```typescript
import { signal, computed, effect } from "@angular/core";
// Writable signal
const count = signal(0);
// Read value
console.log(count()); // 0
// Update value
count.set(5); // Direct set
count.update((v) => v + 1); // Functional update
// Computed (derived) signal
const doubled = computed(() => count() * 2);
// Effect (side effects)
effect(() => {
console.log(`Count changed to: ${count()}`);
});
```
### Signal-Based Inputs and Outputs
```typescript
import { Component, input, output, model } from "@angular/core";
@Component({
selector: "app-user-card",
standalone: true,
template: `
<div class="card">
<h3>{{ name() }}</h3>
<span>{{ role() }}</span>
<button (click)="select.emit(id())">Select</button>
</div>
`,
})
export class UserCardComponent {
// Signal inputs (read-only)
id = input.required<string>();
name = input.required<string>();
role = input<string>("User"); // With default
// Output
select = output<string>();
// Two-way binding (model)
isSelected = model(false);
}
// Usage:
// <app-user-card [id]="'123'" [name]="'John'" [(isSelected)]="selected" />
```
### Signal Queries (ViewChild/ContentChild)
```typescript
import {
Component,
viewChild,
viewChildren,
contentChild,
} from "@angular/core";
@Component({
selector: "app-container",
standalone: true,
template: `
<input #searchInput />
<app-item *ngFor="let item of items()" />
`,
})
export class ContainerComponent {
// Signal-based queries
searchInput = viewChild<ElementRef>("searchInput");
items = viewChildren(ItemComponent);
projectedContent = contentChild(HeaderDirective);
focusSearch() {
this.searchInput()?.nativeElement.focus();
}
}
```
### When to Use Signals vs RxJS
| Use Case | Signals | RxJS |
| ----------------------- | --------------- | -------------------------------- |
| Local component state | ✅ Preferred | Overkill |
| Derived/computed values | ✅ `computed()` | `combineLatest` works |
| Side effects | ✅ `effect()` | `tap` operator |
| HTTP requests | ❌ | ✅ HttpClient returns Observable |
| Event streams | ❌ | ✅ `fromEvent`, operators |
| Complex async flows | ❌ | ✅ `switchMap`, `mergeMap` |
---
## 2. Standalone Components
Standalone components are self-contained and don't require NgModule declarations.
### Creating Standalone Components
```typescript
import { Component } from "@angular/core";
import { CommonModule } from "@angular/common";
import { RouterLink } from "@angular/router";
@Component({
selector: "app-header",
standalone: true,
imports: [CommonModule, RouterLink], // Direct imports
template: `
<header>
<a routerLink="/">Home</a>
<a routerLink="/about">About</a>
</header>
`,
})
export class HeaderComponent {}
```
### Bootstrapping Without NgModule
```typescript
// main.ts
import { bootstrapApplication } from "@angular/platform-browser";
import { provideRouter } from "@angular/router";
import { provideHttpClient } from "@angular/common/http";
import { AppComponent } from "./app/app.component";
import { routes } from "./app/app.routes";
bootstrapApplication(AppComponent, {
providers: [provideRouter(routes), provideHttpClient()],
});
```
### Lazy Loading Standalone Components
```typescript
// app.routes.ts
import { Routes } from "@angular/router";
export const routes: Routes = [
{
path: "dashboard",
loadComponent: () =>
import("./dashboard/dashboard.component").then(
(m) => m.DashboardComponent,
),
},
{
path: "admin",
loadChildren: () =>
import("./admin/admin.routes").then((m) => m.ADMIN_ROUTES),
},
];
```
---
## 3. Zoneless Angular
Zoneless applications don't use zone.js, improving performance and debugging.
### Enabling Zoneless Mode
```typescript
// main.ts
import { bootstrapApplication } from "@angular/platform-browser";
import { provideZonelessChangeDetection } from "@angular/core";
import { AppComponent } from "./app/app.component";
bootstrapApplication(AppComponent, {
providers: [provideZonelessChangeDetection()],
});
```
### Zoneless Component Patterns
```typescript
import { Component, signal, ChangeDetectionStrategy } from "@angular/core";
@Component({
selector: "app-counter",
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<div>Count: {{ count() }}</div>
<button (click)="increment()">+</button>
`,
})
export class CounterComponent {
count = signal(0);
increment() {
this.count.update((v) => v + 1);
// No zone.js needed - Signal triggers change detection
}
}
```
### Key Zoneless Benefits
- **Performance**: No zone.js patches on async APIs
- **Debugging**: Clean stack traces without zone wrappers
- **Bundle size**: Smaller without zone.js (~15KB savings)
- **Interoperability**: Better with Web Components and micro-frontends
---
## 4. Server-Side Rendering & Hydration
### SSR Setup with Angular CLI
```bash
ng add @angular/ssr
```
### Hydration Configuration
```typescript
// app.config.ts
import { ApplicationConfig } from "@angular/core";
import {
provideClientHydration,
withEventReplay,
} from "@angular/platform-browser";
export const appConfig: ApplicationConfig = {
providers: [provideClientHydration(withEventReplay())],
};
```
### Incremental Hydration (v20+)
```typescript
import { Component } from "@angular/core";
@Component({
selector: "app-page",
standalone: true,
template: `
<app-hero />
@defer (hydrate on viewport) {
<app-comments />
}
@defer (hydrate on interaction) {
<app-chat-widget />
}
`,
})
export class PageComponent {}
```
### Hydration Triggers
| Trigger | When to Use |
| ---------------- | --------------------------------------- |
| `on idle` | Low-priority, hydrate when browser idle |
| `on viewport` | Hydrate when element enters viewport |
| `on interaction` | Hydrate on first user interaction |
| `on hover` | Hydrate when user hovers |
| `on timer(ms)` | Hydrate after specified delay |
---
## 5. Modern Routing Patterns
### Functional Route Guards
```typescript
// auth.guard.ts
import { inject } from "@angular/core";
import { Router, CanActivateFn } from "@angular/router";
import { AuthService } from "./auth.service";
export const authGuard: CanActivateFn = (route, state) => {
const auth = inject(AuthService);
const router = inject(Router);
if (auth.isAuthenticated()) {
return true;
}
return router.createUrlTree(["/login"], {
queryParams: { returnUrl: state.url },
});
};
// Usage in routes
export const routes: Routes = [
{
path: "dashboard",
loadComponent: () => import("./dashboard.component"),
canActivate: [authGuard],
},
];
```
### Route-Level Data Resolvers
```typescript
import { inject } from '@angular/core';
import { ResolveFn } from '@angular/router';
import { UserService } from './user.service';
import { User } from './user.model';
export const userResolver: ResolveFn<User> = (route) => {
const userService = inject(UserService);
return userService.getUser(route.paramMap.get('id')!);
};
// In routes
{
path: 'user/:id',
loadComponent: () => import('./user.component'),
resolve: { user: userResolver }
}
// In component
export class UserComponent {
private route = inject(ActivatedRoute);
user = toSignal(this.route.data.pipe(map(d => d['user'])));
}
```
---
## 6. Dependency Injection Patterns
### Modern inject() Function
```typescript
import { Component, inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { UserService } from './user.service';
@Component({...})
export class UserComponent {
// Modern inject() - no constructor needed
private http = inject(HttpClient);
private userService = inject(UserService);
// Works in any injection context
users = toSignal(this.userService.getUsers());
}
```
### Injection Tokens for Configuration
```typescript
import { InjectionToken, inject } from "@angular/core";
// Define token
export const API_BASE_URL = new InjectionToken<string>("API_BASE_URL");
// Provide in config
bootstrapApplication(AppComponent, {
providers: [{ provide: API_BASE_URL, useValue: "https://api.example.com" }],
});
// Inject in service
@Injectable({ providedIn: "root" })
export class ApiService {
private baseUrl = inject(API_BASE_URL);
get(endpoint: string) {
return this.http.get(`${this.baseUrl}/${endpoint}`);
}
}
```
---
## 7. Component Composition & Reusability
### Content Projection (Slots)
```typescript
@Component({
selector: 'app-card',
template: `
<div class="card">
<div class="header">
<!-- Select by attribute -->
<ng-content select="[card-header]"></ng-content>
</div>
<div class="body">
<!-- Default slot -->
<ng-content></ng-content>
</div>
</div>
`
})
export class CardComponent {}
// Usage
<app-card>
<h3 card-header>Title</h3>
<p>Body content</p>
</app-card>
```
### Host Directives (Composition)
```typescript
// Reusable behaviors without inheritance
@Directive({
standalone: true,
selector: '[appTooltip]',
inputs: ['tooltip'] // Signal input alias
})
export class TooltipDirective { ... }
@Component({
selector: 'app-button',
standalone: true,
hostDirectives: [
{
directive: TooltipDirective,
inputs: ['tooltip: title'] // Map input
}
],
template: `<ng-content />`
})
export class ButtonComponent {}
```
---
## 8. State Management Patterns
### Signal-Based State Service
```typescript
import { Injectable, signal, computed } from "@angular/core";
interface AppState {
user: User | null;
theme: "light" | "dark";
notifications: Notification[];
}
@Injectable({ providedIn: "root" })
export class StateService {
// Private writable signals
private _user = signal<User | null>(null);
private _theme = signal<"light" | "dark">("light");
private _notifications = signal<Notification[]>([]);
// Public read-only computed
readonly user = computed(() => this._user());
readonly theme = computed(() => this._theme());
readonly notifications = computed(() => this._notifications());
readonly unreadCount = computed(
() => this._notifications().filter((n) => !n.read).length,
);
// Actions
setUser(user: User | null) {
this._user.set(user);
}
toggleTheme() {
this._theme.update((t) => (t === "light" ? "dark" : "light"));
}
addNotification(notification: Notification) {
this._notifications.update((n) => [...n, notification]);
}
}
```
### Component Store Pattern with Signals
```typescript
import { Injectable, signal, computed, inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { toSignal } from "@angular/core/rxjs-interop";
@Injectable()
export class ProductStore {
private http = inject(HttpClient);
// State
private _products = signal<Product[]>([]);
private _loading = signal(false);
private _filter = signal("");
// Selectors
readonly products = computed(() => this._products());
readonly loading = computed(() => this._loading());
readonly filteredProducts = computed(() => {
const filter = this._filter().toLowerCase();
return this._products().filter((p) =>
p.name.toLowerCase().includes(filter),
);
});
// Actions
loadProducts() {
this._loading.set(true);
this.http.get<Product[]>("/api/products").subscribe({
next: (products) => {
this._products.set(products);
this._loading.set(false);
},
error: () => this._loading.set(false),
});
}
setFilter(filter: string) {
this._filter.set(filter);
}
}
```
---
## 9. Forms with Signals (Coming in v22+)
### Current Reactive Forms
```typescript
import { Component, inject } from "@angular/core";
import { FormBuilder, Validators, ReactiveFormsModule } from "@angular/forms";
@Component({
selector: "app-user-form",
standalone: true,
imports: [ReactiveFormsModule],
template: `
<form [formGroup]="form" (ngSubmit)="onSubmit()">
<input formControlName="name" placeholder="Name" />
<input formControlName="email" type="email" placeholder="Email" />
<button [disabled]="form.invalid">Submit</button>
</form>
`,
})
export class UserFormComponent {
private fb = inject(FormBuilder);
form = this.fb.group({
name: ["", Validators.required],
email: ["", [Validators.required, Validators.email]],
});
onSubmit() {
if (this.form.valid) {
console.log(this.form.value);
}
}
}
```
### Signal-Aware Form Patterns (Preview)
```typescript
// Future Signal Forms API (experimental)
import { Component, signal } from '@angular/core';
@Component({...})
export class SignalFormComponent {
name = signal('');
email = signal('');
// Computed validation
isValid = computed(() =>
this.name().length > 0 &&
this.email().includes('@')
);
submit() {
if (this.isValid()) {
console.log({ name: this.name(), email: this.email() });
}
}
}
```
---
## 10. Performance Optimization
### Change Detection Strategies
```typescript
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
// Only checks when:
// 1. Input signal/reference changes
// 2. Event handler runs
// 3. Async pipe emits
// 4. Signal value changes
})
```
### Defer Blocks for Lazy Loading
```typescript
@Component({
template: `
<!-- Immediate loading -->
<app-header />
<!-- Lazy load when visible -->
@defer (on viewport) {
<app-heavy-chart />
} @placeholder {
<div class="skeleton" />
} @loading (minimum 200ms) {
<app-spinner />
} @error {
<p>Failed to load chart</p>
}
`
})
```
### NgOptimizedImage
```typescript
import { NgOptimizedImage } from '@angular/common';
@Component({
imports: [NgOptimizedImage],
template: `
<img
ngSrc="hero.jpg"
width="800"
height="600"
priority
/>
<img
ngSrc="thumbnail.jpg"
width="200"
height="150"
loading="lazy"
placeholder="blur"
/>
`
})
```
---
## 11. Testing Modern Angular
### Testing Signal Components
```typescript
import { ComponentFixture, TestBed } from "@angular/core/testing";
import { CounterComponent } from "./counter.component";
describe("CounterComponent", () => {
let component: CounterComponent;
let fixture: ComponentFixture<CounterComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [CounterComponent], // Standalone import
}).compileComponents();
fixture = TestBed.createComponent(CounterComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it("should increment count", () => {
expect(component.count()).toBe(0);
component.increment();
expect(component.count()).toBe(1);
});
it("should update DOM on signal change", () => {
component.count.set(5);
fixture.detectChanges();
const el = fixture.nativeElement.querySelector(".count");
expect(el.textContent).toContain("5");
});
});
```
### Testing with Signal Inputs
```typescript
import { ComponentFixture, TestBed } from "@angular/core/testing";
import { ComponentRef } from "@angular/core";
import { UserCardComponent } from "./user-card.component";
describe("UserCardComponent", () => {
let fixture: ComponentFixture<UserCardComponent>;
let componentRef: ComponentRef<UserCardComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [UserCardComponent],
}).compileComponents();
fixture = TestBed.createComponent(UserCardComponent);
componentRef = fixture.componentRef;
// Set signal inputs via setInput
componentRef.setInput("id", "123");
componentRef.setInput("name", "John Doe");
fixture.detectChanges();
});
it("should display user name", () => {
const el = fixture.nativeElement.querySelector("h3");
expect(el.textContent).toContain("John Doe");
});
});
```
---
## Best Practices Summary
| Pattern | ✅ Do | ❌ Don't |
| -------------------- | ------------------------------ | ------------------------------- |
| **State** | Use Signals for local state | Overuse RxJS for simple state |
| **Components** | Standalone with direct imports | Bloated SharedModules |
| **Change Detection** | OnPush + Signals | Default CD everywhere |
| **Lazy Loading** | `@defer` and `loadComponent` | Eager load everything |
| **DI** | `inject()` function | Constructor injection (verbose) |
| **Inputs** | `input()` signal function | `@Input()` decorator (legacy) |
| **Zoneless** | Enable for new projects | Force on legacy without testing |
---
## Resources
- [Angular.dev Documentation](https://angular.dev)
- [Angular Signals Guide](https://angular.dev/guide/signals)
- [Angular SSR Guide](https://angular.dev/guide/ssr)
- [Angular Update Guide](https://angular.dev/update-guide)
- [Angular Blog](https://blog.angular.dev)
---
## Common Troubleshooting
| Issue | Solution |
| ------------------------------ | --------------------------------------------------- |
| Signal not updating UI | Ensure `OnPush` + call signal as function `count()` |
| Hydration mismatch | Check server/client content consistency |
| Circular dependency | Use `inject()` with `forwardRef` |
| Zoneless not detecting changes | Trigger via signal updates, not mutations |
| SSR fetch fails | Use `TransferState` or `withFetch()` |

View File

@@ -186,7 +186,7 @@ class CompetitorAnalyzer:
def _analyze_title(self, title: str) -> Dict[str, Any]:
"""Analyze title structure and keyword usage."""
parts = re.split(r'[-:|]', title)
parts = re.split(r'[-' + r':|]', title)
return {
'title': title,

View File

@@ -292,7 +292,7 @@ jobs:
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.version.outputs.tag }}
body_path: RELEASE_NOTES.md
body_path: CHANGELOG.md
generate_release_notes: true
```
@@ -368,7 +368,7 @@ repo = "repo"
git cliff -o CHANGELOG.md
# Generate for specific range
git cliff v1.0.0..v2.0.0 -o RELEASE_NOTES.md
git cliff v1.0.0..v2.0.0 -o CHANGELOG.md
# Preview without writing
git cliff --unreleased --dry-run

View File

@@ -0,0 +1,70 @@
---
name: computer-vision-expert
description: SOTA Computer Vision Expert (2026). Specialized in YOLO26, Segment Anything 3 (SAM 3), Vision Language Models, and real-time spatial analysis.
---
# Computer Vision Expert (SOTA 2026)
**Role**: Advanced Vision Systems Architect & Spatial Intelligence Expert
## Purpose
To provide expert guidance on designing, implementing, and optimizing state-of-the-art computer vision pipelines. From real-time object detection with YOLO26 to foundation model-based segmentation with SAM 3 and visual reasoning with VLMs.
## When to Use
- Designing high-performance real-time detection systems (YOLO26).
- Implementing zero-shot or text-guided segmentation tasks (SAM 3).
- Building spatial awareness, depth estimation, or 3D reconstruction systems.
- Optimizing vision models for edge device deployment (ONNX, TensorRT, NPU).
- Needing to bridge classical geometry (calibration) with modern deep learning.
## Capabilities
### 1. Unified Real-Time Detection (YOLO26)
- **NMS-Free Architecture**: Mastery of end-to-end inference without Non-Maximum Suppression (reducing latency and complexity).
- **Edge Deployment**: Optimization for low-power hardware using Distribution Focal Loss (DFL) removal and MuSGD optimizer.
- **Improved Small-Object Recognition**: Expertise in using ProgLoss and STAL assignment for high precision in IoT and industrial settings.
### 2. Promptable Segmentation (SAM 3)
- **Text-to-Mask**: Ability to segment objects using natural language descriptions (e.g., "the blue container on the right").
- **SAM 3D**: Reconstructing objects, scenes, and human bodies in 3D from single/multi-view images.
- **Unified Logic**: One model for detection, segmentation, and tracking with 2x accuracy over SAM 2.
### 3. Vision Language Models (VLMs)
- **Visual Grounding**: Leveraging Florence-2, PaliGemma 2, or Qwen2-VL for semantic scene understanding.
- **Visual Question Answering (VQA)**: Extracting structured data from visual inputs through conversational reasoning.
### 4. Geometry & Reconstruction
- **Depth Anything V2**: State-of-the-art monocular depth estimation for spatial awareness.
- **Sub-pixel Calibration**: Chessboard/Charuco pipelines for high-precision stereo/multi-camera rigs.
- **Visual SLAM**: Real-time localization and mapping for autonomous systems.
## Patterns
### 1. Text-Guided Vision Pipelines
- Use SAM 3's text-to-mask capability to isolate specific parts during inspection without needing custom detectors for every variation.
- Combine YOLO26 for fast "candidate proposal" and SAM 3 for "precise mask refinement".
### 2. Deployment-First Design
- Leverage YOLO26's simplified ONNX/TensorRT exports (NMS-free).
- Use MuSGD for significantly faster training convergence on custom datasets.
### 3. Progressive 3D Scene Reconstruction
- Integrate monocular depth maps with geometric homographies to build accurate 2.5D/3D representations of scenes.
## Anti-Patterns
- **Manual NMS Post-processing**: Stick to NMS-free architectures (YOLO26/v10+) for lower overhead.
- **Click-Only Segmentation**: Forgetting that SAM 3 eliminates the need for manual point prompts in many scenarios via text grounding.
- **Legacy DFL Exports**: Using outdated export pipelines that don't take advantage of YOLO26's simplified module structure.
## Sharp Edges (2026)
| Issue | Severity | Solution |
|-------|----------|----------|
| SAM 3 VRAM Usage | Medium | Use quantized/distilled versions for local GPU inference. |
| Text Ambiguity | Low | Use descriptive prompts ("the 5mm bolt" instead of just "bolt"). |
| Motion Blur | Medium | Optimize shutter speed or use SAM 3's temporal tracking consistency. |
| Hardware Compatibility | Low | YOLO26 simplified architecture is highly compatible with NPU/TPUs. |
## Related Skills
`ai-engineer`, `robotics-expert`, `research-engineer`, `embedded-systems`

View File

@@ -1,9 +1,4 @@
---
## When to Use This Skill
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices.
name: frontend-slides
description: Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices.
source: https://github.com/zarazhangrui/frontend-slides

View File

@@ -0,0 +1,847 @@
---
name: radix-ui-design-system
description: Build accessible design systems with Radix UI primitives. Headless component customization, theming strategies, and compound component patterns for production-grade UI libraries.
risk: safe
source: self
---
# Radix UI Design System
Build production-ready, accessible design systems using Radix UI primitives with full customization control and zero style opinions.
## Overview
Radix UI provides unstyled, accessible components (primitives) that you can customize to match any design system. This skill guides you through building scalable component libraries with Radix UI, focusing on accessibility-first design, theming architecture, and composable patterns.
**Key Strengths:**
- **Headless by design**: Full styling control without fighting defaults
- **Accessibility built-in**: WAI-ARIA compliant, keyboard navigation, screen reader support
- **Composable primitives**: Build complex components from simple building blocks
- **Framework agnostic**: Works with React, but styles work anywhere
## When to Use This Skill
- Creating a custom design system from scratch
- Building accessible UI component libraries
- Implementing complex interactive components (Dialog, Dropdown, Tabs, etc.)
- Migrating from styled component libraries to unstyled primitives
- Setting up theming systems with CSS variables or Tailwind
- Need full control over component behavior and styling
- Building applications requiring WCAG 2.1 AA/AAA compliance
## Do not use this skill when
- You need pre-styled components out of the box (use shadcn/ui, Mantine, etc.)
- Building simple static pages without interactivity
- The project doesn't use React 16.8+ (Radix requires hooks)
- You need components for frameworks other than React
---
## Core Principles
### 1. Accessibility First
Every Radix primitive is built with accessibility as the foundation:
- **Keyboard Navigation**: Full keyboard support (Tab, Arrow keys, Enter, Escape)
- **Screen Readers**: Proper ARIA attributes and live regions
- **Focus Management**: Automatic focus trapping and restoration
- **Disabled States**: Proper handling of disabled and aria-disabled
**Rule**: Never override accessibility features. Enhance, don't replace.
### 2. Headless Architecture
Radix provides **behavior**, you provide **appearance**:
```tsx
// ❌ Don't fight pre-styled components
<Button className="override-everything" />
// ✅ Radix gives you behavior, you add styling
<Dialog.Root>
<Dialog.Trigger className="your-button-styles" />
<Dialog.Content className="your-modal-styles" />
</Dialog.Root>
```
### 3. Composition Over Configuration
Build complex components from simple primitives:
```tsx
// Primitive components compose naturally
<Tabs.Root>
<Tabs.List>
<Tabs.Trigger value="tab1">Tab 1</Tabs.Trigger>
<Tabs.Trigger value="tab2">Tab 2</Tabs.Trigger>
</Tabs.List>
<Tabs.Content value="tab1">Content 1</Tabs.Content>
<Tabs.Content value="tab2">Content 2</Tabs.Content>
</Tabs.Root>
```
---
## Getting Started
### Installation
```bash
# Install individual primitives (recommended)
npm install @radix-ui/react-dialog @radix-ui/react-dropdown-menu
# Or install multiple at once
npm install @radix-ui/react-{dialog,dropdown-menu,tabs,tooltip}
# For styling (optional but common)
npm install clsx tailwind-merge class-variance-authority
```
### Basic Component Pattern
Every Radix component follows this pattern:
```tsx
import * as Dialog from '@radix-ui/react-dialog';
export function MyDialog() {
return (
<Dialog.Root>
{/* Trigger the dialog */}
<Dialog.Trigger asChild>
<button className="trigger-styles">Open</button>
</Dialog.Trigger>
{/* Portal renders outside DOM hierarchy */}
<Dialog.Portal>
{/* Overlay (backdrop) */}
<Dialog.Overlay className="overlay-styles" />
{/* Content (modal) */}
<Dialog.Content className="content-styles">
<Dialog.Title>Title</Dialog.Title>
<Dialog.Description>Description</Dialog.Description>
{/* Your content here */}
<Dialog.Close asChild>
<button>Close</button>
</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
);
}
```
---
## Theming Strategies
### Strategy 1: CSS Variables (Framework-Agnostic)
**Best for**: Maximum portability, SSR-friendly
```css
/* globals.css */
:root {
--color-primary: 220 90% 56%;
--color-surface: 0 0% 100%;
--radius-base: 0.5rem;
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
}
[data-theme="dark"] {
--color-primary: 220 90% 66%;
--color-surface: 222 47% 11%;
}
```
```tsx
// Component.tsx
<Dialog.Content
className="
bg-[hsl(var(--color-surface))]
rounded-[var(--radius-base)]
shadow-[var(--shadow-lg)]
"
/>
```
### Strategy 2: Tailwind + CVA (Class Variance Authority)
**Best for**: Tailwind projects, variant-heavy components
```tsx
// button.tsx
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
const buttonVariants = cva(
// Base styles
"inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
outline: "border border-input bg-background hover:bg-accent",
ghost: "hover:bg-accent hover:text-accent-foreground",
},
size: {
default: "h-10 px-4 py-2",
sm: "h-9 rounded-md px-3",
lg: "h-11 rounded-md px-8",
icon: "h-10 w-10",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
);
interface ButtonProps extends VariantProps<typeof buttonVariants> {
children: React.ReactNode;
}
export function Button({ variant, size, children }: ButtonProps) {
return (
<button className={cn(buttonVariants({ variant, size }))}>
{children}
</button>
);
}
```
### Strategy 3: Stitches (CSS-in-JS)
**Best for**: Runtime theming, scoped styles
```tsx
import { styled } from '@stitches/react';
import * as Dialog from '@radix-ui/react-dialog';
const StyledContent = styled(Dialog.Content, {
backgroundColor: '$surface',
borderRadius: '$md',
padding: '$6',
variants: {
size: {
small: { width: '300px' },
medium: { width: '500px' },
large: { width: '700px' },
},
},
defaultVariants: {
size: 'medium',
},
});
```
---
## Component Patterns
### Pattern 1: Compound Components with Context
**Use case**: Share state between primitive parts
```tsx
// Select.tsx
import * as Select from '@radix-ui/react-select';
import { CheckIcon, ChevronDownIcon } from '@radix-ui/react-icons';
export function CustomSelect({ items, placeholder, onValueChange }) {
return (
<Select.Root onValueChange={onValueChange}>
<Select.Trigger className="select-trigger">
<Select.Value placeholder={placeholder} />
<Select.Icon>
<ChevronDownIcon />
</Select.Icon>
</Select.Trigger>
<Select.Portal>
<Select.Content className="select-content">
<Select.Viewport>
{items.map((item) => (
<Select.Item
key={item.value}
value={item.value}
className="select-item"
>
<Select.ItemText>{item.label}</Select.ItemText>
<Select.ItemIndicator>
<CheckIcon />
</Select.ItemIndicator>
</Select.Item>
))}
</Select.Viewport>
</Select.Content>
</Select.Portal>
</Select.Root>
);
}
```
### Pattern 2: Polymorphic Components with `asChild`
**Use case**: Render as different elements without losing behavior
```tsx
// ✅ Render as Next.js Link but keep Radix behavior
<Dialog.Trigger asChild>
<Link href="/settings">Open Settings</Link>
</Dialog.Trigger>
// ✅ Render as custom component
<DropdownMenu.Item asChild>
<YourCustomButton icon={<Icon />}>Action</YourCustomButton>
</DropdownMenu.Item>
```
**Why `asChild` matters**: Prevents nested button/link issues in accessibility tree.
### Pattern 3: Controlled vs Uncontrolled
```tsx
// Uncontrolled (Radix manages state)
<Tabs.Root defaultValue="tab1">
<Tabs.Trigger value="tab1">Tab 1</Tabs.Trigger>
</Tabs.Root>
// Controlled (You manage state)
const [activeTab, setActiveTab] = useState('tab1');
<Tabs.Root value={activeTab} onValueChange={setActiveTab}>
<Tabs.Trigger value="tab1">Tab 1</Tabs.Trigger>
</Tabs.Root>
```
**Rule**: Use controlled when you need to sync with external state (URL, Redux, etc.).
### Pattern 4: Animation with Framer Motion
```tsx
import * as Dialog from '@radix-ui/react-dialog';
import { motion, AnimatePresence } from 'framer-motion';
export function AnimatedDialog({ open, onOpenChange }) {
return (
<Dialog.Root open={open} onOpenChange={onOpenChange}>
<Dialog.Portal forceMount>
<AnimatePresence>
{open && (
<>
<Dialog.Overlay asChild>
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
className="dialog-overlay"
/>
</Dialog.Overlay>
<Dialog.Content asChild>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.95 }}
className="dialog-content"
>
{/* Content */}
</motion.div>
</Dialog.Content>
</>
)}
</AnimatePresence>
</Dialog.Portal>
</Dialog.Root>
);
}
```
---
## Common Primitives Reference
### Dialog (Modal)
```tsx
<Dialog.Root> {/* State container */}
<Dialog.Trigger /> {/* Opens dialog */}
<Dialog.Portal> {/* Renders in portal */}
<Dialog.Overlay /> {/* Backdrop */}
<Dialog.Content> {/* Modal content */}
<Dialog.Title /> {/* Required for a11y */}
<Dialog.Description /> {/* Required for a11y */}
<Dialog.Close /> {/* Closes dialog */}
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
```
### Dropdown Menu
```tsx
<DropdownMenu.Root>
<DropdownMenu.Trigger />
<DropdownMenu.Portal>
<DropdownMenu.Content>
<DropdownMenu.Item />
<DropdownMenu.Separator />
<DropdownMenu.CheckboxItem />
<DropdownMenu.RadioGroup>
<DropdownMenu.RadioItem />
</DropdownMenu.RadioGroup>
<DropdownMenu.Sub> {/* Nested menus */}
<DropdownMenu.SubTrigger />
<DropdownMenu.SubContent />
</DropdownMenu.Sub>
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu.Root>
```
### Tabs
```tsx
<Tabs.Root defaultValue="tab1">
<Tabs.List>
<Tabs.Trigger value="tab1" />
<Tabs.Trigger value="tab2" />
</Tabs.List>
<Tabs.Content value="tab1" />
<Tabs.Content value="tab2" />
</Tabs.Root>
```
### Tooltip
```tsx
<Tooltip.Provider delayDuration={200}>
<Tooltip.Root>
<Tooltip.Trigger />
<Tooltip.Portal>
<Tooltip.Content side="top" align="center">
Tooltip text
<Tooltip.Arrow />
</Tooltip.Content>
</Tooltip.Portal>
</Tooltip.Root>
</Tooltip.Provider>
```
### Popover
```tsx
<Popover.Root>
<Popover.Trigger />
<Popover.Portal>
<Popover.Content side="bottom" align="start">
Content
<Popover.Arrow />
<Popover.Close />
</Popover.Content>
</Popover.Portal>
</Popover.Root>
```
---
## Accessibility Checklist
### Every Component Must Have:
- [ ] **Focus Management**: Visible focus indicators on all interactive elements
- [ ] **Keyboard Navigation**: Full keyboard support (Tab, Arrows, Enter, Esc)
- [ ] **ARIA Labels**: Meaningful labels for screen readers
- [ ] **Color Contrast**: WCAG AA minimum (4.5:1 for text, 3:1 for UI)
- [ ] **Error States**: Clear error messages with `aria-invalid` and `aria-describedby`
- [ ] **Loading States**: Proper `aria-busy` during async operations
### Dialog-Specific:
- [ ] `Dialog.Title` is present (required for screen readers)
- [ ] `Dialog.Description` provides context
- [ ] Focus trapped inside modal when open
- [ ] Escape key closes dialog
- [ ] Focus returns to trigger on close
### Dropdown-Specific:
- [ ] Arrow keys navigate items
- [ ] Type-ahead search works
- [ ] First/last item wrapping behavior
- [ ] Selected state indicated visually and with ARIA
---
## Best Practices
### ✅ Do This
1. **Always use `asChild` to avoid wrapper divs**
```tsx
<Dialog.Trigger asChild>
<button>Open</button>
</Dialog.Trigger>
```
2. **Provide semantic HTML**
```tsx
<Dialog.Content asChild>
<article role="dialog" aria-labelledby="title">
{/* content */}
</article>
</Dialog.Content>
```
3. **Use CSS variables for theming**
```css
.dialog-content {
background: hsl(var(--surface));
color: hsl(var(--on-surface));
}
```
4. **Compose primitives for complex components**
```tsx
function CommandPalette() {
return (
<Dialog.Root>
<Dialog.Content>
<Combobox /> {/* Radix Combobox inside Dialog */}
</Dialog.Content>
</Dialog.Root>
);
}
```
### ❌ Don't Do This
1. **Don't skip accessibility parts**
```tsx
// ❌ Missing Title and Description
<Dialog.Content>
<div>Content</div>
</Dialog.Content>
```
2. **Don't fight the primitives**
```tsx
// ❌ Overriding internal behavior
<Dialog.Content onClick={(e) => e.stopPropagation()}>
```
3. **Don't mix controlled and uncontrolled**
```tsx
// ❌ Inconsistent state management
<Tabs.Root defaultValue="tab1" value={activeTab}>
```
4. **Don't ignore keyboard navigation**
```tsx
// ❌ Disabling keyboard behavior
<DropdownMenu.Item onKeyDown={(e) => e.preventDefault()}>
```
---
## Real-World Examples
### Example 1: Command Palette (Combo Dialog)
```tsx
import * as Dialog from '@radix-ui/react-dialog';
import { Command } from 'cmdk';
export function CommandPalette() {
const [open, setOpen] = useState(false);
useEffect(() => {
const down = (e: KeyboardEvent) => {
if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {
e.preventDefault();
setOpen((open) => !open);
}
};
document.addEventListener('keydown', down);
return () => document.removeEventListener('keydown', down);
}, []);
return (
<Dialog.Root open={open} onOpenChange={setOpen}>
<Dialog.Portal>
<Dialog.Overlay className="fixed inset-0 bg-black/50" />
<Dialog.Content className="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2">
<Command>
<Command.Input placeholder="Type a command..." />
<Command.List>
<Command.Empty>No results found.</Command.Empty>
<Command.Group heading="Suggestions">
<Command.Item>Calendar</Command.Item>
<Command.Item>Search Emoji</Command.Item>
</Command.Group>
</Command.List>
</Command>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
);
}
```
### Example 2: Dropdown Menu with Icons
```tsx
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
import { DotsHorizontalIcon } from '@radix-ui/react-icons';
export function ActionsMenu() {
return (
<DropdownMenu.Root>
<DropdownMenu.Trigger asChild>
<button className="icon-button" aria-label="Actions">
<DotsHorizontalIcon />
</button>
</DropdownMenu.Trigger>
<DropdownMenu.Portal>
<DropdownMenu.Content className="dropdown-content" align="end">
<DropdownMenu.Item className="dropdown-item">
Edit
</DropdownMenu.Item>
<DropdownMenu.Item className="dropdown-item">
Duplicate
</DropdownMenu.Item>
<DropdownMenu.Separator className="dropdown-separator" />
<DropdownMenu.Item className="dropdown-item text-red-500">
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu.Root>
);
}
```
### Example 3: Form with Radix Select + React Hook Form
```tsx
import * as Select from '@radix-ui/react-select';
import { useForm, Controller } from 'react-hook-form';
interface FormData {
country: string;
}
export function CountryForm() {
const { control, handleSubmit } = useForm<FormData>();
return (
<form onSubmit={handleSubmit((data) => console.log(data))}>
<Controller
name="country"
control={control}
render={({ field }) => (
<Select.Root onValueChange={field.onChange} value={field.value}>
<Select.Trigger className="select-trigger">
<Select.Value placeholder="Select a country" />
<Select.Icon />
</Select.Trigger>
<Select.Portal>
<Select.Content className="select-content">
<Select.Viewport>
<Select.Item value="us">United States</Select.Item>
<Select.Item value="ca">Canada</Select.Item>
<Select.Item value="uk">United Kingdom</Select.Item>
</Select.Viewport>
</Select.Content>
</Select.Portal>
</Select.Root>
)}
/>
<button type="submit">Submit</button>
</form>
);
}
```
---
## Troubleshooting
### Problem: Dialog doesn't close on Escape key
**Cause**: `onEscapeKeyDown` event prevented or `open` state not synced
**Solution**:
```tsx
<Dialog.Root open={open} onOpenChange={setOpen}>
{/* Don't prevent default on escape */}
</Dialog.Root>
```
### Problem: Dropdown menu positioning is off
**Cause**: Parent container has `overflow: hidden` or transform
**Solution**:
```tsx
// Use Portal to render outside overflow container
<DropdownMenu.Portal>
<DropdownMenu.Content />
</DropdownMenu.Portal>
```
### Problem: Animations don't work
**Cause**: Portal content unmounts immediately
**Solution**:
```tsx
// Use forceMount + AnimatePresence
<Dialog.Portal forceMount>
<AnimatePresence>
{open && <Dialog.Content />}
</AnimatePresence>
</Dialog.Portal>
```
### Problem: TypeScript errors with `asChild`
**Cause**: Type inference issues with polymorphic components
**Solution**:
```tsx
// Explicitly type your component
<Dialog.Trigger asChild>
<button type="button">Open</button>
</Dialog.Trigger>
```
---
## Performance Optimization
### 1. Code Splitting
```tsx
// Lazy load heavy primitives
const Dialog = lazy(() => import('@radix-ui/react-dialog'));
const DropdownMenu = lazy(() => import('@radix-ui/react-dropdown-menu'));
```
### 2. Portal Container Reuse
```tsx
// Create portal container once
<Tooltip.Provider>
{/* All tooltips share portal container */}
<Tooltip.Root>...</Tooltip.Root>
<Tooltip.Root>...</Tooltip.Root>
</Tooltip.Provider>
```
### 3. Memoization
```tsx
// Memoize expensive render functions
const SelectItems = memo(({ items }) => (
items.map((item) => <Select.Item key={item.value} value={item.value} />)
));
```
---
## Integration with Popular Tools
### shadcn/ui (Built on Radix)
shadcn/ui is a collection of copy-paste components built with Radix + Tailwind.
```bash
npx shadcn-ui@latest init
npx shadcn-ui@latest add dialog
```
**When to use shadcn vs raw Radix**:
- Use shadcn: Quick prototyping, standard designs
- Use raw Radix: Full customization, unique designs
### Radix Themes (Official Styled System)
```tsx
import { Theme, Button, Dialog } from '@radix-ui/themes';
function App() {
return (
<Theme accentColor="crimson" grayColor="sand">
<Button>Click me</Button>
</Theme>
);
}
```
---
## Related Skills
- `@tailwind-design-system` - Tailwind + Radix integration patterns
- `@react-patterns` - React composition patterns
- `@frontend-design` - Overall frontend architecture
- `@accessibility-compliance` - WCAG compliance testing
---
## Resources
### Official Documentation
- [Radix UI Docs](https://www.radix-ui.com/primitives)
- [Radix Colors](https://www.radix-ui.com/colors) - Accessible color system
- [Radix Icons](https://www.radix-ui.com/icons) - Icon library
### Community Resources
- [shadcn/ui](https://ui.shadcn.com) - Component collection
- [Radix UI Discord](https://discord.com/invite/7Xb99uG) - Community support
- [CVA Documentation](https://cva.style/docs) - Variant management
### Examples
- [Radix Playground](https://www.radix-ui.com/primitives/docs/overview/introduction#try-it-out)
- [shadcn/ui Source](https://github.com/shadcn-ui/ui) - Production examples
---
## Quick Reference
### Installation
```bash
npm install @radix-ui/react-{primitive-name}
```
### Basic Pattern
```tsx
<Primitive.Root>
<Primitive.Trigger />
<Primitive.Portal>
<Primitive.Content />
</Primitive.Portal>
</Primitive.Root>
```
### Key Props
- `asChild` - Render as child element
- `defaultValue` - Uncontrolled default
- `value` / `onValueChange` - Controlled state
- `open` / `onOpenChange` - Open state
- `side` / `align` - Positioning
---
**Remember**: Radix gives you **behavior**, you give it **beauty**. Accessibility is built-in, customization is unlimited.

View File

@@ -0,0 +1,63 @@
# Radix UI Design System - Skill Examples
This folder contains practical examples demonstrating how to use Radix UI primitives to build accessible, customizable components.
## Examples
### `dialog-example.tsx`
Demonstrates Dialog (Modal) component patterns:
- **BasicDialog**: Standard modal with form
- **ControlledDialog**: Externally controlled modal state
**Key Concepts**:
- Portal rendering outside DOM hierarchy
- Overlay (backdrop) handling
- Accessibility requirements (Title, Description)
- Custom styling with CSS
### `dropdown-example.tsx`
Complete dropdown menu implementation:
- **CompleteDropdown**: Full-featured menu with all Radix primitives
- Regular items
- Separators and labels
- Checkbox items
- Radio groups
- Sub-menus
- **ActionsMenu**: Simple actions menu for data tables/cards
**Key Concepts**:
- Compound component architecture
- Keyboard navigation
- Item indicators (checkboxes, radio buttons)
- Nested sub-menus
## Usage
```tsx
import { BasicDialog } from './examples/dialog-example';
import { CompleteDropdown } from './examples/dropdown-example';
function App() {
return (
<>
<BasicDialog />
<CompleteDropdown />
</>
);
}
```
## Styling
These examples use CSS classes. You can:
1. Copy the CSS from each file
2. Replace with Tailwind classes
3. Use CSS-in-JS (Stitches, Emotion, etc.)
## Learn More
- [Main SKILL.md](../SKILL.md) - Complete guide
- [Component Template](../templates/component-template.tsx) - Boilerplate
- [Radix UI Docs](https://www.radix-ui.com/primitives)

View File

@@ -0,0 +1,128 @@
import * as Dialog from '@radix-ui/react-dialog';
import { Cross2Icon } from '@radix-ui/react-icons';
import './dialog.css';
/**
* Example: Basic Dialog Component
*
* Demonstrates:
* - Compound component pattern
* - Portal rendering
* - Accessibility features (Title, Description)
* - Custom styling with CSS
*/
export function BasicDialog() {
return (
<Dialog.Root>
<Dialog.Trigger asChild>
<button className="button-primary">
Open Dialog
</button>
</Dialog.Trigger>
<Dialog.Portal>
{/* Overlay (backdrop) */}
<Dialog.Overlay className="dialog-overlay" />
{/* Content (modal) */}
<Dialog.Content className="dialog-content">
{/* Title - Required for accessibility */}
<Dialog.Title className="dialog-title">
Edit Profile
</Dialog.Title>
{/* Description - Recommended for accessibility */}
<Dialog.Description className="dialog-description">
Make changes to your profile here. Click save when you're done.
</Dialog.Description>
{/* Form Content */}
<form className="dialog-form">
<fieldset className="fieldset">
<label className="label" htmlFor="name">
Name
</label>
<input
className="input"
id="name"
defaultValue="John Doe"
/>
</fieldset>
<fieldset className="fieldset">
<label className="label" htmlFor="email">
Email
</label>
<input
className="input"
id="email"
type="email"
defaultValue="john@example.com"
/>
</fieldset>
<div className="dialog-actions">
<Dialog.Close asChild>
<button className="button-secondary" type="button">
Cancel
</button>
</Dialog.Close>
<button className="button-primary" type="submit">
Save Changes
</button>
</div>
</form>
{/* Close button */}
<Dialog.Close asChild>
<button className="icon-button" aria-label="Close">
<Cross2Icon />
</button>
</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
);
}
/**
* Example: Controlled Dialog
*
* Use when you need to:
* - Sync dialog state with external state
* - Programmatically open/close dialog
* - Track dialog open state
*/
export function ControlledDialog() {
const [open, setOpen] = React.useState(false);
const handleSave = () => {
// Your save logic here
console.log('Saving...');
setOpen(false); // Close after save
};
return (
<Dialog.Root open={open} onOpenChange={setOpen}>
<Dialog.Trigger asChild>
<button className="button-primary">
Open Controlled Dialog
</button>
</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<Dialog.Title>Controlled Dialog</Dialog.Title>
<Dialog.Description>
This dialog's state is managed externally.
</Dialog.Description>
<p>Dialog is {open ? 'open' : 'closed'}</p>
<button onClick={handleSave}>Save and Close</button>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
);
}

View File

@@ -0,0 +1,162 @@
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
import {
HamburgerMenuIcon,
DotFilledIcon,
CheckIcon,
ChevronRightIcon,
} from '@radix-ui/react-icons';
import './dropdown.css';
/**
* Example: Complete Dropdown Menu
*
* Features:
* - Items, separators, labels
* - Checkbox items
* - Radio group items
* - Sub-menus
* - Keyboard navigation
*/
export function CompleteDropdown() {
const [bookmarksChecked, setBookmarksChecked] = React.useState(true);
const [urlsChecked, setUrlsChecked] = React.useState(false);
const [person, setPerson] = React.useState('pedro');
return (
<DropdownMenu.Root>
<DropdownMenu.Trigger asChild>
<button className="icon-button" aria-label="Customise options">
<HamburgerMenuIcon />
</button>
</DropdownMenu.Trigger>
<DropdownMenu.Portal>
<DropdownMenu.Content className="dropdown-content" sideOffset={5}>
{/* Regular items */}
<DropdownMenu.Item className="dropdown-item">
New Tab <div className="right-slot">+T</div>
</DropdownMenu.Item>
<DropdownMenu.Item className="dropdown-item">
New Window <div className="right-slot">+N</div>
</DropdownMenu.Item>
<DropdownMenu.Item className="dropdown-item" disabled>
New Private Window <div className="right-slot">++N</div>
</DropdownMenu.Item>
{/* Sub-menu */}
<DropdownMenu.Sub>
<DropdownMenu.SubTrigger className="dropdown-subtrigger">
More Tools
<div className="right-slot">
<ChevronRightIcon />
</div>
</DropdownMenu.SubTrigger>
<DropdownMenu.Portal>
<DropdownMenu.SubContent
className="dropdown-subcontent"
sideOffset={2}
alignOffset={-5}
>
<DropdownMenu.Item className="dropdown-item">
Save Page As <div className="right-slot">+S</div>
</DropdownMenu.Item>
<DropdownMenu.Item className="dropdown-item">
Create Shortcut
</DropdownMenu.Item>
<DropdownMenu.Item className="dropdown-item">
Name Window
</DropdownMenu.Item>
<DropdownMenu.Separator className="dropdown-separator" />
<DropdownMenu.Item className="dropdown-item">
Developer Tools
</DropdownMenu.Item>
</DropdownMenu.SubContent>
</DropdownMenu.Portal>
</DropdownMenu.Sub>
<DropdownMenu.Separator className="dropdown-separator" />
{/* Checkbox items */}
<DropdownMenu.CheckboxItem
className="dropdown-checkbox-item"
checked={bookmarksChecked}
onCheckedChange={setBookmarksChecked}
>
<DropdownMenu.ItemIndicator className="dropdown-item-indicator">
<CheckIcon />
</DropdownMenu.ItemIndicator>
Show Bookmarks <div className="right-slot">+B</div>
</DropdownMenu.CheckboxItem>
<DropdownMenu.CheckboxItem
className="dropdown-checkbox-item"
checked={urlsChecked}
onCheckedChange={setUrlsChecked}
>
<DropdownMenu.ItemIndicator className="dropdown-item-indicator">
<CheckIcon />
</DropdownMenu.ItemIndicator>
Show Full URLs
</DropdownMenu.CheckboxItem>
<DropdownMenu.Separator className="dropdown-separator" />
{/* Radio group */}
<DropdownMenu.Label className="dropdown-label">
People
</DropdownMenu.Label>
<DropdownMenu.RadioGroup value={person} onValueChange={setPerson}>
<DropdownMenu.RadioItem className="dropdown-radio-item" value="pedro">
<DropdownMenu.ItemIndicator className="dropdown-item-indicator">
<DotFilledIcon />
</DropdownMenu.ItemIndicator>
Pedro Duarte
</DropdownMenu.RadioItem>
<DropdownMenu.RadioItem className="dropdown-radio-item" value="colm">
<DropdownMenu.ItemIndicator className="dropdown-item-indicator">
<DotFilledIcon />
</DropdownMenu.ItemIndicator>
Colm Tuite
</DropdownMenu.RadioItem>
</DropdownMenu.RadioGroup>
<DropdownMenu.Arrow className="dropdown-arrow" />
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu.Root>
);
}
/**
* Example: Simple Actions Menu
*
* Common use case for data tables, cards, etc.
*/
export function ActionsMenu({ onEdit, onDuplicate, onDelete }) {
return (
<DropdownMenu.Root>
<DropdownMenu.Trigger asChild>
<button className="icon-button" aria-label="Actions">
<DotsHorizontalIcon />
</button>
</DropdownMenu.Trigger>
<DropdownMenu.Portal>
<DropdownMenu.Content className="dropdown-content" align="end">
<DropdownMenu.Item className="dropdown-item" onSelect={onEdit}>
Edit
</DropdownMenu.Item>
<DropdownMenu.Item className="dropdown-item" onSelect={onDuplicate}>
Duplicate
</DropdownMenu.Item>
<DropdownMenu.Separator className="dropdown-separator" />
<DropdownMenu.Item
className="dropdown-item dropdown-item-danger"
onSelect={onDelete}
>
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu.Root>
);
}

View File

@@ -0,0 +1,148 @@
/**
* Radix UI Component Template
*
* This template provides a starting point for creating
* custom components with Radix UI primitives.
*
* Replace [PRIMITIVE] with actual primitive name:
* Dialog, DropdownMenu, Select, Tabs, Tooltip, etc.
*/
import * as [PRIMITIVE] from '@radix-ui/react-[primitive]';
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
// ============================================================================
// Variants Definition (using CVA)
// ============================================================================
const [component]Variants = cva(
// Base styles (always applied)
"base-styles-here",
{
variants: {
// Define your variants
variant: {
default: "default-styles",
secondary: "secondary-styles",
destructive: "destructive-styles",
},
size: {
sm: "small-size-styles",
md: "medium-size-styles",
lg: "large-size-styles",
},
},
defaultVariants: {
variant: "default",
size: "md",
},
}
);
// ============================================================================
// TypeScript Interfaces
// ============================================================================
interface [Component]Props
extends React.ComponentPropsWithoutRef<typeof [PRIMITIVE].Root>,
VariantProps<typeof [component]Variants> {
// Add custom props here
}
// ============================================================================
// Component Implementation
// ============================================================================
export function [Component]({
variant,
size,
className,
children,
...props
}: [Component]Props) {
return (
<[PRIMITIVE].Root {...props}>
{/* Trigger */}
<[PRIMITIVE].Trigger asChild>
<button className={cn([component]Variants({ variant, size }), className)}>
{children}
</button>
</[PRIMITIVE].Trigger>
{/* Portal (if needed) */}
<[PRIMITIVE].Portal>
{/* Overlay (for Dialog, etc.) */}
<[PRIMITIVE].Overlay className="overlay-styles" />
{/* Content */}
<[PRIMITIVE].Content className="content-styles">
{/* Required accessibility parts */}
<[PRIMITIVE].Title className="title-styles">
Title
</[PRIMITIVE].Title>
<[PRIMITIVE].Description className="description-styles">
Description
</[PRIMITIVE].Description>
{/* Your content */}
<div className="content-body">
{/* ... */}
</div>
{/* Close button */}
<[PRIMITIVE].Close asChild>
<button className="close-button">Close</button>
</[PRIMITIVE].Close>
</[PRIMITIVE].Content>
</[PRIMITIVE].Portal>
</[PRIMITIVE].Root>
);
}
// ============================================================================
// Sub-components (if needed)
// ============================================================================
[Component].[SubComponent] = function [SubComponent]({
className,
...props
}: React.ComponentPropsWithoutRef<typeof [PRIMITIVE].[SubComponent]>) {
return (
<[PRIMITIVE].[SubComponent]
className={cn("subcomponent-styles", className)}
{...props}
/>
);
};
// ============================================================================
// Usage Example
// ============================================================================
/*
import { [Component] } from './[component]';
function App() {
return (
<[Component] variant="default" size="md">
Trigger Content
</[Component]
);
}
*/
// ============================================================================
// Accessibility Checklist
// ============================================================================
/*
[ ] Keyboard navigation works (Tab, Arrow keys, Enter, Esc)
[ ] Focus visible on all interactive elements
[ ] Screen reader announces all states
[ ] ARIA attributes are correct
[ ] Color contrast meets WCAG AA (4.5:1 for text)
[ ] Focus trapped when needed (modals)
[ ] Focus restored after close
*/

View File

@@ -0,0 +1,165 @@
# Stitch UI Design Skill
Expert guidance for creating effective prompts in Google Stitch, the AI-powered UI design tool.
## Overview
This skill provides comprehensive guidance for crafting precise, actionable prompts that generate high-quality UI designs in Google Stitch. It covers prompt structure, specificity techniques, iteration strategies, and design-to-code workflows.
## What's Included
### SKILL.md
Core prompting principles and techniques:
- Specificity and detail requirements
- Visual style definition
- Multi-screen flow structuring
- Platform and responsive specifications
- Functional requirements
- Prompt templates
- Iteration strategies
- Common use cases
- Anti-patterns to avoid
### References
#### prompt-examples.md
Comprehensive library of effective Stitch prompts organized by category:
- Landing pages
- Mobile apps
- Dashboards
- E-commerce
- Forms & authentication
- Content platforms
- SaaS applications
Each example includes detailed component breakdowns, style specifications, and platform requirements.
#### advanced-techniques.md
Advanced strategies for production-ready designs:
- Image-to-UI workflows
- Design system integration
- Responsive design strategies
- Accessibility considerations
- Performance optimization
- Component reusability
- Atomic design methodology
- Export and handoff best practices
## When to Use This Skill
Use this skill when:
- Creating UI designs in Google Stitch
- Generating mobile or web app interfaces
- Crafting effective Stitch prompts
- Converting sketches or wireframes to digital UI
- Building design systems
- Creating responsive layouts
- Ensuring accessibility compliance
- Optimizing design-to-code workflows
## Key Principles
1. **Be Specific** - Generic prompts yield generic results
2. **Define Visual Style** - Always include colors, aesthetics, and design direction
3. **Structure Clearly** - List components and sections explicitly
4. **Specify Platform** - Indicate mobile, tablet, desktop, or responsive
5. **Include Functionality** - Describe interactions, states, and user flows
6. **Iterate Incrementally** - Make focused changes rather than complete redesigns
## Quick Start
### Basic Prompt Template
```
[Screen/Component Type] for [User/Context]
Key Features:
- [Feature 1 with specific details]
- [Feature 2 with specific details]
- [Feature 3 with specific details]
Visual Style:
- [Color scheme]
- [Design aesthetic]
- [Layout approach]
Platform: [Mobile/Web/Responsive]
```
### Example Usage
```
Dashboard for SaaS analytics platform
Key Features:
- Top metrics cards showing MRR, active users, churn rate
- Line chart for revenue trends (last 30 days)
- Recent activity feed with user actions
- Quick action buttons for reports and exports
Visual Style:
- Dark mode with blue/purple gradient accents
- Modern glassmorphic cards with subtle shadows
- Clean data visualization with accessible colors
Platform: Responsive web (desktop-first)
```
## Best Practices
### Do's ✅
- Provide specific component details
- Define clear visual direction
- Specify responsive behavior
- Include interaction states
- Use design terminology
- Reference existing designs when helpful
- Iterate with annotations
- Consider accessibility from the start
### Don'ts ❌
- Use vague descriptions ("nice website")
- Omit visual style guidance
- Forget platform specifications
- Ignore responsive requirements
- Skip accessibility considerations
- Make complete redesigns instead of incremental changes
## Integration with Development
### Stitch → Figma → Code
1. Generate UI in Stitch with detailed prompts
2. Export to Figma for design system integration
3. Hand off to developers with design specs
4. Implement with production-ready code
### Stitch → HTML → Framework
1. Generate and refine UI in Stitch
2. Export HTML/CSS code
3. Convert to React/Vue/Svelte components
4. Integrate into application codebase
## Resources
- **SKILL.md** - Core prompting guide
- **prompt-examples.md** - 30+ detailed prompt examples
- **advanced-techniques.md** - Production-ready design strategies
## Tips for Success
1. Start with clear requirements and context
2. Use the prompt template for consistency
3. Reference examples for similar use cases
4. Iterate incrementally with annotations
5. Generate variants to explore options
6. Always specify visual style and platform
7. Consider accessibility in every prompt
8. Refine exports before production use
## About Google Stitch
Google Stitch is an experimental AI UI generator powered by Gemini 2.5 Flash that transforms text prompts and visual references into functional UI designs. It supports text-to-UI generation, image-to-UI conversion, multi-screen flows, and exports to HTML/CSS, Figma, and code.
---
**Note:** This skill is designed to help you create effective prompts for Stitch. The quality of your output depends on the specificity and clarity of your prompts. Use the templates and examples as starting points, then customize for your unique requirements.

View File

@@ -0,0 +1,378 @@
---
name: stitch-ui-design
description: Expert guide for creating effective prompts for Google Stitch AI UI design tool. Use when user wants to design UI/UX in Stitch, create app interfaces, generate mobile/web designs, or needs help crafting Stitch prompts. Covers prompt structure, specificity techniques, iteration strategies, and design-to-code workflows for Stitch by Google.
risk: safe
source: "self"
---
# Stitch UI Design Prompting
Expert guidance for crafting effective prompts in Google Stitch, the AI-powered UI design tool by Google Labs. This skill helps create precise, actionable prompts that generate high-quality UI designs for web and mobile applications.
## What is Google Stitch?
Google Stitch is an experimental AI UI generator powered by Gemini 2.5 Flash that transforms text prompts and visual references into functional UI designs. It supports:
- Text-to-UI generation from natural language prompts
- Image-to-UI conversion from sketches, wireframes, or screenshots
- Multi-screen app flows and responsive layouts
- Export to HTML/CSS, Figma, and code
- Iterative refinement with variants and annotations
## Core Prompting Principles
### 1. Be Specific and Detailed
Generic prompts yield generic results. Specific prompts with clear requirements produce tailored, professional designs.
**Poor prompt:**
```
Create a dashboard
```
**Effective prompt:**
```
Member dashboard with course modules grid, progress tracking bar,
and community feed sidebar using purple theme and card-based layout
```
**Why it works:** Specifies components (modules, progress, feed), layout structure (grid, sidebar), visual style (purple theme, cards), and context (member dashboard).
### 2. Define Visual Style and Theme
Always include color schemes, design aesthetics, and visual direction to avoid generic AI outputs.
**Components to specify:**
- Color palette (primary colors, accent colors)
- Design style (minimalist, modern, playful, professional, glassmorphic)
- Typography preferences (if any)
- Spacing and density (compact, spacious, balanced)
**Example:**
```
E-commerce product page with hero image gallery, add-to-cart CTA,
reviews section, and related products carousel. Use clean minimalist
design with sage green accents and generous white space.
```
### 3. Structure Multi-Screen Flows Clearly
For apps with multiple screens, list each screen as bullet points before generation.
**Approach:**
```
Fitness tracking app with:
- Onboarding screen with goal selection
- Home dashboard with daily stats and activity rings
- Workout library with category filters
- Profile screen with achievements and settings
```
Stitch will ask for confirmation before generating multiple screens, ensuring alignment with your vision.
### 4. Specify Platform and Responsive Behavior
Indicate whether the design is for mobile, tablet, desktop, or responsive web.
**Examples:**
```
Mobile app login screen (iOS style) with email/password fields and social auth buttons
Responsive landing page that adapts from mobile (320px) to desktop (1440px)
with collapsible navigation
```
### 5. Include Functional Requirements
Describe interactive elements, states, and user flows to generate more complete designs.
**Elements to specify:**
- Button actions and CTAs
- Form fields and validation
- Navigation patterns
- Loading states
- Empty states
- Error handling
**Example:**
```
Checkout flow with:
- Cart summary with quantity adjusters
- Shipping address form with validation
- Payment method selection (cards, PayPal, Apple Pay)
- Order confirmation with tracking number
```
## Prompt Structure Template
Use this template for comprehensive prompts:
```
[Screen/Component Type] for [User/Context]
Key Features:
- [Feature 1 with specific details]
- [Feature 2 with specific details]
- [Feature 3 with specific details]
Visual Style:
- [Color scheme]
- [Design aesthetic]
- [Layout approach]
Platform: [Mobile/Web/Responsive]
```
**Example:**
```
Dashboard for SaaS analytics platform
Key Features:
- Top metrics cards showing MRR, active users, churn rate
- Line chart for revenue trends (last 30 days)
- Recent activity feed with user actions
- Quick action buttons for reports and exports
Visual Style:
- Dark mode with blue/purple gradient accents
- Modern glassmorphic cards with subtle shadows
- Clean data visualization with accessible colors
Platform: Responsive web (desktop-first)
```
## Iteration Strategies
### Refine with Annotations
Use Stitch's "annotate to edit" feature to make targeted changes without rewriting the entire prompt.
**Workflow:**
1. Generate initial design from prompt
2. Annotate specific elements that need changes
3. Describe modifications in natural language
4. Stitch updates only the annotated areas
**Example annotations:**
- "Make this button larger and use primary color"
- "Add more spacing between these cards"
- "Change this to a horizontal layout"
### Generate Variants
Request multiple variations to explore different design directions:
```
Generate 3 variants of this hero section:
1. Image-focused with minimal text
2. Text-heavy with supporting graphics
3. Video background with overlay content
```
### Progressive Refinement
Start broad, then add specificity in follow-up prompts:
**Initial:**
```
E-commerce homepage
```
**Refinement 1:**
```
Add featured products section with 4-column grid and hover effects
```
**Refinement 2:**
```
Update color scheme to earth tones (terracotta, sage, cream)
and add promotional banner at top
```
## Common Use Cases
### Landing Pages
```
SaaS landing page for [product name]
Sections:
- Hero with headline, subheadline, CTA, and product screenshot
- Social proof with customer logos
- Features grid (3 columns) with icons
- Testimonials carousel
- Pricing table (3 tiers)
- FAQ accordion
- Footer with links and newsletter signup
Style: Modern, professional, trust-building
Colors: Navy blue primary, light blue accents, white background
```
### Mobile Apps
```
Food delivery app home screen
Components:
- Search bar with location selector
- Category chips (Pizza, Burgers, Sushi, etc.)
- Restaurant cards with image, name, rating, delivery time, and price range
- Bottom navigation (Home, Search, Orders, Profile)
Style: Vibrant, appetite-appealing, easy to scan
Colors: Orange primary, white background, food photography
Platform: iOS mobile (375px width)
```
### Dashboards
```
Admin dashboard for content management system
Layout:
- Left sidebar navigation with collapsible menu
- Top bar with search, notifications, and user profile
- Main content area with:
- Stats overview (4 metric cards)
- Recent posts table with actions
- Activity timeline
- Quick actions panel
Style: Clean, data-focused, professional
Colors: Neutral grays with blue accents
Platform: Desktop web (1440px)
```
### Forms and Inputs
```
Multi-step signup form for B2B platform
Steps:
1. Account details (company name, email, password)
2. Company information (industry, size, role)
3. Team setup (invite members)
4. Confirmation with success message
Features:
- Progress indicator at top
- Field validation with inline errors
- Back/Next navigation
- Skip option for step 3
Style: Minimal, focused, low-friction
Colors: White background, green for success states
```
## Design-to-Code Workflow
### Export Options
Stitch provides multiple export formats:
1. **HTML/CSS** - Clean, semantic markup for web projects
2. **Figma** - "Paste to Figma" for design system integration
3. **Code snippets** - Component-level exports for frameworks
### Best Practices for Export
**Before exporting:**
- Verify responsive breakpoints
- Check color contrast for accessibility
- Ensure interactive states are defined
- Review component naming and structure
**After export:**
- Refactor generated code for production standards
- Add proper semantic HTML tags
- Implement accessibility attributes (ARIA labels, alt text)
- Optimize images and assets
- Add animations and micro-interactions
## Anti-Patterns to Avoid
### ❌ Vague Prompts
```
Make a nice website
```
### ✅ Specific Prompts
```
Portfolio website for photographer with full-screen image gallery,
project case studies, and contact form. Minimalist black and white
aesthetic with serif typography.
```
---
### ❌ Missing Context
```
Create a login page
```
### ✅ Context-Rich Prompts
```
Login page for healthcare portal with email/password fields,
"Remember me" checkbox, "Forgot password" link, and SSO options
(Google, Microsoft). Professional, trustworthy design with
blue medical theme.
```
---
### ❌ No Visual Direction
```
Design an app for task management
```
### ✅ Clear Visual Direction
```
Task management app with kanban board layout, drag-and-drop cards,
priority labels, and due date indicators. Modern, productivity-focused
design with purple/teal gradient accents and dark mode support.
```
## Tips for Better Results
1. **Reference existing designs** - Upload screenshots or sketches as visual references alongside text prompts
2. **Use design terminology** - Terms like "hero section," "card layout," "glassmorphic," "bento grid" help Stitch understand your intent
3. **Specify interactions** - Describe hover states, click actions, and transitions for more complete designs
4. **Think in components** - Break complex screens into reusable components (header, card, form, etc.)
5. **Iterate incrementally** - Make small, focused changes rather than complete redesigns
6. **Test responsiveness** - Always verify designs at multiple breakpoints (mobile, tablet, desktop)
7. **Consider accessibility** - Mention color contrast, font sizes, and touch target sizes in prompts
8. **Leverage variants** - Generate multiple options to explore different design directions quickly
## Integration with Development Workflow
### Stitch → Figma → Code
1. Generate UI in Stitch with detailed prompts
2. Export to Figma for design system integration
3. Hand off to developers with design specs
4. Implement with production-ready code
### Stitch → HTML → Framework
1. Generate and refine UI in Stitch
2. Export HTML/CSS code
3. Convert to React/Vue/Svelte components
4. Integrate into application codebase
### Rapid Prototyping
1. Create multiple screen variations quickly
2. Test with users or stakeholders
3. Iterate based on feedback
4. Finalize design for development
## Conclusion
Effective Stitch prompts are specific, context-rich, and visually descriptive. By following these principles and templates, you can generate professional UI designs that serve as strong foundations for production applications.
**Remember:** Stitch is a starting point, not a final product. Use it to accelerate the design process, explore ideas quickly, and establish visual direction—then refine with human judgment and production standards.

View File

@@ -0,0 +1,541 @@
# Advanced Stitch Techniques
Advanced strategies for maximizing Stitch's capabilities and creating production-ready designs.
## Table of Contents
1. [Image-to-UI Workflows](#image-to-ui-workflows)
2. [Design System Integration](#design-system-integration)
3. [Responsive Design Strategies](#responsive-design-strategies)
4. [Accessibility Considerations](#accessibility-considerations)
5. [Performance Optimization](#performance-optimization)
6. [Component Reusability](#component-reusability)
---
## Image-to-UI Workflows
### Converting Sketches to Digital UI
Stitch can interpret hand-drawn sketches, wireframes, and rough mockups.
**Best practices:**
1. **Clear structure** - Draw distinct boxes for components
2. **Label elements** - Annotate buttons, inputs, sections
3. **Show hierarchy** - Use size and position to indicate importance
4. **Include notes** - Add text describing interactions or states
**Example workflow:**
```
1. Sketch wireframe on paper or tablet
2. Take clear photo or scan
3. Upload to Stitch with prompt:
"Convert this wireframe to a modern web interface with
glassmorphic design and purple gradient accents"
4. Refine generated design with annotations
```
### Reference-Based Design
Upload screenshots of existing designs to create similar layouts with your own branding.
**Prompt structure:**
```
Create a [type] similar to this reference image, but with:
- [Your color scheme]
- [Your content/copy]
- [Your brand style]
- [Specific modifications]
```
**Example:**
```
Create a pricing page similar to this reference, but with:
- Navy blue and gold color scheme
- 4 pricing tiers instead of 3
- Annual/monthly toggle
- Feature comparison table below
- Testimonials section at bottom
```
---
## Design System Integration
### Establishing Design Tokens
Define reusable design tokens in your initial prompt for consistency across screens.
**Token categories:**
- Colors (primary, secondary, accent, neutral, semantic)
- Typography (font families, sizes, weights, line heights)
- Spacing (scale: 4px, 8px, 16px, 24px, 32px, 48px, 64px)
- Border radius (none, sm, md, lg, full)
- Shadows (elevation levels)
**Example prompt:**
```
Dashboard using this design system:
Colors:
- Primary: #2563EB (blue)
- Secondary: #7C3AED (purple)
- Success: #10B981 (green)
- Warning: #F59E0B (amber)
- Error: #EF4444 (red)
- Neutral: #6B7280 (gray)
Typography:
- Headings: Inter Bold
- Body: Inter Regular
- Code: JetBrains Mono
Spacing: 8px base unit
Border radius: 8px for cards, 4px for buttons
Shadows: Subtle elevation with 0 4px 6px rgba(0,0,0,0.1)
```
### Component Library Approach
Create a component library by generating individual components first, then composing them into full screens.
**Workflow:**
```
1. Generate base components:
- Button variants (primary, secondary, outline, ghost)
- Input fields (text, email, password, search)
- Cards (basic, with image, with actions)
- Navigation (header, sidebar, tabs)
2. Document component specs:
- States (default, hover, active, disabled)
- Sizes (sm, md, lg)
- Variants
3. Compose screens using established components:
"Create a settings page using the button and input
components from previous generations"
```
---
## Responsive Design Strategies
### Mobile-First Approach
Start with mobile design, then scale up to tablet and desktop.
**Prompt sequence:**
**Step 1 - Mobile (375px):**
```
Mobile app home screen for recipe platform
Layout:
- Stacked vertical sections
- Full-width cards
- Bottom navigation
- Hamburger menu
Content:
- Search bar at top
- Featured recipe hero card
- Category chips (horizontal scroll)
- Recipe grid (1 column)
```
**Step 2 - Tablet (768px):**
```
Adapt the mobile recipe home screen for tablet:
- 2-column recipe grid
- Persistent sidebar navigation (replaces hamburger)
- Larger featured hero with side-by-side layout
- Category chips remain scrollable
```
**Step 3 - Desktop (1440px):**
```
Adapt for desktop:
- 3-column recipe grid
- Full sidebar with categories expanded
- Hero section with 3 featured recipes
- Top navigation bar with search and user menu
```
### Breakpoint-Specific Prompts
Specify exact breakpoints and layout changes.
**Example:**
```
Responsive product grid:
Mobile (< 640px):
- 1 column
- Full-width cards
- Vertical image orientation
Tablet (640px - 1024px):
- 2 columns
- Square images
- Compact card layout
Desktop (> 1024px):
- 4 columns
- Hover effects with overlay
- Quick view button
```
---
## Accessibility Considerations
### WCAG Compliance Prompts
Include accessibility requirements directly in prompts.
**Key areas to specify:**
1. **Color Contrast**
```
Ensure all text meets WCAG AA standards:
- Normal text: 4.5:1 contrast ratio minimum
- Large text (18pt+): 3:1 contrast ratio minimum
- Interactive elements: clear focus states with 3:1 contrast
```
2. **Touch Targets**
```
All interactive elements minimum 44x44px touch target size
Adequate spacing between clickable elements (8px minimum)
```
3. **Keyboard Navigation**
```
Clear focus indicators on all interactive elements
Logical tab order following visual flow
Skip navigation link for keyboard users
```
4. **Screen Reader Support**
```
Descriptive button labels (not just "Click here")
Alt text for all meaningful images
Form labels properly associated with inputs
Heading hierarchy (H1 → H2 → H3)
```
**Comprehensive accessibility prompt:**
```
Create an accessible contact form:
Fields:
- Name (required, with aria-required)
- Email (required, with validation and error message)
- Subject (dropdown with clear labels)
- Message (textarea with character count)
Accessibility features:
- All inputs have visible labels
- Required fields marked with asterisk and aria-required
- Error messages with role="alert"
- Submit button with descriptive text
- Focus indicators with 3px blue outline
- Color contrast meets WCAG AA
- Touch targets 44x44px minimum
Style: Clean, form-focused, high contrast
Colors: Dark text on light background, red for errors
```
### Inclusive Design Patterns
**Consider diverse users:**
```
Design a video player interface that supports:
- Captions/subtitles toggle
- Audio description option
- Keyboard shortcuts (space to play/pause, arrows to seek)
- Playback speed control
- High contrast mode
- Reduced motion option (disable animations)
```
---
## Performance Optimization
### Optimized Asset Prompts
Request performance-conscious designs from the start.
**Image optimization:**
```
E-commerce product gallery with performance optimization:
- Lazy loading for images below fold
- Thumbnail images (200x200px) for grid
- Full-size images (1200x1200px) only on click
- WebP format with JPEG fallback
- Blur placeholder while loading
```
**Code efficiency:**
```
Generate lightweight HTML/CSS without:
- Unnecessary wrapper divs
- Inline styles (use classes)
- Large external dependencies
- Redundant CSS rules
```
### Progressive Enhancement
Design for core functionality first, then enhance.
**Example:**
```
Create a filterable product list with progressive enhancement:
Base (no JavaScript):
- Server-rendered product grid
- Form-based filters with submit button
- Pagination links
Enhanced (with JavaScript):
- AJAX filter updates without page reload
- Infinite scroll
- Smooth animations
- Real-time search
```
---
## Component Reusability
### Atomic Design Methodology
Build from atoms → molecules → organisms → templates → pages.
**Atoms (basic elements):**
```
Generate design system atoms:
- Button (primary, secondary, outline, ghost, danger)
- Input field (text, email, password, search, textarea)
- Label, Badge, Tag
- Icon set (24x24px, consistent style)
- Avatar (circle, square, with status indicator)
```
**Molecules (simple combinations):**
```
Create molecules using atoms:
- Search bar (input + button + icon)
- Form field (label + input + error message)
- Card header (avatar + name + timestamp + menu)
- Stat card (icon + label + value + trend)
```
**Organisms (complex components):**
```
Build organisms from molecules:
- Navigation bar (logo + search bar + user menu)
- Product card (image + title + price + rating + button)
- Comment thread (avatar + name + timestamp + text + actions)
- Data table (headers + rows + pagination + filters)
```
**Templates (page layouts):**
```
Compose templates from organisms:
- Dashboard layout (sidebar + header + content grid)
- Article layout (header + hero + content + sidebar)
- Checkout flow (progress + form + summary)
```
### Variant Generation
Create systematic variations of components.
**Button variants prompt:**
```
Generate button component with all variants:
Sizes: Small (32px), Medium (40px), Large (48px)
Types:
- Primary (filled, brand color)
- Secondary (filled, gray)
- Outline (border only)
- Ghost (transparent, hover background)
- Danger (filled, red)
States for each:
- Default
- Hover
- Active (pressed)
- Disabled
- Loading (with spinner)
Include: Icon support (left/right), full-width option
```
---
## Advanced Iteration Techniques
### Conditional Variations
Generate multiple versions based on different conditions.
**Example:**
```
Create 3 hero section variants for A/B testing:
Variant A - Image-focused:
- Large background image
- Minimal text overlay
- Single CTA button
Variant B - Text-focused:
- Solid color background
- Detailed copy with bullet points
- Two CTA buttons (primary + secondary)
Variant C - Video-focused:
- Background video
- Minimal text
- Play button + CTA
All variants use same brand colors and maintain mobile responsiveness
```
### State-Based Design
Design for all possible states, not just the happy path.
**Comprehensive state prompt:**
```
Design a data table with all states:
Default state:
- 10 rows of data
- Sortable columns
- Pagination
Loading state:
- Skeleton loaders for rows
- Disabled controls
Empty state:
- Illustration
- "No data found" message
- "Add new" CTA button
Error state:
- Error icon
- Error message
- "Retry" button
Search/Filter active:
- Applied filters shown as chips
- Clear filters option
- Result count
Selected rows:
- Checkbox selection
- Bulk action toolbar
- Select all option
```
---
## Export and Handoff Best Practices
### Preparing for Development
Before exporting, ensure designs are developer-ready.
**Pre-export checklist:**
1. **Naming conventions**
- Use semantic class names
- Follow BEM or consistent methodology
- Name components clearly
2. **Documentation**
- Add comments for complex interactions
- Document responsive breakpoints
- Note any required JavaScript behavior
3. **Asset organization**
- Export images at correct sizes
- Provide SVG for icons
- Include font files or CDN links
4. **Specifications**
- Document spacing values
- List color hex codes
- Specify font sizes and weights
### Figma Integration
Optimize Stitch → Figma workflow.
**Steps:**
```
1. Generate design in Stitch with detailed specifications
2. Use "Paste to Figma" export
3. In Figma:
- Organize layers with clear naming
- Create components from repeated elements
- Set up auto-layout for responsive behavior
- Define color and text styles
- Add design system documentation
4. Share with developers using Figma's inspect mode
```
### Code Export Refinement
Improve exported HTML/CSS for production.
**Post-export tasks:**
1. **Semantic HTML**
- Replace divs with semantic tags (header, nav, main, article, section, footer)
- Add ARIA labels where needed
- Ensure proper heading hierarchy
2. **CSS optimization**
- Extract repeated styles into utility classes
- Use CSS custom properties for theme values
- Organize with methodology (BEM, SMACSS, etc.)
- Add responsive media queries if missing
3. **Accessibility**
- Add alt text to images
- Ensure form labels are associated
- Add focus styles
- Test with screen reader
4. **Performance**
- Optimize images
- Minify CSS
- Remove unused styles
- Add loading strategies
---
## Conclusion
These advanced techniques help you move beyond basic Stitch usage to create production-ready, accessible, and performant designs. Combine these strategies with the core prompting principles to maximize your efficiency and output quality.
**Key takeaways:**
- Use images and references to accelerate design
- Establish design systems early for consistency
- Design responsively from the start
- Prioritize accessibility in every prompt
- Think in reusable components
- Plan for all states, not just happy paths
- Refine exports before production use

View File

@@ -0,0 +1,601 @@
# Stitch Prompt Examples Library
Comprehensive collection of effective Stitch prompts organized by use case and complexity level.
## Table of Contents
1. [Landing Pages](#landing-pages)
2. [Mobile Apps](#mobile-apps)
3. [Dashboards](#dashboards)
4. [E-commerce](#e-commerce)
5. [Forms & Authentication](#forms--authentication)
6. [Content Platforms](#content-platforms)
7. [SaaS Applications](#saas-applications)
---
## Landing Pages
### Startup Landing Page
```
Landing page for AI writing assistant startup
Hero Section:
- Bold headline: "Write Better, Faster with AI"
- Subheadline explaining value proposition
- Primary CTA button "Start Free Trial"
- Secondary CTA "Watch Demo"
- Hero illustration showing product interface
Features Section:
- 3-column grid with icons
- Feature 1: AI-powered suggestions
- Feature 2: Multi-language support
- Feature 3: Team collaboration
Social Proof:
- Customer logos (6 companies)
- Testimonial cards with photos and quotes
Pricing:
- 3-tier pricing table (Free, Pro, Enterprise)
- Feature comparison
- Annual/Monthly toggle
Style: Modern, tech-forward, trustworthy
Colors: Deep purple primary, cyan accents, white background
Typography: Sans-serif, clean and readable
Platform: Responsive web
```
### Service Business Landing
```
Landing page for boutique yoga studio
Above Fold:
- Full-width hero image of studio space
- Centered headline: "Find Your Balance"
- Class schedule CTA button
- Location and hours overlay
Class Offerings:
- Card grid (2x3) with class types
- Each card: class name, duration, difficulty level, instructor photo
- Hover effect reveals class description
Instructor Profiles:
- Horizontal scrolling carousel
- Circular photos with names and specialties
Testimonials:
- Large quote format with student photos
- 5-star ratings
Call-to-Action:
- "Book Your First Class Free" banner
- Contact form with name, email, phone
Style: Calm, organic, welcoming
Colors: Sage green, warm beige, soft white
Typography: Serif headings, sans-serif body
Platform: Responsive web with mobile-first approach
```
---
## Mobile Apps
### Fitness Tracking App
```
Fitness tracking app - Home screen (iOS)
Top Section:
- Greeting with user name and current date
- Daily goal progress ring (calories, steps, active minutes)
- Motivational message based on progress
Quick Stats Cards:
- Today's steps with trend arrow
- Active calories burned
- Distance covered
- Active time
Recent Workouts:
- List of last 3 workouts with type, duration, calories
- Thumbnail icons for workout type
- Swipe actions for details/delete
Bottom Section:
- "Start Workout" prominent button
- Quick access to workout types (Run, Cycle, Strength, Yoga)
Bottom Navigation:
- Home (active), Workouts, Progress, Profile
Style: Energetic, motivating, data-focused
Colors: Vibrant orange primary, dark mode background, neon accents
Typography: Bold headings, clear metrics
Platform: iOS mobile (375x812px)
```
### Food Delivery App
```
Restaurant detail screen for food delivery app
Header:
- Restaurant cover photo
- Back button and favorite icon
- Restaurant name, rating (4.5 stars), delivery time (25-35 min)
- Cuisine tags (Italian, Pizza, Pasta)
Info Bar:
- Delivery fee, minimum order, distance
- Promo badge if applicable
Menu Categories:
- Sticky horizontal scroll tabs (Popular, Pizza, Pasta, Salads, Drinks)
Menu Items:
- Card layout with food photo, name, description, price
- Add button with quantity selector
- Dietary icons (vegetarian, spicy, etc.)
Floating Cart:
- Bottom sheet showing cart summary
- Item count and total price
- "View Cart" button
Style: Appetite-appealing, easy to scan, vibrant
Colors: Red primary (hunger-inducing), white background, food photography
Typography: Friendly sans-serif
Platform: Android mobile (360x800px)
```
---
## Dashboards
### Analytics Dashboard
```
Web analytics dashboard for marketing team
Top Bar:
- Date range selector (last 7 days, 30 days, custom)
- Export button
- Notification bell
- User profile dropdown
Key Metrics Row:
- 4 metric cards in a row
- Card 1: Total visitors (with % change)
- Card 2: Conversion rate (with trend sparkline)
- Card 3: Bounce rate (with comparison to previous period)
- Card 4: Average session duration
Main Chart:
- Line chart showing traffic over time
- Multiple lines for different sources (Organic, Paid, Social, Direct)
- Interactive legend to toggle lines
- Hover tooltips with exact values
Secondary Panels:
- Left: Top pages table (page, views, avg time, bounce rate)
- Right: Traffic sources pie chart with percentages
Bottom Section:
- Recent conversions table with user, source, value, timestamp
Style: Clean, data-focused, professional
Colors: Navy blue sidebar, white main area, colorful chart lines
Typography: Monospace for numbers, sans-serif for labels
Platform: Desktop web (1440px+)
```
### Project Management Dashboard
```
Project management dashboard - Team view
Sidebar:
- Workspace selector dropdown
- Navigation: Dashboard, Projects, Tasks, Team, Reports
- Create new project button
Header:
- Project name and status badge
- Team member avatars (max 5, then +N)
- Search bar
- View options (Board, List, Calendar)
Kanban Board:
- 4 columns: To Do, In Progress, Review, Done
- Drag-and-drop cards
- Each card shows: title, assignee avatar, due date, priority label, comment count
- Add card button at bottom of each column
Right Panel:
- Task details when card is selected
- Description, attachments, comments, activity log
Quick Stats:
- Progress bar showing completion percentage
- Tasks by status mini chart
- Upcoming deadlines list
Style: Modern, organized, collaborative
Colors: Purple primary, light gray background, status color coding
Typography: Clear sans-serif, readable at all sizes
Platform: Desktop web (1280px+)
```
---
## E-commerce
### Product Detail Page
```
Product detail page for fashion e-commerce
Image Gallery:
- Main product image (large, zoomable)
- Thumbnail strip below (5-6 images)
- 360° view option
- Video thumbnail if available
Product Info:
- Brand name
- Product title
- Star rating (4.8) with review count (234 reviews)
- Price with original price struck through if on sale
- Sale badge if applicable
Options:
- Size selector (XS, S, M, L, XL) with availability indicators
- Color swatches with product image preview on hover
- Quantity selector
Actions:
- Add to Cart button (prominent)
- Add to Wishlist button (outline)
- Size guide link
- Shipping calculator
Product Details:
- Tabbed interface (Description, Specifications, Reviews, Shipping)
- Expandable sections on mobile
Recommendations:
- "You May Also Like" carousel
- "Complete the Look" suggestions
Style: Clean, product-focused, trustworthy
Colors: Black and white with brand accent color (burgundy)
Typography: Elegant serif for headings, sans-serif for body
Platform: Responsive web
```
### Shopping Cart
```
Shopping cart page with checkout flow
Cart Items:
- List of products with thumbnail, name, size/color, price
- Quantity adjuster (+/- buttons)
- Remove item link
- Save for later option
Order Summary:
- Sticky sidebar on desktop, bottom sheet on mobile
- Subtotal
- Shipping (calculated or "Free over $50")
- Tax (estimated)
- Discount code input field
- Total (prominent)
- Checkout button (large, primary color)
Trust Signals:
- Secure checkout badge
- Free returns policy
- Customer service contact
Recommendations:
- "Frequently Bought Together" section
- Promotional banner for free shipping threshold
Empty State:
- Illustration
- "Your cart is empty" message
- "Continue Shopping" button
- Recently viewed items
Style: Clean, conversion-focused, reassuring
Colors: Green for checkout CTA, neutral grays, trust badges
Typography: Clear pricing, readable product names
Platform: Responsive web
```
---
## Forms & Authentication
### Multi-Step Signup Form
```
B2B SaaS signup flow - 3 steps
Progress Indicator:
- Step 1: Account (active)
- Step 2: Company
- Step 3: Team
Step 1 - Account Details:
- Email input with validation
- Password input with strength indicator
- Confirm password
- Terms and conditions checkbox
- "Continue" button
- "Already have an account? Sign in" link
Step 2 - Company Information:
- Company name
- Industry dropdown
- Company size radio buttons (1-10, 11-50, 51-200, 201+)
- Role/Title input
- "Back" and "Continue" buttons
Step 3 - Invite Team:
- Email input fields (dynamic, add more)
- Role selector for each invite
- "Skip for now" option
- "Finish Setup" button
Success State:
- Checkmark animation
- "Welcome to [Product]!" message
- "Go to Dashboard" button
Style: Minimal, focused, low-friction
Colors: Blue primary, white background, green success states
Typography: Clear labels, helpful microcopy
Platform: Responsive web, mobile-optimized
```
### Login Page
```
Login page for enterprise software
Left Panel (Desktop):
- Brand logo
- Hero image or illustration
- Value proposition headline
- Key benefits (3 bullet points)
Right Panel (Form):
- "Welcome back" heading
- Email input field
- Password input field with show/hide toggle
- "Remember me" checkbox
- "Forgot password?" link
- "Sign In" button (full width)
- Divider with "OR"
- SSO options (Google, Microsoft, Okta) as buttons with logos
- "Don't have an account? Sign up" link at bottom
Security Indicators:
- SSL badge
- "Your data is secure" message
Style: Professional, trustworthy, enterprise-grade
Colors: Corporate blue, white, subtle grays
Typography: Professional sans-serif
Platform: Responsive (left panel hidden on mobile)
```
---
## Content Platforms
### Blog Post Layout
```
Blog article page for tech publication
Header:
- Site navigation (logo, categories, search, subscribe)
Article Header:
- Category tag
- Article title (large, bold)
- Subtitle/excerpt
- Author info (photo, name, bio link, publish date)
- Social share buttons
- Reading time estimate
Article Body:
- Readable column width (max 680px)
- Paragraph text with proper line height
- H2 and H3 subheadings
- Pull quotes (styled distinctly)
- Inline images with captions
- Code blocks with syntax highlighting
- Embedded videos
- Table of contents (sticky sidebar on desktop)
Article Footer:
- Tags
- Share buttons
- Author card (expanded)
- Related articles (3 cards)
- Comments section
Sidebar (Desktop):
- Newsletter signup
- Popular posts
- Ad placement
Style: Editorial, readable, content-first
Colors: Black text on white, accent color for links
Typography: Serif for body text, sans-serif for UI
Platform: Responsive web
```
### Video Platform Interface
```
Video streaming platform - Watch page
Video Player:
- Full-width video player with controls
- Quality selector, playback speed, captions, fullscreen
- Progress bar with thumbnail preview on hover
Video Info:
- Video title
- View count and upload date
- Like/Dislike buttons
- Share button
- Save to playlist button
Channel Info:
- Channel avatar and name
- Subscriber count
- Subscribe button (prominent if not subscribed)
Description:
- Expandable description text
- Show more/less toggle
- Hashtags and links
Comments Section:
- Sort options (Top, Newest)
- Comment input with user avatar
- Comment cards with avatar, name, timestamp, text
- Like/Reply buttons
- Nested replies (indented)
Sidebar:
- Up next autoplay preview
- Recommended videos list (thumbnail, title, channel, views)
Style: Dark mode, video-focused, minimal distractions
Colors: Dark gray background, white text, red accent for CTAs
Typography: Sans-serif, readable at distance
Platform: Responsive web
```
---
## SaaS Applications
### Email Client Interface
```
Email client - Inbox view
Left Sidebar:
- Compose button (prominent)
- Folder list (Inbox, Sent, Drafts, Spam, Trash)
- Labels/Tags with color coding
- Storage usage indicator
Email List (Center):
- Search bar with filters
- Sort and view options
- Email rows showing:
- Sender avatar/initial
- Sender name (bold if unread)
- Subject line
- Preview text (truncated)
- Timestamp
- Attachment icon if present
- Star/flag icons
- Checkbox for bulk actions
- Pagination or infinite scroll
Email Detail (Right):
- Email header (from, to, cc, timestamp)
- Subject line
- Email body with formatting preserved
- Attachments section
- Action buttons (Reply, Reply All, Forward, Archive, Delete)
- Previous emails in thread (collapsed)
Top Bar:
- Refresh button
- Settings icon
- User profile dropdown
Style: Clean, productivity-focused, organized
Colors: Blue accents, white background, gray dividers
Typography: Sans-serif, scannable
Platform: Desktop web (1280px+)
```
### CRM Contact Detail
```
CRM contact detail page
Header:
- Contact name and company
- Contact photo/avatar
- Status badge (Lead, Customer, Inactive)
- Quick actions (Email, Call, Schedule Meeting, Edit)
Info Tabs:
- Overview (active), Activity, Deals, Notes, Files
Overview Tab:
- Contact information card (email, phone, address, social links)
- Company information card
- Tags and custom fields
- Assigned to (team member)
Activity Timeline:
- Chronological list of interactions
- Icons for type (email, call, meeting, note)
- Timestamp and description
- Filter by activity type
Deals Section:
- Active deals table (deal name, value, stage, close date)
- Won/Lost deals summary
Notes Section:
- Add note input with rich text editor
- Note cards with author, timestamp, content
- Pin important notes
Right Sidebar:
- Next scheduled activity
- Recent emails
- Related contacts
- Deal pipeline stage
Style: Professional, data-rich, organized
Colors: Navy blue, white, status color coding
Typography: Clear hierarchy, readable data
Platform: Desktop web (1440px+)
```
---
## Tips for Using These Examples
1. **Customize for your needs** - Replace placeholder content with your specific requirements
2. **Combine elements** - Mix and match components from different examples
3. **Adjust complexity** - Simplify or expand based on your project scope
4. **Specify your brand** - Add your color palette, fonts, and visual style
5. **Consider platform** - Adapt layouts for your target device (mobile/desktop)
6. **Add context** - Include user personas or use cases for better results
7. **Iterate** - Start with a basic prompt, then refine with annotations
Remember: These are starting points. Stitch works best when you provide specific details relevant to your unique project.

View File

@@ -197,6 +197,24 @@
"risk": "unknown",
"source": "unknown"
},
{
"id": "angular",
"path": "skills/angular",
"category": "uncategorized",
"name": "angular",
"description": "Modern Angular (v20+) expert with deep knowledge of Signals, Standalone Components, Zoneless applications, SSR/Hydration, and reactive patterns. Use PROACTIVELY for Angular development, component architecture, state management, performance optimization, and migration to modern patterns.",
"risk": "safe",
"source": "self"
},
{
"id": "angular-best-practices",
"path": "skills/angular-best-practices",
"category": "uncategorized",
"name": "angular-best-practices",
"description": "Angular performance optimization and best practices guide. Use when writing, reviewing, or refactoring Angular code for optimal performance, bundle size, and rendering efficiency.",
"risk": "safe",
"source": "self"
},
{
"id": "angular-migration",
"path": "skills/angular-migration",
@@ -206,6 +224,24 @@
"risk": "unknown",
"source": "unknown"
},
{
"id": "angular-state-management",
"path": "skills/angular-state-management",
"category": "uncategorized",
"name": "angular-state-management",
"description": "Master modern Angular state management with Signals, NgRx, and RxJS. Use when setting up global state, managing component stores, choosing between state solutions, or migrating from legacy patterns.",
"risk": "safe",
"source": "self"
},
{
"id": "angular-ui-patterns",
"path": "skills/angular-ui-patterns",
"category": "uncategorized",
"name": "angular-ui-patterns",
"description": "Modern Angular UI patterns for loading states, error handling, and data display. Use when building UI components, handling async data, or managing component states.",
"risk": "safe",
"source": "self"
},
{
"id": "anti-reversing-techniques",
"path": "skills/anti-reversing-techniques",
@@ -1106,6 +1142,15 @@
"risk": "unknown",
"source": "vibeship-spawner-skills (Apache 2.0)"
},
{
"id": "computer-vision-expert",
"path": "skills/computer-vision-expert",
"category": "uncategorized",
"name": "computer-vision-expert",
"description": "SOTA Computer Vision Expert (2026). Specialized in YOLO26, Segment Anything 3 (SAM 3), Vision Language Models, and real-time spatial analysis.",
"risk": "unknown",
"source": "unknown"
},
{
"id": "concise-planning",
"path": "skills/concise-planning",
@@ -2249,15 +2294,6 @@
"risk": "unknown",
"source": "unknown"
},
{
"id": "frontend-slides",
"path": "skills/frontend-slides",
"category": "uncategorized",
"name": "Frontend Slides",
"description": "Create zero-dependency, animation-rich HTML presentations that run entirely in the browser. This skill helps non-designers discover their preferred aesthetic through visual exploration (\"show, don't tell\"), then generates production-quality slide dec",
"risk": "unknown",
"source": "unknown"
},
{
"id": "frontend-design",
"path": "skills/frontend-design",
@@ -2321,6 +2357,15 @@
"risk": "unknown",
"source": "unknown"
},
{
"id": "frontend-slides",
"path": "skills/frontend-slides",
"category": "uncategorized",
"name": "frontend-slides",
"description": "Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices.",
"risk": "safe",
"source": "https://github.com/zarazhangrui/frontend-slides"
},
{
"id": "full-stack-orchestration-full-stack-feature",
"path": "skills/full-stack-orchestration-full-stack-feature",
@@ -3977,6 +4022,15 @@
"risk": "unknown",
"source": "unknown"
},
{
"id": "radix-ui-design-system",
"path": "skills/radix-ui-design-system",
"category": "uncategorized",
"name": "radix-ui-design-system",
"description": "Build accessible design systems with Radix UI primitives. Headless component customization, theming strategies, and compound component patterns for production-grade UI libraries.",
"risk": "safe",
"source": "self"
},
{
"id": "rag-engineer",
"path": "skills/rag-engineer",
@@ -4787,6 +4841,15 @@
"risk": "unknown",
"source": "unknown"
},
{
"id": "stitch-ui-design",
"path": "skills/stitch-ui-design",
"category": "uncategorized",
"name": "stitch-ui-design",
"description": "Expert guide for creating effective prompts for Google Stitch AI UI design tool. Use when user wants to design UI/UX in Stitch, create app interfaces, generate mobile/web designs, or needs help crafting Stitch prompts. Covers prompt structure, specificity techniques, iteration strategies, and design-to-code workflows for Stitch by Google.",
"risk": "safe",
"source": "self"
},
{
"id": "stride-analysis-patterns",
"path": "skills/stride-analysis-patterns",