vibefast-cli 0.6.2 → 0.7.1

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 (857) hide show
  1. package/dist/__tests__/recipes.test.js +5 -5
  2. package/dist/__tests__/recipes.test.js.map +1 -1
  3. package/dist/commands/add.d.ts.map +1 -1
  4. package/dist/commands/add.js +136 -48
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +106 -89
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/remove.js +1 -1
  10. package/dist/commands/remove.js.map +1 -1
  11. package/dist/core/__tests__/fsx.test.js +3 -1
  12. package/dist/core/__tests__/fsx.test.js.map +1 -1
  13. package/dist/core/__tests__/prompt.test.js +12 -12
  14. package/dist/core/__tests__/prompt.test.js.map +1 -1
  15. package/dist/core/__tests__/validate.test.js +4 -3
  16. package/dist/core/__tests__/validate.test.js.map +1 -1
  17. package/dist/core/auth.d.ts.map +1 -1
  18. package/dist/core/auth.js +8 -0
  19. package/dist/core/auth.js.map +1 -1
  20. package/dist/core/codemod.d.ts +13 -0
  21. package/dist/core/codemod.d.ts.map +1 -1
  22. package/dist/core/codemod.js +50 -0
  23. package/dist/core/codemod.js.map +1 -1
  24. package/dist/core/errors.js +1 -1
  25. package/dist/core/fsx.js +1 -1
  26. package/dist/core/fsx.js.map +1 -1
  27. package/dist/core/recipes.d.ts.map +1 -1
  28. package/dist/core/recipes.js +71 -9
  29. package/dist/core/recipes.js.map +1 -1
  30. package/package.json +1 -1
  31. package/recipes/animated-chip/recipe.json +15 -0
  32. package/recipes/animated-chip@latest.zip +0 -0
  33. package/recipes/animated-switch/recipe.json +15 -0
  34. package/recipes/animated-switch@latest.zip +0 -0
  35. package/recipes/audio-recorder@latest.zip +0 -0
  36. package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +29 -18
  37. package/recipes/charts@latest.zip +0 -0
  38. package/recipes/chatbot/apps/native/src/features/chatbot/components/message-list.tsx +1 -1
  39. package/recipes/chatbot/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +6 -0
  40. package/recipes/chatbot/recipe.json +21 -5
  41. package/recipes/chatbot@latest.zip +0 -0
  42. package/recipes/glowing-button/recipe.json +1 -3
  43. package/recipes/glowing-button@latest.zip +0 -0
  44. package/recipes/image-analysis/recipe.json +36 -19
  45. package/recipes/image-analysis@latest.zip +0 -0
  46. package/recipes/image-generator/apps/native/src/features/image-generator/app/_layout.tsx +1 -0
  47. package/recipes/image-generator/apps/native/src/features/image-generator/app/gallery.tsx +1 -1
  48. package/recipes/image-generator/apps/native/src/features/image-generator/components/gallery-image.tsx +2 -3
  49. package/recipes/image-generator/recipe.json +5 -3
  50. package/recipes/image-generator@latest.zip +0 -0
  51. package/recipes/ios-widget/recipe.json +24 -0
  52. package/recipes/ios-widget@latest.zip +0 -0
  53. package/recipes/number-stepper/recipe.json +15 -0
  54. package/recipes/number-stepper@latest.zip +0 -0
  55. package/recipes/payments/recipe.json +30 -0
  56. package/recipes/payments@latest.zip +0 -0
  57. package/recipes/posthog.json +2 -1
  58. package/recipes/progress-circle/recipe.json +15 -0
  59. package/recipes/progress-circle@latest.zip +0 -0
  60. package/recipes/quiz@latest.zip +0 -0
  61. package/recipes/sentry.json +2 -1
  62. package/recipes/swipe-slider/recipe.json +15 -0
  63. package/recipes/swipe-slider@latest.zip +0 -0
  64. package/recipes/{0 → timeline}/recipe.json +3 -6
  65. package/recipes/timeline@latest.zip +0 -0
  66. package/recipes/tracker-app@latest.zip +0 -0
  67. package/recipes/upload-all.sh +13 -2
  68. package/recipes/voice-bot/recipe.json +15 -2
  69. package/recipes/voice-bot@latest.zip +0 -0
  70. package/recipes/wake-word/apps/native/src/app/(root)/(protected)/test-wake-word.tsx +0 -2
  71. package/recipes/wake-word/recipe.json +2 -2
  72. package/recipes/wake-word@latest.zip +0 -0
  73. package/src/__tests__/recipes.test.ts +5 -5
  74. package/src/commands/add.ts +230 -54
  75. package/src/commands/init.ts +118 -102
  76. package/src/commands/remove.ts +1 -1
  77. package/src/core/__tests__/fsx.test.ts +3 -1
  78. package/src/core/__tests__/prompt.test.ts +12 -12
  79. package/src/core/__tests__/validate.test.ts +4 -3
  80. package/src/core/auth.ts +8 -0
  81. package/src/core/codemod.ts +66 -0
  82. package/src/core/errors.ts +1 -1
  83. package/src/core/fsx.ts +1 -1
  84. package/src/core/recipes.ts +73 -9
  85. package/2/.claude/agents/architect.md +0 -74
  86. package/2/.claude/agents/convex-reviewer.md +0 -267
  87. package/2/.claude/agents/debug-detective.md +0 -62
  88. package/2/.claude/agents/learner.md +0 -64
  89. package/2/.claude/agents/perf-optimizer.md +0 -71
  90. package/2/.claude/agents/security-researcher.md +0 -42
  91. package/2/.claude/agents/tech-researcher.md +0 -46
  92. package/2/.claude/agents/ux-designer.md +0 -45
  93. package/2/.claude/commands/create-app-design.md +0 -279
  94. package/2/.claude/commands/create-prd-interactive.md +0 -113
  95. package/2/.claude/commands/create-prd.md +0 -111
  96. package/2/.claude/commands/create-tech-stack.md +0 -345
  97. package/2/.claude/commands/update-app-design.md +0 -298
  98. package/2/.claude/commands/update-project-structure.md +0 -14
  99. package/2/.claude/commands/update-tech-stack.md +0 -325
  100. package/2/.claude/docs/CONVEX_FEATURES_PLAN.md +0 -249
  101. package/2/.claude/docs/app-design-document.md +0 -0
  102. package/2/.claude/docs/project-status.md +0 -25
  103. package/2/.claude/docs/project-structure.md +0 -7
  104. package/2/.claude/docs/tech-stack.md +0 -157
  105. package/2/.claude/scripts/tree.sh +0 -70
  106. package/2/.claude/settings.json +0 -30
  107. package/2/.cursor/commands/code-review-high.md +0 -190
  108. package/2/.cursorignore +0 -3
  109. package/2/.github/ISSUE_TEMPLATE.md +0 -13
  110. package/2/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  111. package/2/.github/actions/eas-build/action.yml +0 -85
  112. package/2/.github/actions/setup-jdk-generate-apk/action.yml +0 -48
  113. package/2/.github/actions/setup-node-pnpm-install/action.yml +0 -29
  114. package/2/.github/scripts/expo-doctor.sh +0 -26
  115. package/2/.github/workflows/compress-images.yml +0 -48
  116. package/2/.github/workflows/e2e-android-eas-build.yml +0 -111
  117. package/2/.github/workflows/e2e-android-maestro.yml +0 -52
  118. package/2/.github/workflows/e2e-android.yml +0 -119
  119. package/2/.github/workflows/eas-build-prod.yml +0 -43
  120. package/2/.github/workflows/eas-build-qa.yml +0 -47
  121. package/2/.github/workflows/expo-doctor.yml +0 -61
  122. package/2/.github/workflows/lint-ts.yml +0 -49
  123. package/2/.github/workflows/new-app-version.yml +0 -65
  124. package/2/.github/workflows/new-github-release.yml +0 -34
  125. package/2/.github/workflows/stale.yml +0 -24
  126. package/2/.github/workflows/test.yml +0 -50
  127. package/2/.github/workflows/type-check.yml +0 -54
  128. package/2/.husky/commit-msg +0 -1
  129. package/2/.husky/common.sh +0 -8
  130. package/2/.husky/post-merge +0 -18
  131. package/2/.husky/pre-commit +0 -24
  132. package/2/.prettierignore +0 -14
  133. package/2/.prettierrc.json +0 -10
  134. package/2/.vibefast/README.md +0 -59
  135. package/2/.vibefast/config.json +0 -4
  136. package/2/.vibefast/journal.json +0 -234
  137. package/2/.vibefast/starter.json +0 -5
  138. package/2/AGENTS.md +0 -48
  139. package/2/LICENSE +0 -21
  140. package/2/README.md +0 -127
  141. package/2/apps/native/__mocks__/bottom-sheet.js +0 -6
  142. package/2/apps/native/__mocks__/expo-router.js +0 -16
  143. package/2/apps/native/__mocks__/react-native-gesture-handler.ts +0 -17
  144. package/2/apps/native/app-env.d.ts +0 -2
  145. package/2/apps/native/app.config.ts +0 -167
  146. package/2/apps/native/assets/adaptive-icon.png +0 -0
  147. package/2/apps/native/assets/favicon.png +0 -0
  148. package/2/apps/native/assets/fonts/Inter.ttf +0 -0
  149. package/2/apps/native/assets/fonts/SF-Pro-Display-Bold.otf +0 -0
  150. package/2/apps/native/assets/fonts/SF-Pro-Display-Medium.otf +0 -0
  151. package/2/apps/native/assets/fonts/SF-Pro-Display-Regular.otf +0 -0
  152. package/2/apps/native/assets/fonts/SF-Pro-Display-Semibold.otf +0 -0
  153. package/2/apps/native/assets/fonts/SpaceMono-Regular.ttf +0 -0
  154. package/2/apps/native/assets/icon.png +0 -0
  155. package/2/apps/native/assets/images/cover-image.png +0 -0
  156. package/2/apps/native/assets/lottie-animations/onboarding-1.json +0 -6504
  157. package/2/apps/native/assets/lottie-animations/onboarding-2.json +0 -1993
  158. package/2/apps/native/assets/lottie-animations/onboarding-3.json +0 -50159
  159. package/2/apps/native/assets/lottie-animations/onboarding-4.json +0 -735
  160. package/2/apps/native/assets/lottie-animations/onboarding-6.json +0 -2167
  161. package/2/apps/native/assets/splash-icon.png +0 -0
  162. package/2/apps/native/babel.config.js +0 -39
  163. package/2/apps/native/eas.json +0 -75
  164. package/2/apps/native/env.js +0 -196
  165. package/2/apps/native/global.css +0 -51
  166. package/2/apps/native/index.ts +0 -5
  167. package/2/apps/native/jest-setup.ts +0 -7
  168. package/2/apps/native/jest.config.js +0 -72
  169. package/2/apps/native/metro.config.js +0 -85
  170. package/2/apps/native/nativewind-env.d.ts +0 -1
  171. package/2/apps/native/package.json +0 -232
  172. package/2/apps/native/scripts/DRY_RUN_REPORT.md +0 -0
  173. package/2/apps/native/scripts/QUICK_START.md +0 -76
  174. package/2/apps/native/scripts/README.md +0 -187
  175. package/2/apps/native/scripts/convex-setup.js +0 -48
  176. package/2/apps/native/scripts/genrate-apk-and-install +0 -39
  177. package/2/apps/native/scripts/i18next-syntax-validation.js +0 -23
  178. package/2/apps/native/scripts/starter-setup.mjs +0 -246
  179. package/2/apps/native/src/api-client/auth.ts +0 -68
  180. package/2/apps/native/src/api-client/chatbot.ts +0 -83
  181. package/2/apps/native/src/api-client/client.ts +0 -4
  182. package/2/apps/native/src/api-client/image-generator.ts +0 -34
  183. package/2/apps/native/src/api-client/index.ts +0 -27
  184. package/2/apps/native/src/api-client/payments.ts +0 -44
  185. package/2/apps/native/src/api-client/reporting.ts +0 -29
  186. package/2/apps/native/src/api-client/shared.ts +0 -43
  187. package/2/apps/native/src/app/(root)/(protected)/(tabs)/_layout.tsx +0 -166
  188. package/2/apps/native/src/app/(root)/(protected)/(tabs)/index.tsx +0 -174
  189. package/2/apps/native/src/app/(root)/(protected)/(tabs)/profile.tsx +0 -320
  190. package/2/apps/native/src/app/(root)/(protected)/(tabs)/settings.tsx +0 -344
  191. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/_layout.tsx +0 -198
  192. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/accordion.tsx +0 -60
  193. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/advanced.tsx +0 -24
  194. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/avatar.tsx +0 -154
  195. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/badge-chips-toggle.tsx +0 -81
  196. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/buttons.tsx +0 -24
  197. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/charts.tsx +0 -3
  198. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/date-picker.tsx +0 -120
  199. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/file-picker.tsx +0 -133
  200. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/gallery-video.tsx +0 -119
  201. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/index.tsx +0 -69
  202. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/inputs-stepper.tsx +0 -78
  203. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/picker-dropdown.tsx +0 -56
  204. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/popover-bottomsheet.tsx +0 -229
  205. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/progress.tsx +0 -38
  206. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/searchbar.tsx +0 -70
  207. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/sliders.tsx +0 -93
  208. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/spinner.tsx +0 -80
  209. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/switch.tsx +0 -47
  210. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/table.tsx +0 -352
  211. package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/tabs-timeline.tsx +0 -122
  212. package/2/apps/native/src/app/(root)/(protected)/_layout.tsx +0 -143
  213. package/2/apps/native/src/app/(root)/(protected)/audio-recorder/index.tsx +0 -5
  214. package/2/apps/native/src/app/(root)/(protected)/charts/index.tsx +0 -6
  215. package/2/apps/native/src/app/(root)/(protected)/chatbot/index.tsx +0 -2
  216. package/2/apps/native/src/app/(root)/(protected)/image-generator/gallery.tsx +0 -3
  217. package/2/apps/native/src/app/(root)/(protected)/image-generator/index.tsx +0 -3
  218. package/2/apps/native/src/app/(root)/(protected)/paywall/index.tsx +0 -74
  219. package/2/apps/native/src/app/(root)/(protected)/paywall/local.tsx +0 -25
  220. package/2/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +0 -23
  221. package/2/apps/native/src/app/(root)/(protected)/quick-actions-demo/index.tsx +0 -32
  222. package/2/apps/native/src/app/(root)/(protected)/quiz/index.tsx +0 -47
  223. package/2/apps/native/src/app/(root)/(protected)/test-wake-word.tsx +0 -214
  224. package/2/apps/native/src/app/(root)/(protected)/tracker-app/index.tsx +0 -1
  225. package/2/apps/native/src/app/(root)/(protected)/voice-bot/index.tsx +0 -27
  226. package/2/apps/native/src/app/(root)/(public)/(auth)/_layout.tsx +0 -44
  227. package/2/apps/native/src/app/(root)/(public)/(auth)/forgot-password.tsx +0 -185
  228. package/2/apps/native/src/app/(root)/(public)/(auth)/login.tsx +0 -219
  229. package/2/apps/native/src/app/(root)/(public)/(auth)/otp-verification.tsx +0 -369
  230. package/2/apps/native/src/app/(root)/(public)/(auth)/reset-password.tsx +0 -247
  231. package/2/apps/native/src/app/(root)/(public)/(auth)/signup.tsx +0 -207
  232. package/2/apps/native/src/app/(root)/(public)/_layout.tsx +0 -60
  233. package/2/apps/native/src/app/(root)/(public)/onboarding/demo-one.tsx +0 -5
  234. package/2/apps/native/src/app/(root)/(public)/onboarding/demo-two.tsx +0 -52
  235. package/2/apps/native/src/app/(root)/(public)/onboarding/index.tsx +0 -82
  236. package/2/apps/native/src/app/(root)/_layout.tsx +0 -30
  237. package/2/apps/native/src/app/+html.tsx +0 -46
  238. package/2/apps/native/src/app/[...messing].tsx +0 -24
  239. package/2/apps/native/src/app/_layout.tsx +0 -56
  240. package/2/apps/native/src/app/tsconfig.json +0 -3
  241. package/2/apps/native/src/components/advanced-ui/buttons/glowing-button.tsx +0 -366
  242. package/2/apps/native/src/components/analytics/navigation-tracker.tsx +0 -10
  243. package/2/apps/native/src/components/demo/advanced-ui-components.tsx +0 -46
  244. package/2/apps/native/src/components/demo/buttons-demo.tsx +0 -56
  245. package/2/apps/native/src/components/demo/colors-demo.tsx +0 -52
  246. package/2/apps/native/src/components/demo/dropdown-picker-demo.tsx +0 -274
  247. package/2/apps/native/src/components/demo/inputs-demo.tsx +0 -99
  248. package/2/apps/native/src/components/demo/notification-demo.tsx +0 -434
  249. package/2/apps/native/src/components/demo/title-demo.tsx +0 -16
  250. package/2/apps/native/src/components/demo/toast-demo.tsx +0 -81
  251. package/2/apps/native/src/components/demo/typography-demo.tsx +0 -28
  252. package/2/apps/native/src/components/performance/render-performance-monitor.tsx +0 -36
  253. package/2/apps/native/src/components/ui/accordion.tsx +0 -138
  254. package/2/apps/native/src/components/ui/avatar.tsx +0 -66
  255. package/2/apps/native/src/components/ui/badge.tsx +0 -68
  256. package/2/apps/native/src/components/ui/bottom-sheet.tsx +0 -61
  257. package/2/apps/native/src/components/ui/colors.js +0 -290
  258. package/2/apps/native/src/components/ui/core/button.tsx +0 -317
  259. package/2/apps/native/src/components/ui/core/card.tsx +0 -40
  260. package/2/apps/native/src/components/ui/core/checkbox.tsx +0 -264
  261. package/2/apps/native/src/components/ui/core/feature-button.tsx +0 -162
  262. package/2/apps/native/src/components/ui/core/focus-aware-status-bar.tsx +0 -21
  263. package/2/apps/native/src/components/ui/core/image.tsx +0 -30
  264. package/2/apps/native/src/components/ui/core/inputs/floating-text-input.tsx +0 -369
  265. package/2/apps/native/src/components/ui/core/inputs/input-otp.tsx +0 -304
  266. package/2/apps/native/src/components/ui/core/inputs/input.tsx +0 -373
  267. package/2/apps/native/src/components/ui/core/list.tsx +0 -60
  268. package/2/apps/native/src/components/ui/core/navigation/animated-header.tsx +0 -87
  269. package/2/apps/native/src/components/ui/core/navigation/screen-footer.tsx +0 -67
  270. package/2/apps/native/src/components/ui/core/overlays/dropdown.tsx +0 -290
  271. package/2/apps/native/src/components/ui/core/overlays/full-screen-loading.tsx +0 -15
  272. package/2/apps/native/src/components/ui/core/overlays/modal-keyboard-aware-scroll-view.tsx +0 -46
  273. package/2/apps/native/src/components/ui/core/overlays/modal.tsx +0 -247
  274. package/2/apps/native/src/components/ui/core/pagination-dots.tsx +0 -231
  275. package/2/apps/native/src/components/ui/core/pressable.tsx +0 -48
  276. package/2/apps/native/src/components/ui/core/progress-bar.tsx +0 -47
  277. package/2/apps/native/src/components/ui/core/progress.tsx +0 -149
  278. package/2/apps/native/src/components/ui/core/select.tsx +0 -261
  279. package/2/apps/native/src/components/ui/core/spinner.tsx +0 -387
  280. package/2/apps/native/src/components/ui/core/text.tsx +0 -45
  281. package/2/apps/native/src/components/ui/core/toast.tsx +0 -190
  282. package/2/apps/native/src/components/ui/custom-switch.tsx +0 -90
  283. package/2/apps/native/src/components/ui/date-time-picker.tsx +0 -268
  284. package/2/apps/native/src/components/ui/debug.ts +0 -2
  285. package/2/apps/native/src/components/ui/extras/debug-credit-tester.tsx +0 -107
  286. package/2/apps/native/src/components/ui/extras/debug-mmkv-state.tsx +0 -53
  287. package/2/apps/native/src/components/ui/extras/handle-error.ts +0 -191
  288. package/2/apps/native/src/components/ui/extras/hello-wave.tsx +0 -70
  289. package/2/apps/native/src/components/ui/extras/icon.tsx +0 -36
  290. package/2/apps/native/src/components/ui/extras/network-connectivity-wrapper.tsx +0 -36
  291. package/2/apps/native/src/components/ui/extras/offline-indicator.tsx +0 -55
  292. package/2/apps/native/src/components/ui/extras/social-login-buttons.tsx +0 -296
  293. package/2/apps/native/src/components/ui/file-picker.tsx +0 -177
  294. package/2/apps/native/src/components/ui/gallery.tsx +0 -79
  295. package/2/apps/native/src/components/ui/icons/apple.tsx +0 -19
  296. package/2/apps/native/src/components/ui/icons/arrow-right.tsx +0 -26
  297. package/2/apps/native/src/components/ui/icons/camera.tsx +0 -26
  298. package/2/apps/native/src/components/ui/icons/caret-down.tsx +0 -20
  299. package/2/apps/native/src/components/ui/icons/chevron-up.tsx +0 -21
  300. package/2/apps/native/src/components/ui/icons/claude.tsx +0 -15
  301. package/2/apps/native/src/components/ui/icons/copy.tsx +0 -27
  302. package/2/apps/native/src/components/ui/icons/deepseek.tsx +0 -15
  303. package/2/apps/native/src/components/ui/icons/download.tsx +0 -32
  304. package/2/apps/native/src/components/ui/icons/feed.tsx +0 -12
  305. package/2/apps/native/src/components/ui/icons/gemini.tsx +0 -15
  306. package/2/apps/native/src/components/ui/icons/github.tsx +0 -30
  307. package/2/apps/native/src/components/ui/icons/google.tsx +0 -24
  308. package/2/apps/native/src/components/ui/icons/groq.tsx +0 -15
  309. package/2/apps/native/src/components/ui/icons/home.tsx +0 -19
  310. package/2/apps/native/src/components/ui/icons/index.tsx +0 -26
  311. package/2/apps/native/src/components/ui/icons/language.tsx +0 -33
  312. package/2/apps/native/src/components/ui/icons/llama.tsx +0 -15
  313. package/2/apps/native/src/components/ui/icons/microphone.tsx +0 -20
  314. package/2/apps/native/src/components/ui/icons/mistral.tsx +0 -22
  315. package/2/apps/native/src/components/ui/icons/nutrition.tsx +0 -15
  316. package/2/apps/native/src/components/ui/icons/openai.tsx +0 -15
  317. package/2/apps/native/src/components/ui/icons/perplexity.tsx +0 -22
  318. package/2/apps/native/src/components/ui/icons/qwen.tsx +0 -15
  319. package/2/apps/native/src/components/ui/icons/rate.tsx +0 -24
  320. package/2/apps/native/src/components/ui/icons/report.tsx +0 -20
  321. package/2/apps/native/src/components/ui/icons/send-horizontal.tsx +0 -26
  322. package/2/apps/native/src/components/ui/icons/settings.tsx +0 -12
  323. package/2/apps/native/src/components/ui/icons/share.tsx +0 -16
  324. package/2/apps/native/src/components/ui/icons/square.tsx +0 -9
  325. package/2/apps/native/src/components/ui/icons/style.tsx +0 -22
  326. package/2/apps/native/src/components/ui/icons/support.tsx +0 -27
  327. package/2/apps/native/src/components/ui/icons/trash2.tsx +0 -42
  328. package/2/apps/native/src/components/ui/icons/user.tsx +0 -12
  329. package/2/apps/native/src/components/ui/icons/website.tsx +0 -28
  330. package/2/apps/native/src/components/ui/icons/wifi-off.tsx +0 -17
  331. package/2/apps/native/src/components/ui/index.tsx +0 -14
  332. package/2/apps/native/src/components/ui/nav-item.tsx +0 -42
  333. package/2/apps/native/src/components/ui/patterns/index.ts +0 -16
  334. package/2/apps/native/src/components/ui/picker.tsx +0 -244
  335. package/2/apps/native/src/components/ui/popover.tsx +0 -313
  336. package/2/apps/native/src/components/ui/primitives/index.ts +0 -38
  337. package/2/apps/native/src/components/ui/radio-group.tsx +0 -47
  338. package/2/apps/native/src/components/ui/searchbar.tsx +0 -118
  339. package/2/apps/native/src/components/ui/sheet.tsx +0 -93
  340. package/2/apps/native/src/components/ui/switch.tsx +0 -37
  341. package/2/apps/native/src/components/ui/table.tsx +0 -296
  342. package/2/apps/native/src/components/ui/tabs.tsx +0 -115
  343. package/2/apps/native/src/components/ui/toggle.tsx +0 -50
  344. package/2/apps/native/src/components/ui/utils.tsx +0 -34
  345. package/2/apps/native/src/components/ui/video.tsx +0 -39
  346. package/2/apps/native/src/core/analytics/analytics-service.ts +0 -94
  347. package/2/apps/native/src/core/analytics/index.ts +0 -2
  348. package/2/apps/native/src/core/analytics/posthog-analytics-adapter.ts +0 -192
  349. package/2/apps/native/src/core/auth/auth-service.ts +0 -33
  350. package/2/apps/native/src/core/auth/index.ts +0 -1
  351. package/2/apps/native/src/core/cache/__tests__/cache-service.test.ts +0 -599
  352. package/2/apps/native/src/core/cache/cache-service.ts +0 -89
  353. package/2/apps/native/src/core/cache/index.ts +0 -45
  354. package/2/apps/native/src/core/config/config.service.ts +0 -153
  355. package/2/apps/native/src/core/config/index.ts +0 -2
  356. package/2/apps/native/src/core/config/telemetry.ts +0 -38
  357. package/2/apps/native/src/core/local-notifications/local-notification-manager.ts +0 -409
  358. package/2/apps/native/src/core/logging/custom-transports.ts +0 -126
  359. package/2/apps/native/src/core/logging/index.ts +0 -1
  360. package/2/apps/native/src/core/logging/logger.ts +0 -182
  361. package/2/apps/native/src/core/navigation/deep-link-handler.ts +0 -295
  362. package/2/apps/native/src/core/navigation/navigation-types.ts +0 -53
  363. package/2/apps/native/src/core/payments/index.ts +0 -1
  364. package/2/apps/native/src/core/payments/payment-service.ts +0 -32
  365. package/2/apps/native/src/core/quick-actions/index.ts +0 -2
  366. package/2/apps/native/src/core/quick-actions/quick-actions-adapter.ts +0 -54
  367. package/2/apps/native/src/core/quick-actions/types.ts +0 -29
  368. package/2/apps/native/src/core/storage/index.ts +0 -1
  369. package/2/apps/native/src/core/storage/mmkv.ts +0 -62
  370. package/2/apps/native/src/core/storage/notification-storage.ts +0 -312
  371. package/2/apps/native/src/core/types/common.ts +0 -0
  372. package/2/apps/native/src/core/utils/convex-http-api.ts +0 -30
  373. package/2/apps/native/src/features/audio-recorder/components/audio-player.tsx +0 -301
  374. package/2/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +0 -373
  375. package/2/apps/native/src/features/audio-recorder/components/audio-waveform.tsx +0 -270
  376. package/2/apps/native/src/features/audio-recorder/components/index.ts +0 -4
  377. package/2/apps/native/src/features/audio-recorder/components/recording-list.tsx +0 -89
  378. package/2/apps/native/src/features/audio-recorder/demo/audio-player-demo.tsx +0 -66
  379. package/2/apps/native/src/features/audio-recorder/demo/audio-recorder-cloud.tsx +0 -68
  380. package/2/apps/native/src/features/audio-recorder/demo/audio-recorder-interview.tsx +0 -102
  381. package/2/apps/native/src/features/audio-recorder/demo/basic.tsx +0 -27
  382. package/2/apps/native/src/features/audio-recorder/demo/index.ts +0 -5
  383. package/2/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +0 -82
  384. package/2/apps/native/src/features/authentication/components/auth-watcher.tsx +0 -115
  385. package/2/apps/native/src/features/authentication/components/login-form.tsx +0 -85
  386. package/2/apps/native/src/features/authentication/services/__tests__/convex-auth.adapter.test.ts +0 -399
  387. package/2/apps/native/src/features/authentication/services/convex-auth.adapter.ts +0 -497
  388. package/2/apps/native/src/features/authentication/services/index.ts +0 -2
  389. package/2/apps/native/src/features/charts/README.md +0 -185
  390. package/2/apps/native/src/features/charts/app/preview.tsx +0 -226
  391. package/2/apps/native/src/features/charts/components/area-chart.tsx +0 -43
  392. package/2/apps/native/src/features/charts/components/bar-chart.tsx +0 -146
  393. package/2/apps/native/src/features/charts/components/candlestick-chart.tsx +0 -199
  394. package/2/apps/native/src/features/charts/components/chart-card.tsx +0 -68
  395. package/2/apps/native/src/features/charts/components/column-chart.tsx +0 -146
  396. package/2/apps/native/src/features/charts/components/doughnut-chart.tsx +0 -260
  397. package/2/apps/native/src/features/charts/components/index.ts +0 -13
  398. package/2/apps/native/src/features/charts/components/line-chart.tsx +0 -311
  399. package/2/apps/native/src/features/charts/components/radar-chart.tsx +0 -183
  400. package/2/apps/native/src/features/charts/components/radial-bar-chart.tsx +0 -191
  401. package/2/apps/native/src/features/charts/components/stacked-area-chart.tsx +0 -268
  402. package/2/apps/native/src/features/charts/components/stacked-bar-chart.tsx +0 -325
  403. package/2/apps/native/src/features/charts/data/mock-data.ts +0 -186
  404. package/2/apps/native/src/features/charts/types/index.ts +0 -69
  405. package/2/apps/native/src/features/chatbot/app/index.tsx +0 -303
  406. package/2/apps/native/src/features/chatbot/components/chat-header-buttons.tsx +0 -60
  407. package/2/apps/native/src/features/chatbot/components/chat-input-bar.tsx +0 -470
  408. package/2/apps/native/src/features/chatbot/components/chat-markdown.tsx +0 -576
  409. package/2/apps/native/src/features/chatbot/components/chat-message-bubble.tsx +0 -247
  410. package/2/apps/native/src/features/chatbot/components/chat-settings-modal.tsx +0 -162
  411. package/2/apps/native/src/features/chatbot/components/image-preview-list.tsx +0 -116
  412. package/2/apps/native/src/features/chatbot/components/markdown/code-block.tsx +0 -166
  413. package/2/apps/native/src/features/chatbot/components/markdown/index.ts +0 -11
  414. package/2/apps/native/src/features/chatbot/components/markdown/table-renderer.tsx +0 -130
  415. package/2/apps/native/src/features/chatbot/components/message-error-boundary.tsx +0 -79
  416. package/2/apps/native/src/features/chatbot/components/message-list.tsx +0 -174
  417. package/2/apps/native/src/features/chatbot/components/model-selector.tsx +0 -284
  418. package/2/apps/native/src/features/chatbot/components/report-content-modal.tsx +0 -189
  419. package/2/apps/native/src/features/chatbot/components/suggested-messages.tsx +0 -68
  420. package/2/apps/native/src/features/chatbot/constants/models.ts +0 -21
  421. package/2/apps/native/src/features/chatbot/constants/report-reasons.ts +0 -10
  422. package/2/apps/native/src/features/chatbot/hooks/use-attachment-cache.ts +0 -144
  423. package/2/apps/native/src/features/chatbot/hooks/use-chat-config.ts +0 -665
  424. package/2/apps/native/src/features/chatbot/hooks/use-chat-handlers.ts +0 -360
  425. package/2/apps/native/src/features/chatbot/hooks/use-chatbot-settings.ts +0 -90
  426. package/2/apps/native/src/features/chatbot/hooks/use-conversation.ts +0 -80
  427. package/2/apps/native/src/features/chatbot/hooks/use-image-picker.ts +0 -123
  428. package/2/apps/native/src/features/chatbot/hooks/use-keyboard-coordinator.ts +0 -162
  429. package/2/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +0 -214
  430. package/2/apps/native/src/features/chatbot/models/index.ts +0 -87
  431. package/2/apps/native/src/features/chatbot/models/models.ts +0 -163
  432. package/2/apps/native/src/features/chatbot/models/providers.ts +0 -63
  433. package/2/apps/native/src/features/chatbot/models/types.ts +0 -41
  434. package/2/apps/native/src/features/chatbot/services/file-uploader.ts +0 -239
  435. package/2/apps/native/src/features/chatbot/services/message-handler-service.ts +0 -181
  436. package/2/apps/native/src/features/chatbot/types/index.ts +0 -61
  437. package/2/apps/native/src/features/chatbot/utils/chat-telemetry.ts +0 -92
  438. package/2/apps/native/src/features/image-generator/app/_layout.tsx +0 -26
  439. package/2/apps/native/src/features/image-generator/app/gallery.tsx +0 -217
  440. package/2/apps/native/src/features/image-generator/app/index.tsx +0 -237
  441. package/2/apps/native/src/features/image-generator/components/gallery-image.tsx +0 -25
  442. package/2/apps/native/src/features/image-generator/components/image-detail-modal.tsx +0 -215
  443. package/2/apps/native/src/features/image-generator/components/image-model-selector.tsx +0 -210
  444. package/2/apps/native/src/features/image-generator/components/image-placeholder.tsx +0 -26
  445. package/2/apps/native/src/features/image-generator/hooks/use-image-gallery.ts +0 -71
  446. package/2/apps/native/src/features/image-generator/hooks/use-image-generator-settings.ts +0 -152
  447. package/2/apps/native/src/features/image-generator/hooks/use-image-generator.ts +0 -93
  448. package/2/apps/native/src/features/image-generator/models/models.ts +0 -66
  449. package/2/apps/native/src/features/image-generator/services/image-gallery-service.ts +0 -98
  450. package/2/apps/native/src/features/image-generator/services/image-save-service.ts +0 -121
  451. package/2/apps/native/src/features/onboarding/analytics/index.ts +0 -9
  452. package/2/apps/native/src/features/onboarding/components/onboarding-with-analytics.tsx +0 -141
  453. package/2/apps/native/src/features/onboarding/components/onboarding.tsx +0 -173
  454. package/2/apps/native/src/features/onboarding/config/onboarding-flow-config.ts +0 -189
  455. package/2/apps/native/src/features/onboarding/demo-one/app/index.tsx +0 -43
  456. package/2/apps/native/src/features/onboarding/demo-one/data.ts +0 -32
  457. package/2/apps/native/src/features/onboarding/hooks/use-onboarding-analytics.ts +0 -323
  458. package/2/apps/native/src/features/onboarding/services/onboarding-analytics.ts +0 -432
  459. package/2/apps/native/src/features/payments/README.md +0 -200
  460. package/2/apps/native/src/features/payments/app/local-paywall.tsx +0 -194
  461. package/2/apps/native/src/features/payments/app/remote-paywall.tsx +0 -79
  462. package/2/apps/native/src/features/payments/components/payment-initializer.tsx +0 -95
  463. package/2/apps/native/src/features/payments/components/paywall-error-state.tsx +0 -60
  464. package/2/apps/native/src/features/payments/components/paywall-local-mode.tsx +0 -116
  465. package/2/apps/native/src/features/payments/components/paywall-product-card.tsx +0 -133
  466. package/2/apps/native/src/features/payments/components/paywall-remote-mode.tsx +0 -146
  467. package/2/apps/native/src/features/payments/hooks/use-entitlement.ts +0 -63
  468. package/2/apps/native/src/features/payments/index.ts +0 -8
  469. package/2/apps/native/src/features/payments/services/revenuecat-adapter.ts +0 -407
  470. package/2/apps/native/src/features/quick-actions/components/quick-actions-demo.tsx +0 -139
  471. package/2/apps/native/src/features/quick-actions/config/default-actions.ts +0 -83
  472. package/2/apps/native/src/features/quick-actions/hooks/use-quick-actions.ts +0 -45
  473. package/2/apps/native/src/features/quick-actions/index.ts +0 -4
  474. package/2/apps/native/src/features/quick-actions/utils/quick-actions-manager.ts +0 -105
  475. package/2/apps/native/src/features/quiz/components/question.tsx +0 -67
  476. package/2/apps/native/src/features/quiz/config.ts +0 -11
  477. package/2/apps/native/src/features/quiz/index.tsx +0 -133
  478. package/2/apps/native/src/features/settings/ui/debug-info.tsx +0 -75
  479. package/2/apps/native/src/features/settings/ui/dev-tools.tsx +0 -1
  480. package/2/apps/native/src/features/settings/ui/item.tsx +0 -45
  481. package/2/apps/native/src/features/settings/ui/items-container.tsx +0 -23
  482. package/2/apps/native/src/features/settings/ui/language-item.tsx +0 -52
  483. package/2/apps/native/src/features/settings/ui/notification-item.tsx +0 -59
  484. package/2/apps/native/src/features/settings/ui/theme-item.tsx +0 -45
  485. package/2/apps/native/src/features/tracker-app/app/index.tsx +0 -108
  486. package/2/apps/native/src/features/tracker-app/components/animated-number.tsx +0 -102
  487. package/2/apps/native/src/features/tracker-app/components/calorie-card.tsx +0 -66
  488. package/2/apps/native/src/features/tracker-app/components/circular-progress.tsx +0 -97
  489. package/2/apps/native/src/features/tracker-app/components/floating-add-button.tsx +0 -27
  490. package/2/apps/native/src/features/tracker-app/components/macro-card.tsx +0 -80
  491. package/2/apps/native/src/features/tracker-app/components/promo-banner.tsx +0 -98
  492. package/2/apps/native/src/features/tracker-app/components/recently-logged.tsx +0 -64
  493. package/2/apps/native/src/features/tracker-app/components/week-calendar.tsx +0 -68
  494. package/2/apps/native/src/features/vibefast-features.ts +0 -42
  495. package/2/apps/native/src/features/voice-bot/README.md +0 -185
  496. package/2/apps/native/src/features/voice-bot/components/conversation-status.tsx +0 -76
  497. package/2/apps/native/src/features/voice-bot/components/index.ts +0 -4
  498. package/2/apps/native/src/features/voice-bot/components/message-input.tsx +0 -98
  499. package/2/apps/native/src/features/voice-bot/components/voice-bot-screen.tsx +0 -173
  500. package/2/apps/native/src/features/voice-bot/components/voice-controls.tsx +0 -73
  501. package/2/apps/native/src/features/voice-bot/index.ts +0 -3
  502. package/2/apps/native/src/features/voice-bot/services/index.ts +0 -1
  503. package/2/apps/native/src/features/voice-bot/services/use-voice-bot.ts +0 -161
  504. package/2/apps/native/src/features/voice-bot/types.ts +0 -29
  505. package/2/apps/native/src/features/wake-word/components/index.ts +0 -1
  506. package/2/apps/native/src/features/wake-word/components/wake-word-indicator.tsx +0 -61
  507. package/2/apps/native/src/features/wake-word/constants.ts +0 -10
  508. package/2/apps/native/src/features/wake-word/hooks/use-wake-word.ts +0 -181
  509. package/2/apps/native/src/features/wake-word/index.ts +0 -22
  510. package/2/apps/native/src/features/wake-word/services/audio-session.ts +0 -40
  511. package/2/apps/native/src/features/wake-word/services/event-bus.ts +0 -31
  512. package/2/apps/native/src/features/wake-word/services/keywords.ts +0 -88
  513. package/2/apps/native/src/features/wake-word/services/wake-word-manager.ts +0 -249
  514. package/2/apps/native/src/features/wake-word/types.ts +0 -22
  515. package/2/apps/native/src/lib/env.js +0 -13
  516. package/2/apps/native/src/lib/hooks/index.tsx +0 -6
  517. package/2/apps/native/src/lib/hooks/use-device-identifier.tsx +0 -80
  518. package/2/apps/native/src/lib/hooks/use-gradual-animation.ts +0 -28
  519. package/2/apps/native/src/lib/hooks/use-is-first-time.tsx +0 -25
  520. package/2/apps/native/src/lib/hooks/use-navigation-analytics.ts +0 -44
  521. package/2/apps/native/src/lib/hooks/use-navigation-options.tsx +0 -87
  522. package/2/apps/native/src/lib/hooks/use-push-notifications.ts +0 -250
  523. package/2/apps/native/src/lib/hooks/use-responsive-size.tsx +0 -37
  524. package/2/apps/native/src/lib/hooks/use-selected-theme.tsx +0 -38
  525. package/2/apps/native/src/lib/hooks/use-viewport-lazy-loading.tsx +0 -124
  526. package/2/apps/native/src/lib/i18n/index.tsx +0 -30
  527. package/2/apps/native/src/lib/i18n/react-i18next.d.ts +0 -9
  528. package/2/apps/native/src/lib/i18n/resources.ts +0 -25
  529. package/2/apps/native/src/lib/i18n/types.ts +0 -23
  530. package/2/apps/native/src/lib/i18n/utils.tsx +0 -112
  531. package/2/apps/native/src/lib/index.tsx +0 -3
  532. package/2/apps/native/src/lib/state/auth-client-slice.ts +0 -34
  533. package/2/apps/native/src/lib/state/index.ts +0 -1
  534. package/2/apps/native/src/lib/storage.tsx +0 -7
  535. package/2/apps/native/src/lib/test-utils.tsx +0 -43
  536. package/2/apps/native/src/lib/use-theme-config.tsx +0 -108
  537. package/2/apps/native/src/lib/utils.ts +0 -29
  538. package/2/apps/native/src/polyfills.ts +0 -61
  539. package/2/apps/native/src/providers/convex-provider.tsx +0 -31
  540. package/2/apps/native/src/providers/index.tsx +0 -6
  541. package/2/apps/native/src/providers/notification-provider.tsx +0 -168
  542. package/2/apps/native/src/providers/posthog-provider.tsx +0 -47
  543. package/2/apps/native/src/providers/root-providers.tsx +0 -46
  544. package/2/apps/native/src/providers/sentry-provider.tsx +0 -62
  545. package/2/apps/native/src/providers/splash-screen-provider.tsx +0 -122
  546. package/2/apps/native/src/providers/theme-provider.tsx +0 -67
  547. package/2/apps/native/src/translations/ar.json +0 -394
  548. package/2/apps/native/src/translations/de.json +0 -394
  549. package/2/apps/native/src/translations/en.json +0 -394
  550. package/2/apps/native/src/translations/es.json +0 -394
  551. package/2/apps/native/src/translations/fr.json +0 -394
  552. package/2/apps/native/src/types/flash-list.d.ts +0 -3
  553. package/2/apps/native/src/types/index.ts +0 -3
  554. package/2/apps/native/src/types/react-native-reanimated.d.ts +0 -5
  555. package/2/apps/native/tailwind.config.js +0 -57
  556. package/2/apps/native/targets/widget/AppIntent.swift +0 -46
  557. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
  558. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
  559. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
  560. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
  561. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
  562. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
  563. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
  564. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
  565. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
  566. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
  567. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
  568. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
  569. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
  570. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
  571. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -122
  572. package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
  573. package/2/apps/native/targets/widget/CalorieTrackerWidget.swift +0 -424
  574. package/2/apps/native/targets/widget/HabitTrackerWidget.swift +0 -305
  575. package/2/apps/native/targets/widget/Info.plist +0 -11
  576. package/2/apps/native/targets/widget/WidgetLiveActivity.swift +0 -75
  577. package/2/apps/native/targets/widget/expo-target.config.js +0 -10
  578. package/2/apps/native/targets/widget/generated.entitlements +0 -5
  579. package/2/apps/native/targets/widget/index.swift +0 -18
  580. package/2/apps/native/targets/widget/widgets.swift +0 -96
  581. package/2/apps/native/tsconfig.json +0 -88
  582. package/2/apps/native/vitest.config.mts +0 -14
  583. package/2/apps/web/README.md +0 -36
  584. package/2/apps/web/app/favicon.ico +0 -0
  585. package/2/apps/web/app/globals.css +0 -122
  586. package/2/apps/web/app/layout.tsx +0 -38
  587. package/2/apps/web/app/page.tsx +0 -35
  588. package/2/apps/web/app/users/page.tsx +0 -301
  589. package/2/apps/web/components/AdminDashboard.tsx +0 -336
  590. package/2/apps/web/components/AppleLogo.tsx +0 -15
  591. package/2/apps/web/components/GitHubLogo.tsx +0 -11
  592. package/2/apps/web/components/GoogleLogo.tsx +0 -23
  593. package/2/apps/web/components/Layout.tsx +0 -77
  594. package/2/apps/web/components/ThemeToggle.tsx +0 -23
  595. package/2/apps/web/components/UserMenu.tsx +0 -66
  596. package/2/apps/web/components/auth/CodeInput.tsx +0 -24
  597. package/2/apps/web/components/auth/ResetPasswordWithEmailCode.tsx +0 -85
  598. package/2/apps/web/components/auth/SignInFormEmailCode.tsx +0 -72
  599. package/2/apps/web/components/auth/SignInFormEmailLink.tsx +0 -81
  600. package/2/apps/web/components/auth/SignInFormPassword.tsx +0 -17
  601. package/2/apps/web/components/auth/SignInFormPasswordAndCustomField.tsx +0 -42
  602. package/2/apps/web/components/auth/SignInFormPasswordAndResetViaCode.tsx +0 -32
  603. package/2/apps/web/components/auth/SignInFormPasswordAndVerifyViaCode.tsx +0 -86
  604. package/2/apps/web/components/auth/SignInFormPhoneCode.tsx +0 -89
  605. package/2/apps/web/components/auth/SignInFormsShowcase.tsx +0 -64
  606. package/2/apps/web/components/auth/SignInMethodDivider.tsx +0 -17
  607. package/2/apps/web/components/auth/SignInWithEmailCode.tsx +0 -49
  608. package/2/apps/web/components/auth/SignInWithOAuth.tsx +0 -16
  609. package/2/apps/web/components/auth/SignInWithPassword.tsx +0 -100
  610. package/2/apps/web/components/auth/oauth/SignInWithApple.tsx +0 -27
  611. package/2/apps/web/components/auth/oauth/SignInWithGitHub.tsx +0 -27
  612. package/2/apps/web/components/auth/oauth/SignInWithGoogle.tsx +0 -27
  613. package/2/apps/web/components/ui/button.tsx +0 -60
  614. package/2/apps/web/components/ui/card.tsx +0 -92
  615. package/2/apps/web/components/ui/dialog.tsx +0 -143
  616. package/2/apps/web/components/ui/dropdown-menu.tsx +0 -257
  617. package/2/apps/web/components/ui/input-otp.tsx +0 -77
  618. package/2/apps/web/components/ui/input.tsx +0 -21
  619. package/2/apps/web/components/ui/skeleton.tsx +0 -13
  620. package/2/apps/web/components/ui/tabs.tsx +0 -66
  621. package/2/apps/web/components/ui/toast.tsx +0 -130
  622. package/2/apps/web/components/ui/toaster.tsx +0 -36
  623. package/2/apps/web/components/ui/toggle-group.tsx +0 -83
  624. package/2/apps/web/components/ui/toggle.tsx +0 -47
  625. package/2/apps/web/components/ui/use-toast.ts +0 -192
  626. package/2/apps/web/components.json +0 -22
  627. package/2/apps/web/eslint.config.mjs +0 -18
  628. package/2/apps/web/lib/convex-provider.tsx +0 -18
  629. package/2/apps/web/lib/utils.ts +0 -6
  630. package/2/apps/web/next.config.ts +0 -7
  631. package/2/apps/web/package.json +0 -46
  632. package/2/apps/web/postcss.config.mjs +0 -7
  633. package/2/apps/web/public/file.svg +0 -1
  634. package/2/apps/web/public/globe.svg +0 -1
  635. package/2/apps/web/public/next.svg +0 -1
  636. package/2/apps/web/public/vercel.svg +0 -1
  637. package/2/apps/web/public/window.svg +0 -1
  638. package/2/apps/web/tsconfig.json +0 -34
  639. package/2/bts.jsonc +0 -21
  640. package/2/commitlint.config.js +0 -1
  641. package/2/eslint.config.mjs +0 -182
  642. package/2/lint-staged.config.js +0 -16
  643. package/2/package.json +0 -64
  644. package/2/packages/backend/.env.example +0 -20
  645. package/2/packages/backend/convex/README.md +0 -90
  646. package/2/packages/backend/convex/_generated/api.d.ts +0 -2599
  647. package/2/packages/backend/convex/_generated/api.js +0 -23
  648. package/2/packages/backend/convex/_generated/dataModel.d.ts +0 -60
  649. package/2/packages/backend/convex/_generated/server.d.ts +0 -149
  650. package/2/packages/backend/convex/_generated/server.js +0 -90
  651. package/2/packages/backend/convex/agents.ts +0 -116
  652. package/2/packages/backend/convex/auth.config.ts +0 -8
  653. package/2/packages/backend/convex/auth.ts +0 -103
  654. package/2/packages/backend/convex/authCustomEmailOtpProvider.ts +0 -175
  655. package/2/packages/backend/convex/authOtp.ts +0 -144
  656. package/2/packages/backend/convex/authPasswordReset.ts +0 -367
  657. package/2/packages/backend/convex/authPasswordResetActions.ts +0 -150
  658. package/2/packages/backend/convex/chatbot/index.ts +0 -30
  659. package/2/packages/backend/convex/chatbotAgent.ts +0 -1085
  660. package/2/packages/backend/convex/chatbotHistory.ts +0 -307
  661. package/2/packages/backend/convex/convex.config.ts +0 -13
  662. package/2/packages/backend/convex/deviceGrants.ts +0 -58
  663. package/2/packages/backend/convex/grantFunctions.ts +0 -444
  664. package/2/packages/backend/convex/http.ts +0 -8
  665. package/2/packages/backend/convex/imageGeneration/index.ts +0 -12
  666. package/2/packages/backend/convex/imageGeneratorFunctions.ts +0 -290
  667. package/2/packages/backend/convex/lib/ai/analysisConfigs.ts +0 -257
  668. package/2/packages/backend/convex/lib/ai/config.ts +0 -71
  669. package/2/packages/backend/convex/lib/ai/geminiAdapter.ts +0 -43
  670. package/2/packages/backend/convex/lib/ai/openaiAdapter.ts +0 -43
  671. package/2/packages/backend/convex/lib/ai/schemas.ts +0 -79
  672. package/2/packages/backend/convex/lib/config.ts +0 -111
  673. package/2/packages/backend/convex/lib/rateLimit.ts +0 -100
  674. package/2/packages/backend/convex/lib/telemetry.ts +0 -29
  675. package/2/packages/backend/convex/paymentFunctions.ts +0 -119
  676. package/2/packages/backend/convex/payments/index.ts +0 -13
  677. package/2/packages/backend/convex/pushNotificationFunctions.ts +0 -342
  678. package/2/packages/backend/convex/ragKnowledge.ts +0 -714
  679. package/2/packages/backend/convex/rateLimit.ts +0 -13
  680. package/2/packages/backend/convex/recordingFunctions.ts +0 -98
  681. package/2/packages/backend/convex/reportFunctions.ts +0 -344
  682. package/2/packages/backend/convex/reporting/index.ts +0 -9
  683. package/2/packages/backend/convex/router.ts +0 -81
  684. package/2/packages/backend/convex/schema.ts +0 -237
  685. package/2/packages/backend/convex/shared/email.ts +0 -172
  686. package/2/packages/backend/convex/shared/files.ts +0 -96
  687. package/2/packages/backend/convex/shared/index.ts +0 -17
  688. package/2/packages/backend/convex/shared/templates/PasswordResetEmail.tsx +0 -72
  689. package/2/packages/backend/convex/shared/templates/VerificationCodeEmail.tsx +0 -65
  690. package/2/packages/backend/convex/sharedUsers.ts +0 -48
  691. package/2/packages/backend/convex/tools/index.ts +0 -18
  692. package/2/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -92
  693. package/2/packages/backend/convex/tools/tavilySearch.ts +0 -83
  694. package/2/packages/backend/convex/tools/userProfile.ts +0 -72
  695. package/2/packages/backend/convex/tsconfig.json +0 -25
  696. package/2/packages/backend/convex/users.ts +0 -54
  697. package/2/packages/backend/index.ts +0 -20
  698. package/2/packages/backend/package.json +0 -32
  699. package/2/packages/ui/README.md +0 -63
  700. package/2/packages/ui/index.ts +0 -1
  701. package/2/packages/ui/package.json +0 -21
  702. package/2/packages/ui/src/components/SharedButton.tsx +0 -31
  703. package/2/packages/ui/src/components/SharedCard.tsx +0 -48
  704. package/2/packages/ui/src/components/index.ts +0 -2
  705. package/2/packages/ui/tsconfig.json +0 -10
  706. package/2/pnpm-lock.yaml +0 -23292
  707. package/2/pnpm-workspace.yaml +0 -3
  708. package/2/scripts/i18next-syntax-validation.js +0 -1
  709. package/2/tsconfig.json +0 -43
  710. package/2/turbo.json +0 -33
  711. package/2/vercel.json +0 -6
  712. package/2/vf-agent/agent-teams/team-vibefast.yaml +0 -14
  713. package/2/vf-agent/agents/analyst.md +0 -53
  714. package/2/vf-agent/agents/architect.md +0 -105
  715. package/2/vf-agent/agents/dev.md +0 -40
  716. package/2/vf-agent/agents/orchestrator.md +0 -181
  717. package/2/vf-agent/agents/pm.md +0 -48
  718. package/2/vf-agent/agents/po.md +0 -38
  719. package/2/vf-agent/agents/qa.md +0 -30
  720. package/2/vf-agent/agents/sm.md +0 -38
  721. package/2/vf-agent/agents/ux-expert.md +0 -33
  722. package/2/vf-agent/checklists/po-master-checklist.md +0 -73
  723. package/2/vf-agent/checklists/story-dod-checklist.md +0 -37
  724. package/2/vf-agent/core-config.yaml +0 -43
  725. package/2/vf-agent/data/knowledge_base/backend/convex-advanced.md +0 -43
  726. package/2/vf-agent/data/knowledge_base/backend/convex-database.md +0 -53
  727. package/2/vf-agent/data/knowledge_base/backend/convex-main.md +0 -65
  728. package/2/vf-agent/data/knowledge_base/backend/full-guidelines.md +0 -795
  729. package/2/vf-agent/data/knowledge_base/coding-standards.md +0 -253
  730. package/2/vf-agent/data/knowledge_base/frontend/full-guidelines.md +0 -254
  731. package/2/vf-agent/data/knowledge_base/frontend/image-handling.md +0 -48
  732. package/2/vf-agent/data/knowledge_base/frontend/react-native-main.md +0 -24
  733. package/2/vf-agent/data/knowledge_base/frontend/ui-and-styling.md +0 -169
  734. package/2/vf-agent/data/knowledge_base/general-principles.md +0 -26
  735. package/2/vf-agent/data/knowledge_base/master-rulebook.md +0 -42
  736. package/2/vf-agent/data/knowledge_base/starter-docs/audio-recorder-reference.md +0 -98
  737. package/2/vf-agent/data/knowledge_base/starter-docs/authentication-reference.md +0 -155
  738. package/2/vf-agent/data/knowledge_base/starter-docs/charts-reference.md +0 -149
  739. package/2/vf-agent/data/knowledge_base/starter-docs/chatbot-reference.md +0 -123
  740. package/2/vf-agent/data/knowledge_base/starter-docs/feature-reference-index.md +0 -211
  741. package/2/vf-agent/data/knowledge_base/starter-docs/features-overview.md +0 -221
  742. package/2/vf-agent/data/knowledge_base/starter-docs/image-analyzer-reference.md +0 -118
  743. package/2/vf-agent/data/knowledge_base/starter-docs/image-generator-reference.md +0 -110
  744. package/2/vf-agent/data/knowledge_base/starter-docs/index.md +0 -28
  745. package/2/vf-agent/data/knowledge_base/starter-docs/onboarding-reference.md +0 -96
  746. package/2/vf-agent/data/knowledge_base/starter-docs/payments-reference.md +0 -148
  747. package/2/vf-agent/data/knowledge_base/starter-docs/prd.md +0 -82
  748. package/2/vf-agent/data/knowledge_base/starter-docs/push-notifications-reference.md +0 -453
  749. package/2/vf-agent/data/knowledge_base/starter-docs/quick-actions-reference.md +0 -253
  750. package/2/vf-agent/data/knowledge_base/starter-docs/quiz-reference.md +0 -169
  751. package/2/vf-agent/data/knowledge_base/starter-docs/settings-reference.md +0 -146
  752. package/2/vf-agent/data/knowledge_base/starter-docs/tech-stack.md +0 -159
  753. package/2/vf-agent/data/knowledge_base/starter-docs/tracker-app-reference.md +0 -150
  754. package/2/vf-agent/data/knowledge_base/starter-docs/unified-project-structure.md +0 -98
  755. package/2/vf-agent/data/knowledge_base/testing/backend-testing.md +0 -54
  756. package/2/vf-agent/data/knowledge_base/testing/frontend-testing.md +0 -71
  757. package/2/vf-agent/data/knowledge_base/testing/testing-strategy.md +0 -31
  758. package/2/vf-agent/tasks/advanced-elicitation.md +0 -117
  759. package/2/vf-agent/tasks/brownfield-create-epic.md +0 -160
  760. package/2/vf-agent/tasks/create-deep-research-prompt.md +0 -278
  761. package/2/vf-agent/tasks/create-doc.md +0 -42
  762. package/2/vf-agent/tasks/create-story.md +0 -43
  763. package/2/vf-agent/tasks/document-project.md +0 -343
  764. package/2/vf-agent/tasks/facilitate-brainstorming-session.md +0 -136
  765. package/2/vf-agent/tasks/index-docs.md +0 -173
  766. package/2/vf-agent/tasks/kb-mode-interaction.md +0 -75
  767. package/2/vf-agent/tasks/review-story.md +0 -154
  768. package/2/vf-agent/tasks/shard-doc.md +0 -185
  769. package/2/vf-agent/tasks/troubleshoot-issue.md +0 -65
  770. package/2/vf-agent/tasks/validate-next-story.md +0 -47
  771. package/2/vf-agent/templates/brainstorming-output-tmpl.yaml +0 -156
  772. package/2/vf-agent/templates/brownfield-architecture-tmpl.yaml +0 -111
  773. package/2/vf-agent/templates/brownfield-prd-tmpl.yaml +0 -247
  774. package/2/vf-agent/templates/competitor-analysis-tmpl.yaml +0 -293
  775. package/2/vf-agent/templates/market-research-tmpl.yaml +0 -252
  776. package/2/vf-agent/templates/project-brief-tmpl.yaml +0 -221
  777. package/2/vf-agent/templates/story-tmpl.yaml +0 -143
  778. package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +0 -444
  779. package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +0 -355
  780. package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +0 -31
  781. package/recipes/wake-word/scripts/download-vosk-model.mjs +0 -121
  782. /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/animated-chip.tsx +0 -0
  783. /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/chip.tsx +0 -0
  784. /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/demo.tsx +0 -0
  785. /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/types.ts +0 -0
  786. /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/animated-switch.tsx +0 -0
  787. /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/demo.tsx +0 -0
  788. /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/types.ts +0 -0
  789. /package/{2 → recipes/glowing-button}/apps/native/src/components/advanced-ui/buttons/demo.tsx +0 -0
  790. /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/front.jpg +0 -0
  791. /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/side.jpg +0 -0
  792. /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/threeQuarter.jpg +0 -0
  793. /package/{2 → recipes/image-analysis}/apps/native/src/api-client/image-analyzer.ts +0 -0
  794. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/_layout.tsx +0 -0
  795. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/analysis-options.tsx +0 -0
  796. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/camera.tsx +0 -0
  797. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/index.tsx +0 -0
  798. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/loading.tsx +0 -0
  799. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/results.tsx +0 -0
  800. /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/trait-details.tsx +0 -0
  801. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +0 -0
  802. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/camera.tsx +0 -0
  803. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +0 -0
  804. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/loading-screen.tsx +0 -0
  805. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/loading.tsx +0 -0
  806. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/results.tsx +0 -0
  807. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/trait-details.tsx +0 -0
  808. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/use-analysis-data.ts +0 -0
  809. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/use-results-screen.ts +0 -0
  810. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-badge.tsx +0 -0
  811. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-card.tsx +0 -0
  812. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-unlocked-modal.tsx +0 -0
  813. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievements-section.tsx +0 -0
  814. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/advice-list.tsx +0 -0
  815. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/circular-progress.tsx +0 -0
  816. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/content-card.tsx +0 -0
  817. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/error-state.tsx +0 -0
  818. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/index.ts +0 -0
  819. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/loading-state.tsx +0 -0
  820. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/profile-image.tsx +0 -0
  821. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/results-header.tsx +0 -0
  822. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/score-display.tsx +0 -0
  823. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/share-options-modal.tsx +0 -0
  824. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/traits-grid.tsx +0 -0
  825. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/config/analysis-config.ts +0 -0
  826. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/config/master-analysis-config.ts +0 -0
  827. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/index.ts +0 -0
  828. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/use-analysis.ts +0 -0
  829. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +0 -0
  830. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/analysis-service.ts +0 -0
  831. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/share-service.ts +0 -0
  832. /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/trait-details-service.ts +0 -0
  833. /package/{2 → recipes/image-analysis}/packages/backend/convex/imageAnalysis/index.ts +0 -0
  834. /package/{2 → recipes/image-analysis}/packages/backend/convex/imageAnalysisFunctions.ts +0 -0
  835. /package/{2 → recipes/image-analysis}/packages/backend/convex/lib/ai/imageAnalysisAdapter.ts +0 -0
  836. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/button/stepper-button.tsx +0 -0
  837. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/button/types.ts +0 -0
  838. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/content/stepper-content.tsx +0 -0
  839. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/content/types.ts +0 -0
  840. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/value/stepper-value.tsx +0 -0
  841. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/value/types.ts +0 -0
  842. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/context/stepper-context.ts +0 -0
  843. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/context/types.ts +0 -0
  844. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/demo.tsx +0 -0
  845. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/index.ts +0 -0
  846. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/stepper.tsx +0 -0
  847. /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/types.ts +0 -0
  848. /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/animated-progress-bar.tsx +0 -0
  849. /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/dropdown-picker-page.tsx +0 -0
  850. /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +0 -0
  851. /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/progress-circle.tsx +0 -0
  852. /package/{2 → recipes/swipe-slider}/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +0 -0
  853. /package/{2 → recipes/swipe-slider}/apps/native/src/components/advanced-ui/sliders/swipe-slider.tsx +0 -0
  854. /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/demo.tsx +0 -0
  855. /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +0 -0
  856. /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/types.ts +0 -0
  857. /package/{2 → recipes/wake-word}/apps/native/scripts/download-vosk-model.mjs +0 -0
