[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FPTMV0B146AP0VY5ZGS75":3,"skill-same:01M71FPTMV0B146AP0VY5ZGS75":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":5,"forksCount":14,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M71FPTMV0B146AP0VY5ZGS75","generating-sounds-with-ai",null,"Audit Web Audio API code for sound synthesis best practices. Use when reviewing procedural audio, implementing UI sounds, or checking audio parameter quality. Outputs file:line findings.","agency-black\u002FSkills","agency-black","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F234862658?v=4","01M6HWVFPNGNR5N2CX9ECSAD57","agencia.black","01M719WF77BF3HN0N9FK1APEFY",0,"MIT","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fgenerating-sounds-with-ai\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"with","generating sounds with ai","mdx","index","quality","web","file","best practices","use","outputs","for","ui","line","audit","procedural","api","code","when","implementing","Audio","2026-11-10 10:12:30",false,"---\nname: generating-sounds-with-ai\ndescription: Audit Web Audio API code for sound synthesis best practices. Use when reviewing procedural audio, implementing UI sounds, or checking audio parameter quality. Outputs file:line findings.\nlicense: MIT\nmetadata:\n  author: raphael-salaja\n  version: \"2.0.0\"\n  source: \u002Fcontent\u002Fgenerating-sounds-with-ai\u002Findex.mdx\n---\n\n# Generating Sounds with AI\n\nReview Web Audio API code for sound synthesis best practices.\n\n## How It Works\n\n1. Read the specified files (or prompt user for files\u002Fpattern)\n2. Check against all rules below\n3. Output findings in `file:line` format\n\n## Rule Categories\n\n| Priority | Category | Prefix |\n|----------|----------|--------|\n| 1 | Context Management | `context-` |\n| 2 | Decay & Envelope | `envelope-` |\n| 3 | Sound Design | `design-` |\n| 4 | Parameters | `param-` |\n\n## Rules\n\n### Context Management Rules\n\n#### `context-reuse-single`\nReuse a single AudioContext instance; do not create new ones per sound.\n\n**Fail:**\n```ts\nfunction playSound() {\n  const ctx = new AudioContext();\n  \u002F\u002F Creates new context every call\n}\n```\n\n**Pass:**\n```ts\nlet audioContext: AudioContext | null = null;\n\nfunction getAudioContext(): AudioContext {\n  if (!audioContext) {\n    audioContext = new AudioContext();\n  }\n  return audioContext;\n}\n```\n\n#### `context-resume-suspended`\nCheck and resume suspended AudioContext before playing.\n\n**Fail:**\n```ts\nfunction playSound() {\n  const ctx = getAudioContext();\n  \u002F\u002F Plays immediately without checking state\n}\n```\n\n**Pass:**\n```ts\nfunction playSound() {\n  const ctx = getAudioContext();\n  if (ctx.state === \"suspended\") {\n    ctx.resume();\n  }\n}\n```\n\n#### `context-cleanup-nodes`\nDisconnect and clean up audio nodes after playback.\n\n**Fail:**\n```ts\nsource.start();\n\u002F\u002F Nodes remain connected after sound ends\n```\n\n**Pass:**\n```ts\nsource.start();\nsource.onended = () => {\n  source.disconnect();\n  gain.disconnect();\n};\n```\n\n### Envelope Rules\n\n#### `envelope-exponential-decay`\nUse exponential ramps for natural decay, not linear.\n\n**Fail:**\n```ts\ngain.gain.linearRampToValueAtTime(0, t + 0.05);\n```\n\n**Pass:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n```\n\n#### `envelope-no-zero-target`\nExponential ramps cannot target 0; use 0.001 or similar small value.\n\n**Fail:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0, t + 0.05);\n```\n\n**Pass:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n```\n\n#### `envelope-set-initial-value`\nSet initial value before ramping to avoid glitches.\n\n**Fail:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n\u002F\u002F No setValueAtTime before ramp\n```\n\n**Pass:**\n```ts\ngain.gain.setValueAtTime(0.3, t);\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n```\n\n### Sound Design Rules\n\n#### `design-noise-for-percussion`\nUse filtered noise for clicks\u002Ftaps, not oscillators.\n\n**Fail:**\n```ts\n\u002F\u002F Click sound using sine oscillator\nconst osc = ctx.createOscillator();\nosc.type = \"sine\";\n\u002F\u002F Results in tonal \"beep\" not \"click\"\n```\n\n**Pass:**\n```ts\n\u002F\u002F Click sound using noise burst\nconst buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);\nconst data = buffer.getChannelData(0);\nfor (let i = 0; i \u003C data.length; i++) {\n  data[i] = (Math.random() * 2 - 1) * Math.exp(-i \u002F 50);\n}\n```\n\n#### `design-oscillator-for-tonal`\nUse oscillators with pitch movement for tonal sounds (pops, confirmations).\n\n**Fail:**\n```ts\n\u002F\u002F Confirmation sound using static frequency\nosc.frequency.value = 400;\n```\n\n**Pass:**\n```ts\n\u002F\u002F Confirmation sound with pitch sweep\nosc.frequency.setValueAtTime(400, t);\nosc.frequency.exponentialRampToValueAtTime(600, t + 0.04);\n```\n\n#### `design-filter-for-character`\nApply bandpass filter to shape percussive sounds.\n\n**Fail:**\n```ts\n\u002F\u002F Raw noise without filtering\nsource.connect(gain).connect(ctx.destination);\n```\n\n**Pass:**\n```ts\nconst filter = ctx.createBiquadFilter();\nfilter.type = \"bandpass\";\nfilter.frequency.value = 4000;\nfilter.Q.value = 3;\nsource.connect(filter).connect(gain).connect(ctx.destination);\n```\n\n### Parameter Rules\n\n#### `param-click-duration`\nClick\u002Ftap sounds should be 5-15ms duration.\n\n**Fail:**\n```ts\nconst buffer = ctx.createBuffer(1, ctx.sampleRate * 0.1, ctx.sampleRate);\n\u002F\u002F 100ms is too long for a click\n```\n\n**Pass:**\n```ts\nconst buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);\n\u002F\u002F 8ms is appropriate for a click\n```\n\n#### `param-filter-frequency-range`\nBandpass filter for clicks should be 3000-6000Hz.\n\n**Fail:**\n```ts\nfilter.frequency.value = 500; \u002F\u002F Too low, sounds muffled\n```\n\n**Pass:**\n```ts\nfilter.frequency.value = 4000; \u002F\u002F Crisp, present\n```\n\n#### `param-reasonable-gain`\nGain values should not exceed 1.0 to prevent clipping.\n\n**Fail:**\n```ts\ngain.gain.setValueAtTime(1.5, t);\n```\n\n**Pass:**\n```ts\ngain.gain.setValueAtTime(0.3, t);\n```\n\n#### `param-q-value-range`\nFilter Q for clicks should be 2-5 for focused but not harsh sound.\n\n**Fail:**\n```ts\nfilter.Q.value = 15; \u002F\u002F Too resonant, harsh\n```\n\n**Pass:**\n```ts\nfilter.Q.value = 3; \u002F\u002F Focused but natural\n```\n\n## Output Format\n\nWhen reviewing files, output findings as:\n\n```\nfile:line - [rule-id] description of issue\n\nExample:\nlib\u002Fsounds.ts:23 - [envelope-exponential-decay] Using linearRampToValueAtTime instead of exponential\nlib\u002Fsounds.ts:45 - [context-reuse-single] Creating new AudioContext on each call\n```\n\n## Summary Table\n\nAfter findings, output a summary:\n\n| Rule | Count | Severity |\n|------|-------|----------|\n| `context-reuse-single` | 1 | HIGH |\n| `envelope-exponential-decay` | 3 | MEDIUM |\n| `param-click-duration` | 1 | LOW |\n\n## Parameter Translation Table\n\nWhen user describes issues, translate to parameter changes:\n\n| User Says | Parameter Change |\n|-----------|------------------|\n| \"too harsh\" | Lower filter frequency, reduce Q |\n| \"too muffled\" | Higher filter frequency |\n| \"too long\" | Shorter duration, faster decay |\n| \"cuts off abruptly\" | Use exponential decay |\n| \"more mechanical\" | Higher Q, faster decay |\n| \"softer\" | Lower gain, triangle wave |\n\n## References\n\n- [Web Audio API - MDN](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Audio_API)\n","# Generating Sounds with AI\n\nReview Web Audio API code for sound synthesis best practices.\n\n## How It Works\n\n1. Read the specified files (or prompt user for files\u002Fpattern)\n2. Check against all rules below\n3. Output findings in `file:line` format\n\n## Rule Categories\n\n| Priority | Category | Prefix |\n|----------|----------|--------|\n| 1 | Context Management | `context-` |\n| 2 | Decay & Envelope | `envelope-` |\n| 3 | Sound Design | `design-` |\n| 4 | Parameters | `param-` |\n\n## Rules\n\n### Context Management Rules\n\n#### `context-reuse-single`\nReuse a single AudioContext instance; do not create new ones per sound.\n\n**Fail:**\n```ts\nfunction playSound() {\n  const ctx = new AudioContext();\n  \u002F\u002F Creates new context every call\n}\n```\n\n**Pass:**\n```ts\nlet audioContext: AudioContext | null = null;\n\nfunction getAudioContext(): AudioContext {\n  if (!audioContext) {\n    audioContext = new AudioContext();\n  }\n  return audioContext;\n}\n```\n\n#### `context-resume-suspended`\nCheck and resume suspended AudioContext before playing.\n\n**Fail:**\n```ts\nfunction playSound() {\n  const ctx = getAudioContext();\n  \u002F\u002F Plays immediately without checking state\n}\n```\n\n**Pass:**\n```ts\nfunction playSound() {\n  const ctx = getAudioContext();\n  if (ctx.state === \"suspended\") {\n    ctx.resume();\n  }\n}\n```\n\n#### `context-cleanup-nodes`\nDisconnect and clean up audio nodes after playback.\n\n**Fail:**\n```ts\nsource.start();\n\u002F\u002F Nodes remain connected after sound ends\n```\n\n**Pass:**\n```ts\nsource.start();\nsource.onended = () => {\n  source.disconnect();\n  gain.disconnect();\n};\n```\n\n### Envelope Rules\n\n#### `envelope-exponential-decay`\nUse exponential ramps for natural decay, not linear.\n\n**Fail:**\n```ts\ngain.gain.linearRampToValueAtTime(0, t + 0.05);\n```\n\n**Pass:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n```\n\n#### `envelope-no-zero-target`\nExponential ramps cannot target 0; use 0.001 or similar small value.\n\n**Fail:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0, t + 0.05);\n```\n\n**Pass:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n```\n\n#### `envelope-set-initial-value`\nSet initial value before ramping to avoid glitches.\n\n**Fail:**\n```ts\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n\u002F\u002F No setValueAtTime before ramp\n```\n\n**Pass:**\n```ts\ngain.gain.setValueAtTime(0.3, t);\ngain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);\n```\n\n### Sound Design Rules\n\n#### `design-noise-for-percussion`\nUse filtered noise for clicks\u002Ftaps, not oscillators.\n\n**Fail:**\n```ts\n\u002F\u002F Click sound using sine oscillator\nconst osc = ctx.createOscillator();\nosc.type = \"sine\";\n\u002F\u002F Results in tonal \"beep\" not \"click\"\n```\n\n**Pass:**\n```ts\n\u002F\u002F Click sound using noise burst\nconst buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);\nconst data = buffer.getChannelData(0);\nfor (let i = 0; i \u003C data.length; i++) {\n  data[i] = (Math.random() * 2 - 1) * Math.exp(-i \u002F 50);\n}\n```\n\n#### `design-oscillator-for-tonal`\nUse oscillators with pitch movement for tonal sounds (pops, confirmations).\n\n**Fail:**\n```ts\n\u002F\u002F Confirmation sound using static frequency\nosc.frequency.value = 400;\n```\n\n**Pass:**\n```ts\n\u002F\u002F Confirmation sound with pitch sweep\nosc.frequency.setValueAtTime(400, t);\nosc.frequency.exponentialRampToValueAtTime(600, t + 0.04);\n```\n\n#### `design-filter-for-character`\nApply bandpass filter to shape percussive sounds.\n\n**Fail:**\n```ts\n\u002F\u002F Raw noise without filtering\nsource.connect(gain).connect(ctx.destination);\n```\n\n**Pass:**\n```ts\nconst filter = ctx.createBiquadFilter();\nfilter.type = \"bandpass\";\nfilter.frequency.value = 4000;\nfilter.Q.value = 3;\nsource.connect(filter).connect(gain).connect(ctx.destination);\n```\n\n### Parameter Rules\n\n#### `param-click-duration`\nClick\u002Ftap sounds should be 5-15ms duration.\n\n**Fail:**\n```ts\nconst buffer = ctx.createBuffer(1, ctx.sampleRate * 0.1, ctx.sampleRate);\n\u002F\u002F 100ms is too long for a click\n```\n\n**Pass:**\n```ts\nconst buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);\n\u002F\u002F 8ms is appropriate for a click\n```\n\n#### `param-filter-frequency-range`\nBandpass filter for clicks should be 3000-6000Hz.\n\n**Fail:**\n```ts\nfilter.frequency.value = 500; \u002F\u002F Too low, sounds muffled\n```\n\n**Pass:**\n```ts\nfilter.frequency.value = 4000; \u002F\u002F Crisp, present\n```\n\n#### `param-reasonable-gain`\nGain values should not exceed 1.0 to prevent clipping.\n\n**Fail:**\n```ts\ngain.gain.setValueAtTime(1.5, t);\n```\n\n**Pass:**\n```ts\ngain.gain.setValueAtTime(0.3, t);\n```\n\n#### `param-q-value-range`\nFilter Q for clicks should be 2-5 for focused but not harsh sound.\n\n**Fail:**\n```ts\nfilter.Q.value = 15; \u002F\u002F Too resonant, harsh\n```\n\n**Pass:**\n```ts\nfilter.Q.value = 3; \u002F\u002F Focused but natural\n```\n\n## Output Format\n\nWhen reviewing files, output findings as:\n\n```\nfile:line - [rule-id] description of issue\n\nExample:\nlib\u002Fsounds.ts:23 - [envelope-exponential-decay] Using linearRampToValueAtTime instead of exponential\nlib\u002Fsounds.ts:45 - [context-reuse-single] Creating new AudioContext on each call\n```\n\n## Summary Table\n\nAfter findings, output a summary:\n\n| Rule | Count | Severity |\n|------|-------|----------|\n| `context-reuse-single` | 1 | HIGH |\n| `envelope-exponential-decay` | 3 | MEDIUM |\n| `param-click-duration` | 1 | LOW |\n\n## Parameter Translation Table\n\nWhen user describes issues, translate to parameter changes:\n\n| User Says | Parameter Change |\n|-----------|------------------|\n| \"too harsh\" | Lower filter frequency, reduce Q |\n| \"too muffled\" | Higher filter frequency |\n| \"too long\" | Shorter duration, faster decay |\n| \"cuts off abruptly\" | Use exponential decay |\n| \"more mechanical\" | Higher Q, faster decay |\n| \"softer\" | Lower gain, triangle wave |\n\n## References\n\n- [Web Audio API - MDN](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Audio_API)\n",{"name":5,"license":15,"metadata":44,"description":7},{"author":45,"source":46,"version":47},"raphael-salaja","\u002Fcontent\u002Fgenerating-sounds-with-ai\u002Findex.mdx","2.0.0","main","681496e0662f4c45c4758fae9d4510ae87311bf2","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills","https:\u002F\u002Fgithub.com\u002Fagency-black","http:\u002F\u002Fwww.dogma.black","Las grandes ideas merecen una ejecución impecable. Construimos plataformas web, aplicaciones y ecosistemas digitales completos. Esta Trinidad es nuestro dogma.","2026-05-29 16:13:55",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add agency-black\u002FSkills --skill generating-sounds-with-ai",{"tool":61,"command":62},"bunx","bunx skills add agency-black\u002FSkills --skill generating-sounds-with-ai",{"tool":64,"command":65},"pnpm","pnpm dlx skills add agency-black\u002FSkills --skill generating-sounds-with-ai","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fgenerating-sounds-with-ai\u002FSKILL.md",true,[],[70,95,124,152,176,198],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":39},"01M71JZVZ0TVW7Z5DQBRWSBG8A","zarr-python","Chunked N-D arrays for cloud storage (Zarr-Python 3). Compressed arrays, parallel I\u002FO, S3\u002FGCS via fsspec, NumPy\u002FDask\u002FXarray compatible, for large-scale scientific computing pipelines.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fzarr-python\u002FSKILL.md",[],[77,78,79,80,81,82,83,84,85,86,87,88,89,29,90,27,91,92,93,94],"zarr python","python","zarr","arrays","Cloud Storage","remote","workflows","scientific","read","write","edit","parallel","dask","s3fs","numpy","s3","scientific computing","scale",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":99,"sourceHtmlUrl":100,"categories":101,"keywords":107,"publishedAt":39},"01M71JYXC5VAEJT8KXN5GRK32S","xvary-stock-research","Thesis-driven equity analysis from public SEC EDGAR and market data; \u002Fanalyze, \u002Fscore, \u002Fcompare workflows with bundled Python tools (Claude Code, Cursor, Codex).","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fxvary-stock-research\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fxvary-stock-research\u002FSKILL.md",[102],{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[108,109,110,111,112,113,114,78,115,83,116,35,117,118,119,120,19,121,122,123],"xvary","stock","research","xvary stock research","sec edgar","community","equity","thesis","analysis","Market","compare","market data","analyze","codex","cursor","2026",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":128,"licenseFileUrl":129,"sourceHtmlUrl":130,"categories":131,"keywords":138,"publishedAt":39},"01M71JVSDPDQ5040YBN6J1ASKY","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FSKILL.md",[132,135],{"categoryNo":133,"categoryName":134,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":136,"categoryName":137,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000009","前端开发",[139,140,141,29,142,143,144,145,146,147,148,19,149,24,150,30,151],"webapp","testing","webapp testing","applications","local","frontend","debugging","toolkit","logs","browser","playwright","behavior","screenshots",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":128,"licenseFileUrl":156,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":39},"01M71JV64CW7R6FYYK9JWWGW0X","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fweb-artifacts-builder\u002FSKILL.md",[159],{"categoryNo":136,"categoryName":137,"taxonomyType":105,"taxonomyTypeDesc":106},[161,162,163,24,164,165,166,29,167,168,144,169,27,25,170,171,172,173,174,175],"builder","artifacts builder","artifacts","web artifacts builder","single-file","css","Tailwind","ui components","single","components","react","multi","state","routing","state management",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":183,"publishedAt":39},"01M71JS4X2FRY41DE84DEP06MN","vercel-react-view-transitions","Guide for implementing smooth, native-feeling animations using React's View Transition API (`\u003CViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter\u002Fexit of components, animate list reorder, implement directional (forward\u002Fback) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fvercel-react-view-transitions\u002FSKILL.md",[182],{"categoryNo":136,"categoryName":137,"taxonomyType":105,"taxonomyTypeDesc":106},[171,184,185,186,187,188,189,190,191,166,192,193,194,37,36,170,34,195,196,197],"vercel react view transitions","view","react view transitions","vercel","transitions","shared","back","Animation","types","states","element","route","create","libraries",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":202,"categories":203,"keywords":205,"publishedAt":39},"01M71JS1WZ1J4F9YVC2203JBJW","vercel-react-native-skills","React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fvercel-react-native-skills\u002FSKILL.md",[204],{"categoryNo":136,"categoryName":137,"taxonomyType":105,"taxonomyTypeDesc":106},[187,206,171,207,208,209,210,211,212,29,213,37,214,27,215,216,36,26,217,170],"vercel react native skills","react native","native","react native skills","modules","platform","animations","performance","triggers","react native components","apps","tasks"]