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,1199 @@
1
+ # PostHog tanstack-start Example Project
2
+
3
+ Repository: https://github.com/PostHog/context-mill
4
+ Path: example-apps/tanstack-start
5
+
6
+ ---
7
+
8
+ ## README.md
9
+
10
+ # PostHog TanStack Start example
11
+
12
+ This is a [TanStack Start](https://tanstack.com/start) example demonstrating PostHog integration with product analytics, session replay, feature flags, and error tracking.
13
+
14
+ ## Features
15
+
16
+ - **Product analytics**: Track user events and behaviors
17
+ - **Session replay**: Record and replay user sessions
18
+ - **Error tracking**: Capture and track errors automatically
19
+ - **User authentication**: Demo login system with PostHog user identification
20
+ - **Server-side & client-side tracking**: Complete examples of both tracking methods
21
+ - **Reverse proxy**: PostHog ingestion through Vite dev server proxy
22
+
23
+ ## Getting started
24
+
25
+ ### 1. Install dependencies
26
+
27
+ ```bash
28
+ npm install
29
+ ```
30
+
31
+ ### 2. Configure environment variables
32
+
33
+ Create a `.env` file in the root directory:
34
+
35
+ ```bash
36
+ VITE_PUBLIC_POSTHOG_PROJECT_TOKEN=your_posthog_project_token
37
+ VITE_PUBLIC_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 the development server
43
+
44
+ ```bash
45
+ npm run dev
46
+ ```
47
+
48
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the app.
49
+
50
+ ## Project structure
51
+
52
+ ```
53
+ src/
54
+ ├── components/
55
+ │ └── Header.tsx # Navigation header with auth state
56
+ ├── contexts/
57
+ │ └── AuthContext.tsx # Authentication context with PostHog integration
58
+ ├── utils/
59
+ │ └── posthog-server.ts # Server-side PostHog client
60
+ ├── routes/
61
+ │ ├── __root.tsx # Root route with PostHogProvider
62
+ │ ├── index.tsx # Home/login page
63
+ │ ├── burrito.tsx # Demo feature page with event tracking
64
+ │ ├── profile.tsx # User profile with error tracking demo
65
+ │ └── api/
66
+ │ ├── auth/
67
+ │ │ └── login.ts # Login API with server-side tracking
68
+ │ └── burrito/
69
+ │ └── consider.ts # Burrito API with server-side tracking
70
+ └── styles.css # Global styles
71
+
72
+ vite.config.ts # Vite config with PostHog proxy
73
+ .env # Environment variables
74
+ ```
75
+
76
+ ## Key integration points
77
+
78
+ ### Client-side initialization (routes/__root.tsx)
79
+
80
+ PostHog is initialized using `PostHogProvider` from `@posthog/react`. The provider wraps the entire app in the root shell component and handles calling `posthog.init()` automatically:
81
+
82
+ ```typescript
83
+ import { PostHogProvider } from '@posthog/react'
84
+
85
+ <PostHogProvider
86
+ apiKey={import.meta.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN!}
87
+ options={{
88
+ api_host: '/ingest',
89
+ ui_host: import.meta.env.VITE_PUBLIC_POSTHOG_HOST || 'https://us.posthog.com',
90
+ defaults: '2025-05-24',
91
+ capture_exceptions: true,
92
+ debug: import.meta.env.DEV,
93
+ }}
94
+ >
95
+ {children}
96
+ </PostHogProvider>
97
+ ```
98
+
99
+ ### Server-side setup (utils/posthog-server.ts)
100
+
101
+ For server-side tracking, we use the `posthog-node` SDK with a singleton pattern:
102
+
103
+ ```typescript
104
+ import { PostHog } from 'posthog-node'
105
+
106
+ export function getPostHogClient() {
107
+ if (!posthogClient) {
108
+ posthogClient = new PostHog(
109
+ process.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN || import.meta.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN!,
110
+ {
111
+ host: process.env.VITE_PUBLIC_POSTHOG_HOST || import.meta.env.VITE_PUBLIC_POSTHOG_HOST,
112
+ flushAt: 1,
113
+ flushInterval: 0,
114
+ }
115
+ )
116
+ }
117
+ return posthogClient
118
+ }
119
+ ```
120
+
121
+ This client is used in API routes to track server-side events.
122
+
123
+ ### Server-side capture (routes/api/*)
124
+
125
+ Server-side events include the client's `$session_id` so they appear in the same session in PostHog. The frontend sends it via a header:
126
+
127
+ ```typescript
128
+ // Frontend: include session ID in API requests
129
+ await fetch('/api/burrito/consider', {
130
+ method: 'POST',
131
+ headers: {
132
+ 'Content-Type': 'application/json',
133
+ 'X-PostHog-Session-Id': posthog.get_session_id() ?? '',
134
+ },
135
+ body: JSON.stringify({ ... }),
136
+ })
137
+ ```
138
+
139
+ ```typescript
140
+ // Server: read session ID from header and include in capture
141
+ import { getPostHogClient } from '../../utils/posthog-server'
142
+
143
+ const sessionId = request.headers.get('X-PostHog-Session-Id')
144
+
145
+ const posthog = getPostHogClient()
146
+ posthog.capture({
147
+ distinctId: username,
148
+ event: 'burrito_considered',
149
+ properties: {
150
+ $session_id: sessionId || undefined,
151
+ username: username,
152
+ source: 'api',
153
+ },
154
+ })
155
+ ```
156
+
157
+ ### Reverse proxy configuration
158
+
159
+ The Vite dev server is configured to proxy PostHog requests to avoid CORS issues and improve reliability:
160
+
161
+ ```typescript
162
+ server: {
163
+ proxy: {
164
+ '/ingest': {
165
+ target: 'https://us.i.posthog.com',
166
+ changeOrigin: true,
167
+ rewrite: (path) => path.replace(/^\/ingest/, ''),
168
+ secure: false,
169
+ },
170
+ },
171
+ }
172
+ ```
173
+
174
+ ### User identification (contexts/AuthContext.tsx)
175
+
176
+ ```typescript
177
+ import { usePostHog } from '@posthog/react'
178
+
179
+ const posthog = usePostHog()
180
+
181
+ posthog.identify(username, {
182
+ username: username,
183
+ })
184
+ ```
185
+
186
+ ### Event tracking (routes/burrito.tsx)
187
+
188
+ ```typescript
189
+ import { usePostHog } from '@posthog/react'
190
+
191
+ const posthog = usePostHog()
192
+
193
+ posthog.capture('burrito_considered', {
194
+ total_considerations: user.burritoConsiderations + 1,
195
+ username: user.username,
196
+ })
197
+ ```
198
+
199
+ ### Error tracking (routes/profile.tsx)
200
+
201
+ ```typescript
202
+ posthog.captureException(error)
203
+ ```
204
+
205
+ ## Learn more
206
+
207
+ - [PostHog documentation](https://posthog.com/docs)
208
+ - [TanStack Start documentation](https://tanstack.com/start)
209
+ - [TanStack Router documentation](https://tanstack.com/router)
210
+ - [PostHog React integration](https://posthog.com/docs/libraries/react)
211
+ - [PostHog Node.js integration](https://posthog.com/docs/libraries/node)
212
+
213
+ ---
214
+
215
+ ## .env.example
216
+
217
+ ```example
218
+ VITE_PUBLIC_POSTHOG_PROJECT_TOKEN=<ph_project_token>
219
+ VITE_PUBLIC_POSTHOG_HOST=<ph_client_api_host>
220
+
221
+ ```
222
+
223
+ ---
224
+
225
+ ## .prettierignore
226
+
227
+ ```
228
+ package-lock.json
229
+ pnpm-lock.yaml
230
+ yarn.lock
231
+ ```
232
+
233
+ ---
234
+
235
+ ## prettier.config.js
236
+
237
+ ```js
238
+ // @ts-check
239
+
240
+ /** @type {import('prettier').Config} */
241
+ const config = {
242
+ semi: false,
243
+ singleQuote: true,
244
+ trailingComma: "all",
245
+ };
246
+
247
+ export default config;
248
+
249
+ ```
250
+
251
+ ---
252
+
253
+ ## public/robots.txt
254
+
255
+ ```txt
256
+ # https://www.robotstxt.org/robotstxt.html
257
+ User-agent: *
258
+ Disallow:
259
+
260
+ ```
261
+
262
+ ---
263
+
264
+ ## src/components/Header.tsx
265
+
266
+ ```tsx
267
+ import { Link } from '@tanstack/react-router'
268
+ import { useAuth } from '../contexts/AuthContext'
269
+
270
+ export default function Header() {
271
+ const { user, logout } = useAuth()
272
+
273
+ return (
274
+ <header className="header">
275
+ <div className="header-container">
276
+ <nav>
277
+ <Link to="/">Home</Link>
278
+ {user && (
279
+ <>
280
+ <Link to="/burrito">Burrito Consideration</Link>
281
+ <Link to="/profile">Profile</Link>
282
+ </>
283
+ )}
284
+ </nav>
285
+ <div className="user-section">
286
+ {user ? (
287
+ <>
288
+ <span>Welcome, {user.username}!</span>
289
+ <button onClick={logout} className="btn-logout">
290
+ Logout
291
+ </button>
292
+ </>
293
+ ) : (
294
+ <span>Not logged in</span>
295
+ )}
296
+ </div>
297
+ </div>
298
+ </header>
299
+ )
300
+ }
301
+
302
+ ```
303
+
304
+ ---
305
+
306
+ ## src/contexts/AuthContext.tsx
307
+
308
+ ```tsx
309
+ import {
310
+ createContext,
311
+ useContext,
312
+ useState,
313
+ ReactNode,
314
+ } from 'react'
315
+ import { usePostHog } from '@posthog/react'
316
+
317
+ interface User {
318
+ username: string
319
+ burritoConsiderations: number
320
+ }
321
+
322
+ interface AuthContextType {
323
+ user: User | null
324
+ login: (username: string, password: string) => Promise<boolean>
325
+ logout: () => void
326
+ incrementBurritoConsiderations: () => void
327
+ }
328
+
329
+ const AuthContext = createContext<AuthContextType | undefined>(undefined)
330
+
331
+ const users: Map<string, User> = new Map()
332
+
333
+ export function AuthProvider({ children }: { children: ReactNode }) {
334
+ const posthog = usePostHog()
335
+
336
+ // Use lazy initializer to read from localStorage only once on mount
337
+ const [user, setUser] = useState<User | null>(() => {
338
+ if (typeof window === 'undefined') return null
339
+
340
+ const storedUsername = localStorage.getItem('currentUser')
341
+ if (storedUsername) {
342
+ const existingUser = users.get(storedUsername)
343
+ if (existingUser) {
344
+ return existingUser
345
+ }
346
+ }
347
+ return null
348
+ })
349
+
350
+ const login = async (
351
+ username: string,
352
+ password: string,
353
+ ): Promise<boolean> => {
354
+ try {
355
+ const response = await fetch('/api/auth/login', {
356
+ method: 'POST',
357
+ headers: {
358
+ 'Content-Type': 'application/json',
359
+ 'X-PostHog-Session-Id': posthog.get_session_id() ?? '',
360
+ },
361
+ body: JSON.stringify({ username, password }),
362
+ })
363
+
364
+ if (response.ok) {
365
+ const { user: userData } = await response.json()
366
+
367
+ // Get or create user in local map
368
+ let localUser = users.get(username)
369
+ if (!localUser) {
370
+ localUser = userData as User
371
+ users.set(username, localUser)
372
+ }
373
+
374
+ setUser(localUser)
375
+ if (typeof window !== 'undefined') {
376
+ localStorage.setItem('currentUser', username)
377
+ }
378
+
379
+ // Identify user in PostHog using username as distinct ID
380
+ posthog.identify(username, {
381
+ username: username,
382
+ })
383
+
384
+ // Capture login event
385
+ posthog.capture('user_logged_in', {
386
+ username: username,
387
+ })
388
+
389
+ return true
390
+ }
391
+ return false
392
+ } catch (error) {
393
+ console.error('Login error:', error)
394
+ return false
395
+ }
396
+ }
397
+
398
+ const logout = () => {
399
+ // Capture logout event before resetting
400
+ posthog.capture('user_logged_out')
401
+ posthog.reset()
402
+
403
+ setUser(null)
404
+ if (typeof window !== 'undefined') {
405
+ localStorage.removeItem('currentUser')
406
+ }
407
+ }
408
+
409
+ const incrementBurritoConsiderations = () => {
410
+ if (user) {
411
+ user.burritoConsiderations++
412
+ users.set(user.username, user)
413
+ setUser({ ...user })
414
+ }
415
+ }
416
+
417
+ return (
418
+ <AuthContext.Provider
419
+ value={{ user, login, logout, incrementBurritoConsiderations }}
420
+ >
421
+ {children}
422
+ </AuthContext.Provider>
423
+ )
424
+ }
425
+
426
+ export function useAuth() {
427
+ const context = useContext(AuthContext)
428
+ if (context === undefined) {
429
+ throw new Error('useAuth must be used within an AuthProvider')
430
+ }
431
+ return context
432
+ }
433
+
434
+ ```
435
+
436
+ ---
437
+
438
+ ## src/router.tsx
439
+
440
+ ```tsx
441
+ import { createRouter } from '@tanstack/react-router'
442
+
443
+ // Import the generated route tree
444
+ import { routeTree } from './routeTree.gen'
445
+
446
+ // Create a new router instance
447
+ export const getRouter = () => {
448
+ return createRouter({
449
+ routeTree,
450
+ scrollRestoration: true,
451
+ defaultPreloadStaleTime: 0,
452
+ })
453
+ }
454
+
455
+ ```
456
+
457
+ ---
458
+
459
+ ## src/routes/__root.tsx
460
+
461
+ ```tsx
462
+ import { HeadContent, Scripts, createRootRoute } from '@tanstack/react-router'
463
+ import { TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools'
464
+ import { TanStackDevtools } from '@tanstack/react-devtools'
465
+ import { PostHogProvider } from '@posthog/react'
466
+
467
+ import Header from '../components/Header'
468
+ import { AuthProvider } from '../contexts/AuthContext'
469
+
470
+ import appCss from '../styles.css?url'
471
+
472
+ export const Route = createRootRoute({
473
+ head: () => ({
474
+ meta: [
475
+ {
476
+ charSet: 'utf-8',
477
+ },
478
+ {
479
+ name: 'viewport',
480
+ content: 'width=device-width, initial-scale=1',
481
+ },
482
+ {
483
+ title: 'TanStack Start Starter',
484
+ },
485
+ ],
486
+ links: [
487
+ {
488
+ rel: 'stylesheet',
489
+ href: appCss,
490
+ },
491
+ ],
492
+ }),
493
+
494
+ shellComponent: RootDocument,
495
+ })
496
+
497
+ function RootDocument({ children }: { children: React.ReactNode }) {
498
+ return (
499
+ <html lang="en">
500
+ <head>
501
+ <HeadContent />
502
+ </head>
503
+ <body>
504
+ <PostHogProvider
505
+ apiKey={import.meta.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN!}
506
+ options={{
507
+ api_host: '/ingest',
508
+ ui_host: import.meta.env.VITE_PUBLIC_POSTHOG_HOST || 'https://us.posthog.com',
509
+ defaults: '2025-05-24',
510
+ capture_exceptions: true,
511
+ debug: import.meta.env.DEV,
512
+ }}
513
+ >
514
+ <AuthProvider>
515
+ <Header />
516
+ {children}
517
+ <TanStackDevtools
518
+ config={{
519
+ position: 'bottom-right',
520
+ }}
521
+ plugins={[
522
+ {
523
+ name: 'Tanstack Router',
524
+ render: <TanStackRouterDevtoolsPanel />,
525
+ },
526
+ ]}
527
+ />
528
+ </AuthProvider>
529
+ </PostHogProvider>
530
+ <Scripts />
531
+ </body>
532
+ </html>
533
+ )
534
+ }
535
+
536
+ ```
537
+
538
+ ---
539
+
540
+ ## src/routes/api/auth/login.ts
541
+
542
+ ```ts
543
+ import { createFileRoute } from '@tanstack/react-router'
544
+ import { json } from '@tanstack/react-start'
545
+ import { getPostHogClient } from '../../../utils/posthog-server'
546
+
547
+ export const Route = createFileRoute('/api/auth/login')({
548
+ server: {
549
+ handlers: {
550
+ POST: async ({ request }) => {
551
+ const body = await request.json()
552
+ const { username, password } = body
553
+
554
+ // Simple validation (in production, you'd verify against a real database)
555
+ if (!username || !password) {
556
+ return json(
557
+ { error: 'Username and password required' },
558
+ { status: 400 },
559
+ )
560
+ }
561
+
562
+ // Check if this is a new user (simplified - in production use a database)
563
+ const isNewUser = !username
564
+
565
+ // Create or get user
566
+ const user = {
567
+ username,
568
+ burritoConsiderations: 0,
569
+ }
570
+
571
+ const sessionId = request.headers.get('X-PostHog-Session-Id')
572
+
573
+ // Capture server-side login event
574
+ const posthog = getPostHogClient()
575
+ posthog.capture({
576
+ distinctId: username,
577
+ event: 'server_login',
578
+ properties: {
579
+ $session_id: sessionId || undefined,
580
+ username: username,
581
+ isNewUser: isNewUser,
582
+ source: 'api',
583
+ },
584
+ })
585
+
586
+ // Identify user on server side
587
+ posthog.identify({
588
+ distinctId: username,
589
+ properties: {
590
+ username: username,
591
+ createdAt: isNewUser ? new Date().toISOString() : undefined,
592
+ },
593
+ })
594
+
595
+ // This handler is short-lived; flush so the enqueued events send before it returns
596
+ await posthog.flush()
597
+
598
+ return json({ success: true, user })
599
+ },
600
+ },
601
+ },
602
+ })
603
+
604
+ ```
605
+
606
+ ---
607
+
608
+ ## src/routes/api/burrito/consider.ts
609
+
610
+ ```ts
611
+ import { createFileRoute } from '@tanstack/react-router'
612
+ import { json } from '@tanstack/react-start'
613
+ import { getPostHogClient } from '../../../utils/posthog-server'
614
+
615
+ export const Route = createFileRoute('/api/burrito/consider')({
616
+ server: {
617
+ handlers: {
618
+ POST: async ({ request }) => {
619
+ const body = await request.json()
620
+ const { username, totalConsiderations } = body
621
+
622
+ if (!username) {
623
+ return json(
624
+ { error: 'Username is required' },
625
+ { status: 400 },
626
+ )
627
+ }
628
+
629
+ const sessionId = request.headers.get('X-PostHog-Session-Id')
630
+
631
+ const posthog = getPostHogClient()
632
+ posthog.capture({
633
+ distinctId: username,
634
+ event: 'burrito_considered',
635
+ properties: {
636
+ $session_id: sessionId || undefined,
637
+ total_considerations: totalConsiderations,
638
+ username: username,
639
+ source: 'api',
640
+ },
641
+ })
642
+
643
+ // This handler is short-lived; flush so the enqueued event sends before it returns
644
+ await posthog.flush()
645
+
646
+ return json({ success: true })
647
+ },
648
+ },
649
+ },
650
+ })
651
+
652
+ ```
653
+
654
+ ---
655
+
656
+ ## src/routes/burrito.tsx
657
+
658
+ ```tsx
659
+ import { createFileRoute, useNavigate } from '@tanstack/react-router'
660
+ import { useState } from 'react'
661
+ import { usePostHog } from '@posthog/react'
662
+ import { useAuth } from '../contexts/AuthContext'
663
+
664
+ export const Route = createFileRoute('/burrito')({
665
+ component: BurritoPage,
666
+ head: () => ({
667
+ meta: [
668
+ {
669
+ title: 'Burrito Consideration - Burrito Consideration App',
670
+ },
671
+ {
672
+ name: 'description',
673
+ content: 'Consider the potential of burritos',
674
+ },
675
+ ],
676
+ }),
677
+ })
678
+
679
+ function BurritoPage() {
680
+ const { user, incrementBurritoConsiderations } = useAuth()
681
+ const navigate = useNavigate()
682
+ const posthog = usePostHog()
683
+ const [hasConsidered, setHasConsidered] = useState(false)
684
+
685
+ // Redirect to home if not logged in
686
+ if (!user) {
687
+ navigate({ to: '/' })
688
+ return null
689
+ }
690
+
691
+ const handleClientConsideration = () => {
692
+ incrementBurritoConsiderations()
693
+ setHasConsidered(true)
694
+ setTimeout(() => setHasConsidered(false), 2000)
695
+
696
+ posthog.capture('burrito_considered', {
697
+ total_considerations: user.burritoConsiderations + 1,
698
+ username: user.username,
699
+ })
700
+ }
701
+
702
+ const handleServerConsideration = async () => {
703
+ incrementBurritoConsiderations()
704
+ setHasConsidered(true)
705
+ setTimeout(() => setHasConsidered(false), 2000)
706
+
707
+ await fetch('/api/burrito/consider', {
708
+ method: 'POST',
709
+ headers: {
710
+ 'Content-Type': 'application/json',
711
+ 'X-PostHog-Session-Id': posthog.get_session_id() ?? '',
712
+ },
713
+ body: JSON.stringify({
714
+ username: user.username,
715
+ totalConsiderations: user.burritoConsiderations + 1,
716
+ }),
717
+ })
718
+ }
719
+
720
+ return (
721
+ <main>
722
+ <div className="container">
723
+ <h1>Burrito consideration zone</h1>
724
+ <p>Take a moment to truly consider the potential of burritos.</p>
725
+
726
+ <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: '0.125rem' }}>
727
+ <button
728
+ onClick={handleClientConsideration}
729
+ className="btn-burrito"
730
+ style={{ backgroundColor: '#e07c24', color: '#fff' }}
731
+ >
732
+ Consider burrito (client)
733
+ </button>
734
+ <button
735
+ onClick={handleServerConsideration}
736
+ className="btn-burrito"
737
+ style={{ backgroundColor: '#4a90d9', color: '#fff' }}
738
+ >
739
+ Consider burrito (server)
740
+ </button>
741
+
742
+ {hasConsidered && (
743
+ <p className="success">
744
+ Thank you for your consideration! Count:{' '}
745
+ {user.burritoConsiderations}
746
+ </p>
747
+ )}
748
+ </div>
749
+
750
+ <div className="stats">
751
+ <h3>Consideration stats</h3>
752
+ <p>Total considerations: {user.burritoConsiderations}</p>
753
+ </div>
754
+ </div>
755
+ </main>
756
+ )
757
+ }
758
+
759
+ ```
760
+
761
+ ---
762
+
763
+ ## src/routes/index.tsx
764
+
765
+ ```tsx
766
+ import { createFileRoute } from '@tanstack/react-router'
767
+ import { useState } from 'react'
768
+ import { useAuth } from '../contexts/AuthContext'
769
+
770
+ export const Route = createFileRoute('/')({
771
+ component: Home,
772
+ head: () => ({
773
+ meta: [
774
+ {
775
+ title: 'Burrito Consideration App',
776
+ },
777
+ {
778
+ name: 'description',
779
+ content: 'Consider the potential of burritos',
780
+ },
781
+ ],
782
+ }),
783
+ })
784
+
785
+ function Home() {
786
+ const { user, login } = useAuth()
787
+ const [username, setUsername] = useState('')
788
+ const [password, setPassword] = useState('')
789
+ const [error, setError] = useState('')
790
+
791
+ const handleSubmit = async (e: React.FormEvent) => {
792
+ e.preventDefault()
793
+ setError('')
794
+
795
+ try {
796
+ const success = await login(username, password)
797
+ if (success) {
798
+ setUsername('')
799
+ setPassword('')
800
+ } else {
801
+ setError('Please provide both username and password')
802
+ }
803
+ } catch (err) {
804
+ console.error('Login failed:', err)
805
+ setError('An error occurred during login')
806
+ }
807
+ }
808
+
809
+ return (
810
+ <main>
811
+ {user ? (
812
+ <div className="container">
813
+ <h1>Welcome back, {user.username}!</h1>
814
+ <p>You are logged in. Feel free to explore:</p>
815
+ <ul>
816
+ <li>Consider the potential of burritos</li>
817
+ <li>View your profile and statistics</li>
818
+ </ul>
819
+ </div>
820
+ ) : (
821
+ <div className="container">
822
+ <h1>Welcome to Burrito Consideration App</h1>
823
+ <p>Please sign in to begin your burrito journey</p>
824
+
825
+ <form onSubmit={handleSubmit} className="form">
826
+ <div className="form-group">
827
+ <label htmlFor="username">Username:</label>
828
+ <input
829
+ type="text"
830
+ id="username"
831
+ value={username}
832
+ onChange={(e) => setUsername(e.target.value)}
833
+ placeholder="Enter any username"
834
+ />
835
+ </div>
836
+
837
+ <div className="form-group">
838
+ <label htmlFor="password">Password:</label>
839
+ <input
840
+ type="password"
841
+ id="password"
842
+ value={password}
843
+ onChange={(e) => setPassword(e.target.value)}
844
+ placeholder="Enter any password"
845
+ />
846
+ </div>
847
+
848
+ {error && <p className="error">{error}</p>}
849
+
850
+ <button type="submit" className="btn-primary">
851
+ Sign In
852
+ </button>
853
+ </form>
854
+
855
+ <p className="note">
856
+ Note: This is a demo app. Use any username and password to sign in.
857
+ </p>
858
+ </div>
859
+ )}
860
+ </main>
861
+ )
862
+ }
863
+
864
+ ```
865
+
866
+ ---
867
+
868
+ ## src/routes/profile.tsx
869
+
870
+ ```tsx
871
+ import { createFileRoute, useNavigate } from '@tanstack/react-router'
872
+ import { usePostHog } from '@posthog/react'
873
+ import { useAuth } from '../contexts/AuthContext'
874
+
875
+ export const Route = createFileRoute('/profile')({
876
+ component: ProfilePage,
877
+ head: () => ({
878
+ meta: [
879
+ {
880
+ title: 'Profile - Burrito Consideration App',
881
+ },
882
+ {
883
+ name: 'description',
884
+ content: 'Your burrito consideration profile',
885
+ },
886
+ ],
887
+ }),
888
+ })
889
+
890
+ function ProfilePage() {
891
+ const { user } = useAuth()
892
+ const navigate = useNavigate()
893
+ const posthog = usePostHog()
894
+
895
+ // Redirect to home if not logged in
896
+ if (!user) {
897
+ navigate({ to: '/' })
898
+ return null
899
+ }
900
+
901
+ const triggerTestError = () => {
902
+ try {
903
+ throw new Error('Test error for PostHog error tracking')
904
+ } catch (err) {
905
+ posthog.captureException(err)
906
+ console.error('Captured error:', err)
907
+ alert('Error captured and sent to PostHog!')
908
+ }
909
+ }
910
+
911
+ return (
912
+ <main>
913
+ <div className="container">
914
+ <h1>User Profile</h1>
915
+
916
+ <div className="stats">
917
+ <h2>Your Information</h2>
918
+ <p>
919
+ <strong>Username:</strong> {user.username}
920
+ </p>
921
+ <p>
922
+ <strong>Burrito Considerations:</strong>{' '}
923
+ {user.burritoConsiderations}
924
+ </p>
925
+ </div>
926
+
927
+ <div style={{ marginTop: '2rem' }}>
928
+ <button
929
+ onClick={triggerTestError}
930
+ className="btn-primary"
931
+ style={{ backgroundColor: '#dc3545' }}
932
+ >
933
+ Trigger Test Error (for PostHog)
934
+ </button>
935
+ </div>
936
+
937
+ <div style={{ marginTop: '2rem' }}>
938
+ <h3>Your Burrito Journey</h3>
939
+ {user.burritoConsiderations === 0 ? (
940
+ <p>
941
+ You haven't considered any burritos yet. Visit the Burrito
942
+ Consideration page to start!
943
+ </p>
944
+ ) : user.burritoConsiderations === 1 ? (
945
+ <p>You've considered the burrito potential once. Keep going!</p>
946
+ ) : user.burritoConsiderations < 5 ? (
947
+ <p>You're getting the hang of burrito consideration!</p>
948
+ ) : user.burritoConsiderations < 10 ? (
949
+ <p>You're becoming a burrito consideration expert!</p>
950
+ ) : (
951
+ <p>You are a true burrito consideration master! 🌯</p>
952
+ )}
953
+ </div>
954
+ </div>
955
+ </main>
956
+ )
957
+ }
958
+
959
+ ```
960
+
961
+ ---
962
+
963
+ ## src/routeTree.gen.ts
964
+
965
+ ```ts
966
+ /* eslint-disable */
967
+
968
+ // @ts-nocheck
969
+
970
+ // noinspection JSUnusedGlobalSymbols
971
+
972
+ // This file was automatically generated by TanStack Router.
973
+ // You should NOT make any changes in this file as it will be overwritten.
974
+ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
975
+
976
+ import { Route as rootRouteImport } from './routes/__root'
977
+ import { Route as ProfileRouteImport } from './routes/profile'
978
+ import { Route as BurritoRouteImport } from './routes/burrito'
979
+ import { Route as IndexRouteImport } from './routes/index'
980
+ import { Route as ApiBurritoConsiderRouteImport } from './routes/api/burrito/consider'
981
+ import { Route as ApiAuthLoginRouteImport } from './routes/api/auth/login'
982
+
983
+ const ProfileRoute = ProfileRouteImport.update({
984
+ id: '/profile',
985
+ path: '/profile',
986
+ getParentRoute: () => rootRouteImport,
987
+ } as any)
988
+ const BurritoRoute = BurritoRouteImport.update({
989
+ id: '/burrito',
990
+ path: '/burrito',
991
+ getParentRoute: () => rootRouteImport,
992
+ } as any)
993
+ const IndexRoute = IndexRouteImport.update({
994
+ id: '/',
995
+ path: '/',
996
+ getParentRoute: () => rootRouteImport,
997
+ } as any)
998
+ const ApiBurritoConsiderRoute = ApiBurritoConsiderRouteImport.update({
999
+ id: '/api/burrito/consider',
1000
+ path: '/api/burrito/consider',
1001
+ getParentRoute: () => rootRouteImport,
1002
+ } as any)
1003
+ const ApiAuthLoginRoute = ApiAuthLoginRouteImport.update({
1004
+ id: '/api/auth/login',
1005
+ path: '/api/auth/login',
1006
+ getParentRoute: () => rootRouteImport,
1007
+ } as any)
1008
+
1009
+ export interface FileRoutesByFullPath {
1010
+ '/': typeof IndexRoute
1011
+ '/burrito': typeof BurritoRoute
1012
+ '/profile': typeof ProfileRoute
1013
+ '/api/auth/login': typeof ApiAuthLoginRoute
1014
+ '/api/burrito/consider': typeof ApiBurritoConsiderRoute
1015
+ }
1016
+ export interface FileRoutesByTo {
1017
+ '/': typeof IndexRoute
1018
+ '/burrito': typeof BurritoRoute
1019
+ '/profile': typeof ProfileRoute
1020
+ '/api/auth/login': typeof ApiAuthLoginRoute
1021
+ '/api/burrito/consider': typeof ApiBurritoConsiderRoute
1022
+ }
1023
+ export interface FileRoutesById {
1024
+ __root__: typeof rootRouteImport
1025
+ '/': typeof IndexRoute
1026
+ '/burrito': typeof BurritoRoute
1027
+ '/profile': typeof ProfileRoute
1028
+ '/api/auth/login': typeof ApiAuthLoginRoute
1029
+ '/api/burrito/consider': typeof ApiBurritoConsiderRoute
1030
+ }
1031
+ export interface FileRouteTypes {
1032
+ fileRoutesByFullPath: FileRoutesByFullPath
1033
+ fullPaths:
1034
+ | '/'
1035
+ | '/burrito'
1036
+ | '/profile'
1037
+ | '/api/auth/login'
1038
+ | '/api/burrito/consider'
1039
+ fileRoutesByTo: FileRoutesByTo
1040
+ to:
1041
+ | '/'
1042
+ | '/burrito'
1043
+ | '/profile'
1044
+ | '/api/auth/login'
1045
+ | '/api/burrito/consider'
1046
+ id:
1047
+ | '__root__'
1048
+ | '/'
1049
+ | '/burrito'
1050
+ | '/profile'
1051
+ | '/api/auth/login'
1052
+ | '/api/burrito/consider'
1053
+ fileRoutesById: FileRoutesById
1054
+ }
1055
+ export interface RootRouteChildren {
1056
+ IndexRoute: typeof IndexRoute
1057
+ BurritoRoute: typeof BurritoRoute
1058
+ ProfileRoute: typeof ProfileRoute
1059
+ ApiAuthLoginRoute: typeof ApiAuthLoginRoute
1060
+ ApiBurritoConsiderRoute: typeof ApiBurritoConsiderRoute
1061
+ }
1062
+
1063
+ declare module '@tanstack/react-router' {
1064
+ interface FileRoutesByPath {
1065
+ '/profile': {
1066
+ id: '/profile'
1067
+ path: '/profile'
1068
+ fullPath: '/profile'
1069
+ preLoaderRoute: typeof ProfileRouteImport
1070
+ parentRoute: typeof rootRouteImport
1071
+ }
1072
+ '/burrito': {
1073
+ id: '/burrito'
1074
+ path: '/burrito'
1075
+ fullPath: '/burrito'
1076
+ preLoaderRoute: typeof BurritoRouteImport
1077
+ parentRoute: typeof rootRouteImport
1078
+ }
1079
+ '/': {
1080
+ id: '/'
1081
+ path: '/'
1082
+ fullPath: '/'
1083
+ preLoaderRoute: typeof IndexRouteImport
1084
+ parentRoute: typeof rootRouteImport
1085
+ }
1086
+ '/api/burrito/consider': {
1087
+ id: '/api/burrito/consider'
1088
+ path: '/api/burrito/consider'
1089
+ fullPath: '/api/burrito/consider'
1090
+ preLoaderRoute: typeof ApiBurritoConsiderRouteImport
1091
+ parentRoute: typeof rootRouteImport
1092
+ }
1093
+ '/api/auth/login': {
1094
+ id: '/api/auth/login'
1095
+ path: '/api/auth/login'
1096
+ fullPath: '/api/auth/login'
1097
+ preLoaderRoute: typeof ApiAuthLoginRouteImport
1098
+ parentRoute: typeof rootRouteImport
1099
+ }
1100
+ }
1101
+ }
1102
+
1103
+ const rootRouteChildren: RootRouteChildren = {
1104
+ IndexRoute: IndexRoute,
1105
+ BurritoRoute: BurritoRoute,
1106
+ ProfileRoute: ProfileRoute,
1107
+ ApiAuthLoginRoute: ApiAuthLoginRoute,
1108
+ ApiBurritoConsiderRoute: ApiBurritoConsiderRoute,
1109
+ }
1110
+ export const routeTree = rootRouteImport
1111
+ ._addFileChildren(rootRouteChildren)
1112
+ ._addFileTypes<FileRouteTypes>()
1113
+
1114
+ import type { getRouter } from './router.tsx'
1115
+ import type { createStart } from '@tanstack/react-start'
1116
+ declare module '@tanstack/react-start' {
1117
+ interface Register {
1118
+ ssr: true
1119
+ router: Awaited<ReturnType<typeof getRouter>>
1120
+ }
1121
+ }
1122
+
1123
+ ```
1124
+
1125
+ ---
1126
+
1127
+ ## src/utils/posthog-server.ts
1128
+
1129
+ ```ts
1130
+ import { PostHog } from 'posthog-node'
1131
+
1132
+ let posthogClient: PostHog | null = null
1133
+
1134
+ export function getPostHogClient() {
1135
+ if (!posthogClient) {
1136
+ posthogClient = new PostHog(
1137
+ process.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN || import.meta.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN!,
1138
+ {
1139
+ host: process.env.VITE_PUBLIC_POSTHOG_HOST || import.meta.env.VITE_PUBLIC_POSTHOG_HOST,
1140
+ flushAt: 1,
1141
+ flushInterval: 0,
1142
+ },
1143
+ )
1144
+ }
1145
+ return posthogClient
1146
+ }
1147
+
1148
+
1149
+ ```
1150
+
1151
+ ---
1152
+
1153
+ ## vite.config.ts
1154
+
1155
+ ```ts
1156
+ import { defineConfig } from 'vite'
1157
+ import { tanstackStart } from '@tanstack/react-start/plugin/vite'
1158
+ import viteReact from '@vitejs/plugin-react'
1159
+ import viteTsConfigPaths from 'vite-tsconfig-paths'
1160
+
1161
+ const config = defineConfig({
1162
+ plugins: [
1163
+ // this is the plugin that enables path aliases
1164
+ viteTsConfigPaths({
1165
+ projects: ['./tsconfig.json'],
1166
+ }),
1167
+ tanstackStart(),
1168
+ viteReact(),
1169
+ ],
1170
+ server: {
1171
+ proxy: {
1172
+ '/ingest/static': {
1173
+ target: 'https://us-assets.i.posthog.com',
1174
+ changeOrigin: true,
1175
+ rewrite: (path) => path.replace(/^\/ingest/, ''),
1176
+ secure: false,
1177
+ },
1178
+ '/ingest/array': {
1179
+ target: 'https://us-assets.i.posthog.com',
1180
+ changeOrigin: true,
1181
+ rewrite: (path) => path.replace(/^\/ingest/, ''),
1182
+ secure: false,
1183
+ },
1184
+ '/ingest': {
1185
+ target: 'https://us.i.posthog.com',
1186
+ changeOrigin: true,
1187
+ rewrite: (path) => path.replace(/^\/ingest/, ''),
1188
+ secure: false,
1189
+ },
1190
+ },
1191
+ },
1192
+ })
1193
+
1194
+ export default config
1195
+
1196
+ ```
1197
+
1198
+ ---
1199
+