@amplitude/wizard 1.0.0-beta.2 → 1.0.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 (391) hide show
  1. package/README.md +171 -74
  2. package/dist/bin.js +338 -222
  3. package/dist/src/lib/agent-interface.js +64 -9
  4. package/dist/src/lib/agent-runner.js +1 -10
  5. package/dist/src/lib/api.d.ts +22 -4
  6. package/dist/src/lib/api.js +114 -12
  7. package/dist/src/lib/commandments.js +14 -1
  8. package/dist/src/lib/constants.d.ts +6 -5
  9. package/dist/src/lib/constants.js +13 -13
  10. package/dist/src/lib/credential-resolution.d.ts +45 -0
  11. package/dist/src/lib/credential-resolution.js +311 -0
  12. package/dist/src/lib/exit-codes.d.ts +10 -0
  13. package/dist/src/lib/exit-codes.js +12 -0
  14. package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
  15. package/dist/src/lib/health-checks/statuspage.js +5 -1
  16. package/dist/src/lib/mode-config.d.ts +14 -0
  17. package/dist/src/lib/mode-config.js +14 -0
  18. package/dist/src/lib/session-checkpoint.d.ts +27 -0
  19. package/dist/src/lib/session-checkpoint.js +134 -0
  20. package/dist/src/lib/wizard-session.d.ts +44 -1
  21. package/dist/src/lib/wizard-session.js +70 -14
  22. package/dist/src/lib/wizard-tools.js +19 -4
  23. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
  24. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
  25. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
  26. package/dist/src/ui/agent-ui.d.ts +91 -0
  27. package/dist/src/ui/agent-ui.js +277 -0
  28. package/dist/src/ui/logging-ui.js +1 -1
  29. package/dist/src/ui/tui/App.d.ts +12 -0
  30. package/dist/src/ui/tui/App.js +29 -18
  31. package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
  32. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
  33. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
  34. package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
  35. package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
  36. package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
  37. package/dist/src/ui/tui/components/ConsoleView.js +51 -34
  38. package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
  39. package/dist/src/ui/tui/components/HeaderBar.js +17 -0
  40. package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
  41. package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
  42. package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
  43. package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
  44. package/dist/src/ui/tui/console-commands.d.ts +1 -2
  45. package/dist/src/ui/tui/console-commands.js +48 -7
  46. package/dist/src/ui/tui/flows.d.ts +1 -1
  47. package/dist/src/ui/tui/flows.js +1 -1
  48. package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
  49. package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
  50. package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
  51. package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
  52. package/dist/src/ui/tui/ink-ui.js +1 -1
  53. package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
  54. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
  55. package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
  56. package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
  57. package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
  58. package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
  59. package/dist/src/ui/tui/primitives/SplitView.js +10 -2
  60. package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
  61. package/dist/src/ui/tui/primitives/index.d.ts +0 -1
  62. package/dist/src/ui/tui/primitives/index.js +0 -1
  63. package/dist/src/ui/tui/router.js +1 -1
  64. package/dist/src/ui/tui/screen-registry.d.ts +0 -7
  65. package/dist/src/ui/tui/screen-registry.js +13 -4
  66. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
  67. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
  68. package/dist/src/ui/tui/screens/AuthScreen.js +57 -27
  69. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
  70. package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
  71. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
  72. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +109 -39
  73. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
  74. package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
  75. package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
  76. package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
  77. package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
  78. package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
  79. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
  80. package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
  81. package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
  82. package/dist/src/ui/tui/screens/McpScreen.js +25 -17
  83. package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
  84. package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
  85. package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
  86. package/dist/src/ui/tui/screens/OutroScreen.js +21 -14
  87. package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
  88. package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
  89. package/dist/src/ui/tui/screens/RunScreen.js +102 -157
  90. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
  91. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
  92. package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
  93. package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
  94. package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -2
  95. package/dist/src/ui/tui/screens/SlackScreen.js +60 -35
  96. package/dist/src/ui/tui/session-constants.d.ts +41 -0
  97. package/dist/src/ui/tui/session-constants.js +38 -0
  98. package/dist/src/ui/tui/start-tui.d.ts +3 -1
  99. package/dist/src/ui/tui/start-tui.js +14 -10
  100. package/dist/src/ui/tui/store.d.ts +2 -1
  101. package/dist/src/ui/tui/store.js +33 -7
  102. package/dist/src/ui/tui/styles.d.ts +75 -19
  103. package/dist/src/ui/tui/styles.js +101 -19
  104. package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
  105. package/dist/src/ui/tui/utils/classify-error.js +90 -0
  106. package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
  107. package/dist/src/ui/tui/utils/diagnostics.js +72 -0
  108. package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
  109. package/dist/src/ui/tui/utils/with-retry.js +32 -0
  110. package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
  111. package/dist/src/ui/tui/utils/with-timeout.js +24 -0
  112. package/dist/src/utils/ampli-settings.d.ts +1 -1
  113. package/dist/src/utils/ampli-settings.js +15 -5
  114. package/dist/src/utils/api-key-store.js +5 -5
  115. package/dist/src/utils/atomic-write.d.ts +15 -0
  116. package/dist/src/utils/atomic-write.js +34 -0
  117. package/dist/src/utils/setup-utils.js +2 -2
  118. package/dist/src/utils/token-refresh.d.ts +22 -0
  119. package/dist/src/utils/token-refresh.js +79 -0
  120. package/dist/src/utils/wizard-abort.js +6 -1
  121. package/package.json +6 -6
  122. package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
  123. package/skills/instrumentation/diff-intake/SKILL.md +128 -0
  124. package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
  125. package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
  126. package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
  127. package/skills/instrumentation/instrument-events/SKILL.md +169 -0
  128. package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
  129. package/skills/integration/integration-android/SKILL.md +49 -0
  130. package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
  131. package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
  132. package/skills/integration/integration-android/references/analytics.md +1778 -0
  133. package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
  134. package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
  135. package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
  136. package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
  137. package/skills/integration/integration-angular/SKILL.md +49 -0
  138. package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
  139. package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
  140. package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
  141. package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
  142. package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
  143. package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
  144. package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
  145. package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
  146. package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
  147. package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
  148. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
  149. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
  150. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
  151. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
  152. package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
  153. package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
  154. package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
  155. package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
  156. package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
  157. package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
  158. package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
  159. package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
  160. package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
  161. package/skills/integration/integration-astro-static/SKILL.md +49 -0
  162. package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
  163. package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
  164. package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
  165. package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
  166. package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
  167. package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
  168. package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
  169. package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
  170. package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
  171. package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
  172. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
  173. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
  174. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
  175. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
  176. package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
  177. package/skills/integration/integration-django/SKILL.md +57 -0
  178. package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
  179. package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
  180. package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
  181. package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
  182. package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
  183. package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
  184. package/skills/integration/integration-django/references/python.md +1424 -0
  185. package/skills/integration/integration-expo/SKILL.md +53 -0
  186. package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
  187. package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
  188. package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
  189. package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
  190. package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
  191. package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
  192. package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
  193. package/skills/integration/integration-fastapi/SKILL.md +57 -0
  194. package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
  195. package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
  196. package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
  197. package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
  198. package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
  199. package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
  200. package/skills/integration/integration-fastapi/references/python.md +1424 -0
  201. package/skills/integration/integration-flask/SKILL.md +56 -0
  202. package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
  203. package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
  204. package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
  205. package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
  206. package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
  207. package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
  208. package/skills/integration/integration-flask/references/python.md +1424 -0
  209. package/skills/integration/integration-javascript_node/SKILL.md +54 -0
  210. package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
  211. package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
  212. package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
  213. package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
  214. package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
  215. package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
  216. package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
  217. package/skills/integration/integration-javascript_web/SKILL.md +58 -0
  218. package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
  219. package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
  220. package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
  221. package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
  222. package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
  223. package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
  224. package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
  225. package/skills/integration/integration-laravel/SKILL.md +52 -0
  226. package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
  227. package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
  228. package/skills/integration/integration-laravel/references/analytics.md +1778 -0
  229. package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
  230. package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
  231. package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
  232. package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
  233. package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
  234. package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
  235. package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
  236. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
  237. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
  238. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
  239. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
  240. package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
  241. package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
  242. package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
  243. package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
  244. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
  245. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
  246. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
  247. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
  248. package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
  249. package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
  250. package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
  251. package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
  252. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
  253. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
  254. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
  255. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
  256. package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
  257. package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
  258. package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
  259. package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
  260. package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
  261. package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
  262. package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
  263. package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
  264. package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
  265. package/skills/integration/integration-python/SKILL.md +53 -0
  266. package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
  267. package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
  268. package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
  269. package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
  270. package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
  271. package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
  272. package/skills/integration/integration-python/references/python.md +1424 -0
  273. package/skills/integration/integration-react-native/SKILL.md +49 -0
  274. package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
  275. package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
  276. package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
  277. package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
  278. package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
  279. package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
  280. package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
  281. package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
  282. package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
  283. package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
  284. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
  285. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
  286. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
  287. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
  288. package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
  289. package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
  290. package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
  291. package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
  292. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
  293. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
  294. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
  295. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
  296. package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
  297. package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
  298. package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
  299. package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
  300. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
  301. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
  302. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
  303. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
  304. package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
  305. package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
  306. package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
  307. package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
  308. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
  309. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
  310. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
  311. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
  312. package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
  313. package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
  314. package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
  315. package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
  316. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
  317. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
  318. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
  319. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
  320. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
  321. package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
  322. package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
  323. package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
  324. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
  325. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
  326. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
  327. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
  328. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
  329. package/skills/integration/integration-react-vite/SKILL.md +53 -0
  330. package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
  331. package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
  332. package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
  333. package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
  334. package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
  335. package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
  336. package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
  337. package/skills/integration/integration-ruby/SKILL.md +50 -0
  338. package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
  339. package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
  340. package/skills/integration/integration-ruby/references/analytics.md +1778 -0
  341. package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
  342. package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
  343. package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
  344. package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
  345. package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
  346. package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
  347. package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
  348. package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
  349. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
  350. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
  351. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
  352. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
  353. package/skills/integration/integration-sveltekit/SKILL.md +47 -0
  354. package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
  355. package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
  356. package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
  357. package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
  358. package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
  359. package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
  360. package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
  361. package/skills/integration/integration-swift/SKILL.md +49 -0
  362. package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
  363. package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
  364. package/skills/integration/integration-swift/references/analytics.md +1778 -0
  365. package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
  366. package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
  367. package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
  368. package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
  369. package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
  370. package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
  371. package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
  372. package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
  373. package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
  374. package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
  375. package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
  376. package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
  377. package/skills/integration/integration-vue-3/SKILL.md +46 -0
  378. package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
  379. package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
  380. package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
  381. package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
  382. package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
  383. package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
  384. package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
  385. package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
  386. package/dist/src/ui/tui/components/TitleBar.d.ts +0 -8
  387. package/dist/src/ui/tui/components/TitleBar.js +0 -27
  388. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
  389. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
  390. package/dist/src/utils/anthropic-status.d.ts +0 -17
  391. package/dist/src/utils/anthropic-status.js +0 -51
