vybekiit 0.4.0 → 0.6.0

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 (665) hide show
  1. package/dist/bin.js +840 -296
  2. package/dist/global-skills/add-ai/SKILL.md +53 -0
  3. package/dist/global-skills/add-analytics/SKILL.md +65 -0
  4. package/dist/global-skills/add-app-clip/SKILL.md +280 -0
  5. package/dist/global-skills/add-app-clip/agents/openai.yaml +4 -0
  6. package/dist/global-skills/add-app-clip/references/native-module.md +96 -0
  7. package/dist/global-skills/add-blog/SKILL.md +49 -0
  8. package/dist/global-skills/add-crud/SKILL.md +28 -0
  9. package/dist/global-skills/add-files/SKILL.md +65 -0
  10. package/dist/global-skills/add-images/SKILL.md +64 -0
  11. package/dist/global-skills/add-language/SKILL.md +44 -0
  12. package/dist/global-skills/add-notifications/SKILL.md +61 -0
  13. package/dist/global-skills/add-realtime/SKILL.md +49 -0
  14. package/dist/global-skills/add-route/SKILL.md +28 -0
  15. package/dist/global-skills/add-search/SKILL.md +43 -0
  16. package/dist/global-skills/add-signin/SKILL.md +78 -0
  17. package/dist/global-skills/add-teams/SKILL.md +64 -0
  18. package/dist/global-skills/add-upload/SKILL.md +27 -0
  19. package/dist/global-skills/aws-cdk/SKILL.md +72 -0
  20. package/dist/global-skills/aws-cdk/references/bootstrap-and-project-setup.md +257 -0
  21. package/dist/global-skills/aws-cdk/references/compliance-and-drift.md +193 -0
  22. package/dist/global-skills/aws-cdk/references/construct-patterns.md +315 -0
  23. package/dist/global-skills/aws-cdk/references/import-and-migrate.md +184 -0
  24. package/dist/global-skills/aws-cdk/references/refactor-and-prevent-replacement.md +198 -0
  25. package/dist/global-skills/aws-cdk/references/troubleshooting-credentials.md +183 -0
  26. package/dist/global-skills/aws-cdk/references/troubleshooting-deployment.md +293 -0
  27. package/dist/global-skills/aws-cdk/references/troubleshooting-synth.md +274 -0
  28. package/dist/global-skills/aws-cdk/references/v1-to-v2-migration.md +119 -0
  29. package/dist/global-skills/aws-cloudformation/SKILL.md +88 -0
  30. package/dist/global-skills/aws-cloudformation/references/author-cloudformation-best-practices.script.md +179 -0
  31. package/dist/global-skills/aws-cloudformation/references/check-cloudformation-template-compliance.script.md +159 -0
  32. package/dist/global-skills/aws-cloudformation/references/cloudformation-pre-deploy-validation.script.md +217 -0
  33. package/dist/global-skills/aws-cloudformation/references/deploy-with-express-mode.script.md +271 -0
  34. package/dist/global-skills/aws-cloudformation/references/lookup-resource-properties.script.md +130 -0
  35. package/dist/global-skills/aws-cloudformation/references/troubleshoot-deployment.script.md +200 -0
  36. package/dist/global-skills/aws-cloudformation/references/validate-cloudformation-template.script.md +135 -0
  37. package/dist/global-skills/aws-serverless/SKILL.md +51 -0
  38. package/dist/global-skills/aws-serverless/assets/powertools-handler.py +49 -0
  39. package/dist/global-skills/aws-serverless/references/api-gateway.md +553 -0
  40. package/dist/global-skills/aws-serverless/references/architecture.md +262 -0
  41. package/dist/global-skills/aws-serverless/references/concurrency.md +200 -0
  42. package/dist/global-skills/aws-serverless/references/deployment.md +94 -0
  43. package/dist/global-skills/aws-serverless/references/event-sources.md +484 -0
  44. package/dist/global-skills/aws-serverless/references/lambda.md +548 -0
  45. package/dist/global-skills/aws-serverless/references/orchestration.md +449 -0
  46. package/dist/global-skills/aws-serverless/references/production.md +493 -0
  47. package/dist/global-skills/aws-serverless/references/troubleshooting.md +711 -0
  48. package/dist/global-skills/back-up-my-code/SKILL.md +48 -0
  49. package/dist/global-skills/better-auth-best-practices/SKILL.md +182 -0
  50. package/dist/global-skills/better-auth-security-best-practices/SKILL.md +432 -0
  51. package/dist/global-skills/building-native-ui/SKILL.md +377 -0
  52. package/dist/global-skills/building-native-ui/agents/openai.yaml +4 -0
  53. package/dist/global-skills/building-native-ui/references/animations.md +220 -0
  54. package/dist/global-skills/building-native-ui/references/controls.md +270 -0
  55. package/dist/global-skills/building-native-ui/references/form-sheet.md +253 -0
  56. package/dist/global-skills/building-native-ui/references/gradients.md +106 -0
  57. package/dist/global-skills/building-native-ui/references/icons.md +213 -0
  58. package/dist/global-skills/building-native-ui/references/media.md +198 -0
  59. package/dist/global-skills/building-native-ui/references/route-structure.md +229 -0
  60. package/dist/global-skills/building-native-ui/references/search.md +248 -0
  61. package/dist/global-skills/building-native-ui/references/storage.md +121 -0
  62. package/dist/global-skills/building-native-ui/references/tabs.md +433 -0
  63. package/dist/global-skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  64. package/dist/global-skills/building-native-ui/references/visual-effects.md +197 -0
  65. package/dist/global-skills/building-native-ui/references/webgpu-three.md +605 -0
  66. package/dist/global-skills/building-native-ui/references/zoom-transitions.md +158 -0
  67. package/dist/global-skills/buy-domain/SKILL.md +64 -0
  68. package/dist/global-skills/check-safety/SKILL.md +94 -0
  69. package/dist/global-skills/claimable-postgres/SKILL.md +249 -0
  70. package/dist/global-skills/configure-capabilities/SKILL.md +38 -0
  71. package/dist/global-skills/connect-account/SKILL.md +64 -0
  72. package/dist/global-skills/connect-account-backend/SKILL.md +41 -0
  73. package/dist/global-skills/create-auth-skill/SKILL.md +321 -0
  74. package/dist/global-skills/design-my-data/SKILL.md +48 -0
  75. package/dist/global-skills/doctor/SKILL.md +84 -0
  76. package/dist/global-skills/eas-app-stores/SKILL.md +152 -0
  77. package/dist/global-skills/eas-app-stores/agents/openai.yaml +4 -0
  78. package/dist/global-skills/eas-app-stores/references/app-store-metadata.md +497 -0
  79. package/dist/global-skills/eas-app-stores/references/ios-app-store.md +371 -0
  80. package/dist/global-skills/eas-app-stores/references/play-store.md +246 -0
  81. package/dist/global-skills/eas-app-stores/references/testflight.md +58 -0
  82. package/dist/global-skills/eas-app-stores/references/workflows.md +120 -0
  83. package/dist/global-skills/eas-hosting/SKILL.md +423 -0
  84. package/dist/global-skills/eas-hosting/agents/openai.yaml +4 -0
  85. package/dist/global-skills/eas-observe/SKILL.md +32 -0
  86. package/dist/global-skills/eas-observe/agents/openai.yaml +4 -0
  87. package/dist/global-skills/eas-observe/references/metrics.md +47 -0
  88. package/dist/global-skills/eas-observe/references/queries.md +342 -0
  89. package/dist/global-skills/eas-observe/references/setup.md +317 -0
  90. package/dist/global-skills/eas-simulator/SKILL.md +156 -0
  91. package/dist/global-skills/eas-simulator/agents/openai.yaml +4 -0
  92. package/dist/global-skills/eas-simulator/references/controllers.md +67 -0
  93. package/dist/global-skills/eas-simulator/references/run-your-app.md +185 -0
  94. package/dist/global-skills/eas-simulator/references/troubleshooting.md +38 -0
  95. package/dist/global-skills/eas-update-insights/SKILL.md +230 -0
  96. package/dist/global-skills/eas-update-insights/agents/openai.yaml +4 -0
  97. package/dist/global-skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  98. package/dist/global-skills/eas-update-insights/references/update-insights-schema.md +69 -0
  99. package/dist/global-skills/eas-workflows/SKILL.md +94 -0
  100. package/dist/global-skills/eas-workflows/agents/openai.yaml +4 -0
  101. package/dist/global-skills/eas-workflows/scripts/fetch.js +109 -0
  102. package/dist/global-skills/eas-workflows/scripts/package.json +11 -0
  103. package/dist/global-skills/eas-workflows/scripts/validate.js +84 -0
  104. package/dist/global-skills/email-best-practices/SKILL.md +73 -0
  105. package/dist/global-skills/expo-api-routes/SKILL.md +368 -0
  106. package/dist/global-skills/expo-api-routes/agents/openai.yaml +4 -0
  107. package/dist/global-skills/expo-app-clip/SKILL.md +282 -0
  108. package/dist/global-skills/expo-app-clip/agents/openai.yaml +4 -0
  109. package/dist/global-skills/expo-app-clip/references/native-module.md +96 -0
  110. package/dist/global-skills/expo-brownfield/SKILL.md +54 -0
  111. package/dist/global-skills/expo-brownfield/agents/openai.yaml +4 -0
  112. package/dist/global-skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  113. package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  114. package/dist/global-skills/expo-brownfield/references/comparison.md +63 -0
  115. package/dist/global-skills/expo-brownfield/references/troubleshooting.md +88 -0
  116. package/dist/global-skills/expo-cicd-workflows/SKILL.md +92 -0
  117. package/dist/global-skills/expo-cicd-workflows/agents/openai.yaml +4 -0
  118. package/dist/global-skills/expo-cicd-workflows/scripts/fetch.js +109 -0
  119. package/dist/global-skills/expo-cicd-workflows/scripts/package.json +11 -0
  120. package/dist/global-skills/expo-cicd-workflows/scripts/validate.js +84 -0
  121. package/dist/global-skills/expo-data-fetching/SKILL.md +449 -0
  122. package/dist/global-skills/expo-data-fetching/agents/openai.yaml +4 -0
  123. package/dist/global-skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
  124. package/dist/global-skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
  125. package/dist/global-skills/expo-deployment/SKILL.md +167 -0
  126. package/dist/global-skills/expo-deployment/agents/openai.yaml +4 -0
  127. package/dist/global-skills/expo-deployment/references/app-store-metadata.md +497 -0
  128. package/dist/global-skills/expo-deployment/references/ios-app-store.md +371 -0
  129. package/dist/global-skills/expo-deployment/references/play-store.md +246 -0
  130. package/dist/global-skills/expo-deployment/references/testflight.md +58 -0
  131. package/dist/global-skills/expo-deployment/references/workflows.md +160 -0
  132. package/dist/global-skills/expo-dev-client/SKILL.md +174 -0
  133. package/dist/global-skills/expo-dev-client/agents/openai.yaml +4 -0
  134. package/dist/global-skills/expo-dom/SKILL.md +417 -0
  135. package/dist/global-skills/expo-dom/agents/openai.yaml +4 -0
  136. package/dist/global-skills/expo-examples/SKILL.md +99 -0
  137. package/dist/global-skills/expo-examples/agents/openai.yaml +4 -0
  138. package/dist/global-skills/expo-examples/references/catalog.md +105 -0
  139. package/dist/global-skills/expo-module/SKILL.md +141 -0
  140. package/dist/global-skills/expo-module/agents/openai.yaml +4 -0
  141. package/dist/global-skills/expo-module/references/config-plugin.md +90 -0
  142. package/dist/global-skills/expo-module/references/create-expo-module.md +206 -0
  143. package/dist/global-skills/expo-module/references/lifecycle.md +127 -0
  144. package/dist/global-skills/expo-module/references/module-config.md +48 -0
  145. package/dist/global-skills/expo-module/references/native-module.md +286 -0
  146. package/dist/global-skills/expo-module/references/native-view.md +171 -0
  147. package/dist/global-skills/expo-native-ui/SKILL.md +181 -0
  148. package/dist/global-skills/expo-native-ui/agents/openai.yaml +4 -0
  149. package/dist/global-skills/expo-native-ui/references/animations.md +220 -0
  150. package/dist/global-skills/expo-native-ui/references/controls.md +270 -0
  151. package/dist/global-skills/expo-native-ui/references/gradients.md +106 -0
  152. package/dist/global-skills/expo-native-ui/references/icons.md +213 -0
  153. package/dist/global-skills/expo-native-ui/references/media.md +198 -0
  154. package/dist/global-skills/expo-native-ui/references/storage.md +121 -0
  155. package/dist/global-skills/expo-native-ui/references/visual-effects.md +197 -0
  156. package/dist/global-skills/expo-native-ui/references/webgpu-three.md +605 -0
  157. package/dist/global-skills/expo-observe/SKILL.md +30 -0
  158. package/dist/global-skills/expo-observe/references/metrics.md +47 -0
  159. package/dist/global-skills/expo-observe/references/queries.md +342 -0
  160. package/dist/global-skills/expo-observe/references/setup.md +317 -0
  161. package/dist/global-skills/expo-router/SKILL.md +230 -0
  162. package/dist/global-skills/expo-router/agents/openai.yaml +4 -0
  163. package/dist/global-skills/expo-router/references/form-sheet.md +253 -0
  164. package/dist/global-skills/expo-router/references/route-structure.md +229 -0
  165. package/dist/global-skills/expo-router/references/search.md +248 -0
  166. package/dist/global-skills/expo-router/references/tabs.md +433 -0
  167. package/dist/global-skills/expo-router/references/toolbar-and-headers.md +284 -0
  168. package/dist/global-skills/expo-router/references/zoom-transitions.md +158 -0
  169. package/dist/global-skills/expo-skill-eval/SKILL.md +314 -0
  170. package/dist/global-skills/expo-skill-eval/agents/visual-grader.md +52 -0
  171. package/dist/global-skills/expo-skill-eval/references/design-rubric.md +45 -0
  172. package/dist/global-skills/expo-skill-eval/references/runtime-matrix.md +34 -0
  173. package/dist/global-skills/expo-skill-eval/scripts/check-static.sh +64 -0
  174. package/dist/global-skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
  175. package/dist/global-skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
  176. package/dist/global-skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
  177. package/dist/global-skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
  178. package/dist/global-skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
  179. package/dist/global-skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
  180. package/dist/global-skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
  181. package/dist/global-skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
  182. package/dist/global-skills/expo-skill-feedback/SKILL.md +54 -0
  183. package/dist/global-skills/expo-skill-feedback/agents/openai.yaml +4 -0
  184. package/dist/global-skills/expo-skill-feedback/scripts/skill-event.cjs +180 -0
  185. package/dist/global-skills/expo-skill-feedback/scripts/skill-feedback.cjs +118 -0
  186. package/dist/global-skills/expo-skill-feedback/scripts/telemetry.cjs +65 -0
  187. package/dist/global-skills/expo-skill-feedback/scripts/telemetry_common.cjs +171 -0
  188. package/dist/global-skills/expo-tailwind-setup/SKILL.md +480 -0
  189. package/dist/global-skills/expo-tailwind-setup/agents/openai.yaml +4 -0
  190. package/dist/global-skills/expo-ui/SKILL.md +47 -0
  191. package/dist/global-skills/expo-ui/agents/openai.yaml +4 -0
  192. package/dist/global-skills/expo-ui/references/drop-in-replacements.md +27 -0
  193. package/dist/global-skills/expo-ui/references/jetpack-compose.md +73 -0
  194. package/dist/global-skills/expo-ui/references/swift-ui.md +73 -0
  195. package/dist/global-skills/expo-ui/references/universal.md +73 -0
  196. package/dist/global-skills/expo-ui/scripts/list-components.js +193 -0
  197. package/dist/global-skills/expo-upgrade/SKILL.md +134 -0
  198. package/dist/global-skills/expo-upgrade/agents/openai.yaml +4 -0
  199. package/dist/global-skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
  200. package/dist/global-skills/expo-upgrade/references/expo-av-to-video.md +160 -0
  201. package/dist/global-skills/expo-upgrade/references/native-tabs.md +124 -0
  202. package/dist/global-skills/expo-upgrade/references/new-architecture.md +79 -0
  203. package/dist/global-skills/expo-upgrade/references/react-19.md +79 -0
  204. package/dist/global-skills/expo-upgrade/references/react-compiler.md +59 -0
  205. package/dist/global-skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
  206. package/dist/global-skills/expo-web-to-native/SKILL.md +83 -0
  207. package/dist/global-skills/expo-web-to-native/agents/openai.yaml +4 -0
  208. package/dist/global-skills/expo-web-to-native/references/false-friends.md +119 -0
  209. package/dist/global-skills/expo-web-to-native/references/native-patterns.md +39 -0
  210. package/dist/global-skills/expo-web-to-native/references/run-as-goal.md +48 -0
  211. package/dist/global-skills/expo-web-to-native/references/verify-on-device.md +45 -0
  212. package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +165 -0
  213. package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +95 -0
  214. package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +156 -0
  215. package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +157 -0
  216. package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +186 -0
  217. package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +73 -0
  218. package/dist/global-skills/firebase-app-hosting-basics/references/cli_commands.md +85 -0
  219. package/dist/global-skills/firebase-app-hosting-basics/references/configuration.md +59 -0
  220. package/dist/global-skills/firebase-app-hosting-basics/references/emulation.md +59 -0
  221. package/dist/global-skills/firebase-auth-basics/SKILL.md +118 -0
  222. package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +160 -0
  223. package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +301 -0
  224. package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +149 -0
  225. package/dist/global-skills/firebase-auth-basics/references/ios_setup.md +87 -0
  226. package/dist/global-skills/firebase-auth-basics/references/security_rules.md +49 -0
  227. package/dist/global-skills/firebase-basics/SKILL.md +148 -0
  228. package/dist/global-skills/firebase-basics/references/android_setup.md +41 -0
  229. package/dist/global-skills/firebase-basics/references/firebase-cli-guide.md +18 -0
  230. package/dist/global-skills/firebase-basics/references/firebase-service-init.md +20 -0
  231. package/dist/global-skills/firebase-basics/references/flutter_setup.md +143 -0
  232. package/dist/global-skills/firebase-basics/references/ios_setup.md +113 -0
  233. package/dist/global-skills/firebase-basics/references/local-env-setup.md +80 -0
  234. package/dist/global-skills/firebase-basics/references/refresh/android_studio.md +41 -0
  235. package/dist/global-skills/firebase-basics/references/refresh/antigravity.md +64 -0
  236. package/dist/global-skills/firebase-basics/references/refresh/claude.md +12 -0
  237. package/dist/global-skills/firebase-basics/references/refresh/gemini-cli.md +13 -0
  238. package/dist/global-skills/firebase-basics/references/refresh/other-agents.md +67 -0
  239. package/dist/global-skills/firebase-basics/references/setup/android_studio.md +23 -0
  240. package/dist/global-skills/firebase-basics/references/setup/antigravity.md +98 -0
  241. package/dist/global-skills/firebase-basics/references/setup/claude_code.md +45 -0
  242. package/dist/global-skills/firebase-basics/references/setup/cursor.md +93 -0
  243. package/dist/global-skills/firebase-basics/references/setup/gemini_cli.md +53 -0
  244. package/dist/global-skills/firebase-basics/references/setup/github_copilot.md +104 -0
  245. package/dist/global-skills/firebase-basics/references/setup/other_agents.md +99 -0
  246. package/dist/global-skills/firebase-basics/references/web_setup.md +77 -0
  247. package/dist/global-skills/firebase-crashlytics/SKILL.md +42 -0
  248. package/dist/global-skills/firebase-crashlytics/references/android_setup.md +152 -0
  249. package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +115 -0
  250. package/dist/global-skills/firebase-data-connect/SKILL.md +191 -0
  251. package/dist/global-skills/firebase-data-connect/examples.md +638 -0
  252. package/dist/global-skills/firebase-data-connect/reference/cloud_functions.md +184 -0
  253. package/dist/global-skills/firebase-data-connect/reference/config.md +271 -0
  254. package/dist/global-skills/firebase-data-connect/reference/data_seeding.md +185 -0
  255. package/dist/global-skills/firebase-data-connect/reference/native_sql.md +170 -0
  256. package/dist/global-skills/firebase-data-connect/reference/operations.md +385 -0
  257. package/dist/global-skills/firebase-data-connect/reference/realtime.md +210 -0
  258. package/dist/global-skills/firebase-data-connect/reference/schema.md +290 -0
  259. package/dist/global-skills/firebase-data-connect/reference/sdk_admin_node.md +141 -0
  260. package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +126 -0
  261. package/dist/global-skills/firebase-data-connect/reference/sdk_flutter.md +134 -0
  262. package/dist/global-skills/firebase-data-connect/reference/sdk_ios.md +157 -0
  263. package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +146 -0
  264. package/dist/global-skills/firebase-data-connect/reference/search.md +264 -0
  265. package/dist/global-skills/firebase-data-connect/reference/security.md +295 -0
  266. package/dist/global-skills/firebase-data-connect/templates.md +318 -0
  267. package/dist/global-skills/firebase-firestore/SKILL.md +89 -0
  268. package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +230 -0
  269. package/dist/global-skills/firebase-firestore/references/enterprise/data_model.md +66 -0
  270. package/dist/global-skills/firebase-firestore/references/enterprise/flutter_setup.md +180 -0
  271. package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +135 -0
  272. package/dist/global-skills/firebase-firestore/references/enterprise/ios_setup.md +189 -0
  273. package/dist/global-skills/firebase-firestore/references/enterprise/provisioning.md +118 -0
  274. package/dist/global-skills/firebase-firestore/references/enterprise/python_sdk_usage.md +138 -0
  275. package/dist/global-skills/firebase-firestore/references/enterprise/security_rules.md +577 -0
  276. package/dist/global-skills/firebase-firestore/references/enterprise/web_sdk_usage.md +127 -0
  277. package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +193 -0
  278. package/dist/global-skills/firebase-firestore/references/standard/flutter_setup.md +176 -0
  279. package/dist/global-skills/firebase-firestore/references/standard/indexes.md +113 -0
  280. package/dist/global-skills/firebase-firestore/references/standard/ios_setup.md +174 -0
  281. package/dist/global-skills/firebase-firestore/references/standard/provisioning.md +110 -0
  282. package/dist/global-skills/firebase-firestore/references/standard/security_rules.md +577 -0
  283. package/dist/global-skills/firebase-firestore/references/standard/web_sdk_usage.md +192 -0
  284. package/dist/global-skills/firebase-hosting-basics/SKILL.md +64 -0
  285. package/dist/global-skills/firebase-hosting-basics/references/configuration.md +115 -0
  286. package/dist/global-skills/firebase-hosting-basics/references/deploying.md +48 -0
  287. package/dist/global-skills/firebase-remote-config-basics/SKILL.md +124 -0
  288. package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +91 -0
  289. package/dist/global-skills/firebase-remote-config-basics/references/ios_setup.md +89 -0
  290. package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +70 -0
  291. package/dist/global-skills/go-live/SKILL.md +90 -0
  292. package/dist/global-skills/harden/SKILL.md +101 -0
  293. package/dist/global-skills/instrument-feature-flags/SKILL.md +88 -0
  294. package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +3578 -0
  295. package/dist/global-skills/instrument-feature-flags/references/android.md +146 -0
  296. package/dist/global-skills/instrument-feature-flags/references/api.md +194 -0
  297. package/dist/global-skills/instrument-feature-flags/references/best-practices.md +231 -0
  298. package/dist/global-skills/instrument-feature-flags/references/django.md +263 -0
  299. package/dist/global-skills/instrument-feature-flags/references/dotnet.md +763 -0
  300. package/dist/global-skills/instrument-feature-flags/references/elixir.md +47 -0
  301. package/dist/global-skills/instrument-feature-flags/references/flask.md +131 -0
  302. package/dist/global-skills/instrument-feature-flags/references/flutter.md +212 -0
  303. package/dist/global-skills/instrument-feature-flags/references/go.md +208 -0
  304. package/dist/global-skills/instrument-feature-flags/references/ios.md +146 -0
  305. package/dist/global-skills/instrument-feature-flags/references/java.md +94 -0
  306. package/dist/global-skills/instrument-feature-flags/references/laravel.md +170 -0
  307. package/dist/global-skills/instrument-feature-flags/references/next-js.md +383 -0
  308. package/dist/global-skills/instrument-feature-flags/references/nodejs.md +216 -0
  309. package/dist/global-skills/instrument-feature-flags/references/php.md +187 -0
  310. package/dist/global-skills/instrument-feature-flags/references/python.md +191 -0
  311. package/dist/global-skills/instrument-feature-flags/references/react-native.md +166 -0
  312. package/dist/global-skills/instrument-feature-flags/references/react.md +302 -0
  313. package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +604 -0
  314. package/dist/global-skills/instrument-feature-flags/references/ruby.md +200 -0
  315. package/dist/global-skills/instrument-feature-flags/references/rust.md +222 -0
  316. package/dist/global-skills/instrument-feature-flags/references/usage.md +600 -0
  317. package/dist/global-skills/instrument-feature-flags/references/web.md +193 -0
  318. package/dist/global-skills/instrument-product-analytics/SKILL.md +139 -0
  319. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-android.md +1639 -0
  320. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-angular.md +944 -0
  321. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +1001 -0
  322. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +1004 -0
  323. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-static.md +720 -0
  324. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-view-transitions.md +810 -0
  325. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-django.md +1167 -0
  326. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-expo.md +1412 -0
  327. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-fastapi.md +1585 -0
  328. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-flask.md +1208 -0
  329. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-laravel.md +2267 -0
  330. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-app-router.md +712 -0
  331. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-pages-router.md +767 -0
  332. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-3-6.md +939 -0
  333. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-4.md +1078 -0
  334. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-php.md +527 -0
  335. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-python.md +481 -0
  336. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-native.md +1823 -0
  337. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-6.md +582 -0
  338. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-data.md +892 -0
  339. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-declarative.md +649 -0
  340. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-framework.md +1218 -0
  341. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-code-based.md +793 -0
  342. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-file-based.md +780 -0
  343. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +1320 -0
  344. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby.md +452 -0
  345. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-sveltekit.md +854 -0
  346. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-swift.md +665 -0
  347. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-tanstack-start.md +1199 -0
  348. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-vue-3.md +910 -0
  349. package/dist/global-skills/instrument-product-analytics/references/android.md +811 -0
  350. package/dist/global-skills/instrument-product-analytics/references/angular.md +376 -0
  351. package/dist/global-skills/instrument-product-analytics/references/astro.md +165 -0
  352. package/dist/global-skills/instrument-product-analytics/references/configuration.md +299 -0
  353. package/dist/global-skills/instrument-product-analytics/references/django.md +263 -0
  354. package/dist/global-skills/instrument-product-analytics/references/dotnet.md +763 -0
  355. package/dist/global-skills/instrument-product-analytics/references/elixir.md +414 -0
  356. package/dist/global-skills/instrument-product-analytics/references/flask.md +131 -0
  357. package/dist/global-skills/instrument-product-analytics/references/flutter.md +845 -0
  358. package/dist/global-skills/instrument-product-analytics/references/go.md +567 -0
  359. package/dist/global-skills/instrument-product-analytics/references/identify-users.md +272 -0
  360. package/dist/global-skills/instrument-product-analytics/references/ios.md +154 -0
  361. package/dist/global-skills/instrument-product-analytics/references/laravel.md +170 -0
  362. package/dist/global-skills/instrument-product-analytics/references/next-js.md +383 -0
  363. package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +244 -0
  364. package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +253 -0
  365. package/dist/global-skills/instrument-product-analytics/references/php.md +646 -0
  366. package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +1675 -0
  367. package/dist/global-skills/instrument-product-analytics/references/python.md +898 -0
  368. package/dist/global-skills/instrument-product-analytics/references/react-native.md +1338 -0
  369. package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +376 -0
  370. package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +364 -0
  371. package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +376 -0
  372. package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +479 -0
  373. package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +604 -0
  374. package/dist/global-skills/instrument-product-analytics/references/ruby.md +759 -0
  375. package/dist/global-skills/instrument-product-analytics/references/svelte.md +234 -0
  376. package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +193 -0
  377. package/dist/global-skills/instrument-product-analytics/references/usage.md +600 -0
  378. package/dist/global-skills/instrument-product-analytics/references/vue-js.md +306 -0
  379. package/dist/global-skills/manifest.json +125 -0
  380. package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +284 -0
  381. package/dist/global-skills/mongodb-atlas-stream-processing/references/connection-configs.md +298 -0
  382. package/dist/global-skills/mongodb-atlas-stream-processing/references/development-workflow.md +304 -0
  383. package/dist/global-skills/mongodb-atlas-stream-processing/references/mcp-troubleshooting.md +55 -0
  384. package/dist/global-skills/mongodb-atlas-stream-processing/references/output-diagnostics.md +150 -0
  385. package/dist/global-skills/mongodb-atlas-stream-processing/references/pipeline-patterns.md +457 -0
  386. package/dist/global-skills/mongodb-atlas-stream-processing/references/sizing-and-parallelism.md +178 -0
  387. package/dist/global-skills/mongodb-connection/SKILL.md +201 -0
  388. package/dist/global-skills/mongodb-connection/references/monitoring-guide.md +191 -0
  389. package/dist/global-skills/mongodb-mcp-setup/SKILL.md +324 -0
  390. package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +195 -0
  391. package/dist/global-skills/mongodb-query-optimizer/SKILL.md +150 -0
  392. package/dist/global-skills/mongodb-query-optimizer/references/aggregation-optimization.md +210 -0
  393. package/dist/global-skills/mongodb-query-optimizer/references/antipattern-examples.md +74 -0
  394. package/dist/global-skills/mongodb-query-optimizer/references/core-indexing-principles.md +134 -0
  395. package/dist/global-skills/mongodb-query-optimizer/references/update-query-examples.md +39 -0
  396. package/dist/global-skills/mongodb-schema-design/SKILL.md +181 -0
  397. package/dist/global-skills/mongodb-schema-design/references/antipattern-excessive-lookups.md +84 -0
  398. package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-collections.md +91 -0
  399. package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-indexes.md +95 -0
  400. package/dist/global-skills/mongodb-schema-design/references/fundamental-document-model.md +91 -0
  401. package/dist/global-skills/mongodb-schema-design/references/fundamental-document-size.md +226 -0
  402. package/dist/global-skills/mongodb-schema-design/references/fundamental-embed-vs-reference.md +418 -0
  403. package/dist/global-skills/mongodb-schema-design/references/fundamental-schema-validation.md +131 -0
  404. package/dist/global-skills/mongodb-schema-design/references/pattern-approximation.md +80 -0
  405. package/dist/global-skills/mongodb-schema-design/references/pattern-archive.md +143 -0
  406. package/dist/global-skills/mongodb-schema-design/references/pattern-attribute.md +77 -0
  407. package/dist/global-skills/mongodb-schema-design/references/pattern-bucket.md +102 -0
  408. package/dist/global-skills/mongodb-schema-design/references/pattern-computed.md +162 -0
  409. package/dist/global-skills/mongodb-schema-design/references/pattern-document-versioning.md +166 -0
  410. package/dist/global-skills/mongodb-schema-design/references/pattern-extended-reference.md +72 -0
  411. package/dist/global-skills/mongodb-schema-design/references/pattern-outlier.md +159 -0
  412. package/dist/global-skills/mongodb-schema-design/references/pattern-polymorphic.md +167 -0
  413. package/dist/global-skills/mongodb-schema-design/references/pattern-schema-versioning.md +273 -0
  414. package/dist/global-skills/mongodb-schema-design/references/pattern-time-series-collections.md +190 -0
  415. package/dist/global-skills/mongodb-schema-design/references/source-query-stats.md +123 -0
  416. package/dist/global-skills/mongodb-schema-design/references/source-slow-query-logs.md +63 -0
  417. package/dist/global-skills/mongodb-search-and-ai/SKILL.md +142 -0
  418. package/dist/global-skills/mongodb-search-and-ai/references/hybrid-search.md +697 -0
  419. package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-indexing.md +584 -0
  420. package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-querying.md +636 -0
  421. package/dist/global-skills/mongodb-search-and-ai/references/vector-search.md +746 -0
  422. package/dist/global-skills/native-data-fetching/SKILL.md +505 -0
  423. package/dist/global-skills/native-data-fetching/agents/openai.yaml +4 -0
  424. package/dist/global-skills/native-data-fetching/references/expo-router-loaders.md +341 -0
  425. package/dist/global-skills/neon/SKILL.md +343 -0
  426. package/dist/global-skills/neon-ai-gateway/SKILL.md +236 -0
  427. package/dist/global-skills/neon-functions/SKILL.md +490 -0
  428. package/dist/global-skills/neon-functions/references/ai-sdk.md +139 -0
  429. package/dist/global-skills/neon-functions/references/hono-websockets.md +145 -0
  430. package/dist/global-skills/neon-functions/references/mastra-studio.md +127 -0
  431. package/dist/global-skills/neon-functions/references/mcp.md +137 -0
  432. package/dist/global-skills/neon-functions/references/sentry.md +131 -0
  433. package/dist/global-skills/neon-functions/references/sse.md +143 -0
  434. package/dist/global-skills/neon-object-storage/SKILL.md +197 -0
  435. package/dist/global-skills/neon-postgres/SKILL.md +376 -0
  436. package/dist/global-skills/neon-postgres-branches/SKILL.md +281 -0
  437. package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +247 -0
  438. package/dist/global-skills/onboarding/SKILL.md +101 -0
  439. package/dist/global-skills/plan-my-idea/SKILL.md +67 -0
  440. package/dist/global-skills/publish-app/SKILL.md +72 -0
  441. package/dist/global-skills/publish-extension/SKILL.md +47 -0
  442. package/dist/global-skills/resend/SKILL.md +294 -0
  443. package/dist/global-skills/resend/references/api-keys.md +98 -0
  444. package/dist/global-skills/resend/references/automations.md +228 -0
  445. package/dist/global-skills/resend/references/broadcasts.md +125 -0
  446. package/dist/global-skills/resend/references/contact-properties.md +111 -0
  447. package/dist/global-skills/resend/references/contacts.md +174 -0
  448. package/dist/global-skills/resend/references/domains.md +179 -0
  449. package/dist/global-skills/resend/references/events.md +119 -0
  450. package/dist/global-skills/resend/references/fetch-all-templates.mjs +37 -0
  451. package/dist/global-skills/resend/references/installation.md +142 -0
  452. package/dist/global-skills/resend/references/logs.md +161 -0
  453. package/dist/global-skills/resend/references/receiving.md +287 -0
  454. package/dist/global-skills/resend/references/segments.md +77 -0
  455. package/dist/global-skills/resend/references/sending/batch-email-examples.md +807 -0
  456. package/dist/global-skills/resend/references/sending/best-practices.md +453 -0
  457. package/dist/global-skills/resend/references/sending/email-management.md +135 -0
  458. package/dist/global-skills/resend/references/sending/overview.md +209 -0
  459. package/dist/global-skills/resend/references/sending/single-email-examples.md +470 -0
  460. package/dist/global-skills/resend/references/templates.md +202 -0
  461. package/dist/global-skills/resend/references/topics.md +104 -0
  462. package/dist/global-skills/resend/references/webhooks.md +317 -0
  463. package/dist/global-skills/reset-password/SKILL.md +59 -0
  464. package/dist/global-skills/save-data/SKILL.md +70 -0
  465. package/dist/global-skills/sentry-sdk-setup/SKILL.md +116 -0
  466. package/dist/global-skills/sentry-workflow/SKILL.md +32 -0
  467. package/dist/global-skills/setup-email/SKILL.md +69 -0
  468. package/dist/global-skills/setup-payments/SKILL.md +82 -0
  469. package/dist/global-skills/setup-sms/SKILL.md +51 -0
  470. package/dist/global-skills/sign-in-with-email-link/SKILL.md +53 -0
  471. package/dist/global-skills/sign-in-with-google/SKILL.md +68 -0
  472. package/dist/global-skills/sign-in-with-phone/SKILL.md +53 -0
  473. package/dist/global-skills/stripe-best-practices/SKILL.md +48 -0
  474. package/dist/global-skills/stripe-best-practices/references/billing.md +58 -0
  475. package/dist/global-skills/stripe-best-practices/references/connect.md +173 -0
  476. package/dist/global-skills/stripe-best-practices/references/payments.md +79 -0
  477. package/dist/global-skills/stripe-best-practices/references/security.md +109 -0
  478. package/dist/global-skills/stripe-best-practices/references/tax.md +37 -0
  479. package/dist/global-skills/stripe-best-practices/references/treasury.md +16 -0
  480. package/dist/global-skills/supabase/CHANGELOG.md +53 -0
  481. package/dist/global-skills/supabase/SKILL.md +145 -0
  482. package/dist/global-skills/supabase/assets/feedback-issue-template.md +17 -0
  483. package/dist/global-skills/supabase/references/skill-feedback.md +17 -0
  484. package/dist/global-skills/supabase-postgres-best-practices/CHANGELOG.md +43 -0
  485. package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +64 -0
  486. package/dist/global-skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  487. package/dist/global-skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  488. package/dist/global-skills/supabase-postgres-best-practices/references/_template.md +34 -0
  489. package/dist/global-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  490. package/dist/global-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  491. package/dist/global-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  492. package/dist/global-skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  493. package/dist/global-skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  494. package/dist/global-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  495. package/dist/global-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  496. package/dist/global-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  497. package/dist/global-skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  498. package/dist/global-skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  499. package/dist/global-skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  500. package/dist/global-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  501. package/dist/global-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  502. package/dist/global-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  503. package/dist/global-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  504. package/dist/global-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  505. package/dist/global-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  506. package/dist/global-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  507. package/dist/global-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  508. package/dist/global-skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  509. package/dist/global-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  510. package/dist/global-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  511. package/dist/global-skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  512. package/dist/global-skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  513. package/dist/global-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  514. package/dist/global-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  515. package/dist/global-skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  516. package/dist/global-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  517. package/dist/global-skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  518. package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  519. package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  520. package/dist/global-skills/track-errors/SKILL.md +67 -0
  521. package/dist/global-skills/update-kit/SKILL.md +75 -0
  522. package/dist/global-skills/upgrading-expo/SKILL.md +134 -0
  523. package/dist/global-skills/upgrading-expo/agents/openai.yaml +4 -0
  524. package/dist/global-skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  525. package/dist/global-skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  526. package/dist/global-skills/upgrading-expo/references/native-tabs.md +124 -0
  527. package/dist/global-skills/upgrading-expo/references/new-architecture.md +79 -0
  528. package/dist/global-skills/upgrading-expo/references/react-19.md +79 -0
  529. package/dist/global-skills/upgrading-expo/references/react-compiler.md +59 -0
  530. package/dist/global-skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  531. package/dist/global-skills/use-dom/SKILL.md +417 -0
  532. package/dist/global-skills/use-dom/agents/openai.yaml +4 -0
  533. package/dist/global-skills/use-kit-mcp/SKILL.md +100 -0
  534. package/dist/global-skills/use-railway/SKILL.md +357 -0
  535. package/dist/global-skills/use-railway/references/analyze-db-mongo.md +84 -0
  536. package/dist/global-skills/use-railway/references/analyze-db-mysql.md +254 -0
  537. package/dist/global-skills/use-railway/references/analyze-db-postgres.md +479 -0
  538. package/dist/global-skills/use-railway/references/analyze-db-redis.md +208 -0
  539. package/dist/global-skills/use-railway/references/analyze-db.md +344 -0
  540. package/dist/global-skills/use-railway/references/configure.md +359 -0
  541. package/dist/global-skills/use-railway/references/deploy.md +225 -0
  542. package/dist/global-skills/use-railway/references/feature-flags.md +89 -0
  543. package/dist/global-skills/use-railway/references/iac.md +108 -0
  544. package/dist/global-skills/use-railway/references/operate.md +273 -0
  545. package/dist/global-skills/use-railway/references/request.md +262 -0
  546. package/dist/global-skills/use-railway/references/sandbox.md +167 -0
  547. package/dist/global-skills/use-railway/references/setup.md +364 -0
  548. package/dist/global-skills/use-railway/scripts/analyze-mongo.py +1549 -0
  549. package/dist/global-skills/use-railway/scripts/analyze-mysql.py +1195 -0
  550. package/dist/global-skills/use-railway/scripts/analyze-postgres.py +3058 -0
  551. package/dist/global-skills/use-railway/scripts/analyze-redis.py +1090 -0
  552. package/dist/global-skills/use-railway/scripts/dal.py +671 -0
  553. package/dist/global-skills/use-railway/scripts/enable-pg-stats.py +170 -0
  554. package/dist/global-skills/use-railway/scripts/pg-extensions.py +370 -0
  555. package/dist/global-skills/use-railway/scripts/railway-api.sh +52 -0
  556. package/dist/global-skills/vercel-composition-patterns/AGENTS.md +946 -0
  557. package/dist/global-skills/vercel-composition-patterns/README.md +60 -0
  558. package/dist/global-skills/vercel-composition-patterns/SKILL.md +89 -0
  559. package/dist/global-skills/vercel-composition-patterns/metadata.json +11 -0
  560. package/dist/global-skills/vercel-composition-patterns/rules/_sections.md +29 -0
  561. package/dist/global-skills/vercel-composition-patterns/rules/_template.md +24 -0
  562. package/dist/global-skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  563. package/dist/global-skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  564. package/dist/global-skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  565. package/dist/global-skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  566. package/dist/global-skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  567. package/dist/global-skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  568. package/dist/global-skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  569. package/dist/global-skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  570. package/dist/global-skills/vercel-react-best-practices/AGENTS.md +3810 -0
  571. package/dist/global-skills/vercel-react-best-practices/README.md +123 -0
  572. package/dist/global-skills/vercel-react-best-practices/SKILL.md +149 -0
  573. package/dist/global-skills/vercel-react-best-practices/metadata.json +15 -0
  574. package/dist/global-skills/vercel-react-best-practices/rules/_sections.md +46 -0
  575. package/dist/global-skills/vercel-react-best-practices/rules/_template.md +28 -0
  576. package/dist/global-skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  577. package/dist/global-skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  578. package/dist/global-skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  579. package/dist/global-skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  580. package/dist/global-skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  581. package/dist/global-skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  582. package/dist/global-skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  583. package/dist/global-skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  584. package/dist/global-skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  585. package/dist/global-skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  586. package/dist/global-skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  587. package/dist/global-skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  588. package/dist/global-skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  589. package/dist/global-skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  590. package/dist/global-skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  591. package/dist/global-skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  592. package/dist/global-skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  593. package/dist/global-skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  594. package/dist/global-skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  595. package/dist/global-skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  596. package/dist/global-skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  597. package/dist/global-skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  598. package/dist/global-skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  599. package/dist/global-skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  600. package/dist/global-skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  601. package/dist/global-skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  602. package/dist/global-skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  603. package/dist/global-skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  604. package/dist/global-skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  605. package/dist/global-skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  606. package/dist/global-skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  607. package/dist/global-skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  608. package/dist/global-skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  609. package/dist/global-skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  610. package/dist/global-skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  611. package/dist/global-skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  612. package/dist/global-skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  613. package/dist/global-skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  614. package/dist/global-skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  615. package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  616. package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  617. package/dist/global-skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  618. package/dist/global-skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  619. package/dist/global-skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  620. package/dist/global-skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  621. package/dist/global-skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  622. package/dist/global-skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  623. package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  624. package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  625. package/dist/global-skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  626. package/dist/global-skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  627. package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  628. package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  629. package/dist/global-skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  630. package/dist/global-skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  631. package/dist/global-skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  632. package/dist/global-skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  633. package/dist/global-skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  634. package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  635. package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  636. package/dist/global-skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  637. package/dist/global-skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  638. package/dist/global-skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  639. package/dist/global-skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  640. package/dist/global-skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  641. package/dist/global-skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  642. package/dist/global-skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  643. package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  644. package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  645. package/dist/global-skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  646. package/dist/global-skills/web-to-native/SKILL.md +83 -0
  647. package/dist/global-skills/web-to-native/references/false-friends.md +119 -0
  648. package/dist/global-skills/web-to-native/references/native-patterns.md +39 -0
  649. package/dist/global-skills/web-to-native/references/run-as-goal.md +48 -0
  650. package/dist/global-skills/web-to-native/references/verify-on-device.md +45 -0
  651. package/dist/global-skills/wire-auth/SKILL.md +28 -0
  652. package/dist/global-skills/wire-database/SKILL.md +28 -0
  653. package/dist/global-skills/wire-email/SKILL.md +27 -0
  654. package/dist/global-skills/wire-payments/SKILL.md +27 -0
  655. package/dist/global-skills/workers-best-practices/SKILL.md +127 -0
  656. package/dist/global-skills/workers-best-practices/references/review.md +174 -0
  657. package/dist/global-skills/workers-best-practices/references/rules.md +463 -0
  658. package/dist/global-skills/wrangler/SKILL.md +922 -0
  659. package/dist/global-skills/xcode-project-setup/SKILL.md +140 -0
  660. package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.resolved +41 -0
  661. package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.swift +17 -0
  662. package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Sources/main.swift +232 -0
  663. package/package.json +21 -20
  664. package/LICENSE.md +0 -47
  665. package/dist/index.js +0 -21593