@@ -1,336 +0,0 @@
1
- "use client"
2
-
3
- import Link from "next/link";
4
- import { useMemo } from "react";
5
- import { api } from "@vibefast/backend/_generated/api";
6
- import type { FunctionReference } from "@vibefast/backend";
7
- import { Button } from "@/components/ui/button";
8
- import { useQuery } from "convex/react";
9
-
10
- const numberFormatter = new Intl.NumberFormat("en-US");
11
- const dateFormatter = new Intl.DateTimeFormat("en-US", {
12
- month: "short",
13
- day: "numeric",
14
- });
15
-
16
- const contextTiles = [
17
- {
18
- title: "apps/web",
19
- description:
20
- "Next.js now hosts your admin surface. Keep using the shared component library in `components` to iterate quickly.",
21
- badge: "Web Console",
22
- },
23
- {
24
- title: "apps/native",
25
- description:
26
- "The Expo surface shares the same Convex backend, so this admin summary can be referenced there when you build mobile monitoring screens.",
27
- badge: "Mobile Console",
28
- },
29
- {
30
- title: "packages/backend",
31
- description:
32
- "Convex functions live inside `packages/backend/convex`. Add more queries or actions there whenever you want to extend admin tooling.",
33
- badge: "Convex Core",
34
- },
35
- ];
36
-
37
- const badgeForStatus = (status: string) => {
38
- const map: Record<string, string> = {
39
- completed: "bg-emerald-100 text-emerald-700",
40
- processing: "bg-sky-100 text-sky-700",
41
- failed: "bg-rose-100 text-rose-700",
42
- open: "bg-amber-100 text-amber-700",
43
- resolved: "bg-emerald-100 text-emerald-700",
44
- dismissed: "bg-muted/80 text-muted-foreground",
45
- };
46
- return map[status] ?? "bg-muted/80 text-muted-foreground";
47
- };
48
-
49
- type AdminSummary = {
50
- stats: {
51
- userCount: number;
52
- verifiedUsers: number;
53
- totalCredits: number;
54
- totalPurchases: number;
55
- openReports: number;
56
- activeConversations: number;
57
- };
58
- analysisStatus: {
59
- completed: number;
60
- processing: number;
61
- failed: number;
62
- };
63
- recentPurchases: Array<{
64
- _id: string;
65
- productId: string;
66
- creditsAdded: number;
67
- quantity: number;
68
- purchaseDate: number;
69
- userId: string;
70
- }>;
71
- recentAnalyses: Array<{
72
- _id: string;
73
- status: "completed" | "processing" | "failed";
74
- userId: string;
75
- _creationTime: number;
76
- }>;
77
- reportHighlights: Array<{
78
- _id: string;
79
- status: "open" | "resolved" | "dismissed";
80
- reason: string;
81
- reportTimestamp: number;
82
- }>;
83
- generatedAt: number;
84
- };
85
-
86
- const adminSummaryQuery = (
87
- api.reportFunctions as unknown as {
88
- adminDashboardSummary: FunctionReference<
89
- "query",
90
- "public",
91
- never,
92
- AdminSummary
93
- >;
94
- }
95
- ).adminDashboardSummary;
96
-
97
- function formatDate(timestamp?: number) {
98
- if (!timestamp) return "—";
99
- return dateFormatter.format(new Date(timestamp));
100
- }
101
-
102
- export function AdminDashboard({
103
- user,
104
- }: {
105
- user: Awaited<ReturnType<typeof api.sharedUsers.viewer>> | null | undefined;
106
- }) {
107
- const summary = useQuery<AdminSummary>(adminSummaryQuery);
108
- const heroName = user?.name ?? "Platform Admin";
109
- const heroContact = user?.email ?? user?.phone ?? "Connected admin session";
110
-
111
- const stats = summary?.stats;
112
- const statCards = [
113
- {
114
- label: "Registered users",
115
- value: stats?.userCount ?? "—",
116
- detail: `${stats?.verifiedUsers ?? 0} verified`,
117
- },
118
- {
119
- label: "Purchases logged",
120
- value: stats?.totalPurchases ?? "—",
121
- detail: `${numberFormatter.format(stats?.totalCredits ?? 0)} credits issued`,
122
- },
123
- {
124
- label: "Open reports",
125
- value: stats?.openReports ?? "—",
126
- detail: "AI safety inbox",
127
- },
128
- {
129
- label: "Active conversations",
130
- value: stats?.activeConversations ?? "—",
131
- detail: "Chatbot threads",
132
- },
133
- ];
134
-
135
- const analysisStatus = summary?.analysisStatus;
136
- const totalAnalyses = useMemo(
137
- () =>
138
- (analysisStatus?.completed ?? 0) +
139
- (analysisStatus?.processing ?? 0) +
140
- (analysisStatus?.failed ?? 0),
141
- [analysisStatus],
142
- );
143
-
144
- return (
145
- <section className="space-y-8">
146
- <div className="space-y-6 rounded-2xl border bg-card/80 p-6 shadow-lg">
147
- <div className="flex flex-col gap-4 md:flex-row md:items-center md:justify-between">
148
- <div className="space-y-1">
149
- <p className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">
150
- Starter kit admin console
151
- </p>
152
- <h2 className="text-2xl font-semibold text-foreground">
153
- VibeFast admin overview
154
- </h2>
155
- <p className="max-w-2xl text-sm text-muted-foreground">
156
- This dashboard is tuned for your VibeFast admin team. It aggregates data across `apps/web`, `apps/native`, and the Convex core (`packages/backend/convex`)
157
- so you can monitor usage, payments, and safety signals in one glance.
158
- </p>
159
- </div>
160
- <div className="rounded-2xl border bg-background/60 p-4 text-right">
161
- <p className="text-sm font-semibold text-foreground">{heroName}</p>
162
- <p className="text-xs text-muted-foreground">{heroContact}</p>
163
- </div>
164
- </div>
165
- <div className="flex flex-wrap gap-2 text-[0.65rem] font-semibold uppercase tracking-[0.25em] text-muted-foreground">
166
- <span className="rounded-full border px-3 py-1">apps/web</span>
167
- <span className="rounded-full border px-3 py-1">apps/native</span>
168
- <span className="rounded-full border px-3 py-1">packages/backend</span>
169
- </div>
170
- </div>
171
-
172
- <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
173
- {statCards.map((card) => (
174
- <div
175
- key={card.label}
176
- className="rounded-2xl border bg-background/60 p-5 shadow-sm transition hover:border-primary"
177
- >
178
- <p className="text-xs font-medium uppercase tracking-[0.25em] text-muted-foreground">{card.label}</p>
179
- <p className="mt-3 text-3xl font-semibold text-foreground">{card.value}</p>
180
- <p className="mt-1 text-xs text-muted-foreground">{card.detail}</p>
181
- </div>
182
- ))}
183
- </div>
184
-
185
- <div className="grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,0.9fr)]">
186
- <div className="rounded-2xl border bg-card/60 p-6 shadow-sm">
187
- <div className="mb-4 flex items-center justify-between">
188
- <div>
189
- <p className="text-sm font-semibold text-foreground">Recent global purchases</p>
190
- <p className="text-xs text-muted-foreground">Sorted by newest first</p>
191
- </div>
192
- <span className="text-xs font-semibold uppercase text-primary">Top view</span>
193
- </div>
194
- {(!summary?.recentPurchases || summary.recentPurchases.length === 0) && (
195
- <p className="text-sm text-muted-foreground">
196
- No purchases logged yet. Hook up your payments pipeline inside `packages/backend/convex/paymentFunctions.ts`.
197
- </p>
198
- )}
199
- {summary?.recentPurchases && summary.recentPurchases.length > 0 && (
200
- <div className="space-y-4">
201
- {summary.recentPurchases.map((purchase) => (
202
- <div
203
- key={purchase._id}
204
- className="flex items-center justify-between rounded-2xl border border-dashed border-border/60 p-4"
205
- >
206
- <div className="space-y-1">
207
- <p className="text-sm font-semibold text-foreground">{purchase.productId}</p>
208
- <p className="text-xs text-muted-foreground">
209
- {purchase.quantity} item(s) · {formatDate(purchase.purchaseDate)}
210
- </p>
211
- <p className="text-[0.65rem] uppercase tracking-[0.25em] text-muted-foreground">
212
- {purchase.userId}
213
- </p>
214
- </div>
215
- <div className="text-right text-sm font-semibold text-foreground">
216
- +{numberFormatter.format(purchase.creditsAdded)} credits
217
- <p className="text-xs text-muted-foreground">credits granted</p>
218
- </div>
219
- </div>
220
- ))}
221
- </div>
222
- )}
223
- </div>
224
-
225
- <div className="space-y-6">
226
- <div className="rounded-2xl border bg-card/60 p-6 shadow-sm">
227
- <div className="mb-4 flex items-center justify-between">
228
- <div>
229
- <p className="text-sm font-semibold text-foreground">Image analysis health</p>
230
- <p className="text-xs text-muted-foreground">Status distribution (total {totalAnalyses})</p>
231
- </div>
232
- <span className="text-xs font-semibold uppercase text-primary">Overview</span>
233
- </div>
234
- <div className="flex gap-3">
235
- {analysisStatus && (
236
- <>
237
- <div className="rounded-2xl border bg-background/40 p-3 text-center text-xs font-semibold uppercase tracking-[0.3em] text-muted-foreground">
238
- Completed <span className="text-foreground">{analysisStatus.completed}</span>
239
- </div>
240
- <div className="rounded-2xl border bg-background/40 p-3 text-center text-xs font-semibold uppercase tracking-[0.3em] text-muted-foreground">
241
- Processing <span className="text-foreground">{analysisStatus.processing}</span>
242
- </div>
243
- <div className="rounded-2xl border bg-background/40 p-3 text-center text-xs font-semibold uppercase tracking-[0.3em] text-muted-foreground">
244
- Failed <span className="text-foreground">{analysisStatus.failed}</span>
245
- </div>
246
- </>
247
- )}
248
- </div>
249
- <div className="mt-5 space-y-3">
250
- {(summary?.recentAnalyses ?? []).map((analysis) => (
251
- <div key={analysis._id} className="rounded-2xl border bg-background/40 p-4">
252
- <div className="flex items-center justify-between">
253
- <p className="text-sm font-semibold text-foreground">Analysis {analysis._id.slice(0, 6)}</p>
254
- <span className={`text-[0.65rem] font-semibold uppercase tracking-[0.3em] ${badgeForStatus(analysis.status)}`}>
255
- {analysis.status}
256
- </span>
257
- </div>
258
- <p className="text-xs text-muted-foreground">
259
- {analysis.userId} · {formatDate(analysis._creationTime)}
260
- </p>
261
- </div>
262
- ))}
263
- </div>
264
- </div>
265
-
266
- <div className="rounded-2xl border bg-card/60 p-6 shadow-sm">
267
- <div className="mb-3">
268
- <p className="text-sm font-semibold text-foreground">Reporting inbox</p>
269
- <p className="text-xs text-muted-foreground">Highest priority items</p>
270
- </div>
271
- {(summary?.reportHighlights ?? []).length === 0 && (
272
- <p className="text-sm text-muted-foreground">No reports to surface yet — great sign for now.</p>
273
- )}
274
- {(summary?.reportHighlights ?? []).length > 0 && (
275
- <div className="space-y-3">
276
- {summary.reportHighlights.map((report) => (
277
- <div key={report._id} className="rounded-2xl border bg-background/40 p-4">
278
- <div className="flex items-center justify-between">
279
- <p className="text-sm font-semibold text-foreground">{report.reason}</p>
280
- <span className={`text-[0.65rem] font-semibold uppercase tracking-[0.25em] ${badgeForStatus(report.status)}`}>
281
- {report.status}
282
- </span>
283
- </div>
284
- <p className="text-xs text-muted-foreground">{formatDate(report.reportTimestamp)}</p>
285
- </div>
286
- ))}
287
- </div>
288
- )}
289
- </div>
290
- </div>
291
- </div>
292
-
293
- <div className="grid gap-4 md:grid-cols-3">
294
- {contextTiles.map((tile) => (
295
- <div key={tile.title} className="space-y-2 rounded-2xl border bg-card/80 p-5">
296
- <p className="text-xs font-semibold uppercase tracking-[0.3em] text-muted-foreground">{tile.badge}</p>
297
- <h3 className="text-lg font-semibold text-foreground">{tile.title}</h3>
298
- <p className="text-xs text-muted-foreground">{tile.description}</p>
299
- </div>
300
- ))}
301
- </div>
302
-
303
- <div className="rounded-2xl border bg-background/60 p-6 text-sm">
304
- <p className="text-xs uppercase tracking-[0.3em] text-muted-foreground">Next actions</p>
305
- <ul className="mt-4 space-y-4 text-foreground">
306
- <li>
307
- <p className="font-semibold">1. Extend this starter kit</p>
308
- <p className="text-xs text-muted-foreground">
309
- Add more Convex queries, triggers, or scheduled tasks inside `packages/backend/convex` and surface them right here by calling the new query you just built.
310
- </p>
311
- </li>
312
- <li>
313
- <p className="font-semibold">2. Pin this view to the admin nav</p>
314
- <p className="text-xs text-muted-foreground">
315
- The `Layout` component is light, so hook in new nav links or actions (see `components/Layout.tsx`) to make this the default landing for your team.
316
- </p>
317
- </li>
318
- <li>
319
- <p className="font-semibold">3. Monitor data trends</p>
320
- <p className="text-xs text-muted-foreground">
321
- Schedule scripts or actions (Convex mutations, schedulers, or third-party uploads) to populate the backend, then refresh this page to see the stats change.
322
- </p>
323
- </li>
324
- </ul>
325
- <div className="mt-6 flex flex-wrap items-center gap-3">
326
- <Button asChild variant="outline" size="sm">
327
- <Link href="/users">Open the Users console</Link>
328
- </Button>
329
- <p className="text-xs text-muted-foreground">
330
- Filter through accounts, view feedback, and delete when necessary.
331
- </p>
332
- </div>
333
- </div>
334
- </section>
335
- );
336
- }
@@ -1,15 +0,0 @@
1
- export function AppleLogo(props: React.HTMLAttributes<SVGElement>) {
2
- return (
3
- <svg
4
- xmlns="http://www.w3.org/2000/svg"
5
- viewBox="4 32 376.4 449.4"
6
- width="32"
7
- height="32"
8
- fill="currentColor"
9
- {...props}
10
- >
11
- <path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z" />
12
- </svg>
13
- );
14
- }
15
-
@@ -1,11 +0,0 @@
1
- export function GitHubLogo(props: React.HTMLAttributes<SVGElement>) {
2
- return (
3
- <svg viewBox="0 0 438.549 438.549" {...props}>
4
- <path
5
- fill="currentColor"
6
- d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"
7
- ></path>
8
- </svg>
9
- );
10
- }
11
-
@@ -1,23 +0,0 @@
1
- export function GoogleLogo(props: React.HTMLAttributes<SVGElement>) {
2
- return (
3
- <svg viewBox="0 0 24 24" {...props}>
4
- <path
5
- fill="#EA4335 "
6
- d="M5.26620003,9.76452941 C6.19878754,6.93863203 8.85444915,4.90909091 12,4.90909091 C13.6909091,4.90909091 15.2181818,5.50909091 16.4181818,6.49090909 L19.9090909,3 C17.7818182,1.14545455 15.0545455,0 12,0 C7.27006974,0 3.1977497,2.69829785 1.23999023,6.65002441 L5.26620003,9.76452941 Z"
7
- />
8
- <path
9
- fill="#34A853"
10
- d="M16.0407269,18.0125889 C14.9509167,18.7163016 13.5660892,19.0909091 12,19.0909091 C8.86648613,19.0909091 6.21911939,17.076871 5.27698177,14.2678769 L1.23746264,17.3349879 C3.19279051,21.2936293 7.26500293,24 12,24 C14.9328362,24 17.7353462,22.9573905 19.834192,20.9995801 L16.0407269,18.0125889 Z"
11
- />
12
- <path
13
- fill="#4A90E2"
14
- d="M19.834192,20.9995801 C22.0291676,18.9520994 23.4545455,15.903663 23.4545455,12 C23.4545455,11.2909091 23.3454545,10.5272727 23.1818182,9.81818182 L12,9.81818182 L12,14.4545455 L18.4363636,14.4545455 C18.1187732,16.013626 17.2662994,17.2212117 16.0407269,18.0125889 L19.834192,20.9995801 Z"
15
- />
16
- <path
17
- fill="#FBBC05"
18
- d="M5.27698177,14.2678769 C5.03832634,13.556323 4.90909091,12.7937589 4.90909091,12 C4.90909091,11.2182781 5.03443647,10.4668121 5.26620003,9.76452941 L1.23999023,6.65002441 C0.43658717,8.26043162 0,10.0753848 0,12 C0,13.9195484 0.444780743,15.7301709 1.23746264,17.3349879 L5.27698177,14.2678769 Z"
19
- />
20
- </svg>
21
- );
22
- }
23
-
@@ -1,77 +0,0 @@
1
- "use client"
2
-
3
- import Link from "next/link";
4
- import { ReactNode } from "react";
5
-
6
- export function Layout({
7
- menu,
8
- children,
9
- }: {
10
- menu?: ReactNode;
11
- children: ReactNode;
12
- }) {
13
- return (
14
- <div className="flex min-h-screen flex-col bg-background text-foreground">
15
- <header className="sticky top-0 z-10 border-b bg-background/80 backdrop-blur">
16
- <nav className="mx-auto flex w-full max-w-6xl items-center justify-between px-4 py-4">
17
- <div className="flex items-center gap-6">
18
- <Link
19
- href="/"
20
- className="text-lg font-semibold tracking-tight transition-colors hover:text-foreground"
21
- >
22
- VibeFast Console
23
- </Link>
24
- <div className="flex items-center gap-4 text-sm text-muted-foreground">
25
- <Link href="/" className="transition-colors hover:text-foreground">
26
- Dashboard
27
- </Link>
28
- <Link href="/users" className="transition-colors hover:text-foreground">
29
- Users
30
- </Link>
31
- </div>
32
- </div>
33
- <div className="flex items-center gap-4 text-sm text-muted-foreground">
34
- <a
35
- href="https://www.vibefast.pro"
36
- className="transition-colors hover:text-foreground"
37
- target="_blank"
38
- rel="noreferrer"
39
- >
40
- vibefast.pro
41
- </a>
42
- <a
43
- href="https://docs.convex.dev"
44
- className="transition-colors hover:text-foreground"
45
- target="_blank"
46
- rel="noreferrer"
47
- >
48
- Convex Docs
49
- </a>
50
- <div className="flex items-center gap-2">{menu}</div>
51
- </div>
52
- </nav>
53
- </header>
54
- <main className="flex grow flex-col">
55
- <div className="mx-auto flex w-full max-w-6xl flex-col px-4 py-10">
56
- {children}
57
- </div>
58
- </main>
59
- <footer className="border-t">
60
- <div className="mx-auto w-full max-w-6xl px-4 py-4 text-sm leading-loose text-muted-foreground">
61
- Built with ❤️ on VibeFast. Powered by Convex,{" "}
62
- <FooterLink href="https://nextjs.org/">Next.js</FooterLink>,{" "}
63
- <FooterLink href="https://react.dev/">React</FooterLink> and{" "}
64
- <FooterLink href="https://ui.shadcn.com/">shadcn/ui</FooterLink>.
65
- </div>
66
- </footer>
67
- </div>
68
- );
69
- }
70
-
71
- function FooterLink({ href, children }: { href: string; children: ReactNode }) {
72
- return (
73
- <a href={href} className="underline underline-offset-4 hover:no-underline" target="_blank" rel="noreferrer">
74
- {children}
75
- </a>
76
- );
77
- }
@@ -1,23 +0,0 @@
1
- "use client"
2
-
3
- import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group";
4
- import { DesktopIcon, MoonIcon, SunIcon } from "@radix-ui/react-icons";
5
- import { useTheme } from "next-themes";
6
-
7
- export function ThemeToggle() {
8
- const { theme, setTheme } = useTheme();
9
- return (
10
- <ToggleGroup type="single" size="sm" onValueChange={setTheme} value={theme}>
11
- <ToggleGroupItem value="light" aria-label="Light">
12
- <SunIcon />
13
- </ToggleGroupItem>
14
- <ToggleGroupItem value="dark" aria-label="Dark">
15
- <MoonIcon />
16
- </ToggleGroupItem>
17
- <ToggleGroupItem value="system" aria-label="System">
18
- <DesktopIcon />
19
- </ToggleGroupItem>
20
- </ToggleGroup>
21
- );
22
- }
23
-
@@ -1,66 +0,0 @@
1
- "use client"
2
-
3
- import { ThemeToggle } from "@/components/ThemeToggle";
4
- import { Button } from "@/components/ui/button";
5
- import {
6
- DropdownMenu,
7
- DropdownMenuContent,
8
- DropdownMenuItem,
9
- DropdownMenuLabel,
10
- DropdownMenuSeparator,
11
- DropdownMenuTrigger,
12
- } from "@/components/ui/dropdown-menu";
13
- import { PersonIcon } from "@radix-ui/react-icons";
14
- import { ReactNode } from "react";
15
- import { useAuthActions } from "@convex-dev/auth/react";
16
-
17
- export function UserMenu({
18
- favoriteColor,
19
- children,
20
- }: {
21
- favoriteColor: string | undefined;
22
- children: ReactNode;
23
- }) {
24
- return (
25
- <div className="flex items-center gap-2 text-sm font-medium">
26
- {children}
27
- <DropdownMenu>
28
- <DropdownMenuTrigger asChild>
29
- <Button variant="secondary" size="icon" className="rounded-full">
30
- <PersonIcon className="h-5 w-5" />
31
- <span className="sr-only">Toggle user menu</span>
32
- </Button>
33
- </DropdownMenuTrigger>
34
- <DropdownMenuContent align="end">
35
- <DropdownMenuLabel>{children}</DropdownMenuLabel>
36
- {favoriteColor !== undefined && (
37
- <DropdownMenuLabel className="flex items-center">
38
- Favorite color:
39
- <div
40
- style={{ backgroundColor: favoriteColor }}
41
- className="inline-block ml-1 w-5 h-5 border border-gray-800 rounded-sm"
42
- >
43
- &nbsp;
44
- </div>
45
- </DropdownMenuLabel>
46
- )}
47
- <DropdownMenuSeparator />
48
- <DropdownMenuLabel className="flex items-center gap-2 py-0 font-normal">
49
- Theme
50
- <ThemeToggle />
51
- </DropdownMenuLabel>
52
- <DropdownMenuSeparator />
53
- <SignOutButton />
54
- </DropdownMenuContent>
55
- </DropdownMenu>
56
- </div>
57
- );
58
- }
59
-
60
- function SignOutButton() {
61
- const { signOut } = useAuthActions();
62
- return (
63
- <DropdownMenuItem onClick={() => void signOut()}>Sign out</DropdownMenuItem>
64
- );
65
- }
66
-
@@ -1,24 +0,0 @@
1
- "use client"
2
-
3
- import {
4
- InputOTP,
5
- InputOTPGroup,
6
- InputOTPSlot,
7
- } from "@/components/ui/input-otp";
8
-
9
- export function CodeInput({ length = 8 }: { length?: number }) {
10
- return (
11
- <div className="mb-4">
12
- <InputOTP maxLength={8} name="code" id="code">
13
- <InputOTPGroup>
14
- {Array(length)
15
- .fill(null)
16
- .map((_, index) => (
17
- <InputOTPSlot key={index} index={index} />
18
- ))}
19
- </InputOTPGroup>
20
- </InputOTP>
21
- </div>
22
- );
23
- }
24
-
@@ -1,85 +0,0 @@
1
- "use client"
2
-
3
- import { useAuthActions } from "@convex-dev/auth/react";
4
- import { CodeInput } from "@/components/auth/CodeInput";
5
- import { SignInWithEmailCode } from "@/components/auth/SignInWithEmailCode";
6
- import { Button } from "@/components/ui/button";
7
- import { Input } from "@/components/ui/input";
8
- import { useToast } from "@/components/ui/use-toast";
9
- import { useState } from "react";
10
-
11
- export function ResetPasswordWithEmailCode({
12
- handleCancel,
13
- provider,
14
- }: {
15
- handleCancel: () => void;
16
- provider: string;
17
- }) {
18
- const { signIn } = useAuthActions();
19
- const { toast } = useToast();
20
- const [step, setStep] = useState<"forgot" | { email: string }>("forgot");
21
- const [submitting, setSubmitting] = useState(false);
22
- return step === "forgot" ? (
23
- <>
24
- <h2 className="font-semibold text-2xl tracking-tight">
25
- Send password reset code
26
- </h2>
27
- <SignInWithEmailCode
28
- handleCodeSent={(email) => setStep({ email })}
29
- provider={provider}
30
- >
31
- <input name="flow" type="hidden" value="reset" />
32
- </SignInWithEmailCode>
33
- <Button type="button" variant="link" onClick={handleCancel}>
34
- Cancel
35
- </Button>
36
- </>
37
- ) : (
38
- <>
39
- <h2 className="font-semibold text-2xl tracking-tight">
40
- Check your email
41
- </h2>
42
- <p className="text-muted-foreground text-sm">
43
- Enter the 8-digit code we sent to your email address and choose a new
44
- password.
45
- </p>
46
- <form
47
- className="flex flex-col"
48
- onSubmit={(event) => {
49
- event.preventDefault();
50
- setSubmitting(true);
51
- const formData = new FormData(event.currentTarget);
52
- signIn(provider, formData).catch((error) => {
53
- console.error(error);
54
- toast({
55
- title:
56
- "Code could not be verified or new password is too short, try again",
57
- variant: "destructive",
58
- });
59
- setSubmitting(false);
60
- });
61
- }}
62
- >
63
- <label htmlFor="email">Code</label>
64
- <CodeInput />
65
- <label htmlFor="newPassword">New Password</label>
66
- <Input
67
- type="password"
68
- name="newPassword"
69
- id="newPassword"
70
- className="mb-4 "
71
- autoComplete="new-password"
72
- />
73
- <input type="hidden" name="flow" value="reset-verification" />
74
- <input type="hidden" name="email" value={step.email} />
75
- <Button type="submit" disabled={submitting}>
76
- Continue
77
- </Button>
78
- <Button type="button" variant="link" onClick={() => setStep("forgot")}>
79
- Cancel
80
- </Button>
81
- </form>
82
- </>
83
- );
84
- }
85
-