@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,846 @@
1
+ # Amplitude Vue 3 Example Project
2
+
3
+ Repository: https://github.com/amplitude/context-hub
4
+ Path: basics/vue-3
5
+
6
+ ---
7
+
8
+ ## README.md
9
+
10
+ # Amplitude Vue 3 + Vite example
11
+
12
+ This is a [Vue 3](https://vuejs.org/) + [Vite](https://vitejs.dev/) example demonstrating Amplitude integration with product analytics and event tracking.
13
+
14
+ It 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) and `initAll` in `main.ts`. [Initialize the Unified SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#initialize-the-unified-sdk) describes that call as initializing every product bundled with Unified npm; see [configuration](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#configuration) for `analytics`, `sessionReplay`, `experiment`, and `engagement`. 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 Unified **CDN** script, not Unified **npm** ([choose your installation method](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#choose-your-installation-method)).
15
+
16
+ This sample shows how to:
17
+
18
+ - Initialize Amplitude in `main.ts`
19
+ - Identify users on login
20
+ - Track custom events
21
+ - Reset the session on logout
22
+
23
+ ## Features
24
+
25
+ - **Product Analytics**: Track user events and behaviors
26
+ - **User Authentication**: Demo login system with Amplitude user identification
27
+ - **Client-side Tracking**: Examples of client-side tracking methods
28
+
29
+ ## Getting Started
30
+
31
+ ### 1. Install Dependencies
32
+
33
+ ```bash
34
+ npm install
35
+ # or
36
+ pnpm install
37
+ ```
38
+
39
+ ### 2. Configure Environment Variables
40
+
41
+ Create a `.env` file in the root directory:
42
+
43
+ ```bash
44
+ VITE_AMPLITUDE_API_KEY=your_amplitude_api_key
45
+ ```
46
+
47
+ Get your Amplitude API key from your [Amplitude project settings](https://app.amplitude.com).
48
+
49
+ ### 3. Run the Development Server
50
+
51
+ ```bash
52
+ npm run dev
53
+ ```
54
+
55
+ Open [http://localhost:5173](http://localhost:5173) with your browser to see the app.
56
+
57
+ ## Key Integration Points
58
+
59
+ ### Initialization (src/main.ts)
60
+
61
+ ```typescript
62
+ import * as amplitude from '@amplitude/unified'
63
+
64
+ void amplitude.initAll(import.meta.env.VITE_AMPLITUDE_API_KEY || '')
65
+ ```
66
+
67
+ ### User identification (src/views/Home.vue)
68
+
69
+ ```typescript
70
+ import * as amplitude from '@amplitude/unified'
71
+ import { Identify } from '@amplitude/unified'
72
+
73
+ amplitude.setUserId(username)
74
+ const identifyObj = new Identify()
75
+ identifyObj.set('username', username)
76
+ amplitude.identify(identifyObj)
77
+ amplitude.track('User Logged In', { username })
78
+ ```
79
+
80
+ ### Event tracking (src/views/Burrito.vue)
81
+
82
+ ```typescript
83
+ amplitude.track('Burrito Considered', {
84
+ total_considerations: updatedUser.burritoConsiderations,
85
+ username: updatedUser.username
86
+ })
87
+ ```
88
+
89
+ ### Session reset on logout (src/components/Header.vue)
90
+
91
+ ```typescript
92
+ amplitude.track('User Logged Out')
93
+ amplitude.reset()
94
+ ```
95
+
96
+ ## Learn More
97
+
98
+ - [Amplitude Documentation](https://amplitude.com/docs)
99
+ - [Amplitude Browser SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-sdk-2)
100
+ - [Vue 3 Documentation](https://vuejs.org/)
101
+ - [Vite Documentation](https://vitejs.dev/)
102
+
103
+ ---
104
+
105
+ ## .editorconfig
106
+
107
+ ```
108
+ [*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
109
+ charset = utf-8
110
+ indent_size = 2
111
+ indent_style = space
112
+ insert_final_newline = true
113
+ trim_trailing_whitespace = true
114
+ end_of_line = lf
115
+ max_line_length = 100
116
+
117
+ ```
118
+
119
+ ---
120
+
121
+ ## .env.example
122
+
123
+ ```example
124
+ VITE_AMPLITUDE_API_KEY=your_amplitude_api_key
125
+
126
+ ```
127
+
128
+ ---
129
+
130
+ ## env.d.ts
131
+
132
+ ```ts
133
+ /// <reference types="vite/client" />
134
+
135
+ ```
136
+
137
+ ---
138
+
139
+ ## index.html
140
+
141
+ ```html
142
+ <!DOCTYPE html>
143
+ <html lang="">
144
+ <head>
145
+ <meta charset="UTF-8">
146
+ <link rel="icon" href="/favicon.ico">
147
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
148
+ <title>Vite App</title>
149
+ </head>
150
+ <body>
151
+ <div id="app"></div>
152
+ <script type="module" src="/src/main.ts"></script>
153
+ </body>
154
+ </html>
155
+
156
+ ```
157
+
158
+ ---
159
+
160
+ ## src/App.vue
161
+
162
+ ```vue
163
+ <script setup lang="ts">
164
+ import Header from '@/components/Header.vue'
165
+ </script>
166
+
167
+ <template>
168
+ <Header />
169
+ <main>
170
+ <RouterView />
171
+ </main>
172
+ </template>
173
+
174
+ <style>
175
+ * {
176
+ margin: 0;
177
+ padding: 0;
178
+ box-sizing: border-box;
179
+ }
180
+
181
+ html,
182
+ body {
183
+ height: 100%;
184
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
185
+ line-height: 1.6;
186
+ color: #333;
187
+ background: #f5f5f5;
188
+ }
189
+
190
+ #app {
191
+ min-height: 100vh;
192
+ display: flex;
193
+ flex-direction: column;
194
+ }
195
+
196
+ main {
197
+ flex: 1;
198
+ max-width: 1200px;
199
+ width: 100%;
200
+ margin: 2rem auto;
201
+ padding: 0 1rem;
202
+ }
203
+
204
+ h1 {
205
+ margin-bottom: 1rem;
206
+ }
207
+
208
+ p {
209
+ margin-bottom: 1rem;
210
+ }
211
+ </style>
212
+
213
+ ```
214
+
215
+ ---
216
+
217
+ ## src/components/Header.vue
218
+
219
+ ```vue
220
+ <template>
221
+ <header class="header">
222
+ <div class="header-container">
223
+ <nav>
224
+ <RouterLink to="/">Home</RouterLink>
225
+ <template v-if="authStore.user">
226
+ <RouterLink to="/burrito">Burrito Consideration</RouterLink>
227
+ <RouterLink to="/profile">Profile</RouterLink>
228
+ </template>
229
+ </nav>
230
+ <div class="user-section">
231
+ <template v-if="authStore.user && authStore.user.username">
232
+ <span>Welcome, {{ authStore.user.username }}!</span>
233
+ <button @click="handleLogout" class="btn-logout">
234
+ Logout
235
+ </button>
236
+ </template>
237
+ <template v-else>
238
+ <span>Not logged in</span>
239
+ <button v-if="authStore.user" @click="handleLogout" class="btn-logout">
240
+ Clear Session
241
+ </button>
242
+ </template>
243
+ </div>
244
+ </div>
245
+ </header>
246
+ </template>
247
+
248
+ <script setup lang="ts">
249
+ import { useRouter } from 'vue-router'
250
+ import { useAuthStore } from '@/stores/auth'
251
+ import * as amplitude from '@amplitude/unified'
252
+
253
+ const authStore = useAuthStore()
254
+ const router = useRouter()
255
+
256
+ const handleLogout = () => {
257
+ amplitude.track('User Logged Out')
258
+ authStore.logout()
259
+ amplitude.reset()
260
+ router.push({ name: 'home' })
261
+ }
262
+ </script>
263
+
264
+ <style scoped>
265
+ .header {
266
+ background-color: #333;
267
+ color: white;
268
+ padding: 1rem;
269
+ }
270
+
271
+ .header-container {
272
+ max-width: 1200px;
273
+ margin: 0 auto;
274
+ display: flex;
275
+ justify-content: space-between;
276
+ align-items: center;
277
+ }
278
+
279
+ .header nav {
280
+ display: flex;
281
+ gap: 1rem;
282
+ }
283
+
284
+ .header a {
285
+ color: white;
286
+ text-decoration: none;
287
+ padding: 0.5rem 1rem;
288
+ border-radius: 4px;
289
+ transition: background-color 0.2s;
290
+ }
291
+
292
+ .header a:hover {
293
+ background-color: #555;
294
+ text-decoration: none;
295
+ }
296
+
297
+ .user-section {
298
+ display: flex;
299
+ align-items: center;
300
+ gap: 1rem;
301
+ }
302
+
303
+ .btn-logout {
304
+ background-color: #dc3545;
305
+ color: white;
306
+ border: none;
307
+ padding: 0.5rem 1rem;
308
+ border-radius: 4px;
309
+ cursor: pointer;
310
+ font-size: 14px;
311
+ }
312
+
313
+ .btn-logout:hover {
314
+ background-color: #c82333;
315
+ }
316
+ </style>
317
+
318
+ ```
319
+
320
+ ---
321
+
322
+ ## src/main.ts
323
+
324
+ ```ts
325
+ import { createApp } from 'vue'
326
+ import { createPinia } from 'pinia'
327
+
328
+ import App from './App.vue'
329
+ import router from './router'
330
+ import * as amplitude from '@amplitude/unified'
331
+
332
+ void amplitude.initAll(import.meta.env.VITE_AMPLITUDE_API_KEY || '')
333
+
334
+ const app = createApp(App)
335
+
336
+ app.use(createPinia())
337
+ app.use(router)
338
+
339
+ app.mount('#app')
340
+
341
+ ```
342
+
343
+ ---
344
+
345
+ ## src/router/index.ts
346
+
347
+ ```ts
348
+ import { createRouter, createWebHistory } from 'vue-router'
349
+ import { useAuthStore } from '@/stores/auth'
350
+ import Home from '@/views/Home.vue'
351
+ import Burrito from '@/views/Burrito.vue'
352
+ import Profile from '@/views/Profile.vue'
353
+
354
+ const router = createRouter({
355
+ history: createWebHistory(import.meta.env.BASE_URL),
356
+ routes: [
357
+ {
358
+ path: '/',
359
+ name: 'home',
360
+ component: Home
361
+ },
362
+ {
363
+ path: '/burrito',
364
+ name: 'burrito',
365
+ component: Burrito,
366
+ meta: { requiresAuth: true }
367
+ },
368
+ {
369
+ path: '/profile',
370
+ name: 'profile',
371
+ component: Profile,
372
+ meta: { requiresAuth: true }
373
+ }
374
+ ]
375
+ })
376
+
377
+ router.beforeEach((to, from, next) => {
378
+ const authStore = useAuthStore()
379
+
380
+ // Check if user exists and has a valid username
381
+ const isValidUser = authStore.user && authStore.user.username
382
+
383
+ if (to.meta.requiresAuth && !isValidUser) {
384
+ // Clear invalid state
385
+ if (authStore.user && !authStore.user.username) {
386
+ authStore.logout()
387
+ }
388
+ next({ name: 'home' })
389
+ } else {
390
+ next()
391
+ }
392
+ })
393
+
394
+ export default router
395
+
396
+ ```
397
+
398
+ ---
399
+
400
+ ## src/stores/auth.ts
401
+
402
+ ```ts
403
+ import { defineStore } from 'pinia'
404
+ import { ref, computed } from 'vue'
405
+
406
+ interface User {
407
+ username: string
408
+ burritoConsiderations: number
409
+ }
410
+
411
+ const users = new Map<string, User>()
412
+
413
+ export const useAuthStore = defineStore('auth', () => {
414
+
415
+ const getInitialUser = (): User | null => {
416
+ if (typeof window === 'undefined') return null
417
+
418
+ const storedUsername = localStorage.getItem('currentUser')
419
+ if (storedUsername) {
420
+ const existingUser = users.get(storedUsername)
421
+ if (existingUser && existingUser.username) {
422
+ return existingUser
423
+ } else {
424
+ // Clean up invalid state
425
+ localStorage.removeItem('currentUser')
426
+ }
427
+ }
428
+ return null
429
+ }
430
+
431
+ const user = ref<User | null>(getInitialUser())
432
+
433
+ const isAuthenticated = computed(() => user.value !== null)
434
+
435
+ const login = async (username: string, password: string): Promise<boolean> => {
436
+ // Client-side only fake auth - no server calls
437
+ if (!username || !password) {
438
+ return false
439
+ }
440
+
441
+ let localUser = users.get(username)
442
+ if (!localUser) {
443
+ localUser = {
444
+ username,
445
+ burritoConsiderations: 0
446
+ }
447
+ users.set(username, localUser)
448
+ }
449
+
450
+ user.value = localUser
451
+ localStorage.setItem('currentUser', username)
452
+
453
+ return true
454
+ }
455
+
456
+ const logout = () => {
457
+ user.value = null
458
+ localStorage.removeItem('currentUser')
459
+ }
460
+
461
+ const setUser = (newUser: User) => {
462
+ user.value = newUser
463
+ users.set(newUser.username, newUser)
464
+ }
465
+
466
+ return {
467
+ user,
468
+ isAuthenticated,
469
+ login,
470
+ logout,
471
+ setUser
472
+ }
473
+ })
474
+
475
+ ```
476
+
477
+ ---
478
+
479
+ ## src/views/Burrito.vue
480
+
481
+ ```vue
482
+ <template>
483
+ <div class="container">
484
+ <h1>Burrito consideration zone</h1>
485
+ <p>Take a moment to truly consider the potential of burritos.</p>
486
+
487
+ <div style="text-align: center">
488
+ <button @click="handleConsideration" class="btn-burrito">
489
+ I have considered the burrito potential
490
+ </button>
491
+
492
+ <p v-if="hasConsidered" class="success">
493
+ Thank you for your consideration! Count: {{ authStore.user?.burritoConsiderations }}
494
+ </p>
495
+ </div>
496
+
497
+ <div class="stats">
498
+ <h3>Consideration stats</h3>
499
+ <p>Total considerations: {{ authStore.user?.burritoConsiderations }}</p>
500
+ </div>
501
+ </div>
502
+ </template>
503
+
504
+ <script setup lang="ts">
505
+ import { ref } from 'vue'
506
+ import { useAuthStore } from '@/stores/auth'
507
+ import * as amplitude from '@amplitude/unified'
508
+
509
+ const authStore = useAuthStore()
510
+ const hasConsidered = ref(false)
511
+
512
+ const handleConsideration = () => {
513
+ if (!authStore.user) return
514
+
515
+ // Client-side only - no server calls
516
+ const updatedUser = {
517
+ ...authStore.user,
518
+ burritoConsiderations: authStore.user.burritoConsiderations + 1
519
+ }
520
+ authStore.setUser(updatedUser)
521
+ hasConsidered.value = true
522
+ setTimeout(() => {
523
+ hasConsidered.value = false
524
+ }, 2000)
525
+
526
+ // Track burrito consideration event
527
+ amplitude.track('Burrito Considered', {
528
+ total_considerations: updatedUser.burritoConsiderations,
529
+ username: updatedUser.username
530
+ })
531
+ }
532
+ </script>
533
+
534
+ <style scoped>
535
+ .container {
536
+ padding: 2rem;
537
+ max-width: 600px;
538
+ margin: 0 auto;
539
+ background: white;
540
+ border-radius: 8px;
541
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
542
+ }
543
+
544
+ .btn-burrito {
545
+ background-color: #28a745;
546
+ color: white;
547
+ border: none;
548
+ padding: 1rem 2rem;
549
+ border-radius: 4px;
550
+ font-size: 18px;
551
+ cursor: pointer;
552
+ margin: 2rem 0;
553
+ }
554
+
555
+ .btn-burrito:hover {
556
+ background-color: #218838;
557
+ }
558
+
559
+ .success {
560
+ color: #28a745;
561
+ margin-top: 0.5rem;
562
+ }
563
+
564
+ .stats {
565
+ background-color: #f8f9fa;
566
+ padding: 1rem;
567
+ border-radius: 4px;
568
+ margin-top: 1rem;
569
+ }
570
+
571
+ h3 {
572
+ margin-top: 1rem;
573
+ margin-bottom: 0.5rem;
574
+ }
575
+ </style>
576
+
577
+ ```
578
+
579
+ ---
580
+
581
+ ## src/views/Home.vue
582
+
583
+ ```vue
584
+ <template>
585
+ <div class="container">
586
+ <template v-if="authStore.user && authStore.user.username">
587
+ <h1>Welcome back, {{ authStore.user.username }}!</h1>
588
+ <p>You are now logged in. Feel free to explore:</p>
589
+ <ul>
590
+ <li>Consider the potential of burritos</li>
591
+ <li>View your profile and statistics</li>
592
+ </ul>
593
+ </template>
594
+ <template v-else>
595
+ <h1>Welcome to Burrito Consideration App</h1>
596
+ <p>Please sign in to begin your burrito journey</p>
597
+
598
+ <form @submit.prevent="handleSubmit" class="form">
599
+ <div class="form-group">
600
+ <label for="username">Username:</label>
601
+ <input
602
+ type="text"
603
+ id="username"
604
+ v-model="username"
605
+ placeholder="Enter any username"
606
+ />
607
+ </div>
608
+
609
+ <div class="form-group">
610
+ <label for="password">Password:</label>
611
+ <input
612
+ type="password"
613
+ id="password"
614
+ v-model="password"
615
+ placeholder="Enter any password"
616
+ />
617
+ </div>
618
+
619
+ <p v-if="error" class="error">{{ error }}</p>
620
+
621
+ <button type="submit" class="btn-primary">Sign In</button>
622
+ </form>
623
+
624
+ <p class="note">
625
+ Note: This is a demo app. Use any username and password to sign in.
626
+ </p>
627
+ </template>
628
+ </div>
629
+ </template>
630
+
631
+ <script setup lang="ts">
632
+ import { ref, onMounted } from 'vue'
633
+ import { useAuthStore } from '@/stores/auth'
634
+ import * as amplitude from '@amplitude/unified'
635
+ import { Identify } from '@amplitude/unified'
636
+
637
+ const authStore = useAuthStore()
638
+ const username = ref('')
639
+ const password = ref('')
640
+ const error = ref('')
641
+
642
+ // Clean up invalid user state on mount
643
+ onMounted(() => {
644
+ if (authStore.user && !authStore.user.username) {
645
+ authStore.logout()
646
+ }
647
+ })
648
+
649
+ const handleSubmit = async () => {
650
+ error.value = ''
651
+
652
+ const success = await authStore.login(username.value, password.value)
653
+ if (success) {
654
+ amplitude.setUserId(username.value)
655
+ const identifyObj = new Identify()
656
+ identifyObj.set('username', username.value)
657
+ amplitude.identify(identifyObj)
658
+ amplitude.track('User Logged In', { username: username.value })
659
+
660
+ username.value = ''
661
+ password.value = ''
662
+ } else {
663
+ error.value = 'Please provide both username and password'
664
+ }
665
+ }
666
+ </script>
667
+
668
+ <style scoped>
669
+ .container {
670
+ padding: 2rem;
671
+ max-width: 600px;
672
+ margin: 0 auto;
673
+ background: white;
674
+ border-radius: 8px;
675
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
676
+ }
677
+
678
+ .form {
679
+ margin-top: 2rem;
680
+ }
681
+
682
+ .form-group {
683
+ margin-bottom: 1rem;
684
+ }
685
+
686
+ .form-group label {
687
+ display: block;
688
+ margin-bottom: 0.5rem;
689
+ font-weight: 500;
690
+ }
691
+
692
+ .form-group input {
693
+ width: 100%;
694
+ padding: 0.5rem;
695
+ border: 1px solid #ddd;
696
+ border-radius: 4px;
697
+ font-size: 16px;
698
+ }
699
+
700
+ .form-group input:focus {
701
+ outline: none;
702
+ border-color: #0070f3;
703
+ }
704
+
705
+ .btn-primary {
706
+ background-color: #0070f3;
707
+ color: white;
708
+ border: none;
709
+ padding: 0.75rem 2rem;
710
+ border-radius: 4px;
711
+ font-size: 16px;
712
+ cursor: pointer;
713
+ width: 100%;
714
+ margin-top: 1rem;
715
+ }
716
+
717
+ .btn-primary:hover {
718
+ background-color: #0051cc;
719
+ }
720
+
721
+ .error {
722
+ color: #dc3545;
723
+ margin-top: 0.5rem;
724
+ }
725
+
726
+ .note {
727
+ margin-top: 2rem;
728
+ color: #666;
729
+ font-size: 14px;
730
+ text-align: center;
731
+ }
732
+
733
+ ul {
734
+ margin-top: 1rem;
735
+ padding-left: 1.5rem;
736
+ }
737
+
738
+ li {
739
+ margin-bottom: 0.5rem;
740
+ }
741
+ </style>
742
+
743
+ ```
744
+
745
+ ---
746
+
747
+ ## src/views/Profile.vue
748
+
749
+ ```vue
750
+ <template>
751
+ <div class="container">
752
+ <h1>User Profile</h1>
753
+
754
+ <div class="stats">
755
+ <h2>Your Information</h2>
756
+ <p><strong>Username:</strong> {{ authStore.user?.username }}</p>
757
+ <p><strong>Burrito Considerations:</strong> {{ authStore.user?.burritoConsiderations }}</p>
758
+ </div>
759
+
760
+ <div style="margin-top: 2rem">
761
+ <h3>Your Burrito Journey</h3>
762
+ <template v-if="authStore.user">
763
+ <p v-if="authStore.user.burritoConsiderations === 0">
764
+ You haven't considered any burritos yet. Visit the Burrito Consideration page to start!
765
+ </p>
766
+ <p v-else-if="authStore.user.burritoConsiderations === 1">
767
+ You've considered the burrito potential once. Keep going!
768
+ </p>
769
+ <p v-else-if="authStore.user.burritoConsiderations < 5">
770
+ You're getting the hang of burrito consideration!
771
+ </p>
772
+ <p v-else-if="authStore.user.burritoConsiderations < 10">
773
+ You're becoming a burrito consideration expert!
774
+ </p>
775
+ <p v-else>
776
+ You are a true burrito consideration master! 🌯
777
+ </p>
778
+ </template>
779
+ </div>
780
+ </div>
781
+ </template>
782
+
783
+ <script setup lang="ts">
784
+ import { useAuthStore } from '@/stores/auth'
785
+
786
+ const authStore = useAuthStore()
787
+ </script>
788
+
789
+ <style scoped>
790
+ .container {
791
+ padding: 2rem;
792
+ max-width: 600px;
793
+ margin: 0 auto;
794
+ background: white;
795
+ border-radius: 8px;
796
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
797
+ }
798
+
799
+ .stats {
800
+ background-color: #f8f9fa;
801
+ padding: 1rem;
802
+ border-radius: 4px;
803
+ margin-top: 1rem;
804
+ }
805
+
806
+ h2 {
807
+ margin-top: 1rem;
808
+ margin-bottom: 0.5rem;
809
+ }
810
+
811
+ h3 {
812
+ margin-top: 1rem;
813
+ margin-bottom: 0.5rem;
814
+ }
815
+ </style>
816
+
817
+ ```
818
+
819
+ ---
820
+
821
+ ## vite.config.ts
822
+
823
+ ```ts
824
+ import { fileURLToPath, URL } from 'node:url'
825
+
826
+ import { defineConfig } from 'vite'
827
+ import vue from '@vitejs/plugin-vue'
828
+ import vueDevTools from 'vite-plugin-vue-devtools'
829
+
830
+ // https://vite.dev/config/
831
+ export default defineConfig({
832
+ plugins: [
833
+ vue(),
834
+ vueDevTools(),
835
+ ],
836
+ resolve: {
837
+ alias: {
838
+ '@': fileURLToPath(new URL('./src', import.meta.url))
839
+ },
840
+ },
841
+ })
842
+
843
+ ```
844
+
845
+ ---
846
+