@@ -0,0 +1,777 @@
1
+ # Amplitude React with TanStack Router (file-based) Example Project
2
+
3
+ Repository: https://github.com/amplitude/context-hub
4
+ Path: basics/react-tanstack-router-file-based
5
+
6
+ ---
7
+
8
+ ## README.md
9
+
10
+ # Amplitude TanStack Router Example (File-Based Routing)
11
+
12
+ This is a React and [TanStack Router](https://tanstack.com/router) example demonstrating Amplitude integration with product analytics and event tracking. This example uses **file-based routing** where routes are auto-generated from the file system.
13
+
14
+ ### Amplitude SDKs
15
+
16
+ The client uses the [Browser Unified SDK (npm)](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#unified-sdk-npm): [`@amplitude/unified`](https://www.npmjs.com/package/@amplitude/unified) with `initAll` once in `main.tsx`. [Initialize the Unified SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#initialize-the-unified-sdk) documents that call as initializing every product bundled with Unified npm; see [configuration](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#configuration). The `experiment` block is **Feature Experiment** (`@amplitude/experiment-js-client`). Amplitude’s [product support table](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#product-support-by-installation-method) lists **Web Experiment** (`@amplitude/experiment-tag`, including the visual editor) for the [CDN unified script](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#unified-script-cdn), not Unified **npm**.
17
+
18
+ When you add a backend or API, send events with [`@amplitude/analytics-node`](https://www.npmjs.com/package/@amplitude/analytics-node).
19
+
20
+ ## Features
21
+
22
+ - **Product Analytics**: Track user events and behaviors
23
+ - **User Authentication**: Demo login system with Amplitude user identification
24
+ - **Client-side Tracking**: Examples of client-side tracking methods
25
+
26
+ ## Getting Started
27
+
28
+ ### 1. Install Dependencies
29
+
30
+ ```bash
31
+ npm install
32
+ # or
33
+ pnpm install
34
+ ```
35
+
36
+ ### 2. Configure Environment Variables
37
+
38
+ Create a `.env` file in the root directory:
39
+
40
+ ```bash
41
+ VITE_PUBLIC_AMPLITUDE_API_KEY=your_amplitude_api_key
42
+ ```
43
+
44
+ Get your Amplitude API key from your [Amplitude project settings](https://app.amplitude.com).
45
+
46
+ ### 3. Run the Development Server
47
+
48
+ ```bash
49
+ npm run dev
50
+ ```
51
+
52
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the app.
53
+
54
+ ## Key Integration Points
55
+
56
+ ### Client-side initialization (main.tsx)
57
+
58
+ ```typescript
59
+ import * as amplitude from '@amplitude/unified';
60
+
61
+ void amplitude.initAll(import.meta.env.VITE_PUBLIC_AMPLITUDE_API_KEY);
62
+ ```
63
+
64
+ ### User identification (contexts/AuthContext.tsx)
65
+
66
+ ```typescript
67
+ import * as amplitude from '@amplitude/unified';
68
+ import { Identify } from '@amplitude/unified';
69
+
70
+ amplitude.setUserId(username);
71
+ const identifyObj = new Identify();
72
+ identifyObj.set('username', username);
73
+ amplitude.identify(identifyObj);
74
+ amplitude.track('User Logged In', { username });
75
+ ```
76
+
77
+ ### Event tracking (routes/burrito.tsx)
78
+
79
+ ```typescript
80
+ amplitude.track('Burrito Considered', {
81
+ total_considerations: user.burritoConsiderations + 1,
82
+ username: user.username,
83
+ });
84
+ ```
85
+
86
+ ## Learn More
87
+
88
+ - [Amplitude Documentation](https://amplitude.com/docs)
89
+ - [TanStack Router Documentation](https://tanstack.com/router/latest)
90
+ - [Amplitude Browser SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-sdk-2)
91
+
92
+ ---
93
+
94
+ ## .env.example
95
+
96
+ ```example
97
+ VITE_PUBLIC_AMPLITUDE_API_KEY=
98
+
99
+ ```
100
+
101
+ ---
102
+
103
+ ## .prettierignore
104
+
105
+ ```
106
+ package-lock.json
107
+ pnpm-lock.yaml
108
+ yarn.lock
109
+ ```
110
+
111
+ ---
112
+
113
+ ## index.html
114
+
115
+ ```html
116
+ <!DOCTYPE html>
117
+ <html lang="en">
118
+ <head>
119
+ <meta charset="UTF-8" />
120
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
121
+ <link rel="icon" href="/favicon.ico" />
122
+ <meta name="theme-color" content="#000000" />
123
+ <meta
124
+ name="description"
125
+ content="Web site created using create-tsrouter-app"
126
+ />
127
+ <link rel="apple-touch-icon" href="/logo192.png" />
128
+ <link rel="manifest" href="/manifest.json" />
129
+ <title>Create TanStack App - react-tanstack</title>
130
+ </head>
131
+ <body>
132
+ <div id="app"></div>
133
+ <script type="module" src="/src/main.tsx"></script>
134
+ </body>
135
+ </html>
136
+
137
+ ```
138
+
139
+ ---
140
+
141
+ ## prettier.config.js
142
+
143
+ ```js
144
+ // @ts-check
145
+
146
+ /** @type {import('prettier').Config} */
147
+ const config = {
148
+ semi: false,
149
+ singleQuote: true,
150
+ trailingComma: "all",
151
+ };
152
+
153
+ export default config;
154
+
155
+ ```
156
+
157
+ ---
158
+
159
+ ## public/robots.txt
160
+
161
+ ```txt
162
+ # https://www.robotstxt.org/robotstxt.html
163
+ User-agent: *
164
+ Disallow:
165
+
166
+ ```
167
+
168
+ ---
169
+
170
+ ## src/components/Header.tsx
171
+
172
+ ```tsx
173
+ import { Link } from '@tanstack/react-router'
174
+ import { useAuth } from '../contexts/AuthContext'
175
+
176
+ export default function Header() {
177
+ const { user, logout } = useAuth()
178
+
179
+ return (
180
+ <header className="header">
181
+ <div className="header-container">
182
+ <nav>
183
+ <Link to="/">Home</Link>
184
+ {user && (
185
+ <>
186
+ <Link to="/burrito">Burrito Consideration</Link>
187
+ <Link to="/profile">Profile</Link>
188
+ </>
189
+ )}
190
+ </nav>
191
+ <div className="user-section">
192
+ {user ? (
193
+ <>
194
+ <span>Welcome, {user.username}!</span>
195
+ <button onClick={logout} className="btn-logout">
196
+ Logout
197
+ </button>
198
+ </>
199
+ ) : (
200
+ <span>Not logged in</span>
201
+ )}
202
+ </div>
203
+ </div>
204
+ </header>
205
+ )
206
+ }
207
+
208
+ ```
209
+
210
+ ---
211
+
212
+ ## src/contexts/AuthContext.tsx
213
+
214
+ ```tsx
215
+ import * as amplitude from '@amplitude/unified';
216
+ import { Identify } from '@amplitude/unified';
217
+ import { createContext, useContext, useState } from 'react';
218
+ import type { ReactNode } from 'react';
219
+
220
+ interface User {
221
+ username: string;
222
+ burritoConsiderations: number;
223
+ }
224
+
225
+ interface AuthContextType {
226
+ user: User | null;
227
+ login: (username: string, password: string) => Promise<boolean>;
228
+ logout: () => void;
229
+ incrementBurritoConsiderations: () => void;
230
+ }
231
+
232
+ const AuthContext = createContext<AuthContextType | undefined>(undefined);
233
+
234
+ const users: Map<string, User> = new Map();
235
+
236
+ export function AuthProvider({ children }: { children: ReactNode }) {
237
+ // Use lazy initializer to read from localStorage only once on mount
238
+ const [user, setUser] = useState<User | null>(() => {
239
+ if (typeof window === 'undefined') return null;
240
+
241
+ const storedUsername = localStorage.getItem('currentUser');
242
+ if (storedUsername) {
243
+ const existingUser = users.get(storedUsername);
244
+ if (existingUser) {
245
+ return existingUser;
246
+ }
247
+ }
248
+ return null;
249
+ });
250
+
251
+ const login = (username: string, password: string): Promise<boolean> => {
252
+ if (!username || !password) {
253
+ return Promise.resolve(false);
254
+ }
255
+
256
+ // Get or create user in local map
257
+ let localUser = users.get(username);
258
+ const isNewUser = !localUser;
259
+
260
+ if (!localUser) {
261
+ localUser = { username, burritoConsiderations: 0 };
262
+ users.set(username, localUser);
263
+ }
264
+
265
+ setUser(localUser);
266
+ localStorage.setItem('currentUser', username);
267
+
268
+ // Identify user in Amplitude using username as user ID
269
+ amplitude.setUserId(username);
270
+ const identifyObj = new Identify();
271
+ identifyObj.set('username', username);
272
+ amplitude.identify(identifyObj);
273
+
274
+ // Capture login event
275
+ amplitude.track('User Logged In', {
276
+ username,
277
+ isNewUser,
278
+ });
279
+
280
+ return Promise.resolve(true);
281
+ };
282
+
283
+ const logout = () => {
284
+ // Capture logout event before resetting
285
+ amplitude.track('User Logged Out');
286
+ amplitude.reset();
287
+
288
+ setUser(null);
289
+ localStorage.removeItem('currentUser');
290
+ };
291
+
292
+ const incrementBurritoConsiderations = () => {
293
+ if (user) {
294
+ user.burritoConsiderations++;
295
+ users.set(user.username, user);
296
+ setUser({ ...user });
297
+ }
298
+ };
299
+
300
+ return (
301
+ <AuthContext.Provider value={{ user, login, logout, incrementBurritoConsiderations }}>
302
+ {children}
303
+ </AuthContext.Provider>
304
+ );
305
+ }
306
+
307
+ export function useAuth() {
308
+ const context = useContext(AuthContext);
309
+ if (context === undefined) {
310
+ throw new Error('useAuth must be used within an AuthProvider');
311
+ }
312
+ return context;
313
+ }
314
+
315
+ ```
316
+
317
+ ---
318
+
319
+ ## src/main.tsx
320
+
321
+ ```tsx
322
+ import { StrictMode } from 'react'
323
+ import ReactDOM from 'react-dom/client'
324
+ import { RouterProvider, createRouter } from '@tanstack/react-router'
325
+ import * as amplitude from '@amplitude/unified'
326
+
327
+ // Import the generated route tree
328
+ import { routeTree } from './routeTree.gen.ts'
329
+
330
+ import './styles.css'
331
+ import reportWebVitals from './reportWebVitals.ts'
332
+
333
+ // Initialize Amplitude
334
+ void amplitude.initAll(import.meta.env.VITE_PUBLIC_AMPLITUDE_API_KEY)
335
+
336
+ // Create a new router instance
337
+ const router = createRouter({
338
+ routeTree,
339
+ context: {},
340
+ defaultPreload: 'intent',
341
+ scrollRestoration: true,
342
+ defaultStructuralSharing: true,
343
+ defaultPreloadStaleTime: 0,
344
+ })
345
+
346
+ // Register the router instance for type safety
347
+ declare module '@tanstack/react-router' {
348
+ interface Register {
349
+ router: typeof router
350
+ }
351
+ }
352
+
353
+ // Render the app
354
+ const rootElement = document.getElementById('app')
355
+ if (rootElement && !rootElement.innerHTML) {
356
+ const root = ReactDOM.createRoot(rootElement)
357
+ root.render(
358
+ <StrictMode>
359
+ <RouterProvider router={router} />
360
+ </StrictMode>,
361
+ )
362
+ }
363
+
364
+ // If you want to start measuring performance in your app, pass a function
365
+ // to log results (for example: reportWebVitals(console.log))
366
+ // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
367
+ reportWebVitals()
368
+
369
+ ```
370
+
371
+ ---
372
+
373
+ ## src/reportWebVitals.ts
374
+
375
+ ```ts
376
+ const reportWebVitals = (onPerfEntry?: () => void) => {
377
+ if (onPerfEntry && onPerfEntry instanceof Function) {
378
+ import('web-vitals').then(({ onCLS, onINP, onFCP, onLCP, onTTFB }) => {
379
+ onCLS(onPerfEntry)
380
+ onINP(onPerfEntry)
381
+ onFCP(onPerfEntry)
382
+ onLCP(onPerfEntry)
383
+ onTTFB(onPerfEntry)
384
+ })
385
+ }
386
+ }
387
+
388
+ export default reportWebVitals
389
+
390
+ ```
391
+
392
+ ---
393
+
394
+ ## src/routes/__root.tsx
395
+
396
+ ```tsx
397
+ import { Outlet, createRootRoute } from '@tanstack/react-router'
398
+ import { TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools'
399
+ import { TanStackDevtools } from '@tanstack/react-devtools'
400
+
401
+ import Header from '../components/Header'
402
+ import { AuthProvider } from '../contexts/AuthContext'
403
+
404
+ export const Route = createRootRoute({
405
+ component: () => (
406
+ <AuthProvider>
407
+ <Header />
408
+ <main>
409
+ <Outlet />
410
+ </main>
411
+ <TanStackDevtools
412
+ config={{
413
+ position: 'bottom-right',
414
+ }}
415
+ plugins={[
416
+ {
417
+ name: 'Tanstack Router',
418
+ render: <TanStackRouterDevtoolsPanel />,
419
+ },
420
+ ]}
421
+ />
422
+ </AuthProvider>
423
+ ),
424
+ })
425
+
426
+ ```
427
+
428
+ ---
429
+
430
+ ## src/routes/burrito.tsx
431
+
432
+ ```tsx
433
+ import { useState } from 'react'
434
+ import { createFileRoute, useNavigate } from '@tanstack/react-router'
435
+ import * as amplitude from '@amplitude/unified'
436
+ import { useAuth } from '../contexts/AuthContext'
437
+
438
+ export const Route = createFileRoute('/burrito')({
439
+ component: BurritoPage,
440
+ })
441
+
442
+ function BurritoPage() {
443
+ const { user, incrementBurritoConsiderations } = useAuth()
444
+ const navigate = useNavigate()
445
+ const [hasConsidered, setHasConsidered] = useState(false)
446
+
447
+ // Redirect to home if not logged in
448
+ if (!user) {
449
+ navigate({ to: '/' })
450
+ return null
451
+ }
452
+
453
+ const handleConsideration = () => {
454
+ incrementBurritoConsiderations()
455
+ setHasConsidered(true)
456
+ setTimeout(() => setHasConsidered(false), 2000)
457
+
458
+ // Capture burrito consideration event
459
+ amplitude.track('Burrito Considered', {
460
+ total_considerations: user.burritoConsiderations + 1,
461
+ username: user.username,
462
+ })
463
+ }
464
+
465
+ return (
466
+ <div className="container">
467
+ <h1>Burrito consideration zone</h1>
468
+ <p>Take a moment to truly consider the potential of burritos.</p>
469
+
470
+ <div style={{ textAlign: 'center' }}>
471
+ <button onClick={handleConsideration} className="btn-burrito">
472
+ I have considered the burrito potential
473
+ </button>
474
+
475
+ {hasConsidered && (
476
+ <p className="success">
477
+ Thank you for your consideration! Count: {user.burritoConsiderations}
478
+ </p>
479
+ )}
480
+ </div>
481
+
482
+ <div className="stats">
483
+ <h3>Consideration stats</h3>
484
+ <p>Total considerations: {user.burritoConsiderations}</p>
485
+ </div>
486
+ </div>
487
+ )
488
+ }
489
+
490
+ ```
491
+
492
+ ---
493
+
494
+ ## src/routes/index.tsx
495
+
496
+ ```tsx
497
+ import { useState } from 'react'
498
+ import { createFileRoute } from '@tanstack/react-router'
499
+ import { useAuth } from '../contexts/AuthContext'
500
+
501
+ export const Route = createFileRoute('/')({
502
+ component: Home,
503
+ })
504
+
505
+ function Home() {
506
+ const { user, login } = useAuth()
507
+ const [username, setUsername] = useState('')
508
+ const [password, setPassword] = useState('')
509
+ const [error, setError] = useState('')
510
+
511
+ const handleSubmit = async (e: React.FormEvent) => {
512
+ e.preventDefault()
513
+ setError('')
514
+
515
+ try {
516
+ const success = await login(username, password)
517
+ if (success) {
518
+ setUsername('')
519
+ setPassword('')
520
+ } else {
521
+ setError('Please provide both username and password')
522
+ }
523
+ } catch (err) {
524
+ console.error('Login failed:', err)
525
+ setError('An error occurred during login')
526
+ }
527
+ }
528
+
529
+ if (user) {
530
+ return (
531
+ <div className="container">
532
+ <h1>Welcome back, {user.username}!</h1>
533
+ <p>You are now logged in. Feel free to explore:</p>
534
+ <ul>
535
+ <li>Consider the potential of burritos</li>
536
+ <li>View your profile and statistics</li>
537
+ </ul>
538
+ </div>
539
+ )
540
+ }
541
+
542
+ return (
543
+ <div className="container">
544
+ <h1>Welcome to Burrito Consideration App</h1>
545
+ <p>Please sign in to begin your burrito journey</p>
546
+
547
+ <form onSubmit={handleSubmit} className="form">
548
+ <div className="form-group">
549
+ <label htmlFor="username">Username:</label>
550
+ <input
551
+ type="text"
552
+ id="username"
553
+ value={username}
554
+ onChange={(e) => setUsername(e.target.value)}
555
+ placeholder="Enter any username"
556
+ />
557
+ </div>
558
+
559
+ <div className="form-group">
560
+ <label htmlFor="password">Password:</label>
561
+ <input
562
+ type="password"
563
+ id="password"
564
+ value={password}
565
+ onChange={(e) => setPassword(e.target.value)}
566
+ placeholder="Enter any password"
567
+ />
568
+ </div>
569
+
570
+ {error && <p className="error">{error}</p>}
571
+
572
+ <button type="submit" className="btn-primary">
573
+ Sign In
574
+ </button>
575
+ </form>
576
+
577
+ <p className="note">
578
+ Note: This is a demo app. Use any username and password to sign in.
579
+ </p>
580
+ </div>
581
+ )
582
+ }
583
+
584
+ ```
585
+
586
+ ---
587
+
588
+ ## src/routes/profile.tsx
589
+
590
+ ```tsx
591
+ import { createFileRoute, useNavigate } from '@tanstack/react-router'
592
+ import { useAuth } from '../contexts/AuthContext'
593
+
594
+ export const Route = createFileRoute('/profile')({
595
+ component: ProfilePage,
596
+ })
597
+
598
+ function ProfilePage() {
599
+ const { user } = useAuth()
600
+ const navigate = useNavigate()
601
+
602
+ // Redirect to home if not logged in
603
+ if (!user) {
604
+ navigate({ to: '/' })
605
+ return null
606
+ }
607
+
608
+ return (
609
+ <div className="container">
610
+ <h1>User Profile</h1>
611
+
612
+ <div className="stats">
613
+ <h2>Your Information</h2>
614
+ <p>
615
+ <strong>Username:</strong> {user.username}
616
+ </p>
617
+ <p>
618
+ <strong>Burrito Considerations:</strong> {user.burritoConsiderations}
619
+ </p>
620
+ </div>
621
+
622
+ <div style={{ marginTop: '2rem' }}>
623
+ <h3>Your Burrito Journey</h3>
624
+ {user.burritoConsiderations === 0 ? (
625
+ <p>You haven't considered any burritos yet. Visit the Burrito Consideration page to start!</p>
626
+ ) : user.burritoConsiderations === 1 ? (
627
+ <p>You've considered the burrito potential once. Keep going!</p>
628
+ ) : user.burritoConsiderations < 5 ? (
629
+ <p>You're getting the hang of burrito consideration!</p>
630
+ ) : user.burritoConsiderations < 10 ? (
631
+ <p>You're becoming a burrito consideration expert!</p>
632
+ ) : (
633
+ <p>You are a true burrito consideration master!</p>
634
+ )}
635
+ </div>
636
+ </div>
637
+ )
638
+ }
639
+
640
+ ```
641
+
642
+ ---
643
+
644
+ ## src/routeTree.gen.ts
645
+
646
+ ```ts
647
+ /* eslint-disable */
648
+
649
+ // @ts-nocheck
650
+
651
+ // noinspection JSUnusedGlobalSymbols
652
+
653
+ // This file was automatically generated by TanStack Router.
654
+ // You should NOT make any changes in this file as it will be overwritten.
655
+ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
656
+
657
+ import { Route as rootRouteImport } from './routes/__root'
658
+ import { Route as ProfileRouteImport } from './routes/profile'
659
+ import { Route as BurritoRouteImport } from './routes/burrito'
660
+ import { Route as IndexRouteImport } from './routes/index'
661
+
662
+ const ProfileRoute = ProfileRouteImport.update({
663
+ id: '/profile',
664
+ path: '/profile',
665
+ getParentRoute: () => rootRouteImport,
666
+ } as any)
667
+ const BurritoRoute = BurritoRouteImport.update({
668
+ id: '/burrito',
669
+ path: '/burrito',
670
+ getParentRoute: () => rootRouteImport,
671
+ } as any)
672
+ const IndexRoute = IndexRouteImport.update({
673
+ id: '/',
674
+ path: '/',
675
+ getParentRoute: () => rootRouteImport,
676
+ } as any)
677
+
678
+ export interface FileRoutesByFullPath {
679
+ '/': typeof IndexRoute
680
+ '/burrito': typeof BurritoRoute
681
+ '/profile': typeof ProfileRoute
682
+ }
683
+ export interface FileRoutesByTo {
684
+ '/': typeof IndexRoute
685
+ '/burrito': typeof BurritoRoute
686
+ '/profile': typeof ProfileRoute
687
+ }
688
+ export interface FileRoutesById {
689
+ __root__: typeof rootRouteImport
690
+ '/': typeof IndexRoute
691
+ '/burrito': typeof BurritoRoute
692
+ '/profile': typeof ProfileRoute
693
+ }
694
+ export interface FileRouteTypes {
695
+ fileRoutesByFullPath: FileRoutesByFullPath
696
+ fullPaths: '/' | '/burrito' | '/profile'
697
+ fileRoutesByTo: FileRoutesByTo
698
+ to: '/' | '/burrito' | '/profile'
699
+ id: '__root__' | '/' | '/burrito' | '/profile'
700
+ fileRoutesById: FileRoutesById
701
+ }
702
+ export interface RootRouteChildren {
703
+ IndexRoute: typeof IndexRoute
704
+ BurritoRoute: typeof BurritoRoute
705
+ ProfileRoute: typeof ProfileRoute
706
+ }
707
+
708
+ declare module '@tanstack/react-router' {
709
+ interface FileRoutesByPath {
710
+ '/profile': {
711
+ id: '/profile'
712
+ path: '/profile'
713
+ fullPath: '/profile'
714
+ preLoaderRoute: typeof ProfileRouteImport
715
+ parentRoute: typeof rootRouteImport
716
+ }
717
+ '/burrito': {
718
+ id: '/burrito'
719
+ path: '/burrito'
720
+ fullPath: '/burrito'
721
+ preLoaderRoute: typeof BurritoRouteImport
722
+ parentRoute: typeof rootRouteImport
723
+ }
724
+ '/': {
725
+ id: '/'
726
+ path: '/'
727
+ fullPath: '/'
728
+ preLoaderRoute: typeof IndexRouteImport
729
+ parentRoute: typeof rootRouteImport
730
+ }
731
+ }
732
+ }
733
+
734
+ const rootRouteChildren: RootRouteChildren = {
735
+ IndexRoute: IndexRoute,
736
+ BurritoRoute: BurritoRoute,
737
+ ProfileRoute: ProfileRoute,
738
+ }
739
+ export const routeTree = rootRouteImport
740
+ ._addFileChildren(rootRouteChildren)
741
+ ._addFileTypes<FileRouteTypes>()
742
+
743
+ ```
744
+
745
+ ---
746
+
747
+ ## vite.config.ts
748
+
749
+ ```ts
750
+ import { URL, fileURLToPath } from 'node:url'
751
+
752
+ import { tanstackRouter } from '@tanstack/router-plugin/vite'
753
+ import tailwindcss from '@tailwindcss/vite'
754
+ import { defineConfig } from 'vite'
755
+ import viteReact from '@vitejs/plugin-react'
756
+
757
+ // https://vitejs.dev/config/
758
+ export default defineConfig({
759
+ plugins: [
760
+ tanstackRouter({
761
+ target: 'react',
762
+ autoCodeSplitting: true,
763
+ }),
764
+ viteReact(),
765
+ tailwindcss(),
766
+ ],
767
+ resolve: {
768
+ alias: {
769
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
770
+ },
771
+ },
772
+ })
773
+
774
+ ```
775
+
776
+ ---
777
+