opencode-skills-collection 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +84 -1
  2. package/bundled-skills/2slides-ppt-generator/SKILL.md +8 -7
  3. package/bundled-skills/android-cli/SKILL.md +19 -7
  4. package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
  5. package/bundled-skills/apple-notes-search/SKILL.md +12 -2
  6. package/bundled-skills/ask-matt/SKILL.md +92 -0
  7. package/bundled-skills/atlas-ledger/SKILL.md +8 -0
  8. package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
  9. package/bundled-skills/codebase-design/DEEPENING.md +37 -0
  10. package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  11. package/bundled-skills/codebase-design/SKILL.md +145 -0
  12. package/bundled-skills/codex-fable5/SKILL.md +10 -2
  13. package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
  14. package/bundled-skills/competitor-analysis/SKILL.md +434 -0
  15. package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
  16. package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
  17. package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
  18. package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
  19. package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
  20. package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
  21. package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
  22. package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
  23. package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
  24. package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +224 -0
  25. package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
  26. package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
  27. package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
  28. package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
  29. package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
  30. package/bundled-skills/design-it/SKILL.md +170 -0
  31. package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
  32. package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
  33. package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
  34. package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
  35. package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
  36. package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
  37. package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
  38. package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
  39. package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
  40. package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
  41. package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
  42. package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
  43. package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
  44. package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
  45. package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
  46. package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
  47. package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
  48. package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
  49. package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
  50. package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
  51. package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
  52. package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
  53. package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
  54. package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
  55. package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
  56. package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
  57. package/bundled-skills/design-it/material-design/SKILL.md +275 -0
  58. package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
  59. package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
  60. package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
  61. package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
  62. package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
  63. package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
  64. package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
  65. package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
  66. package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
  67. package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
  68. package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
  69. package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
  70. package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
  71. package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
  72. package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
  73. package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
  74. package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
  75. package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
  76. package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
  77. package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
  78. package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
  79. package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  80. package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
  81. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  82. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  83. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  84. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  85. package/bundled-skills/docs/users/bundles.md +145 -1
  86. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  87. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  88. package/bundled-skills/docs/users/getting-started.md +1 -1
  89. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  90. package/bundled-skills/docs/users/specialized-plugin-roadmap.md +11 -4
  91. package/bundled-skills/docs/users/usage.md +4 -4
  92. package/bundled-skills/docs/users/visual-guide.md +4 -4
  93. package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
  94. package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  95. package/bundled-skills/domain-modeling/SKILL.md +105 -0
  96. package/bundled-skills/dos-verify-done-claims/SKILL.md +16 -4
  97. package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +1 -1
  98. package/bundled-skills/ecl-harness-engineer/references/environment-config-guide.md +2 -2
  99. package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +4 -4
  100. package/bundled-skills/event-staffing-ordering/SKILL.md +4 -0
  101. package/bundled-skills/grill-me/SKILL.md +36 -0
  102. package/bundled-skills/grill-with-docs/SKILL.md +36 -0
  103. package/bundled-skills/grilling/SKILL.md +39 -0
  104. package/bundled-skills/handoff/SKILL.md +45 -0
  105. package/bundled-skills/image-generator/.env.example +7 -0
  106. package/bundled-skills/image-generator/SKILL.md +509 -0
  107. package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  108. package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
  109. package/bundled-skills/learn/SKILL.md +156 -0
  110. package/bundled-skills/lesson-generator/SKILL.md +90 -0
  111. package/bundled-skills/llm-council/.env.example +7 -0
  112. package/bundled-skills/llm-council/SKILL.md +602 -0
  113. package/bundled-skills/loop-library/SKILL.md +208 -0
  114. package/bundled-skills/loop-library/agents/openai.yaml +4 -0
  115. package/bundled-skills/loop-library/references/catalog.md +270 -0
  116. package/bundled-skills/lovable-cleanup/SKILL.md +9 -7
  117. package/bundled-skills/macos-screen-recorder/SKILL.md +9 -1
  118. package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
  119. package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
  120. package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
  121. package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
  122. package/bundled-skills/prototype/LOGIC.md +79 -0
  123. package/bundled-skills/prototype/SKILL.md +62 -0
  124. package/bundled-skills/prototype/UI.md +112 -0
  125. package/bundled-skills/screenstudio-alt/SKILL.md +9 -1
  126. package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
  127. package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
  128. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
  129. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
  130. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
  131. package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  132. package/bundled-skills/survey-generator/LICENSE +21 -0
  133. package/bundled-skills/survey-generator/SKILL.md +143 -0
  134. package/bundled-skills/survey-generator/build_artifact.py +208 -0
  135. package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
  136. package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
  137. package/bundled-skills/survey-generator/style_spec.json +85 -0
  138. package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
  139. package/bundled-skills/tdd/SKILL.md +139 -0
  140. package/bundled-skills/tdd/mocking.md +59 -0
  141. package/bundled-skills/tdd/refactoring.md +10 -0
  142. package/bundled-skills/tdd/tests.md +61 -0
  143. package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
  144. package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  145. package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
  146. package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
  147. package/bundled-skills/teach/SKILL.md +169 -0
  148. package/bundled-skills/to-issues/SKILL.md +115 -0
  149. package/bundled-skills/to-prd/SKILL.md +104 -0
  150. package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
  151. package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
  152. package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
  153. package/bundled-skills/triage/SKILL.md +143 -0
  154. package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
  155. package/bundled-skills/wiki-builder/SKILL.md +157 -0
  156. package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
  157. package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
  158. package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
  159. package/bundled-skills/wiki-builder/templates/index.md +20 -0
  160. package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
  161. package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
  162. package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
  163. package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
  164. package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
  165. package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
  166. package/bundled-skills/wiki-builder/templates/sources.md +9 -0
  167. package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
  168. package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
  169. package/bundled-skills/writing-great-skills/SKILL.md +111 -0
  170. package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
  171. package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
  172. package/bundled-skills/yao-meta-skill/manifest.json +24 -0
  173. package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
  174. package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
  175. package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
  176. package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
  177. package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
  178. package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
  179. package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
  180. package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
  181. package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
  182. package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
  183. package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
  184. package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
  185. package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
  186. package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
  187. package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
  188. package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
  189. package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
  190. package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
  191. package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
  192. package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
  193. package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
  194. package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
  195. package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
  196. package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
  197. package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
  198. package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
  199. package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
  200. package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
  201. package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
  202. package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
  203. package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
  204. package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
  205. package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
  206. package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
  207. package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
  208. package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
  209. package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
  210. package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
  211. package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
  212. package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
  213. package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
  214. package/bundled-skills/youtube-notetaker/scripts/serve.py +222 -0
  215. package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
  216. package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
  217. package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
  218. package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
  219. package/package.json +1 -1
  220. package/skills_index.json +2013 -330
  221. package/bundled-skills/ai-md/SKILL.md +0 -523
  222. package/bundled-skills/atlas-contract/SKILL.md +0 -650
  223. package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
  224. package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
  225. package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
  226. package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
  227. package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
  228. package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
  229. package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
  230. package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
  231. package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
  232. package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
  233. package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
  234. package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
  235. package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
  236. package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
  237. package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
  238. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
  239. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
  240. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
  241. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
  242. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
  243. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
  244. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
  245. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
  246. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
  247. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
  248. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
  249. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
  250. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
  251. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
  252. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
  253. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
  254. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
  255. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
  256. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
  257. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
  258. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
  259. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
  260. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
  261. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
  262. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
  263. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
  264. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
  265. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
  266. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
  267. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
  268. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
  269. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
  270. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
  271. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
  272. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
  273. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
  274. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
  275. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
  276. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
  277. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
  278. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
  279. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
  280. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
  281. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
  282. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
  283. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
  284. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
  285. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
  286. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
  287. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
  288. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
  289. package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
  290. package/bundled-skills/skill-optimizer/SKILL.md +0 -271
  291. package/bundled-skills/using-superpowers/SKILL.md +0 -98
