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,1004 @@
1
+ # PostHog astro-ssr Example Project
2
+
3
+ Repository: https://github.com/PostHog/context-mill
4
+ Path: example-apps/astro-ssr
5
+
6
+ ---
7
+
8
+ ## README.md
9
+
10
+ # PostHog Astro SSR Example
11
+
12
+ This is an [Astro](https://astro.build/) server-side rendered (SSR) example demonstrating PostHog integration with both client-side and server-side event tracking.
13
+
14
+ It uses:
15
+
16
+ - **Client-side**: PostHog web snippet for browser analytics
17
+ - **Server-side**: `posthog-node` for API route event tracking
18
+
19
+ This shows how to:
20
+
21
+ - Initialize PostHog on both client and server
22
+ - Track events from API routes using `posthog-node`
23
+ - Pass session IDs from client to server for unified sessions
24
+ - Identify users on both client and server
25
+ - Capture errors via `posthog.captureException()`
26
+ - Reset PostHog state on logout
27
+
28
+ ## Features
29
+
30
+ - **Server-side rendering**: Full SSR with `output: 'server'`
31
+ - **API routes**: Server-side endpoints for auth and event tracking
32
+ - **Dual tracking**: Events captured on both client and server
33
+ - **Session continuity**: Session ID passed to server via headers
34
+ - **Product analytics**: Track login and burrito consideration events
35
+ - **Session replay**: Enabled via PostHog snippet configuration
36
+ - **Error tracking**: Manual error capture sent to PostHog
37
+ - **Simple auth flow**: Demo login using localStorage + server API
38
+
39
+ ## Getting started
40
+
41
+ ### 1. Install dependencies
42
+
43
+ ```bash
44
+ npm install
45
+ # or
46
+ pnpm install
47
+ ```
48
+
49
+ ### 2. Configure environment variables
50
+
51
+ Create a `.env` file in the project root:
52
+
53
+ ```bash
54
+ # Client-side (PUBLIC_ prefix exposes to browser)
55
+ PUBLIC_POSTHOG_PROJECT_TOKEN=your_posthog_project_token
56
+ PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
57
+
58
+ # Server-side (no PUBLIC_ prefix, server-only)
59
+ POSTHOG_PROJECT_TOKEN=your_posthog_project_token
60
+ POSTHOG_HOST=https://us.i.posthog.com
61
+ ```
62
+
63
+ Get your PostHog project token from your project settings in PostHog.
64
+
65
+ ### 3. Run the development server
66
+
67
+ ```bash
68
+ npm run dev
69
+ # or
70
+ pnpm dev
71
+ ```
72
+
73
+ Open `http://localhost:4321` in your browser.
74
+
75
+ ## Project structure
76
+
77
+ ```text
78
+ src/
79
+ components/
80
+ posthog.astro # PostHog snippet for client-side tracking
81
+ Header.astro # Navigation + logout, calls posthog.reset()
82
+ layouts/
83
+ PostHogLayout.astro # Root layout that includes PostHog + Header
84
+ lib/
85
+ auth.ts # Client-side auth utilities
86
+ posthog-server.ts # Server-side PostHog client singleton
87
+ pages/
88
+ index.astro # Login form, calls /api/auth/login
89
+ burrito.astro # Burrito demo, calls /api/events/burrito
90
+ profile.astro # Profile + error tracking demo
91
+ api/
92
+ auth/
93
+ login.ts # Server-side login endpoint with PostHog tracking
94
+ events/
95
+ burrito.ts # Server-side event capture endpoint
96
+ styles/
97
+ global.css # Global styles
98
+ ```
99
+
100
+ ## Key integration points
101
+
102
+ ### Server-side PostHog client (`src/lib/posthog-server.ts`)
103
+
104
+ A singleton pattern ensures only one PostHog client is created:
105
+
106
+ ```typescript
107
+ import { PostHog } from "posthog-node";
108
+
109
+ let posthogClient: PostHog | null = null;
110
+
111
+ export function getPostHogServer(): PostHog {
112
+ if (!posthogClient) {
113
+ posthogClient = new PostHog(import.meta.env.POSTHOG_PROJECT_TOKEN, {
114
+ host: import.meta.env.POSTHOG_HOST,
115
+ flushAt: 1,
116
+ flushInterval: 0,
117
+ });
118
+ }
119
+ return posthogClient;
120
+ }
121
+ ```
122
+
123
+ ### API route with server-side tracking (`src/pages/api/auth/login.ts`)
124
+
125
+ ```typescript
126
+ import { getPostHogServer } from "../../../lib/posthog-server";
127
+
128
+ export const POST: APIRoute = async ({ request }) => {
129
+ const body = await request.json();
130
+ const { username } = body;
131
+
132
+ // Get session ID from client
133
+ const sessionId = request.headers.get("X-PostHog-Session-Id");
134
+
135
+ const posthog = getPostHogServer();
136
+
137
+ // Capture server-side event
138
+ posthog.capture({
139
+ distinctId: username,
140
+ event: "server_login",
141
+ properties: {
142
+ $session_id: sessionId || undefined,
143
+ source: "api",
144
+ },
145
+ });
146
+
147
+ return new Response(JSON.stringify({ success: true }));
148
+ };
149
+ ```
150
+
151
+ ### Passing session ID to server (`src/pages/index.astro`)
152
+
153
+ ```javascript
154
+ // Get the session ID from PostHog to pass to the server
155
+ const sessionId = window.posthog?.get_session_id?.() || null;
156
+
157
+ const response = await fetch("/api/auth/login", {
158
+ method: "POST",
159
+ headers: {
160
+ "Content-Type": "application/json",
161
+ "X-PostHog-Session-Id": sessionId || "",
162
+ },
163
+ body: JSON.stringify({ username, password }),
164
+ });
165
+ ```
166
+
167
+ ### Client-side identification (`src/pages/index.astro`)
168
+
169
+ After server login succeeds, also identify on client:
170
+
171
+ ```javascript
172
+ window.posthog?.identify(username);
173
+ window.posthog?.capture("user_logged_in");
174
+ ```
175
+
176
+ ### Logout and session reset (`src/components/Header.astro`)
177
+
178
+ On logout, both the local auth state and PostHog state are cleared:
179
+
180
+ ```javascript
181
+ window.posthog?.capture("user_logged_out");
182
+ localStorage.removeItem("currentUser");
183
+ window.posthog?.reset();
184
+ ```
185
+
186
+ ## Scripts
187
+
188
+ ```bash
189
+ # Run dev server
190
+ npm run dev
191
+
192
+ # Build for production
193
+ npm run build
194
+
195
+ # Preview production build
196
+ npm run preview
197
+ ```
198
+
199
+ ## Learn more
200
+
201
+ - [PostHog documentation](https://posthog.com/docs)
202
+ - [PostHog Astro guide](https://posthog.com/docs/libraries/astro)
203
+ - [PostHog Node.js SDK](https://posthog.com/docs/libraries/node)
204
+ - [Astro SSR documentation](https://docs.astro.build/en/guides/server-side-rendering/)
205
+
206
+ ---
207
+
208
+ ## .env.example
209
+
210
+ ```example
211
+ # Client-side environment variables (PUBLIC_ prefix)
212
+ PUBLIC_POSTHOG_PROJECT_TOKEN=your_posthog_project_token_here
213
+ PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
214
+
215
+ # Server-side environment variables (no PUBLIC_ prefix)
216
+ POSTHOG_PROJECT_TOKEN=your_posthog_project_token_here
217
+ POSTHOG_HOST=https://us.i.posthog.com
218
+
219
+ ```
220
+
221
+ ---
222
+
223
+ ## astro.config.mjs
224
+
225
+ ```mjs
226
+ import { defineConfig } from "astro/config";
227
+ import node from "@astrojs/node";
228
+
229
+ export default defineConfig({
230
+ output: "server",
231
+ adapter: node({
232
+ mode: "standalone",
233
+ }),
234
+ image: {
235
+ service: { entrypoint: "astro/assets/services/noop" },
236
+ },
237
+ });
238
+
239
+ ```
240
+
241
+ ---
242
+
243
+ ## src/components/Header.astro
244
+
245
+ ```astro
246
+ ---
247
+ // Header component with navigation and logout functionality
248
+ ---
249
+ <header class="header">
250
+ <div class="header-container">
251
+ <nav>
252
+ <a href="/">Home</a>
253
+ <a href="/burrito" class="auth-link" style="display: none;">Burrito Consideration</a>
254
+ <a href="/profile" class="auth-link" style="display: none;">Profile</a>
255
+ </nav>
256
+ <div class="user-section">
257
+ <span class="welcome-text" style="display: none;">Welcome, <span class="username"></span>!</span>
258
+ <span class="not-logged-in">Not logged in</span>
259
+ <button class="btn-logout" style="display: none;">Logout</button>
260
+ </div>
261
+ </div>
262
+ </header>
263
+
264
+ <script is:inline>
265
+ function updateHeader() {
266
+ const currentUser = localStorage.getItem('currentUser');
267
+ const authLinks = document.querySelectorAll('.auth-link');
268
+ const welcomeText = document.querySelector('.welcome-text');
269
+ const notLoggedIn = document.querySelector('.not-logged-in');
270
+ const logoutBtn = document.querySelector('.btn-logout');
271
+ const usernameSpan = document.querySelector('.username');
272
+
273
+ if (currentUser) {
274
+ authLinks.forEach(link => link.style.display = 'inline');
275
+ welcomeText.style.display = 'inline';
276
+ notLoggedIn.style.display = 'none';
277
+ logoutBtn.style.display = 'inline';
278
+ usernameSpan.textContent = currentUser;
279
+ } else {
280
+ authLinks.forEach(link => link.style.display = 'none');
281
+ welcomeText.style.display = 'none';
282
+ notLoggedIn.style.display = 'inline';
283
+ logoutBtn.style.display = 'none';
284
+ }
285
+ }
286
+
287
+ function handleLogout() {
288
+ const currentUser = localStorage.getItem('currentUser');
289
+ if (currentUser) {
290
+ window.posthog?.capture('user_logged_out');
291
+ }
292
+ localStorage.removeItem('currentUser');
293
+ localStorage.removeItem('burritoConsiderations');
294
+ // IMPORTANT: Reset the PostHog instance to clear the user session
295
+ window.posthog?.reset();
296
+ window.location.href = '/';
297
+ }
298
+
299
+ document.addEventListener('DOMContentLoaded', () => {
300
+ updateHeader();
301
+ document.querySelector('.btn-logout')?.addEventListener('click', handleLogout);
302
+ });
303
+
304
+ // Listen for storage changes (login/logout in other tabs)
305
+ window.addEventListener('storage', updateHeader);
306
+ </script>
307
+
308
+ <style>
309
+ .header {
310
+ background-color: #333;
311
+ color: white;
312
+ padding: 1rem;
313
+ }
314
+
315
+ .header-container {
316
+ max-width: 1200px;
317
+ margin: 0 auto;
318
+ display: flex;
319
+ justify-content: space-between;
320
+ align-items: center;
321
+ }
322
+
323
+ .header nav {
324
+ display: flex;
325
+ gap: 1rem;
326
+ }
327
+
328
+ .header a {
329
+ color: white;
330
+ text-decoration: none;
331
+ padding: 0.5rem 1rem;
332
+ border-radius: 4px;
333
+ transition: background-color 0.2s;
334
+ }
335
+
336
+ .header a:hover {
337
+ background-color: #555;
338
+ text-decoration: none;
339
+ }
340
+
341
+ .user-section {
342
+ display: flex;
343
+ align-items: center;
344
+ gap: 1rem;
345
+ }
346
+
347
+ .btn-logout {
348
+ background-color: #dc3545;
349
+ color: white;
350
+ border: none;
351
+ padding: 0.5rem 1rem;
352
+ border-radius: 4px;
353
+ cursor: pointer;
354
+ font-size: 14px;
355
+ }
356
+
357
+ .btn-logout:hover {
358
+ background-color: #c82333;
359
+ }
360
+ </style>
361
+
362
+ ```
363
+
364
+ ---
365
+
366
+ ## src/components/posthog.astro
367
+
368
+ ```astro
369
+ ---
370
+ // PostHog analytics snippet for client-side tracking
371
+ // Uses is:inline to prevent Astro from processing the script
372
+ ---
373
+ <script is:inline define:vars={{ apiKey: import.meta.env.PUBLIC_POSTHOG_PROJECT_TOKEN, apiHost: import.meta.env.PUBLIC_POSTHOG_HOST }}>
374
+ !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys getNextSurveyStep onSessionId".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
375
+ posthog.init(apiKey || '', {
376
+ api_host: apiHost || 'https://us.i.posthog.com',
377
+ defaults: '2026-01-30'
378
+ })
379
+ </script>
380
+
381
+ ```
382
+
383
+ ---
384
+
385
+ ## src/layouts/PostHogLayout.astro
386
+
387
+ ```astro
388
+ ---
389
+ import PostHog from '../components/posthog.astro';
390
+ import Header from '../components/Header.astro';
391
+ import '../styles/global.css';
392
+
393
+ interface Props {
394
+ title: string;
395
+ }
396
+
397
+ const { title } = Astro.props;
398
+ ---
399
+ <!doctype html>
400
+ <html lang="en">
401
+ <head>
402
+ <meta charset="UTF-8" />
403
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
404
+ <meta name="description" content="Astro PostHog SSR Integration Example" />
405
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
406
+ <title>{title}</title>
407
+ <PostHog />
408
+ </head>
409
+ <body>
410
+ <Header />
411
+ <main>
412
+ <slot />
413
+ </main>
414
+ </body>
415
+ </html>
416
+
417
+ ```
418
+
419
+ ---
420
+
421
+ ## src/lib/auth.ts
422
+
423
+ ```ts
424
+ // Client-side auth utilities for localStorage-based authentication
425
+
426
+ export interface User {
427
+ username: string;
428
+ burritoConsiderations: number;
429
+ }
430
+
431
+ export function getCurrentUser(): User | null {
432
+ if (typeof window === "undefined") return null;
433
+
434
+ const username = localStorage.getItem("currentUser");
435
+ if (!username) return null;
436
+
437
+ const considerations = parseInt(
438
+ localStorage.getItem("burritoConsiderations") || "0",
439
+ 10,
440
+ );
441
+
442
+ return {
443
+ username,
444
+ burritoConsiderations: considerations,
445
+ };
446
+ }
447
+
448
+ export function login(username: string, password: string): boolean {
449
+ if (!username || !password) return false;
450
+
451
+ localStorage.setItem("currentUser", username);
452
+ // Initialize burrito considerations if not set
453
+ if (!localStorage.getItem("burritoConsiderations")) {
454
+ localStorage.setItem("burritoConsiderations", "0");
455
+ }
456
+
457
+ return true;
458
+ }
459
+
460
+ export function logout(): void {
461
+ localStorage.removeItem("currentUser");
462
+ localStorage.removeItem("burritoConsiderations");
463
+ }
464
+
465
+ export function incrementBurritoConsiderations(): number {
466
+ const current = parseInt(
467
+ localStorage.getItem("burritoConsiderations") || "0",
468
+ 10,
469
+ );
470
+ const newCount = current + 1;
471
+ localStorage.setItem("burritoConsiderations", newCount.toString());
472
+ return newCount;
473
+ }
474
+
475
+ ```
476
+
477
+ ---
478
+
479
+ ## src/lib/posthog-server.ts
480
+
481
+ ```ts
482
+ import { PostHog } from "posthog-node";
483
+
484
+ let posthogClient: PostHog | null = null;
485
+
486
+ /**
487
+ * Get the PostHog server-side client.
488
+ * Uses a singleton pattern to avoid creating multiple clients.
489
+ */
490
+ export function getPostHogServer(): PostHog {
491
+ if (!posthogClient) {
492
+ posthogClient = new PostHog(import.meta.env.POSTHOG_PROJECT_TOKEN || "", {
493
+ host: import.meta.env.POSTHOG_HOST || "https://us.i.posthog.com",
494
+ // Flush immediately for demo purposes
495
+ // In production, you might want to batch events
496
+ flushAt: 1,
497
+ flushInterval: 0,
498
+ });
499
+ }
500
+ return posthogClient;
501
+ }
502
+
503
+ /**
504
+ * Shutdown the PostHog client gracefully.
505
+ * Call this when your server is shutting down.
506
+ */
507
+ export async function shutdownPostHog(): Promise<void> {
508
+ if (posthogClient) {
509
+ await posthogClient.shutdown();
510
+ posthogClient = null;
511
+ }
512
+ }
513
+
514
+ ```
515
+
516
+ ---
517
+
518
+ ## src/pages/api/auth/login.ts
519
+
520
+ ```ts
521
+ import type { APIRoute } from "astro";
522
+ import { getPostHogServer } from "../../../lib/posthog-server";
523
+
524
+ // In-memory user store for demo purposes
525
+ const users = new Map<string, { username: string; createdAt: string }>();
526
+
527
+ export const POST: APIRoute = async ({ request }) => {
528
+ try {
529
+ const body = await request.json();
530
+ const { username, password } = body;
531
+
532
+ if (!username || !password) {
533
+ return new Response(
534
+ JSON.stringify({ error: "Username and password are required" }),
535
+ { status: 400, headers: { "Content-Type": "application/json" } },
536
+ );
537
+ }
538
+
539
+ // Check if this is a new user
540
+ const isNewUser = !users.has(username);
541
+
542
+ if (isNewUser) {
543
+ users.set(username, {
544
+ username,
545
+ createdAt: new Date().toISOString(),
546
+ });
547
+ }
548
+
549
+ // Get the PostHog server client
550
+ const posthog = getPostHogServer();
551
+
552
+ // Get session ID from client if available (passed via header)
553
+ const sessionId = request.headers.get("X-PostHog-Session-Id");
554
+
555
+ // Capture server-side login event
556
+ posthog.capture({
557
+ distinctId: username,
558
+ event: "server_login",
559
+ properties: {
560
+ $session_id: sessionId || undefined,
561
+ isNewUser,
562
+ source: "api",
563
+ timestamp: new Date().toISOString(),
564
+ },
565
+ });
566
+
567
+ // Also identify the user server-side
568
+ posthog.identify({
569
+ distinctId: username,
570
+ properties: {
571
+ username,
572
+ createdAt: isNewUser ? new Date().toISOString() : undefined,
573
+ },
574
+ });
575
+
576
+ // This endpoint is short-lived; flush so the enqueued events send before it returns
577
+ await posthog.flush();
578
+
579
+ return new Response(
580
+ JSON.stringify({
581
+ success: true,
582
+ username,
583
+ isNewUser,
584
+ }),
585
+ { status: 200, headers: { "Content-Type": "application/json" } },
586
+ );
587
+ } catch (error) {
588
+ console.error("Login error:", error);
589
+ return new Response(JSON.stringify({ error: "Internal server error" }), {
590
+ status: 500,
591
+ headers: { "Content-Type": "application/json" },
592
+ });
593
+ }
594
+ };
595
+
596
+ ```
597
+
598
+ ---
599
+
600
+ ## src/pages/api/events/burrito.ts
601
+
602
+ ```ts
603
+ import type { APIRoute } from "astro";
604
+ import { getPostHogServer } from "../../../lib/posthog-server";
605
+
606
+ export const POST: APIRoute = async ({ request }) => {
607
+ try {
608
+ const body = await request.json();
609
+ const { username, totalConsiderations } = body;
610
+
611
+ if (!username) {
612
+ return new Response(JSON.stringify({ error: "Username is required" }), {
613
+ status: 400,
614
+ headers: { "Content-Type": "application/json" },
615
+ });
616
+ }
617
+
618
+ // Get the PostHog server client
619
+ const posthog = getPostHogServer();
620
+
621
+ // Get session ID from client if available (passed via header)
622
+ const sessionId = request.headers.get("X-PostHog-Session-Id");
623
+
624
+ // Capture server-side burrito consideration event
625
+ posthog.capture({
626
+ distinctId: username,
627
+ event: "burrito_considered",
628
+ properties: {
629
+ $session_id: sessionId || undefined,
630
+ total_considerations: totalConsiderations,
631
+ source: "api",
632
+ timestamp: new Date().toISOString(),
633
+ },
634
+ });
635
+
636
+ // This endpoint is short-lived; flush so the enqueued event sends before it returns
637
+ await posthog.flush();
638
+
639
+ return new Response(
640
+ JSON.stringify({
641
+ success: true,
642
+ totalConsiderations,
643
+ }),
644
+ { status: 200, headers: { "Content-Type": "application/json" } },
645
+ );
646
+ } catch (error) {
647
+ console.error("Burrito event error:", error);
648
+ return new Response(JSON.stringify({ error: "Internal server error" }), {
649
+ status: 500,
650
+ headers: { "Content-Type": "application/json" },
651
+ });
652
+ }
653
+ };
654
+
655
+ ```
656
+
657
+ ---
658
+
659
+ ## src/pages/burrito.astro
660
+
661
+ ```astro
662
+ ---
663
+ import PostHogLayout from '../layouts/PostHogLayout.astro';
664
+ ---
665
+ <PostHogLayout title="Burrito Consideration - Astro PostHog SSR Example">
666
+ <div class="container">
667
+ <h1>Burrito consideration zone</h1>
668
+ <p>Take a moment to truly consider the potential of burritos.</p>
669
+
670
+ <div style="text-align: center;">
671
+ <button id="consider-btn" class="btn-burrito">
672
+ I have considered the burrito potential
673
+ </button>
674
+
675
+ <p id="success-message" class="success" style="display: none;">
676
+ Thank you for your consideration! Count: <span id="consideration-count"></span>
677
+ </p>
678
+ </div>
679
+
680
+ <div class="stats">
681
+ <h3>Consideration stats</h3>
682
+ <p>Total considerations: <span id="total-considerations">0</span></p>
683
+ </div>
684
+
685
+ <p class="note" style="margin-top: 1rem;">
686
+ Events are tracked both client-side and server-side for demonstration.
687
+ </p>
688
+ </div>
689
+ </PostHogLayout>
690
+
691
+ <script is:inline>
692
+ function checkAuth() {
693
+ const currentUser = localStorage.getItem('currentUser');
694
+ if (!currentUser) {
695
+ window.location.href = '/';
696
+ return false;
697
+ }
698
+ return true;
699
+ }
700
+
701
+ function updateStats() {
702
+ const count = localStorage.getItem('burritoConsiderations') || '0';
703
+ document.getElementById('total-considerations').textContent = count;
704
+ }
705
+
706
+ async function handleConsideration() {
707
+ const currentUser = localStorage.getItem('currentUser');
708
+ if (!currentUser) return;
709
+
710
+ // Increment the count
711
+ const currentCount = parseInt(localStorage.getItem('burritoConsiderations') || '0', 10);
712
+ const newCount = currentCount + 1;
713
+ localStorage.setItem('burritoConsiderations', newCount.toString());
714
+
715
+ // Update the UI
716
+ updateStats();
717
+
718
+ const successMessage = document.getElementById('success-message');
719
+ const considerationCount = document.getElementById('consideration-count');
720
+ considerationCount.textContent = newCount;
721
+ successMessage.style.display = 'block';
722
+
723
+ // Hide success message after 2 seconds
724
+ setTimeout(() => {
725
+ successMessage.style.display = 'none';
726
+ }, 2000);
727
+
728
+ // Client-side event tracking
729
+ window.posthog?.capture('burrito_considered', {
730
+ total_considerations: newCount,
731
+ username: currentUser,
732
+ source: 'client'
733
+ });
734
+
735
+ // Also send to server-side API for server tracking
736
+ try {
737
+ const sessionId = window.posthog?.get_session_id?.() || null;
738
+
739
+ await fetch('/api/events/burrito', {
740
+ method: 'POST',
741
+ headers: {
742
+ 'Content-Type': 'application/json',
743
+ 'X-PostHog-Session-Id': sessionId || ''
744
+ },
745
+ body: JSON.stringify({
746
+ username: currentUser,
747
+ totalConsiderations: newCount
748
+ })
749
+ });
750
+ } catch (error) {
751
+ console.error('Failed to send server-side event:', error);
752
+ }
753
+ }
754
+
755
+ document.addEventListener('DOMContentLoaded', () => {
756
+ if (!checkAuth()) return;
757
+
758
+ updateStats();
759
+ document.getElementById('consider-btn')?.addEventListener('click', handleConsideration);
760
+ });
761
+ </script>
762
+
763
+ ```
764
+
765
+ ---
766
+
767
+ ## src/pages/index.astro
768
+
769
+ ```astro
770
+ ---
771
+ import PostHogLayout from '../layouts/PostHogLayout.astro';
772
+ ---
773
+ <PostHogLayout title="Home - Astro PostHog SSR Example">
774
+ <div class="container">
775
+ <div id="logged-in-view" style="display: none;">
776
+ <h1>Welcome back, <span id="welcome-username"></span>!</h1>
777
+ <p>You are logged in. Feel free to explore:</p>
778
+ <ul>
779
+ <li>Consider the potential of burritos</li>
780
+ <li>View your profile and statistics</li>
781
+ </ul>
782
+ </div>
783
+
784
+ <div id="logged-out-view">
785
+ <h1>Welcome to Burrito Consideration App</h1>
786
+ <p>Please sign in to begin your burrito journey</p>
787
+
788
+ <form id="login-form" class="form">
789
+ <div class="form-group">
790
+ <label for="username">Username:</label>
791
+ <input
792
+ type="text"
793
+ id="username"
794
+ placeholder="Enter any username"
795
+ required
796
+ />
797
+ </div>
798
+
799
+ <div class="form-group">
800
+ <label for="password">Password:</label>
801
+ <input
802
+ type="password"
803
+ id="password"
804
+ placeholder="Enter any password"
805
+ required
806
+ />
807
+ </div>
808
+
809
+ <p id="error-message" class="error" style="display: none;"></p>
810
+
811
+ <button type="submit" class="btn-primary">Sign In</button>
812
+ </form>
813
+
814
+ <p class="note">
815
+ Note: This is a demo app with server-side tracking. Use any username and password to sign in.
816
+ </p>
817
+ </div>
818
+ </div>
819
+ </PostHogLayout>
820
+
821
+ <script is:inline>
822
+ function updateView() {
823
+ const currentUser = localStorage.getItem('currentUser');
824
+ const loggedInView = document.getElementById('logged-in-view');
825
+ const loggedOutView = document.getElementById('logged-out-view');
826
+ const welcomeUsername = document.getElementById('welcome-username');
827
+
828
+ if (currentUser) {
829
+ loggedInView.style.display = 'block';
830
+ loggedOutView.style.display = 'none';
831
+ welcomeUsername.textContent = currentUser;
832
+ } else {
833
+ loggedInView.style.display = 'none';
834
+ loggedOutView.style.display = 'block';
835
+ }
836
+ }
837
+
838
+ async function handleLogin(event) {
839
+ event.preventDefault();
840
+
841
+ const username = document.getElementById('username').value;
842
+ const password = document.getElementById('password').value;
843
+ const errorMessage = document.getElementById('error-message');
844
+
845
+ if (!username || !password) {
846
+ errorMessage.textContent = 'Please provide both username and password';
847
+ errorMessage.style.display = 'block';
848
+ return;
849
+ }
850
+
851
+ try {
852
+ // Get the session ID from PostHog to pass to the server
853
+ const sessionId = window.posthog?.get_session_id?.() || null;
854
+
855
+ // Call the server-side login API
856
+ const response = await fetch('/api/auth/login', {
857
+ method: 'POST',
858
+ headers: {
859
+ 'Content-Type': 'application/json',
860
+ 'X-PostHog-Session-Id': sessionId || ''
861
+ },
862
+ body: JSON.stringify({ username, password })
863
+ });
864
+
865
+ const data = await response.json();
866
+
867
+ if (!response.ok) {
868
+ throw new Error(data.error || 'Login failed');
869
+ }
870
+
871
+ // Store in localStorage for client-side state
872
+ localStorage.setItem('currentUser', username);
873
+ if (!localStorage.getItem('burritoConsiderations')) {
874
+ localStorage.setItem('burritoConsiderations', '0');
875
+ }
876
+
877
+ // Also identify on the client side (for session continuity)
878
+ window.posthog?.identify(username);
879
+ window.posthog?.capture('user_logged_in');
880
+
881
+ // Clear form
882
+ document.getElementById('username').value = '';
883
+ document.getElementById('password').value = '';
884
+ errorMessage.style.display = 'none';
885
+
886
+ // Update view
887
+ updateView();
888
+
889
+ // Trigger header update
890
+ window.dispatchEvent(new Event('storage'));
891
+ } catch (error) {
892
+ errorMessage.textContent = error.message || 'Login failed';
893
+ errorMessage.style.display = 'block';
894
+ }
895
+ }
896
+
897
+ document.addEventListener('DOMContentLoaded', () => {
898
+ updateView();
899
+ document.getElementById('login-form')?.addEventListener('submit', handleLogin);
900
+ });
901
+
902
+ // Listen for storage changes
903
+ window.addEventListener('storage', updateView);
904
+ </script>
905
+
906
+ ```
907
+
908
+ ---
909
+
910
+ ## src/pages/profile.astro
911
+
912
+ ```astro
913
+ ---
914
+ import PostHogLayout from '../layouts/PostHogLayout.astro';
915
+ ---
916
+ <PostHogLayout title="Profile - Astro PostHog SSR Example">
917
+ <div class="container">
918
+ <h1>User Profile</h1>
919
+
920
+ <div class="stats">
921
+ <h2>Your Information</h2>
922
+ <p><strong>Username:</strong> <span id="profile-username"></span></p>
923
+ <p><strong>Burrito Considerations:</strong> <span id="profile-considerations">0</span></p>
924
+ </div>
925
+
926
+ <div style="margin-top: 2rem;">
927
+ <h3>Your Burrito Journey</h3>
928
+ <p id="journey-message"></p>
929
+ </div>
930
+
931
+ <div style="margin-top: 2rem;">
932
+ <h3>Error Tracking Demo</h3>
933
+ <p>Click the button below to trigger a test error and send it to PostHog:</p>
934
+ <button id="error-btn" class="btn-error">
935
+ Trigger Test Error
936
+ </button>
937
+ <p id="error-feedback" class="success" style="display: none;">
938
+ Error captured and sent to PostHog!
939
+ </p>
940
+ </div>
941
+ </div>
942
+ </PostHogLayout>
943
+
944
+ <script is:inline>
945
+ function checkAuth() {
946
+ const currentUser = localStorage.getItem('currentUser');
947
+ if (!currentUser) {
948
+ window.location.href = '/';
949
+ return false;
950
+ }
951
+ return true;
952
+ }
953
+
954
+ function updateProfile() {
955
+ const username = localStorage.getItem('currentUser') || '';
956
+ const considerations = parseInt(localStorage.getItem('burritoConsiderations') || '0', 10);
957
+
958
+ document.getElementById('profile-username').textContent = username;
959
+ document.getElementById('profile-considerations').textContent = considerations;
960
+
961
+ // Update journey message based on consideration count
962
+ const journeyMessage = document.getElementById('journey-message');
963
+ if (considerations === 0) {
964
+ journeyMessage.textContent = "You haven't considered any burritos yet. Visit the Burrito Consideration page to start!";
965
+ } else if (considerations === 1) {
966
+ journeyMessage.textContent = "You've considered the burrito potential once. Keep going!";
967
+ } else if (considerations < 5) {
968
+ journeyMessage.textContent = "You're getting the hang of burrito consideration!";
969
+ } else if (considerations < 10) {
970
+ journeyMessage.textContent = "You're becoming a burrito consideration expert!";
971
+ } else {
972
+ journeyMessage.textContent = "You are a true burrito consideration master!";
973
+ }
974
+ }
975
+
976
+ function triggerTestError() {
977
+ try {
978
+ throw new Error('Test error for PostHog error tracking');
979
+ } catch (err) {
980
+ // Capture the error in PostHog
981
+ window.posthog?.captureException(err);
982
+ console.error('Captured error:', err);
983
+
984
+ // Show feedback to user
985
+ const feedback = document.getElementById('error-feedback');
986
+ feedback.style.display = 'block';
987
+ setTimeout(() => {
988
+ feedback.style.display = 'none';
989
+ }, 3000);
990
+ }
991
+ }
992
+
993
+ document.addEventListener('DOMContentLoaded', () => {
994
+ if (!checkAuth()) return;
995
+
996
+ updateProfile();
997
+ document.getElementById('error-btn')?.addEventListener('click', triggerTestError);
998
+ });
999
+ </script>
1000
+
1001
+ ```
1002
+
1003
+ ---
1004
+