@@ -0,0 +1,1167 @@
1
+ # PostHog django Example Project
2
+
3
+ Repository: https://github.com/PostHog/context-mill
4
+ Path: example-apps/django
5
+
6
+ ---
7
+
8
+ ## README.md
9
+
10
+ # PostHog Django example
11
+
12
+ This is a [Django](https://djangoproject.com) example demonstrating PostHog integration with product analytics, error tracking, feature flags, and user identification.
13
+
14
+ ## Features
15
+
16
+ - **Product analytics**: Track user events and behaviors
17
+ - **Error tracking**: Capture and track exceptions automatically
18
+ - **User identification**: Associate events with authenticated users via context
19
+ - **Feature flags**: Control feature rollouts with PostHog feature flags
20
+ - **Server-side tracking**: All tracking happens server-side with the Python SDK
21
+ - **Context middleware**: Automatic session and user context extraction
22
+
23
+ ## Getting started
24
+
25
+ ### 1. Install dependencies
26
+
27
+ ```bash
28
+ pip install posthog
29
+ ```
30
+
31
+ ### 2. Configure environment variables
32
+
33
+ Create a `.env` file in the root directory:
34
+
35
+ ```bash
36
+ POSTHOG_PROJECT_TOKEN=your_posthog_project_token
37
+ POSTHOG_HOST=https://us.i.posthog.com
38
+ ```
39
+
40
+ Get your PostHog project token from your [PostHog project settings](https://app.posthog.com/project/settings).
41
+
42
+ ### 3. Run migrations
43
+
44
+ ```bash
45
+ python manage.py migrate
46
+ ```
47
+
48
+ ### 4. Run the development server
49
+
50
+ ```bash
51
+ python manage.py runserver
52
+ ```
53
+
54
+ Open [http://localhost:8000](http://localhost:8000) with your browser to see the app.
55
+
56
+ ## Project structure
57
+
58
+ ```
59
+ django/
60
+ ├── manage.py # Django management script
61
+ ├── requirements.txt # Python dependencies
62
+ ├── .env.example # Environment variable template
63
+ ├── .gitignore
64
+ ├── posthog_example/
65
+ │ ├── __init__.py
66
+ │ ├── settings.py # Django settings with PostHog config
67
+ │ ├── urls.py # URL routing
68
+ │ ├── wsgi.py # WSGI application
69
+ │ └── asgi.py # ASGI application
70
+ └── core/
71
+ ├── __init__.py
72
+ ├── apps.py # AppConfig with PostHog initialization
73
+ ├── views.py # Views with event tracking examples
74
+ ├── urls.py # App URL patterns
75
+ └── templates/
76
+ └── core/
77
+ ├── base.html # Base template
78
+ ├── home.html # Home/login page
79
+ ├── burrito.html # Burrito page with event tracking
80
+ ├── dashboard.html # Dashboard with feature flag example
81
+ └── profile.html # Profile page
82
+ ```
83
+
84
+ ## Key integration points
85
+
86
+ ### PostHog initialization (core/apps.py)
87
+
88
+ ```python
89
+ import posthog
90
+ from django.conf import settings
91
+
92
+ class CoreConfig(AppConfig):
93
+ name = 'core'
94
+
95
+ def ready(self):
96
+ posthog.api_key = settings.POSTHOG_PROJECT_TOKEN
97
+ posthog.host = settings.POSTHOG_HOST
98
+ ```
99
+
100
+ ### Django settings configuration (settings.py)
101
+
102
+ ```python
103
+ import os
104
+
105
+ # PostHog configuration
106
+ POSTHOG_PROJECT_TOKEN = os.environ.get('POSTHOG_PROJECT_TOKEN', '<ph_project_token>')
107
+ POSTHOG_HOST = os.environ.get('POSTHOG_HOST', 'https://us.i.posthog.com')
108
+
109
+ MIDDLEWARE = [
110
+ # ... other middleware
111
+ 'posthog.integrations.django.PosthogContextMiddleware',
112
+ ]
113
+ ```
114
+
115
+ ### Built-in context middleware
116
+
117
+ The PostHog SDK includes a Django middleware that automatically wraps all requests with a context. It extracts session and user information from request headers and tags all events captured during the request.
118
+
119
+ The middleware automatically extracts:
120
+
121
+ - **Session ID** from the `X-POSTHOG-SESSION-ID` header
122
+ - **Distinct ID** from the `X-POSTHOG-DISTINCT-ID` header
123
+ - **Current URL** as `$current_url`
124
+ - **Request method** as `$request_method`
125
+
126
+ ### User identification (core/views.py)
127
+
128
+ ```python
129
+ import posthog
130
+
131
+ def login_view(request):
132
+ # ... authentication logic
133
+ if user:
134
+ with posthog.new_context():
135
+ posthog.identify_context(str(user.id))
136
+ posthog.tag('email', user.email)
137
+ posthog.tag('username', user.username)
138
+ posthog.capture('user_logged_in', properties={
139
+ 'login_method': 'email',
140
+ })
141
+ ```
142
+
143
+ ### Event tracking (core/views.py)
144
+
145
+ ```python
146
+ import posthog
147
+
148
+ def consider_burrito(request):
149
+ user_id = str(request.user.id) if request.user.is_authenticated else 'anonymous'
150
+
151
+ with posthog.new_context():
152
+ posthog.identify_context(user_id)
153
+ posthog.capture('burrito_considered', properties={
154
+ 'total_considerations': request.session.get('burrito_count', 0),
155
+ })
156
+ ```
157
+
158
+ ### Feature flags (core/views.py)
159
+
160
+ ```python
161
+ import posthog
162
+
163
+ def dashboard_view(request):
164
+ user_id = str(request.user.id) if request.user.is_authenticated else 'anonymous'
165
+
166
+ show_new_feature = posthog.feature_enabled(
167
+ 'new-dashboard-feature',
168
+ distinct_id=user_id
169
+ )
170
+
171
+ return render(request, 'core/dashboard.html', {
172
+ 'show_new_feature': show_new_feature
173
+ })
174
+ ```
175
+
176
+ ### Error tracking (core/views.py)
177
+
178
+ Capture exceptions manually using `capture_exception()`:
179
+
180
+ ```python
181
+ import posthog
182
+
183
+ def profile_view(request):
184
+ try:
185
+ risky_operation()
186
+ except Exception as e:
187
+ posthog.capture_exception(e)
188
+ ```
189
+
190
+ ## Frontend integration (optional)
191
+
192
+ If you're using PostHog's JavaScript SDK on the frontend, enable tracing headers to connect frontend sessions with backend events:
193
+
194
+ ```javascript
195
+ posthog.init('<ph_project_token>', {
196
+ api_host: 'https://us.i.posthog.com',
197
+ __add_tracing_headers: ['your-backend-domain.com'],
198
+ })
199
+ ```
200
+
201
+ This automatically adds `X-POSTHOG-SESSION-ID` and `X-POSTHOG-DISTINCT-ID` headers to requests, which the Django middleware extracts to maintain context.
202
+
203
+ ## Learn more
204
+
205
+ - [PostHog Django integration](https://posthog.com/docs/libraries/django)
206
+ - [PostHog Python SDK](https://posthog.com/docs/libraries/python)
207
+ - [PostHog documentation](https://posthog.com/docs)
208
+ - [Django documentation](https://docs.djangoproject.com/)
209
+
210
+ ---
211
+
212
+ ## .env.example
213
+
214
+ ```example
215
+ POSTHOG_PROJECT_TOKEN=
216
+ POSTHOG_HOST=https://us.i.posthog.com
217
+ DJANGO_SECRET_KEY=your-secret-key-here
218
+ DEBUG=True
219
+
220
+ ```
221
+
222
+ ---
223
+
224
+ ## core/__init__.py
225
+
226
+ ```py
227
+ # Core app for PostHog Django example
228
+
229
+ ```
230
+
231
+ ---
232
+
233
+ ## core/apps.py
234
+
235
+ ```py
236
+ """
237
+ Django AppConfig that initializes PostHog when the application starts.
238
+
239
+ This ensures the SDK is configured once when Django starts, making it available throughout the application.
240
+ """
241
+
242
+ from django.apps import AppConfig
243
+ from django.conf import settings
244
+
245
+
246
+ class CoreConfig(AppConfig):
247
+ default_auto_field = 'django.db.models.BigAutoField'
248
+ name = 'core'
249
+
250
+ def ready(self):
251
+ """
252
+ Initialize PostHog when Django starts.
253
+
254
+ This method is called once when Django starts. We configure the
255
+ PostHog SDK here so it's available everywhere in the application.
256
+
257
+ Note: Import posthog inside this method to avoid import issues
258
+ during Django's startup sequence.
259
+ """
260
+ import posthog
261
+
262
+ # Configure PostHog with settings from Django settings
263
+ posthog.api_key = settings.POSTHOG_PROJECT_TOKEN
264
+ posthog.host = settings.POSTHOG_HOST
265
+
266
+ # Honor the POSTHOG_DISABLED setting (useful for testing)
267
+ if settings.POSTHOG_DISABLED:
268
+ posthog.disabled = True
269
+
270
+ # Optional: Enable debug mode in development
271
+ if settings.DEBUG:
272
+ posthog.debug = True
273
+
274
+ ```
275
+
276
+ ---
277
+
278
+ ## core/templates/core/base.html
279
+
280
+ ```html
281
+ <!DOCTYPE html>
282
+ <html lang="en">
283
+ <head>
284
+ <meta charset="UTF-8">
285
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
286
+ <title>{% block title %}PostHog Django example{% endblock %}</title>
287
+ <style>
288
+ * {
289
+ box-sizing: border-box;
290
+ margin: 0;
291
+ padding: 0;
292
+ }
293
+ body {
294
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
295
+ line-height: 1.6;
296
+ background-color: #f5f5f5;
297
+ color: #333;
298
+ }
299
+ .container {
300
+ max-width: 800px;
301
+ margin: 0 auto;
302
+ padding: 20px;
303
+ }
304
+ nav {
305
+ background: #1d4ed8;
306
+ padding: 15px 20px;
307
+ margin-bottom: 30px;
308
+ }
309
+ nav a {
310
+ color: white;
311
+ text-decoration: none;
312
+ margin-right: 20px;
313
+ }
314
+ nav a:hover {
315
+ text-decoration: underline;
316
+ }
317
+ .card {
318
+ background: white;
319
+ border-radius: 8px;
320
+ padding: 20px;
321
+ margin-bottom: 20px;
322
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
323
+ }
324
+ h1, h2, h3 {
325
+ margin-bottom: 15px;
326
+ color: #1d4ed8;
327
+ }
328
+ button, .btn {
329
+ background: #1d4ed8;
330
+ color: white;
331
+ border: none;
332
+ padding: 10px 20px;
333
+ border-radius: 5px;
334
+ cursor: pointer;
335
+ font-size: 14px;
336
+ display: inline-block;
337
+ text-decoration: none;
338
+ }
339
+ button:hover, .btn:hover {
340
+ background: #1e40af;
341
+ }
342
+ button.danger {
343
+ background: #dc2626;
344
+ }
345
+ button.danger:hover {
346
+ background: #b91c1c;
347
+ }
348
+ input {
349
+ width: 100%;
350
+ padding: 10px;
351
+ margin-bottom: 15px;
352
+ border: 1px solid #ddd;
353
+ border-radius: 5px;
354
+ font-size: 14px;
355
+ }
356
+ .messages {
357
+ margin-bottom: 20px;
358
+ }
359
+ .message {
360
+ padding: 10px 15px;
361
+ border-radius: 5px;
362
+ margin-bottom: 10px;
363
+ }
364
+ .message.error {
365
+ background: #fee2e2;
366
+ color: #dc2626;
367
+ }
368
+ .message.success {
369
+ background: #d1fae5;
370
+ color: #059669;
371
+ }
372
+ .feature-flag {
373
+ background: #fef3c7;
374
+ border: 2px dashed #f59e0b;
375
+ padding: 15px;
376
+ border-radius: 8px;
377
+ margin: 20px 0;
378
+ }
379
+ code {
380
+ background: #f3f4f6;
381
+ padding: 2px 6px;
382
+ border-radius: 3px;
383
+ font-family: monospace;
384
+ }
385
+ .count {
386
+ font-size: 48px;
387
+ font-weight: bold;
388
+ color: #1d4ed8;
389
+ text-align: center;
390
+ padding: 20px;
391
+ }
392
+ </style>
393
+ </head>
394
+ <body>
395
+ {% if user.is_authenticated %}
396
+ <nav>
397
+ <a href="{% url 'dashboard' %}">Dashboard</a>
398
+ <a href="{% url 'burrito' %}">Burrito</a>
399
+ <a href="{% url 'profile' %}">Profile</a>
400
+ <a href="{% url 'logout' %}" style="float: right;">Logout ({{ user.username }})</a>
401
+ </nav>
402
+ {% endif %}
403
+
404
+ <div class="container">
405
+ {% if messages %}
406
+ <div class="messages">
407
+ {% for message in messages %}
408
+ <div class="message {{ message.tags }}">{{ message }}</div>
409
+ {% endfor %}
410
+ </div>
411
+ {% endif %}
412
+
413
+ {% block content %}{% endblock %}
414
+ </div>
415
+
416
+ {% block scripts %}{% endblock %}
417
+ </body>
418
+ </html>
419
+
420
+ ```
421
+
422
+ ---
423
+
424
+ ## core/templates/core/burrito.html
425
+
426
+ ```html
427
+ {% extends 'core/base.html' %}
428
+
429
+ {% block title %}Burrito - PostHog Django example{% endblock %}
430
+
431
+ {% block content %}
432
+ <div class="card">
433
+ <h1>Burrito consideration tracker</h1>
434
+ <p>This page demonstrates custom event tracking with PostHog.</p>
435
+ </div>
436
+
437
+ <div class="card" style="text-align: center;">
438
+ <h2>Times considered</h2>
439
+ <div class="count" id="burrito-count">{{ burrito_count }}</div>
440
+ <button onclick="considerBurrito()" style="font-size: 18px; padding: 15px 30px;">
441
+ Consider a burrito
442
+ </button>
443
+ </div>
444
+
445
+ <div class="card">
446
+ <h3>How event tracking works</h3>
447
+ <p>Each time you click the button, a <code>burrito_considered</code> event is sent to PostHog:</p>
448
+ <pre style="background: #f3f4f6; padding: 15px; border-radius: 5px; overflow-x: auto; margin-top: 15px;"><code>from posthog import new_context, identify_context, capture
449
+
450
+ with new_context():
451
+ identify_context(user_id)
452
+ capture('burrito_considered', properties={
453
+ 'total_considerations': count,
454
+ })</code></pre>
455
+ </div>
456
+ {% endblock %}
457
+
458
+ {% block scripts %}
459
+ <script>
460
+ async function considerBurrito() {
461
+ try {
462
+ const response = await fetch('{% url "consider_burrito" %}', {
463
+ method: 'POST',
464
+ headers: {
465
+ 'X-CSRFToken': '{{ csrf_token }}',
466
+ 'Content-Type': 'application/json',
467
+ },
468
+ });
469
+
470
+ const data = await response.json();
471
+
472
+ if (data.success) {
473
+ document.getElementById('burrito-count').textContent = data.count;
474
+ }
475
+ } catch (error) {
476
+ console.error('Error:', error);
477
+ }
478
+ }
479
+ </script>
480
+ {% endblock %}
481
+
482
+ ```
483
+
484
+ ---
485
+
486
+ ## core/templates/core/dashboard.html
487
+
488
+ ```html
489
+ {% extends 'core/base.html' %}
490
+
491
+ {% block title %}Dashboard - PostHog Django example{% endblock %}
492
+
493
+ {% block content %}
494
+ <div class="card">
495
+ <h1>Dashboard</h1>
496
+ <p>Welcome back, <strong>{{ user.username }}</strong>!</p>
497
+ </div>
498
+
499
+ <div class="card">
500
+ <h2>Feature flags</h2>
501
+ <p>Feature flags allow you to control feature rollouts and run A/B tests.</p>
502
+
503
+ {% if show_new_feature %}
504
+ <div class="feature-flag">
505
+ <h3>New feature enabled!</h3>
506
+ <p>
507
+ This section is only visible because the <code>new-dashboard-feature</code>
508
+ flag is enabled for your user.
509
+ </p>
510
+ {% if feature_config %}
511
+ <p><strong>Feature config:</strong> {{ feature_config }}</p>
512
+ {% endif %}
513
+ </div>
514
+ {% else %}
515
+ <div style="background: #f3f4f6; padding: 15px; border-radius: 8px; margin-top: 15px;">
516
+ <p>
517
+ The <code>new-dashboard-feature</code> flag is not enabled for your user.
518
+ Create this flag in your PostHog project to see it in action.
519
+ </p>
520
+ </div>
521
+ {% endif %}
522
+ </div>
523
+
524
+ <div class="card">
525
+ <h3>How feature flags work</h3>
526
+ <pre style="background: #f3f4f6; padding: 15px; border-radius: 5px; overflow-x: auto;"><code># Check if a feature flag is enabled
527
+ show_feature = posthog.feature_enabled(
528
+ 'new-dashboard-feature',
529
+ distinct_id=user_id,
530
+ person_properties={
531
+ 'email': user.email,
532
+ 'is_staff': user.is_staff,
533
+ }
534
+ )
535
+
536
+ # Get feature flag payload for configuration
537
+ config = posthog.get_feature_flag_payload(
538
+ 'new-dashboard-feature',
539
+ distinct_id=user_id,
540
+ )</code></pre>
541
+ </div>
542
+ {% endblock %}
543
+
544
+ ```
545
+
546
+ ---
547
+
548
+ ## core/templates/core/home.html
549
+
550
+ ```html
551
+ {% extends 'core/base.html' %}
552
+
553
+ {% block title %}Login - PostHog Django example{% endblock %}
554
+
555
+ {% block content %}
556
+ <div class="card">
557
+ <h1>PostHog Django example</h1>
558
+ <p>Welcome! This example demonstrates PostHog integration with Django.</p>
559
+ </div>
560
+
561
+ <div class="card">
562
+ <h2>Login</h2>
563
+ <p>Login to see PostHog analytics in action.</p>
564
+
565
+ <form method="post" style="margin-top: 20px;">
566
+ {% csrf_token %}
567
+ <input type="text" name="username" placeholder="Username" required>
568
+ <input type="password" name="password" placeholder="Password" required>
569
+ <button type="submit">Login</button>
570
+ </form>
571
+
572
+ <p style="margin-top: 15px; color: #666; font-size: 14px;">
573
+ Tip: Create a user with <code>python manage.py createsuperuser</code>
574
+ </p>
575
+ </div>
576
+
577
+ <div class="card">
578
+ <h3>What this example demonstrates</h3>
579
+ <ul style="padding-left: 20px;">
580
+ <li><strong>User identification</strong> - Users are identified with <code>identify_context()</code> on login</li>
581
+ <li><strong>Pageview tracking</strong> - Middleware extracts session and user context</li>
582
+ <li><strong>Event tracking</strong> - Custom events captured with <code>capture()</code> in context</li>
583
+ <li><strong>Feature flags</strong> - Conditional features with <code>posthog.feature_enabled()</code></li>
584
+ <li><strong>Error tracking</strong> - Exceptions captured with <code>capture_exception()</code></li>
585
+ </ul>
586
+ </div>
587
+ {% endblock %}
588
+
589
+ ```
590
+
591
+ ---
592
+
593
+ ## core/templates/core/profile.html
594
+
595
+ ```html
596
+ {% extends 'core/base.html' %}
597
+
598
+ {% block title %}Profile - PostHog Django example{% endblock %}
599
+
600
+ {% block content %}
601
+ <div class="card">
602
+ <h1>Profile</h1>
603
+ <p>This page demonstrates error tracking with PostHog.</p>
604
+ </div>
605
+
606
+ <div class="card">
607
+ <h2>User information</h2>
608
+ <table style="width: 100%; border-collapse: collapse;">
609
+ <tr>
610
+ <td style="padding: 10px; border-bottom: 1px solid #eee;"><strong>Username:</strong></td>
611
+ <td style="padding: 10px; border-bottom: 1px solid #eee;">{{ user.username }}</td>
612
+ </tr>
613
+ <tr>
614
+ <td style="padding: 10px; border-bottom: 1px solid #eee;"><strong>Email:</strong></td>
615
+ <td style="padding: 10px; border-bottom: 1px solid #eee;">{{ user.email|default:"Not set" }}</td>
616
+ </tr>
617
+ <tr>
618
+ <td style="padding: 10px; border-bottom: 1px solid #eee;"><strong>Date Joined:</strong></td>
619
+ <td style="padding: 10px; border-bottom: 1px solid #eee;">{{ user.date_joined }}</td>
620
+ </tr>
621
+ <tr>
622
+ <td style="padding: 10px;"><strong>Staff Status:</strong></td>
623
+ <td style="padding: 10px;">{{ user.is_staff|yesno:"Yes,No" }}</td>
624
+ </tr>
625
+ </table>
626
+ </div>
627
+
628
+ <div class="card">
629
+ <h2>Error tracking demo</h2>
630
+ <p>Click the buttons below to trigger different types of errors. These errors are caught and sent to PostHog.</p>
631
+
632
+ <div style="margin-top: 20px;">
633
+ <button class="danger" onclick="triggerError('value')">
634
+ Trigger ValueError
635
+ </button>
636
+ <button class="danger" onclick="triggerError('key')" style="margin-left: 10px;">
637
+ Trigger KeyError
638
+ </button>
639
+ <button class="danger" onclick="triggerError('generic')" style="margin-left: 10px;">
640
+ Trigger Generic Error
641
+ </button>
642
+ </div>
643
+
644
+ <div id="error-result" style="margin-top: 20px; display: none;"></div>
645
+ </div>
646
+
647
+ <div class="card">
648
+ <h3>How error tracking works</h3>
649
+ <pre style="background: #f3f4f6; padding: 15px; border-radius: 5px; overflow-x: auto;"><code>import posthog
650
+
651
+ try:
652
+ risky_operation()
653
+ except Exception as e:
654
+ posthog.capture_exception(e)</code></pre>
655
+ </div>
656
+ {% endblock %}
657
+
658
+ {% block scripts %}
659
+ <script>
660
+ async function triggerError(errorType) {
661
+ const resultDiv = document.getElementById('error-result');
662
+
663
+ try {
664
+ const response = await fetch('{% url "trigger_error" %}', {
665
+ method: 'POST',
666
+ headers: {
667
+ 'X-CSRFToken': '{{ csrf_token }}',
668
+ 'Content-Type': 'application/x-www-form-urlencoded',
669
+ },
670
+ body: 'error_type=' + errorType,
671
+ });
672
+
673
+ const data = await response.json();
674
+
675
+ resultDiv.style.display = 'block';
676
+ if (data.success) {
677
+ resultDiv.innerHTML = '<div class="message success">No error occurred</div>';
678
+ } else {
679
+ resultDiv.innerHTML = `
680
+ <div class="message error">
681
+ <strong>Error captured:</strong> ${data.error}<br>
682
+ <small>${data.message}</small>
683
+ </div>
684
+ `;
685
+ }
686
+ } catch (error) {
687
+ resultDiv.style.display = 'block';
688
+ resultDiv.innerHTML = `<div class="message error">Request failed: ${error}</div>`;
689
+ }
690
+ }
691
+ </script>
692
+ {% endblock %}
693
+
694
+ ```
695
+
696
+ ---
697
+
698
+ ## core/urls.py
699
+
700
+ ```py
701
+ """
702
+ URL configuration for the core app.
703
+
704
+ This module defines all the URL patterns for the PostHog example views.
705
+ """
706
+
707
+ from django.urls import path
708
+ from . import views
709
+
710
+ urlpatterns = [
711
+ # Home login page
712
+ path('', views.home_view, name='home'),
713
+
714
+ # Authentication
715
+ path('logout/', views.logout_view, name='logout'),
716
+
717
+ # Dashboard with feature flags
718
+ path('dashboard/', views.dashboard_view, name='dashboard'),
719
+
720
+ # Burrito example for event tracking
721
+ path('burrito/', views.burrito_view, name='burrito'),
722
+ path('api/burrito/consider/', views.consider_burrito_view, name='consider_burrito'),
723
+
724
+ # Profile with error tracking
725
+ path('profile/', views.profile_view, name='profile'),
726
+ path('api/trigger-error/', views.trigger_error_view, name='trigger_error'),
727
+
728
+ # Group analytics example
729
+ path('api/group-analytics/', views.group_analytics_view, name='group_analytics'),
730
+ ]
731
+
732
+ ```
733
+
734
+ ---
735
+
736
+ ## core/views.py
737
+
738
+ ```py
739
+ """Django views demonstrating PostHog integration patterns"""
740
+
741
+ import posthog
742
+ from posthog import new_context, identify_context, tag, capture
743
+ from django.shortcuts import render, redirect
744
+ from django.contrib.auth import authenticate, login, logout
745
+ from django.contrib.auth.decorators import login_required
746
+ from django.contrib import messages
747
+ from django.http import JsonResponse
748
+ from django.views.decorators.http import require_POST
749
+
750
+
751
+ def home_view(request):
752
+ """Home page with login functionality"""
753
+ if request.user.is_authenticated:
754
+ return redirect('dashboard')
755
+
756
+ if request.method == 'POST':
757
+ username = request.POST.get('username')
758
+ password = request.POST.get('password')
759
+
760
+ user = authenticate(request, username=username, password=password)
761
+
762
+ if user is not None:
763
+ login(request, user)
764
+
765
+ # PostHog: Identify user and capture login event
766
+ with new_context():
767
+ identify_context(str(user.id))
768
+
769
+ # Set person properties (PII goes in tag, not capture)
770
+ tag('email', user.email)
771
+ tag('username', user.username)
772
+ tag('name', user.get_full_name() or user.username)
773
+ tag('is_staff', user.is_staff)
774
+ tag('date_joined', user.date_joined.isoformat())
775
+
776
+ capture('user_logged_in', properties={
777
+ 'login_method': 'email',
778
+ })
779
+
780
+ return redirect('dashboard')
781
+ else:
782
+ messages.error(request, 'Invalid username or password')
783
+
784
+ return render(request, 'core/home.html')
785
+
786
+
787
+ def logout_view(request):
788
+ """Logout the current user"""
789
+ if request.user.is_authenticated:
790
+ user_id = str(request.user.id)
791
+
792
+ # PostHog: Track logout before session ends
793
+ with new_context():
794
+ identify_context(user_id)
795
+ capture('user_logged_out')
796
+
797
+ logout(request)
798
+
799
+ return redirect('home')
800
+
801
+
802
+ @login_required
803
+ def dashboard_view(request):
804
+ """Dashboard page with feature flag example"""
805
+ user_id = str(request.user.id)
806
+
807
+ # PostHog: Track dashboard view
808
+ with new_context():
809
+ identify_context(user_id)
810
+ capture('dashboard_viewed', properties={
811
+ 'is_staff': request.user.is_staff,
812
+ })
813
+
814
+ # PostHog: Check feature flag
815
+ show_new_feature = posthog.feature_enabled(
816
+ 'new-dashboard-feature',
817
+ distinct_id=user_id,
818
+ person_properties={
819
+ 'email': request.user.email,
820
+ 'is_staff': request.user.is_staff,
821
+ }
822
+ )
823
+
824
+ # PostHog: Get feature flag payload
825
+ feature_config = posthog.get_feature_flag_payload(
826
+ 'new-dashboard-feature',
827
+ distinct_id=user_id,
828
+ )
829
+
830
+ context = {
831
+ 'show_new_feature': show_new_feature,
832
+ 'feature_config': feature_config,
833
+ }
834
+
835
+ return render(request, 'core/dashboard.html', context)
836
+
837
+
838
+ @login_required
839
+ def burrito_view(request):
840
+ """Example page demonstrating event tracking"""
841
+ count = request.session.get('burrito_count', 0)
842
+
843
+ context = {
844
+ 'burrito_count': count,
845
+ }
846
+
847
+ return render(request, 'core/burrito.html', context)
848
+
849
+
850
+ @login_required
851
+ @require_POST
852
+ def consider_burrito_view(request):
853
+ """API endpoint for tracking burrito considerations"""
854
+ count = request.session.get('burrito_count', 0) + 1
855
+ request.session['burrito_count'] = count
856
+
857
+ user_id = str(request.user.id)
858
+
859
+ # PostHog: Track custom event
860
+ with new_context():
861
+ identify_context(user_id)
862
+ capture('burrito_considered', properties={
863
+ 'total_considerations': count,
864
+ })
865
+
866
+ return JsonResponse({
867
+ 'success': True,
868
+ 'count': count,
869
+ })
870
+
871
+
872
+ @login_required
873
+ def profile_view(request):
874
+ """Profile page with error tracking demonstration"""
875
+ user_id = str(request.user.id)
876
+
877
+ # PostHog: Track profile view
878
+ with new_context():
879
+ identify_context(user_id)
880
+ capture('profile_viewed')
881
+
882
+ context = {
883
+ 'user': request.user,
884
+ }
885
+
886
+ return render(request, 'core/profile.html', context)
887
+
888
+
889
+ @login_required
890
+ @require_POST
891
+ def trigger_error_view(request):
892
+ """API endpoint that demonstrates error tracking"""
893
+ try:
894
+ error_type = request.POST.get('error_type', 'generic')
895
+
896
+ if error_type == 'value':
897
+ raise ValueError("Invalid value provided by user")
898
+ elif error_type == 'key':
899
+ data = {}
900
+ _ = data['nonexistent_key']
901
+ else:
902
+ raise Exception("Something went wrong!")
903
+
904
+ except Exception as e:
905
+ # PostHog: Capture exception
906
+ posthog.capture_exception(e)
907
+
908
+ # PostHog: Track error trigger event
909
+ with new_context():
910
+ identify_context(str(request.user.id))
911
+ capture('error_triggered', properties={
912
+ 'error_type': error_type,
913
+ 'error_message': str(e),
914
+ })
915
+
916
+ return JsonResponse({
917
+ 'success': False,
918
+ 'error': str(e),
919
+ 'message': 'Error has been captured by PostHog',
920
+ }, status=400)
921
+
922
+ return JsonResponse({'success': True})
923
+
924
+
925
+ @login_required
926
+ def group_analytics_view(request):
927
+ """Example demonstrating group analytics"""
928
+ user_id = str(request.user.id)
929
+
930
+ # PostHog: Identify group
931
+ posthog.group_identify(
932
+ group_type='company',
933
+ group_key='acme-corp',
934
+ properties={
935
+ 'name': 'Acme Corporation',
936
+ 'plan': 'enterprise',
937
+ 'employee_count': 150,
938
+ }
939
+ )
940
+
941
+ # PostHog: Capture event with group
942
+ with new_context():
943
+ identify_context(user_id)
944
+ capture(
945
+ 'feature_used',
946
+ properties={
947
+ 'feature_name': 'group_analytics',
948
+ },
949
+ groups={
950
+ 'company': 'acme-corp',
951
+ }
952
+ )
953
+
954
+ return JsonResponse({
955
+ 'success': True,
956
+ 'message': 'Group analytics event captured',
957
+ })
958
+
959
+ ```
960
+
961
+ ---
962
+
963
+ ## manage.py
964
+
965
+ ```py
966
+ #!/usr/bin/env python
967
+ """Django's command-line utility for administrative tasks."""
968
+ import os
969
+ import sys
970
+
971
+
972
+ def main():
973
+ """Run administrative tasks."""
974
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'posthog_example.settings')
975
+ try:
976
+ from django.core.management import execute_from_command_line
977
+ except ImportError as exc:
978
+ raise ImportError(
979
+ "Couldn't import Django. Are you sure it's installed and "
980
+ "available on your PYTHONPATH environment variable? Did you "
981
+ "forget to activate a virtual environment?"
982
+ ) from exc
983
+ execute_from_command_line(sys.argv)
984
+
985
+
986
+ if __name__ == '__main__':
987
+ main()
988
+
989
+ ```
990
+
991
+ ---
992
+
993
+ ## posthog_example/__init__.py
994
+
995
+ ```py
996
+ # PostHog Django example project
997
+
998
+ ```
999
+
1000
+ ---
1001
+
1002
+ ## posthog_example/asgi.py
1003
+
1004
+ ```py
1005
+ """
1006
+ ASGI config for PostHog example project
1007
+ """
1008
+
1009
+ import os
1010
+
1011
+ from django.core.asgi import get_asgi_application
1012
+
1013
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'posthog_example.settings')
1014
+
1015
+ application = get_asgi_application()
1016
+
1017
+ ```
1018
+
1019
+ ---
1020
+
1021
+ ## posthog_example/settings.py
1022
+
1023
+ ```py
1024
+ """Django settings for PostHog example project"""
1025
+
1026
+ import os
1027
+ from pathlib import Path
1028
+
1029
+ try:
1030
+ from dotenv import load_dotenv
1031
+ load_dotenv()
1032
+ except ImportError:
1033
+ pass
1034
+
1035
+ BASE_DIR = Path(__file__).resolve().parent.parent
1036
+
1037
+ SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'django-insecure-example-key-change-in-production')
1038
+
1039
+ DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true'
1040
+
1041
+ ALLOWED_HOSTS = ['localhost', '127.0.0.1']
1042
+
1043
+
1044
+ # PostHog configuration
1045
+ POSTHOG_PROJECT_TOKEN = os.environ.get('POSTHOG_PROJECT_TOKEN', '<ph_project_token>')
1046
+ POSTHOG_HOST = os.environ.get('POSTHOG_HOST', 'https://us.i.posthog.com')
1047
+ POSTHOG_DISABLED = os.environ.get('POSTHOG_DISABLED', 'False').lower() == 'true'
1048
+
1049
+
1050
+ INSTALLED_APPS = [
1051
+ 'django.contrib.admin',
1052
+ 'django.contrib.auth',
1053
+ 'django.contrib.contenttypes',
1054
+ 'django.contrib.sessions',
1055
+ 'django.contrib.messages',
1056
+ 'django.contrib.staticfiles',
1057
+ 'core.apps.CoreConfig',
1058
+ ]
1059
+
1060
+ MIDDLEWARE = [
1061
+ 'django.middleware.security.SecurityMiddleware',
1062
+ 'django.contrib.sessions.middleware.SessionMiddleware',
1063
+ 'django.middleware.common.CommonMiddleware',
1064
+ 'django.middleware.csrf.CsrfViewMiddleware',
1065
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
1066
+ 'django.contrib.messages.middleware.MessageMiddleware',
1067
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
1068
+ 'posthog.integrations.django.PosthogContextMiddleware',
1069
+ ]
1070
+
1071
+ ROOT_URLCONF = 'posthog_example.urls'
1072
+
1073
+ TEMPLATES = [
1074
+ {
1075
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
1076
+ 'DIRS': [],
1077
+ 'APP_DIRS': True,
1078
+ 'OPTIONS': {
1079
+ 'context_processors': [
1080
+ 'django.template.context_processors.debug',
1081
+ 'django.template.context_processors.request',
1082
+ 'django.contrib.auth.context_processors.auth',
1083
+ 'django.contrib.messages.context_processors.messages',
1084
+ ],
1085
+ },
1086
+ },
1087
+ ]
1088
+
1089
+ WSGI_APPLICATION = 'posthog_example.wsgi.application'
1090
+
1091
+ DATABASES = {
1092
+ 'default': {
1093
+ 'ENGINE': 'django.db.backends.sqlite3',
1094
+ 'NAME': BASE_DIR / 'db.sqlite3',
1095
+ }
1096
+ }
1097
+
1098
+ AUTH_PASSWORD_VALIDATORS = [
1099
+ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
1100
+ {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'},
1101
+ {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
1102
+ {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
1103
+ ]
1104
+
1105
+ LANGUAGE_CODE = 'en-us'
1106
+ TIME_ZONE = 'UTC'
1107
+ USE_I18N = True
1108
+ USE_TZ = True
1109
+
1110
+ STATIC_URL = 'static/'
1111
+
1112
+ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
1113
+
1114
+ ```
1115
+
1116
+ ---
1117
+
1118
+ ## posthog_example/urls.py
1119
+
1120
+ ```py
1121
+ """
1122
+ URL configuration for PostHog example project
1123
+ """
1124
+
1125
+ from django.contrib import admin
1126
+ from django.urls import path, include
1127
+
1128
+ urlpatterns = [
1129
+ path('admin/', admin.site.urls),
1130
+ # Include the core app URLs for PostHog examples
1131
+ path('', include('core.urls')),
1132
+ ]
1133
+
1134
+ ```
1135
+
1136
+ ---
1137
+
1138
+ ## posthog_example/wsgi.py
1139
+
1140
+ ```py
1141
+ """
1142
+ WSGI config for PostHog example project
1143
+ """
1144
+
1145
+ import os
1146
+
1147
+ from django.core.wsgi import get_wsgi_application
1148
+
1149
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'posthog_example.settings')
1150
+
1151
+ application = get_wsgi_application()
1152
+
1153
+ ```
1154
+
1155
+ ---
1156
+
1157
+ ## requirements.txt
1158
+
1159
+ ```txt
1160
+ Django>=4.2,<5.0
1161
+ posthog # Always use latest version
1162
+ python-dotenv>=1.0.0
1163
+
1164
+ ```
1165
+
1166
+ ---
1167
+