@@ -0,0 +1,616 @@
1
+ ---
2
+ name: tools-page-seo-optimizer
3
+ description: "Framework-agnostic SEO workflow for any site with multiple tool, product, or feature pages. Covers duplicate content, unique meta tags, heading hierarchy, internal linking, URL slugs, E-E-A-T, content registry pattern for scaling 50–500 pages, and blog content strategy for position 50–68 keywords."
4
+ category: seo
5
+ risk: safe
6
+ source: community
7
+ source_type: community
8
+ author: whoisabhishekadhikari
9
+ date_added: "2026-06-19"
10
+ tags: [seo, tools-pages, product-pages, duplicate-content, content-registry, meta-tags, internal-linking, url-slugs, e-e-a-t, framework-agnostic]
11
+ tools: [claude-code, cursor, codex-cli, gemini-cli, opencode]
12
+ version: 1.0.0
13
+ ---
14
+
15
+ # Tools Page SEO Optimizer
16
+
17
+ You are an expert in technical SEO and content strategy for sites with large collections of tool, product, or feature pages. Your workflow is framework-agnostic — applies to Django, Rails, Laravel, Express, Next.js, Nuxt, Astro, WordPress, and static HTML.
18
+
19
+ Derived from a real audit that found 93 of 105 tool pages sharing identical template prose and ranking at average position 68. This skill is the playbook that fixes it.
20
+
21
+ ---
22
+
23
+ ## Quick-Start Decision Tree
24
+
25
+ ```
26
+ Full audit from scratch? → Run all phases in order
27
+ All tool pages rank the same? → Phase 2 (Content Registry) first
28
+ Meta titles/descriptions all generic? → Phase 1 (Meta Tags)
29
+ Tool pages buried / hard to navigate? → Phase 5 (Internal Linking)
30
+ Bad URL slugs? → Phase 6 (URL Slug Hygiene)
31
+ Site looks authorless to Google? → Phase 7 (E-E-A-T)
32
+ Stuck at position 50–68 on keywords? → Phase 9 (Blog Content Strategy)
33
+ Fixes deployed but unsure they're live? → Phase 10 (Live Verification)
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Phase 0 — Codebase Reconnaissance
39
+
40
+ **Before writing any code**, locate these in the codebase. Names vary by framework — adapt.
41
+
42
+ | What to find | Common locations |
43
+ |---|---|
44
+ | URL routing | `routes.rb`, `urls.py`, `routes/`, `pages/`, `app/` |
45
+ | Head / meta template | `_head.html`, `layout.js`, `base.html`, `app.blade.php` |
46
+ | Tool/page registry | config file, database seed, JSON, `lib/guides.js`, `data/tools.js` |
47
+
48
+ **Answer these before writing a single line:**
49
+
50
+ 1. How are tool pages generated — static files, database loop, config registry, CMS?
51
+ 2. Where is the shared template that renders `<title>`, `<meta name="description">`, `<h1>`?
52
+ 3. Does each tool have its own content fields, or does every tool fall back to the same template prose?
53
+ 4. Is there a central list of all tool slugs you can iterate over programmatically?
54
+
55
+ ---
56
+
57
+ ## Phase 1 — Meta Titles & Descriptions
58
+
59
+ ### The core problem
60
+
61
+ Every tool page sharing the same `<title>` template with only the tool name swapped in
62
+ is the single most common reason tool sites rank poorly. Google treats near-identical titles
63
+ as duplicate pages and demotes all of them.
64
+
65
+ ### Title tag formula
66
+
67
+ ```
68
+ {Tool Name} | {Specific Outcome} — {Brand}
69
+ ```
70
+
71
+ | ✅ Good | ❌ Bad |
72
+ |---|---|
73
+ | `Meta Tag Generator \| Create Perfect SEO Titles Free — MySite` | `Meta Tag Generator - MySite Tools` |
74
+ | `Broken Link Finder \| Scan Any Page for Dead URLs — MySite` | `Broken Link Finder - Free Online Tool \| MySite` |
75
+
76
+ **Rules:**
77
+ - ≤ 60 characters total
78
+ - Primary keyword in the first 40 characters
79
+ - Every tool has a **unique** title — no two tools share the same one
80
+ - Include "Free" where accurate — measurably improves CTR
81
+
82
+ ### Meta description formula
83
+
84
+ ```
85
+ {What it does — one action sentence}. {Key differentiator}. {CTA}.
86
+ ```
87
+
88
+ Example: `Scan any webpage for broken links in seconds. Checks internal and external URLs,
89
+ exports results as CSV. Free, no account needed.`
90
+
91
+ **Rules:**
92
+ - 120–160 characters
93
+ - Action verbs: Generate, Scan, Check, Analyze, Convert, Build, Find
94
+ - Every tool gets a **custom** description — zero template filler
95
+
96
+ ### Implementation (any framework)
97
+
98
+ ```html
99
+ <!-- Generic template pattern -->
100
+ <title>{{ tool.meta_title | default(tool.name + " | " + site_name) }}</title>
101
+ <meta name="description" content="{{ tool.meta_description | default(tool.tagline) }}">
102
+ ```
103
+
104
+ ### Validation script — run before every deploy
105
+
106
+ ```python
107
+ # validate_meta.py
108
+ import json, sys
109
+
110
+ tools = json.load(open('data/tools.json'))
111
+ errors = []
112
+
113
+ for t in tools:
114
+ slug = t.get('slug', '?')
115
+ title = t.get('meta_title', '')
116
+ desc = t.get('meta_description', '')
117
+ if not title: errors.append(f"MISSING TITLE: {slug}")
118
+ elif len(title) > 60: errors.append(f"TITLE TOO LONG ({len(title)}): {slug}")
119
+ if not desc: errors.append(f"MISSING DESC: {slug}")
120
+ elif len(desc) < 120: errors.append(f"DESC TOO SHORT ({len(desc)}): {slug}")
121
+ elif len(desc) > 160: errors.append(f"DESC TOO LONG ({len(desc)}): {slug}")
122
+
123
+ if errors:
124
+ print('\n'.join(errors)); sys.exit(1)
125
+ print(f"✅ All {len(tools)} tools passed meta validation")
126
+ ```
127
+
128
+ ---
129
+
130
+ ## Phase 2 — Content Registry (The Highest-Leverage Fix)
131
+
132
+ **Root cause of poor rankings on tool sites:** 80–95% of tool pages share identical
133
+ template prose. Google sees them as thin, near-duplicate pages and ranks none well.
134
+ Fix this before anything else.
135
+
136
+ ### Diagnosis
137
+
138
+ ```bash
139
+ # Find shared prose in your templates — if these strings appear in a shared template
140
+ # file, you have the problem
141
+ D1=$(grep -rn "powerful tool that helps" templates/ src/ 2>/dev/null | head -5)
142
+ [ -n "$D1" ] && echo " ✗ Shared template prose found" || echo " ✓ No shared prose"
143
+ D2=$(grep -rn "easy to use" templates/ src/ 2>/dev/null | head -5)
144
+ [ -n "$D2" ] && echo " ✗ Template filler found"
145
+ ```
146
+
147
+ ### Registry entry structure (framework-agnostic)
148
+
149
+ ```yaml
150
+ # data/tools/meta-tag-generator.yaml (or JSON, DB columns, JS object — adapt to your stack)
151
+ slug: meta-tag-generator
152
+ name: Meta Tag Generator
153
+ meta_title: "Meta Tag Generator | Create Perfect SEO Titles & Descriptions Free"
154
+ meta_description: "Generate optimized title tags and meta descriptions with live character
155
+ counters. Enforces Google's 60/160 char limits. Instant, free, no account needed."
156
+
157
+ introduction: >
158
+ The meta tag generator creates the two most critical on-page SEO elements —
159
+ your title tag and meta description — with live character counters that enforce
160
+ Google's recommended limits before you publish. [80+ unique words minimum]
161
+
162
+ best_practices:
163
+ - "Include your primary keyword within the first 40 characters of the title"
164
+ - "Write a unique description per page — duplicate descriptions waste crawl budget"
165
+ - "Use action verbs in descriptions: Generate, Find, Check, Analyze"
166
+
167
+ how_to_steps:
168
+ - name: "Enter your page details"
169
+ text: "Type your target keyword, page topic, and a brief summary of the content"
170
+ - name: "Check the live character counters"
171
+ text: "Keep title ≤60 chars and description ≤160 chars"
172
+ - name: "Copy and paste the output"
173
+ text: "Paste the generated tags into your HTML <head> section"
174
+
175
+ faqs:
176
+ - q: "Does Google always use my meta description?"
177
+ a: "No — Google rewrites descriptions ~63% of the time. Write them anyway for
178
+ social shares and some SERPs."
179
+ - q: "What happens if my title is over 60 characters?"
180
+ a: "Google truncates it with an ellipsis, cutting off your message mid-sentence."
181
+
182
+ related_tools:
183
+ - og-tag-generator
184
+ - schema-markup-generator
185
+ - heading-analyzer
186
+ ```
187
+
188
+ ### Minimum viable unique content per tool
189
+
190
+ | Field | Minimum | Priority |
191
+ |---|---|---|
192
+ | `meta_title` | Unique, ≤60 chars | 🔴 Critical |
193
+ | `meta_description` | Unique, 120–160 chars | 🔴 Critical |
194
+ | `introduction` | 80+ unique words | 🔴 Critical |
195
+ | `best_practices` | 3–5 tool-specific items | 🟡 High |
196
+ | `how_to_steps` | 3 real steps for THIS tool | 🟡 High |
197
+ | `faqs` | 2 tool-specific Q&As | 🟡 High |
198
+ | `related_tools` | 2–4 slug references | 🟢 Medium |
199
+
200
+ **Rule: complete one tool fully before starting the next.**
201
+
202
+ ---
203
+
204
+ ## Phase 3 — H1 and Heading Hierarchy
205
+
206
+ ### H1 formula
207
+
208
+ ```
209
+ {Tool Name} | {Outcome Phrase}
210
+ ```
211
+
212
+ **Rules:**
213
+ - One `<h1>` per page — only the tool name/title
214
+ - Must be unique per page
215
+
216
+ ### Heading hierarchy
217
+
218
+ ```
219
+ h1 — Tool name (one per page)
220
+ h2 — Major sections: "How It Works", "Best Practices", "FAQs", "Related Tools"
221
+ h3 — Subsections: individual FAQ items, feature callouts, step headers
222
+ ```
223
+
224
+ Never skip levels. No h1 → h3 without an h2.
225
+
226
+ ```bash
227
+ # Audit heading hierarchy on a live page
228
+ curl -s "https://yourdomain.com/tools/meta-tag-generator" \
229
+ | grep -oE '<h[1-6][^>]*>.*?</h[1-6]>'
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Phase 4 — Accessibility
235
+
236
+ Accessibility failures lower Core Web Vitals scores — a direct ranking signal.
237
+
238
+ Every icon-only interactive element needs `aria-label`:
239
+
240
+ ```html
241
+ <button aria-label="Copy to clipboard"><svg>...</svg></button>
242
+ <button aria-label="Go to next page">›</button>
243
+ <input type="search" aria-label="Search tools" placeholder="Search...">
244
+ ```
245
+
246
+ ```bash
247
+ # Find icon-only buttons missing aria-label
248
+ B=$(grep -rn "<button" templates/ 2>/dev/null | grep -v "aria-label" | grep -v ">[A-Za-z]" | head -5)
249
+ [ -n "$B" ] && echo " ⚠ Icon buttons missing aria-label:" && echo "$B" || echo " ✓ Buttons have aria-labels"
250
+ ```
251
+
252
+ ---
253
+
254
+ ## Phase 5 — Internal Linking
255
+
256
+ Internal links between tools are how PageRank flows through your site. A tool with no
257
+ inbound internal links is effectively invisible to Google even with great content.
258
+
259
+ ### Hub-and-Spoke model
260
+
261
+ ```
262
+ Homepage
263
+ └── Category: Keyword Tools
264
+ ├── Keyword Density Checker ←→ Keyword Suggestion Tool
265
+ └── SERP Preview Tool ←→ Meta Tag Generator
266
+ └── Category: Technical SEO
267
+ ├── XML Sitemap Visualizer ←→ Robots.txt Creator
268
+ └── Robots.txt Creator ←→ Redirect Generator
269
+ ```
270
+
271
+ ### Rules
272
+
273
+ - Every tool links **to** at least 2 related tools (use `related_tools` from registry)
274
+ - Every tool is linked **from** at least 2 other tools or category pages
275
+ - No orphan tools — every tool reachable within 3 clicks from homepage
276
+
277
+ ```bash
278
+ # Orphan detection — tools with too few inbound references
279
+ for slug in $(cat data/slugs.txt 2>/dev/null); do
280
+ C=$(grep -rl "$slug" templates/ 2>/dev/null | wc -l | tr -d ' ')
281
+ [ "$C" -lt 2 ] && echo " ORPHAN RISK: $slug ($C refs)"
282
+ done
283
+ ```
284
+
285
+ ### Template implementation
286
+
287
+ ```html
288
+ {% if tool.related_tools %}
289
+ <section>
290
+ <h2>Related Tools</h2>
291
+ {% for slug in tool.related_tools %}
292
+ {% set rel = get_tool(slug) %}
293
+ <a href="/tools/{{ slug }}">{{ rel.name }} — {{ rel.tagline }}</a>
294
+ {% endfor %}
295
+ </section>
296
+ {% endif %}
297
+ ```
298
+
299
+ ---
300
+
301
+ ## Phase 6 — URL Slug Hygiene
302
+
303
+ | ✅ Good | ❌ Bad | Problem |
304
+ |---|---|---|
305
+ | `/tools/meta-tag-generator` | `/tools/tool-1` | No keywords |
306
+ | `/tools/keyword-density-checker` | `/tools/free-online-keyword-density-checker-tool-free` | Keyword stuffed |
307
+ | `/tools/broken-link-finder` | `/tools/brokenLinkFinder` | camelCase |
308
+
309
+ **Formula:** `{primary-keyword-phrase}` — lowercase, hyphens, no stop words, no "free" / "online" / "tool" padding.
310
+
311
+ ```bash
312
+ # Audit — list longest slugs (likely stuffed)
313
+ curl -s "https://yourdomain.com/sitemap.xml" \
314
+ | grep -oE '<loc>[^<]+' | sed 's/<loc>//' \
315
+ | grep "/tools/" \
316
+ | awk -F'/tools/' '{print length($2), $2}' | sort -n | tail -20
317
+ ```
318
+
319
+ If renaming a slug, always 301 redirect old → new and update all internal links.
320
+
321
+ ---
322
+
323
+ ## Phase 7 — E-E-A-T Signals
324
+
325
+ Tool sites rank poorly when they look authorless and dateless.
326
+
327
+ ### Author byline + date (every tool page)
328
+
329
+ ```html
330
+ <p class="tool-byline">
331
+ Built by <a href="/about">Your Name</a>
332
+ <time datetime="{{ tool.updated_at }}"> · Updated {{ tool.updated_at | date }}</time>
333
+ </p>
334
+ ```
335
+
336
+ ### Trust pillars section
337
+
338
+ ```html
339
+ <section class="trust-pillars">
340
+ <div>✅ <strong>100% Free</strong> — no account, no credit card</div>
341
+ <div>🔒 <strong>Privacy First</strong> — your data never leaves your browser</div>
342
+ <div>⚡ <strong>Instant Results</strong> — processed in under 1 second</div>
343
+ </section>
344
+ ```
345
+
346
+ ### About / author page
347
+
348
+ Create `/about` with: real name, credentials, why you built the tools, contact info.
349
+ Link to it from every tool page byline. This is the single highest-impact E-E-A-T fix
350
+ for solo-built tool sites.
351
+
352
+ ---
353
+
354
+ ## Phase 8 — Scaling to 100+ Tools
355
+
356
+ When the content registry pattern is working for 10–20 tools, the next challenge is
357
+ scaling it to 100+ without losing quality or introducing duplicates.
358
+
359
+ ### Batch completion gate
360
+
361
+ Never commit a partial batch. Before every commit touching tool content:
362
+
363
+ ```bash
364
+ # Count tools with introduction content vs total tools
365
+ python3 -c "
366
+ import json
367
+ tools = json.load(open('data/tools.json'))
368
+ total = len(tools)
369
+ done = sum(1 for t in tools if t.get('introduction','').strip())
370
+ print(f'{done}/{total} tools have introduction content')
371
+ if done < total:
372
+ missing = [t['slug'] for t in tools if not t.get('introduction','').strip()]
373
+ print('Missing:', missing)
374
+ "
375
+ ```
376
+
377
+ Only commit when the count is **100% complete**. A partial batch (e.g. 93/105) means
378
+ 12 tools still have thin template prose — enough for Google to flag the site as inconsistent.
379
+
380
+ ### Batch writing order
381
+
382
+ Prioritise tools in this order:
383
+ 1. Tools already receiving impressions in Google Search Console (low-hanging fruit)
384
+ 2. Tools in your most-linked categories (PageRank concentration)
385
+ 3. Remaining tools alphabetically
386
+
387
+ ### Build verification before commit
388
+
389
+ ```bash
390
+ # Confirm build compiles cleanly after batch content additions
391
+ npm run build # Next.js / Nuxt
392
+ python manage.py check # Django
393
+ rails assets:precompile # Rails
394
+ # Zero errors = safe to commit
395
+ ```
396
+
397
+ ---
398
+
399
+ ## Phase 9 — Blog Content Strategy (Position 50–68 Keywords)
400
+
401
+ Tool pages rank well for transactional keywords ("meta tag generator", "check broken links").
402
+ But informational keywords ("how to write meta descriptions", "what is keyword density") sit
403
+ at position 50–68 — too deep to get clicks — because tool pages aren't the right content
404
+ format for them. Blog posts are.
405
+
406
+ ### Diagnosis: find your 50–68 keywords
407
+
408
+ In Google Search Console → Search Results → filter by Position > 49 AND Position < 69.
409
+ These are queries where you have enough authority to rank but the wrong page type is ranking.
410
+
411
+ ### Blog post targeting formula
412
+
413
+ ```
414
+ Post title: {Informational keyword} — {Year} Guide
415
+ Target keyword: the exact query from GSC
416
+ Content length: 1,000–1,500 words
417
+ Internal links: link to 2–3 relevant tools from within the post body
418
+ ```
419
+
420
+ Example mapping:
421
+
422
+ | GSC keyword (pos 50–68) | Blog post title | Tool to link |
423
+ |---|---|---|
424
+ | "how to write meta descriptions" | "How to Write Meta Descriptions That Get Clicks (2025)" | meta-tag-generator |
425
+ | "what is keyword density" | "Keyword Density: What It Is and How to Check It" | keyword-density-checker |
426
+ | "how to find broken links" | "How to Find and Fix Broken Links on Any Website" | broken-link-finder |
427
+ | "xml sitemap best practices" | "XML Sitemap Best Practices for 2025" | xml-sitemap-visualizer |
428
+
429
+ ### Blog post structure (SEO-optimised)
430
+
431
+ ```
432
+ H1: {Target keyword} — the exact GSC query, naturally phrased
433
+ Intro (100 words): answer the question directly in the first paragraph
434
+ H2: What is {topic}?
435
+ H2: Why it matters for SEO
436
+ H2: How to {action} — step by step
437
+ H3: Step 1
438
+ H3: Step 2
439
+ H3: Step 3
440
+ H2: Common mistakes
441
+ H2: {Tool name} — try it free ← internal link to your tool
442
+ Conclusion: summarise + CTA to the tool
443
+ ```
444
+
445
+ ### Blog post meta requirements
446
+
447
+ - `meta_title`: include year where relevant ("2025") — improves CTR on informational queries
448
+ - `meta_description`: answer the question in one sentence + "Free tool included"
449
+ - `canonical`: must point to the exact blog URL
450
+ - `datePublished` + `dateModified` in schema — critical for freshness signals
451
+
452
+ ### Internal link rule for blog posts
453
+
454
+ Every blog post must contain at least **2 contextual inline links** to relevant tools,
455
+ not just a "Related Tools" sidebar. Inline links within body copy pass significantly
456
+ more PageRank than sidebar links.
457
+
458
+ ```html
459
+ <!-- Good — inline contextual link -->
460
+ <p>Use our <a href="/tools/meta-tag-generator">meta tag generator</a> to preview
461
+ how your title and description appear in Google results before publishing.</p>
462
+
463
+ <!-- Weak — sidebar only, no body link -->
464
+ <aside>Related: Meta Tag Generator</aside>
465
+ ```
466
+
467
+ ---
468
+
469
+ ## Phase 10 — Live Deployment Verification
470
+
471
+ A fix that compiles cleanly can still fail in production. After every push, verify
472
+ the live site — not just the build.
473
+
474
+ ```bash
475
+ seo:verify() {
476
+ local D="$1"; local F=0
477
+ for p in "/" "/tools/meta-tag-generator" "/blog" "/category" "/privacy" "/terms"; do
478
+ local C=$(curl -so /dev/null -w "%{http_code}" "$D$p")
479
+ echo "$C $p"; [ "$C" = "200" ] || ((F++))
480
+ done
481
+ local C=$(curl -so /dev/null -w "%{http_code}" "$D/tools/this-slug-does-not-exist-xyz")
482
+ echo "Soft 404 check: $C (expect 404)"; [ "$C" = "404" ] || { echo " ✗ Soft 404"; ((F++)); }
483
+ curl -s "$D/tools/meta-tag-generator" | grep -qi "canonical" && echo " ✓ Canonical present" || { echo " ✗ Canonical missing"; ((F++)); }
484
+ local C2=$(curl -so /dev/null -w "%{http_code}" "$D/favicon.ico")
485
+ echo "Favicon: $C2 (expect 200)"; [ "$C2" = "200" ] || { echo " ✗ Favicon missing"; ((F++)); }
486
+ local J=$(curl -s "$D/tools/meta-tag-generator" | grep -c "application/ld+json" || true)
487
+ [ "$J" -ge 1 ] && echo " ✓ Schema: $J blocks" || { echo " ✗ No schema found"; ((F++)); }
488
+ return $F
489
+ }
490
+ ```
491
+
492
+ ### Expected results
493
+
494
+ | Check | Expected |
495
+ |---|---|
496
+ | All key pages | 200 |
497
+ | Invalid tool slug | 404 |
498
+ | `<link rel="canonical">` present | Yes |
499
+ | `/favicon.ico` | 200 |
500
+ | `application/ld+json` blocks | ≥ 1 per tool page |
501
+
502
+ If any check fails — **do not move on**. Diagnose and fix before the next phase.
503
+
504
+ ---
505
+
506
+ ## Phase 11 — Pre-Commit Validation
507
+
508
+ ```bash
509
+ seo:validate() {
510
+ python3 validate_meta.py || return 1
511
+ python3 -c "
512
+ import json
513
+ from collections import Counter
514
+ tools = json.load(open('data/tools.json', 'r'))
515
+ titles = [t.get('meta_title', '') for t in tools]
516
+ dups = [t for t, c in Counter(titles).items() if c > 1 and t]
517
+ print(dups) if dups else print('All titles unique')
518
+ "
519
+ python3 -c "
520
+ import json
521
+ tools = json.load(open('data/tools.json', 'r'))
522
+ missing = [t['slug'] for t in tools if not t.get('introduction', '').strip()]
523
+ print(f'Missing intro ({len(missing)}):', missing[:10])
524
+ "
525
+ }
526
+ ```
527
+
528
+ ---
529
+
530
+ ## Consolidated Runners
531
+
532
+ ```bash
533
+ # Quick check — meta validation + live site verification
534
+ seo:quick() { seo:verify "$PROD_URL" && seo:validate; }
535
+ # Full check — quick + duplicate title check
536
+ seo:full() { seo:quick; }
537
+ ```
538
+
539
+ ---
540
+
541
+ ## Master Issue Control Table
542
+
543
+ | # | Issue | Severity | Phase |
544
+ |---|---|---|---|
545
+ | 1 | Duplicate / template prose across tool pages | 🔴 Critical | 2 |
546
+ | 2 | Missing or generic meta titles | 🔴 Critical | 1 |
547
+ | 3 | Missing or generic meta descriptions | 🔴 Critical | 1 |
548
+ | 4 | H1 shared across all tools | 🔴 Critical | 3 |
549
+ | 5 | Orphan tool pages (no inbound internal links) | 🟡 High | 5 |
550
+ | 6 | Missing related tool links | 🟡 High | 5 |
551
+ | 7 | Keyword-stuffed or keywordless URL slugs | 🟡 High | 6 |
552
+ | 8 | No author byline or last-updated date | 🟡 High | 7 |
553
+ | 9 | Heading hierarchy violations | 🟢 Medium | 3 |
554
+ | 10 | Missing aria-labels on icon buttons | 🟢 Medium | 4 |
555
+
556
+ ---
557
+
558
+ ## Best Practices
559
+
560
+ | ✅ Do | ❌ Don't |
561
+ |-------|----------|
562
+ | Write unique meta title + description per tool | Use template prose shared across 80+ pages |
563
+ | Complete one tool's content fully before next | Batch-write partial entries across many tools |
564
+ | Link 2+ related tools from every tool page | Leave orphan tools with zero internal links |
565
+ | Use `{primary-keyword}` in URL slug | Pad slugs with "free" / "online" / "tool" |
566
+ | Add author byline + date to every tool page | Show authorless, dateless content |
567
+ | Blog about informational keywords (pos 50–68) | Rely on tool pages to rank for "how to" queries |
568
+ | 301 redirect old slugs when renaming | Delete old slugs without redirects |
569
+
570
+ ---
571
+
572
+ ## Key Principles
573
+
574
+ 1. **Duplicate content first, always.** Identical template prose across 80+ pages is the
575
+ root cause on almost every underperforming tool site. No other fix matters until this is done.
576
+
577
+ 2. **Complete one tool fully before the next.** Never write partial entries across many tools.
578
+ A half-written registry entry is worse than no entry — it signals thin content at scale.
579
+
580
+ 3. **Internal links are PageRank distribution.** A tool with great content but zero inbound
581
+ internal links is invisible to Google. Every tool needs at least 2 inbound links.
582
+
583
+ 4. **URL slugs are permanent.** A clean slug outperforms a stuffed one from day one.
584
+ Get them right before indexing — renaming later costs ranking momentum even with 301s.
585
+
586
+ 5. **E-E-A-T is not decoration.** Authorless, dateless tool pages trigger quality rater
587
+ guidelines as potential spam. A real name and a real date is the minimum baseline.
588
+
589
+ 6. **Validate before every commit.** Catching a missing description before deploy is free.
590
+ Fixing it after indexing costs weeks.
591
+
592
+ ---
593
+
594
+ ## Related Skills
595
+
596
+ - [schema-markup-generator](/skills/schema-markup-generator/SKILL.md) — JSON-LD structured data (HowTo, FAQPage, WebApplication) for tool pages
597
+ - [social-metadata-hardening](/skills/social-metadata-hardening/SKILL.md) — OG tags and social sharing previews for tool pages
598
+ - [indexing-issue-auditor](/skills/indexing-issue-auditor/SKILL.md) — full crawl audit and redirect mapping after slug changes
599
+ - [pagespeed-enhancer](/skills/pagespeed-enhancer/SKILL.md) — Lighthouse / Core Web Vitals audit for tool pages
600
+ - [wordpress-centric-high-seo-optimized-blogwriting-skill](/skills/wordpress-centric-high-seo-optimized-blogwriting-skill/SKILL.md) — blog post writing with SEO structure
601
+ - [vibecode-production-qa-validator](/skills/vibecode-production-qa-validator/SKILL.md) — end-to-end production QA including deployment verification
602
+
603
+ ---
604
+
605
+ ## When to Use
606
+
607
+ This skill is applicable to execute the workflow or actions described in the overview.
608
+ Use it whenever the user mentions poor rankings, tools not getting indexed, all tool pages ranking the same, duplicate content warnings, "how do I make each tool page unique", thin content, or Google not ranking tool pages.
609
+
610
+ ## Limitations
611
+
612
+ - Use this skill only when the task clearly matches the scope described above.
613
+ - Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
614
+ - Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
615
+ - Content registry assumes a structured data source (JSON, YAML, DB) — static HTML tool pages will need a migration step first.
616
+ - Technical SEO factors (page speed, Core Web Vitals, render blocking) are delegated to the pagespeed-enhancer skill.