vibefast-cli 1.3.0 → 1.3.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 (348) hide show
  1. package/README.md +30 -95
  2. package/dist/__tests__/recipes.test.js +8 -9
  3. package/dist/__tests__/recipes.test.js.map +1 -1
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +271 -125
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/checklist.d.ts.map +1 -1
  8. package/dist/commands/checklist.js +85 -44
  9. package/dist/commands/checklist.js.map +1 -1
  10. package/dist/commands/health.d.ts.map +1 -1
  11. package/dist/commands/health.js +13 -4
  12. package/dist/commands/health.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +118 -26
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/migrate.d.ts +3 -0
  17. package/dist/commands/migrate.d.ts.map +1 -0
  18. package/dist/commands/migrate.js +202 -0
  19. package/dist/commands/migrate.js.map +1 -0
  20. package/dist/commands/remove.d.ts.map +1 -1
  21. package/dist/commands/remove.js +61 -3
  22. package/dist/commands/remove.js.map +1 -1
  23. package/dist/core/auth.d.ts.map +1 -1
  24. package/dist/core/auth.js +20 -18
  25. package/dist/core/auth.js.map +1 -1
  26. package/dist/core/codemod.d.ts +33 -0
  27. package/dist/core/codemod.d.ts.map +1 -1
  28. package/dist/core/codemod.js +116 -0
  29. package/dist/core/codemod.js.map +1 -1
  30. package/dist/core/detect.d.ts.map +1 -1
  31. package/dist/core/detect.js +24 -7
  32. package/dist/core/detect.js.map +1 -1
  33. package/dist/core/journal.d.ts +1 -0
  34. package/dist/core/journal.d.ts.map +1 -1
  35. package/dist/core/journal.js.map +1 -1
  36. package/dist/core/recipes.d.ts.map +1 -1
  37. package/dist/core/recipes.js +25 -7
  38. package/dist/core/recipes.js.map +1 -1
  39. package/dist/index.js +2 -2
  40. package/dist/index.js.map +1 -1
  41. package/docs/architecture.md +50 -0
  42. package/docs/commands.md +78 -0
  43. package/docs/contributing.md +27 -0
  44. package/docs/quickstart.md +50 -0
  45. package/docs/recipes.md +57 -0
  46. package/docs/troubleshooting.md +31 -0
  47. package/package.json +2 -2
  48. package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +445 -0
  49. package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +355 -0
  50. package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +31 -0
  51. package/recipes/0/recipe.json +18 -0
  52. package/recipes/animated-chip/apps/native/src/components/advanced-ui/chip/demo.tsx +2 -1
  53. package/recipes/animated-chip/recipe.json +5 -2
  54. package/recipes/animated-chip-native@latest.zip +0 -0
  55. package/recipes/animated-chip@latest.zip +0 -0
  56. package/recipes/animated-switch/apps/native/src/components/advanced-ui/switch/demo.tsx +1 -1
  57. package/recipes/animated-switch/recipe.json +5 -2
  58. package/recipes/animated-switch-native@latest.zip +0 -0
  59. package/recipes/animated-switch@latest.zip +0 -0
  60. package/recipes/audio-recorder/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
  61. package/recipes/audio-recorder/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -2
  62. package/recipes/audio-recorder/recipe.json +7 -2
  63. package/recipes/audio-recorder-native@latest.zip +0 -0
  64. package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
  65. package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -1
  66. package/recipes/audio-recorder-supabase/recipe.json +12 -33
  67. package/recipes/audio-recorder-supabase-native@latest.zip +0 -0
  68. package/recipes/audio-recorder-supabase@latest.zip +0 -0
  69. package/recipes/audio-recorder@latest.zip +0 -0
  70. package/recipes/charts/apps/native/src/app/charts/index.tsx +3 -0
  71. package/recipes/charts/apps/native/src/features/charts/components/bar-chart.tsx +3 -1
  72. package/recipes/charts/apps/native/src/features/charts/components/candlestick-chart.tsx +3 -1
  73. package/recipes/charts/apps/native/src/features/charts/components/column-chart.tsx +3 -1
  74. package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +3 -1
  75. package/recipes/charts/apps/native/src/features/charts/components/line-chart.tsx +3 -1
  76. package/recipes/charts/apps/native/src/features/charts/components/radar-chart.tsx +3 -1
  77. package/recipes/charts/apps/native/src/features/charts/components/stacked-bar-chart.tsx +3 -1
  78. package/recipes/charts/recipe.json +13 -4
  79. package/recipes/charts-native@latest.zip +0 -0
  80. package/recipes/charts@latest.zip +0 -0
  81. package/recipes/chatbot/apps/native/src/features/chatbot/components/chat-markdown.tsx +86 -86
  82. package/recipes/chatbot/apps/native/src/features/chatbot/components/markdown/code-block.tsx +4 -4
  83. package/recipes/chatbot/recipe.json +3 -40
  84. package/recipes/chatbot-native@latest.zip +0 -0
  85. package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-markdown.tsx +4 -1
  86. package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/code-block.tsx +86 -53
  87. package/recipes/chatbot-supabase/recipe.json +3 -69
  88. package/recipes/chatbot-supabase-native@latest.zip +0 -0
  89. package/recipes/chatbot-supabase@latest.zip +0 -0
  90. package/recipes/chatbot@latest.zip +0 -0
  91. package/recipes/glowing-button/recipe.json +6 -2
  92. package/recipes/glowing-button-native@latest.zip +0 -0
  93. package/recipes/glowing-button@latest.zip +0 -0
  94. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
  95. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
  96. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
  97. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/index.tsx +50 -0
  98. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
  99. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/results.tsx +2 -0
  100. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
  101. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +2 -2
  102. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/camera.tsx +72 -65
  103. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +65 -47
  104. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading-screen.tsx +43 -2
  105. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading.tsx +34 -1
  106. package/recipes/image-analysis/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +83 -2
  107. package/recipes/image-analysis/recipe.json +11 -19
  108. package/recipes/image-analysis-native@latest.zip +0 -0
  109. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
  110. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
  111. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
  112. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/index.tsx +50 -0
  113. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
  114. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/results.tsx +2 -0
  115. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
  116. package/recipes/image-analysis-supabase/recipe.json +10 -70
  117. package/recipes/image-analysis-supabase-native@latest.zip +0 -0
  118. package/recipes/image-analysis-supabase@latest.zip +0 -0
  119. package/recipes/image-analysis@latest.zip +0 -0
  120. package/recipes/image-analyzer/apps/native/src/app/(root)/(protected)/image-analyzer/index.tsx +2 -0
  121. package/recipes/image-generator/apps/native/src/app/image-generator/gallery.tsx +3 -0
  122. package/recipes/image-generator/apps/native/src/app/image-generator/index.tsx +3 -0
  123. package/recipes/image-generator/recipe.json +8 -18
  124. package/recipes/image-generator-native@latest.zip +0 -0
  125. package/recipes/image-generator-supabase/recipe.json +6 -62
  126. package/recipes/image-generator-supabase-native@latest.zip +0 -0
  127. package/recipes/image-generator-supabase@latest.zip +0 -0
  128. package/recipes/image-generator@latest.zip +0 -0
  129. package/recipes/ios-widget/recipe.json +18 -119
  130. package/recipes/ios-widget-native@latest.zip +0 -0
  131. package/recipes/ios-widget@latest.zip +0 -0
  132. package/recipes/number-stepper/apps/native/src/components/advanced-ui/stepper/demo.tsx +1 -1
  133. package/recipes/number-stepper/recipe.json +5 -2
  134. package/recipes/number-stepper-native@latest.zip +0 -0
  135. package/recipes/number-stepper@latest.zip +0 -0
  136. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/interactive-onboarding.tsx +11 -18
  137. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/ai-tone-step.tsx +5 -7
  138. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/currency-step.tsx +9 -7
  139. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-ai-step.tsx +8 -7
  140. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-chatbot-step.tsx +6 -5
  141. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-manual-step.tsx +4 -3
  142. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-scan-step.tsx +6 -5
  143. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/main-reason-step.tsx +5 -7
  144. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/notification-step.tsx +7 -6
  145. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/overspend-step.tsx +5 -7
  146. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/personalizing-step.tsx +8 -7
  147. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/rating-step.tsx +6 -5
  148. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/reminder-step.tsx +5 -6
  149. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/safety-step.tsx +5 -4
  150. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/struggle-step.tsx +5 -7
  151. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/welcome-step.tsx +7 -6
  152. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/ui/onboarding-header.tsx +4 -3
  153. package/recipes/onboarding/recipe.json +9 -6
  154. package/recipes/onboarding-native@latest.zip +0 -0
  155. package/recipes/onboarding@latest.zip +0 -0
  156. package/recipes/payments/apps/native/src/app/paywall/index.tsx +74 -0
  157. package/recipes/payments/apps/native/src/app/paywall/local.tsx +25 -0
  158. package/recipes/payments/apps/native/src/app/paywall/remote.tsx +23 -0
  159. package/recipes/payments/packages/backend/convex/payments.ts +21 -3
  160. package/recipes/payments/recipe.json +14 -34
  161. package/recipes/payments-native@latest.zip +0 -0
  162. package/recipes/payments-supabase/apps/native/src/app/paywall/index.tsx +74 -0
  163. package/recipes/payments-supabase/apps/native/src/app/paywall/local.tsx +25 -0
  164. package/recipes/payments-supabase/apps/native/src/app/paywall/remote.tsx +23 -0
  165. package/recipes/payments-supabase/recipe.json +16 -44
  166. package/recipes/payments-supabase-native@latest.zip +0 -0
  167. package/recipes/payments-supabase@latest.zip +0 -0
  168. package/recipes/payments@latest.zip +0 -0
  169. package/recipes/posthog/apps/native/src/components/analytics/navigation-tracker.tsx +14 -0
  170. package/recipes/posthog/apps/native/src/lib/hooks/use-navigation-analytics.ts +44 -0
  171. package/recipes/posthog/apps/native/src/providers/posthog-provider.tsx +51 -0
  172. package/recipes/posthog/recipe.json +60 -0
  173. package/recipes/posthog-native@latest.zip +0 -0
  174. package/recipes/progress-circle/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +1 -1
  175. package/recipes/progress-circle/recipe.json +5 -2
  176. package/recipes/progress-circle-native@latest.zip +0 -0
  177. package/recipes/progress-circle@latest.zip +0 -0
  178. package/recipes/quiz/apps/native/src/app/quiz/index.tsx +47 -0
  179. package/recipes/quiz/recipe.json +9 -6
  180. package/recipes/quiz-native@latest.zip +0 -0
  181. package/recipes/quiz@latest.zip +0 -0
  182. package/recipes/screen-kits/apps/native/src/app/screen-kits/_layout.tsx +12 -0
  183. package/recipes/screen-kits/apps/native/src/app/screen-kits/index.tsx +114 -0
  184. package/recipes/screen-kits/apps/native/src/features/screen-kits/index.ts +1 -0
  185. package/recipes/screen-kits/apps/native/src/features/screen-kits/types.ts +28 -0
  186. package/recipes/screen-kits/recipe.json +26 -0
  187. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/_layout.tsx +12 -0
  188. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/home.tsx +5 -0
  189. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/index.tsx +5 -0
  190. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-complete.tsx +5 -0
  191. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-fail.tsx +5 -0
  192. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson.tsx +5 -0
  193. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/skill-tree.tsx +5 -0
  194. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/duo-button.tsx +174 -0
  195. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/skill-button.tsx +186 -0
  196. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/xp-header.tsx +115 -0
  197. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/constants.ts +89 -0
  198. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/index.ts +3 -0
  199. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/home-screen.tsx +225 -0
  200. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-complete-screen.tsx +485 -0
  201. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-fail-screen.tsx +105 -0
  202. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-screen.tsx +384 -0
  203. package/recipes/screen-kits-duolingo/recipe.json +58 -0
  204. package/recipes/screen-kits-duolingo-native@latest.zip +0 -0
  205. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/_layout.tsx +45 -0
  206. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/asset-detail.tsx +3 -0
  207. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/notifications.tsx +3 -0
  208. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/receive.tsx +3 -0
  209. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/send.tsx +3 -0
  210. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/swap.tsx +3 -0
  211. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/wallet.tsx +3 -0
  212. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/ActionButtons.tsx +78 -0
  213. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/AssetRow.tsx +94 -0
  214. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/BalanceCard.tsx +118 -0
  215. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/constants.ts +85 -0
  216. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/asset-detail.tsx +378 -0
  217. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/notifications.tsx +210 -0
  218. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/receive-modal.tsx +317 -0
  219. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/send-modal.tsx +420 -0
  220. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/swap-modal.tsx +363 -0
  221. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/wallet-dashboard.tsx +281 -0
  222. package/recipes/screen-kits-finance/recipe.json +46 -0
  223. package/recipes/screen-kits-finance-native@latest.zip +0 -0
  224. package/recipes/screen-kits-fitness/apps/native/assets/sounds/timer-beep.wav +0 -0
  225. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/_layout.tsx +10 -0
  226. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/index.tsx +6 -0
  227. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/timer.tsx +3 -0
  228. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/workout.tsx +3 -0
  229. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-components.tsx +500 -0
  230. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-settings-modal.tsx +352 -0
  231. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/workout-card.tsx +105 -0
  232. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/constants.ts +189 -0
  233. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/hooks/use-timer.ts +307 -0
  234. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/index.ts +1 -0
  235. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/timer-screen.tsx +278 -0
  236. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/workout-dashboard.tsx +350 -0
  237. package/recipes/screen-kits-fitness/recipe.json +63 -0
  238. package/recipes/screen-kits-fitness-native@latest.zip +0 -0
  239. package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/habits.tsx +1 -0
  240. package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/kanban.tsx +1 -0
  241. package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/routes.ts +4 -0
  242. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/AddTaskModal.tsx +246 -0
  243. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/DraggableTaskCard.tsx +92 -0
  244. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/KanbanColumn.tsx +238 -0
  245. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/TaskCard.tsx +144 -0
  246. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/add-habit-modal.tsx +271 -0
  247. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/constants.ts +295 -0
  248. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/kanban-utils.ts +62 -0
  249. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/habit-tracker.tsx +1160 -0
  250. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/kanban-board.tsx +432 -0
  251. package/recipes/screen-kits-habits/recipe.json +52 -0
  252. package/recipes/screen-kits-habits-native@latest.zip +0 -0
  253. package/recipes/screen-kits-native@latest.zip +0 -0
  254. package/recipes/sentry/apps/native/src/providers/sentry-provider.tsx +64 -0
  255. package/recipes/sentry/recipe.json +39 -0
  256. package/recipes/sentry-native@latest.zip +0 -0
  257. package/recipes/swipe-slider/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +1 -1
  258. package/recipes/swipe-slider/recipe.json +5 -2
  259. package/recipes/swipe-slider-native@latest.zip +0 -0
  260. package/recipes/swipe-slider@latest.zip +0 -0
  261. package/recipes/timeline/apps/native/src/components/advanced-ui/timeline/demo.tsx +2 -1
  262. package/recipes/timeline/recipe.json +5 -2
  263. package/recipes/timeline-native@latest.zip +0 -0
  264. package/recipes/timeline@latest.zip +0 -0
  265. package/recipes/tracker-app/apps/native/src/app/tracker-app/index.tsx +1 -0
  266. package/recipes/tracker-app/recipe.json +10 -7
  267. package/recipes/tracker-app-native@latest.zip +0 -0
  268. package/recipes/tracker-app@latest.zip +0 -0
  269. package/recipes/upload-all.sh +8 -31
  270. package/recipes/voice-bot/apps/native/src/app/voice-bot/index.tsx +56 -0
  271. package/recipes/voice-bot/recipe.json +31 -7
  272. package/recipes/voice-bot-native@latest.zip +0 -0
  273. package/recipes/voice-bot@latest.zip +0 -0
  274. package/recipes/wake-word/apps/native/src/app/{(root)/(protected)/test-wake-word.tsx → test-wake-word.tsx} +43 -4
  275. package/recipes/wake-word/recipe.json +16 -26
  276. package/recipes/wake-word-native@latest.zip +0 -0
  277. package/recipes/wake-word@latest.zip +0 -0
  278. package/scripts/create-advanced-ui-recipes.sh +46 -19
  279. package/scripts/create-recipes.mjs +471 -117
  280. package/scripts/package-recipes.mjs +76 -0
  281. package/scripts/publish-all.sh +6 -2
  282. package/CHANGELOG.md +0 -198
  283. package/docs/archive/AUTO-DETECT-DEPS.md +0 -607
  284. package/docs/archive/FINAL-PACKAGE-STRATEGY.md +0 -583
  285. package/docs/archive/FINAL-SIMPLE-PLAN.md +0 -487
  286. package/docs/archive/FINAL-STATUS.md +0 -144
  287. package/docs/archive/FLOW-DIAGRAM.md +0 -1629
  288. package/docs/archive/GOTCHAS-AND-RISKS.md +0 -801
  289. package/docs/archive/IMPLEMENTATION-PLAN.md +0 -1360
  290. package/docs/archive/PLAN.md +0 -453
  291. package/docs/archive/PRODUCTION-READINESS.md +0 -684
  292. package/docs/archive/PRODUCTION-TEST-RESULTS.md +0 -465
  293. package/docs/archive/SIMPLIFIED-PLAN.md +0 -578
  294. package/docs/archive/STATUS.md +0 -199
  295. package/docs/archive/SUCCESS.md +0 -259
  296. package/docs/archive/TEST-SUMMARY.md +0 -261
  297. package/docs/archive/TESTING-CHECKLIST.md +0 -450
  298. package/docs/archive/USER-MODIFICATIONS.md +0 -448
  299. package/docs/decisions.md +0 -55
  300. package/docs/manual-testing.md +0 -91
  301. package/docs/next-steps.md +0 -12
  302. package/recipes/README.md +0 -156
  303. package/recipes/audio-recorder-supabase/packages/backend/src/services/recordings.ts +0 -369
  304. package/recipes/chatbot/apps/native/src/api-client/chatbot.ts +0 -83
  305. package/recipes/chatbot/packages/backend/convex/agents.ts +0 -115
  306. package/recipes/chatbot/packages/backend/convex/tools/index.ts +0 -18
  307. package/recipes/chatbot/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -97
  308. package/recipes/chatbot/packages/backend/convex/tools/tavilySearch.ts +0 -83
  309. package/recipes/chatbot/packages/backend/convex/tools/userProfile.ts +0 -72
  310. package/recipes/chatbot-supabase/apps/native/src/api-client/supabase/chatbot.ts +0 -515
  311. package/recipes/chatbot-supabase/packages/backend/src/services/conversations.ts +0 -243
  312. package/recipes/chatbot-supabase/packages/backend/src/services/messages.ts +0 -327
  313. package/recipes/image-analysis/apps/native/src/api-client/image-analyzer.ts +0 -62
  314. package/recipes/image-analysis-supabase/packages/backend/src/services/image-analyses.ts +0 -132
  315. package/recipes/image-generator/apps/native/src/api-client/image-generator.ts +0 -34
  316. package/recipes/payments/apps/native/src/api-client/payments.ts +0 -44
  317. package/recipes/payments-supabase/packages/backend/src/services/payments.ts +0 -201
  318. package/recipes/posthog.json +0 -47
  319. package/recipes/revenuecat.json +0 -43
  320. package/recipes/sentry.json +0 -47
  321. package/recipes/wake-word/apps/native/assets/vosk-model/README.md +0 -103
  322. package/recipes/wake-word/apps/native/scripts/download-vosk-model.mjs +0 -127
  323. /package/recipes/{audio-recorder/apps/native/src/app/(root)/(protected) → audio-recorder-supabase/apps/native/src/app}/audio-recorder/index.tsx +0 -0
  324. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/AppIntent.swift +0 -0
  325. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
  326. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
  327. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
  328. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
  329. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
  330. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
  331. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
  332. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
  333. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
  334. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
  335. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
  336. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
  337. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
  338. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
  339. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  340. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
  341. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/CalorieTrackerWidget.swift +0 -0
  342. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/HabitTrackerWidget.swift +0 -0
  343. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Info.plist +0 -0
  344. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/WidgetLiveActivity.swift +0 -0
  345. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/expo-target.config.js +0 -0
  346. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/generated.entitlements +0 -0
  347. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/index.swift +0 -0
  348. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/widgets.swift +0 -0
@@ -1,684 +0,0 @@
1
- # 🚀 Production Readiness Assessment
2
-
3
- ## Current Status: ⚠️ ALMOST READY (Needs Critical Improvements)
4
-
5
- ---
6
-
7
- ## ✅ What's Working Well
8
-
9
- ### Core Functionality
10
- - ✅ Authentication with license tokens
11
- - ✅ Device management (2 device limit)
12
- - ✅ Recipe fetching from Cloudflare R2
13
- - ✅ File installation with watermarking
14
- - ✅ Navigation injection
15
- - ✅ Journal tracking for clean removal
16
- - ✅ Path security (prevents directory traversal)
17
- - ✅ Dry-run mode for previewing changes
18
- - ✅ Error handling and user-friendly messages
19
-
20
- ### Infrastructure
21
- - ✅ Cloudflare Worker deployed and tested
22
- - ✅ KV storage for licenses
23
- - ✅ R2 storage for recipes
24
- - ✅ Token hashing (SHA-256)
25
- - ✅ Device tracking
26
-
27
- ### Developer Experience
28
- - ✅ Simple commands (`vf add`, `vf remove`, etc.)
29
- - ✅ Good error messages
30
- - ✅ Doctor command for validation
31
- - ✅ List command to see available features
32
-
33
- ---
34
-
35
- ## ❌ Critical Issues (MUST FIX Before Production)
36
-
37
- ### 1. **File Overwrite Without Confirmation** 🔴 CRITICAL
38
-
39
- **Problem:**
40
- ```bash
41
- $ vf add charts --force
42
- # Silently overwrites ALL files - user modifications LOST!
43
- ```
44
-
45
- **Current Behavior:**
46
- - No warning about existing files
47
- - No confirmation prompt
48
- - No backup created
49
- - User modifications destroyed
50
-
51
- **What Users See:**
52
- ```
53
- muhammadzafar~$ vf add charts --dry-run
54
- ℹ [DRY RUN] No changes will be made
55
- ℹ Fetching charts for native...
56
- ℹ Downloading recipe...
57
- ℹ Installing charts v1.0.0...
58
- ℹ Copying apps/native/src/app/charts → apps/native/src/app/(root)/(protected)/charts
59
- ℹ Copying apps/native/src/features/charts → apps/native/src/features/charts
60
- ℹ Adding navigation link...
61
- ✓ Navigation link added
62
- ✓ charts installed successfully!
63
- ℹ Files added: 17
64
- ⚠ This was a dry run. Run without --dry-run to apply changes.
65
- ```
66
-
67
- **Issue:** Dry-run shows files will be added, but doesn't warn if files ALREADY EXIST and will be overwritten!
68
-
69
- **Solution Needed:**
70
- ```bash
71
- $ vf add charts --force
72
- ⚠ Warning: The following files will be OVERWRITTEN:
73
- • apps/native/src/app/(root)/(protected)/charts/index.tsx (modified)
74
- • apps/native/src/features/charts/chart-card.tsx (modified)
75
-
76
- ⚠ Your changes will be LOST. Make sure you have committed to Git!
77
-
78
- Continue? (y/N): _
79
- ```
80
-
81
- ---
82
-
83
- ### 2. **No Package Dependency Management** 🔴 CRITICAL
84
-
85
- **Problem:**
86
- Features require npm packages, but CLI doesn't handle them.
87
-
88
- **Example:**
89
- ```bash
90
- $ vf add charts
91
- ✓ charts installed successfully!
92
- # User runs app
93
- # ERROR: Cannot find module 'react-native-chart-kit'
94
- ```
95
-
96
- **What Should Happen:**
97
- ```bash
98
- $ vf add charts
99
- ✓ charts installed successfully!
100
- ℹ Files added: 17
101
-
102
- ⚠ This feature requires the following packages:
103
- • react-native-chart-kit@^6.12.0
104
- • react-native-svg@^13.9.0
105
-
106
- 📦 Install them with:
107
- npm install react-native-chart-kit@^6.12.0 react-native-svg@^13.9.0
108
-
109
- OR
110
-
111
- yarn add react-native-chart-kit@^6.12.0 react-native-svg@^13.9.0
112
-
113
- Would you like to install them now? (Y/n): _
114
- ```
115
-
116
- **Solution:** Add `dependencies` field to recipe.json
117
-
118
- ---
119
-
120
- ### 3. **No Modification Detection** 🟡 HIGH PRIORITY
121
-
122
- **Problem:**
123
- ```bash
124
- $ vf remove charts
125
- # Deletes ALL files, even if user modified them
126
- # No warning, no backup
127
- ```
128
-
129
- **Solution:**
130
- Track file hashes in journal, warn on removal if modified.
131
-
132
- ---
133
-
134
- ### 4. **Remove mini-native Demo** 🟢 LOW PRIORITY
135
-
136
- **Problem:**
137
- Test/demo feature shouldn't be in production.
138
-
139
- **Solution:**
140
- Remove all mini-native references and test recipe.
141
-
142
- ---
143
-
144
- ## 🔧 Required Enhancements
145
-
146
- ### Enhancement 1: Interactive Confirmation for Overwrites
147
-
148
- **Implementation:**
149
-
150
- ```typescript
151
- // src/core/fsx.ts
152
- export async function copyTree(
153
- src: string,
154
- dest: string,
155
- options?: {
156
- dryRun?: boolean;
157
- force?: boolean;
158
- interactive?: boolean; // NEW
159
- }
160
- ): Promise<{ files: string[]; conflicts: string[] }> {
161
- const copied: string[] = [];
162
- const conflicts: string[] = [];
163
-
164
- async function copyRecursive(srcPath: string, destPath: string) {
165
- const stats = await stat(srcPath);
166
-
167
- if (stats.isDirectory()) {
168
- if (!options?.dryRun) {
169
- await ensureDir(destPath);
170
- }
171
- const entries = await readdir(srcPath);
172
- for (const entry of entries) {
173
- await copyRecursive(join(srcPath, entry), join(destPath, entry));
174
- }
175
- } else {
176
- const destExists = await exists(destPath);
177
-
178
- if (destExists) {
179
- conflicts.push(destPath);
180
-
181
- if (!options?.force && !options?.interactive) {
182
- throw new Error(`File exists: ${destPath}. Use --force to overwrite.`);
183
- }
184
-
185
- if (options?.interactive && !options?.dryRun) {
186
- // Prompt user for this specific file
187
- const answer = await promptUser(
188
- `Overwrite ${destPath}? (y/N): `
189
- );
190
- if (answer.toLowerCase() !== 'y') {
191
- log.info(`Skipped: ${destPath}`);
192
- return;
193
- }
194
- }
195
- }
196
-
197
- if (!options?.dryRun) {
198
- await ensureDir(dirname(destPath));
199
- await copyFile(srcPath, destPath);
200
- }
201
- copied.push(destPath);
202
- }
203
- }
204
-
205
- await copyRecursive(src, dest);
206
- return { files: copied, conflicts };
207
- }
208
- ```
209
-
210
- **Usage:**
211
- ```typescript
212
- // src/commands/add.ts
213
- const result = await copyTree(srcPath, destPath, {
214
- dryRun: options.dryRun,
215
- force: options.force,
216
- interactive: !options.force && !options.dryRun, // NEW
217
- });
218
-
219
- if (result.conflicts.length > 0 && options.dryRun) {
220
- log.warn(`⚠ ${result.conflicts.length} files will be overwritten:`);
221
- result.conflicts.forEach(f => log.plain(` • ${f}`));
222
- log.warn('Make sure you have committed your changes to Git!');
223
- }
224
- ```
225
-
226
- ---
227
-
228
- ### Enhancement 2: Package Dependency Management
229
-
230
- **Recipe Format Update:**
231
-
232
- ```json
233
- {
234
- "name": "charts",
235
- "version": "1.0.0",
236
- "description": "Beautiful data visualization",
237
- "target": "native",
238
- "copy": [...],
239
- "nav": {...},
240
- "dependencies": {
241
- "npm": {
242
- "react-native-chart-kit": "^6.12.0",
243
- "react-native-svg": "^13.9.0"
244
- },
245
- "expo": {
246
- "expo-linear-gradient": "~12.1.2"
247
- }
248
- },
249
- "postInstall": {
250
- "message": "Run 'npx pod-install' if you're on iOS",
251
- "commands": [
252
- "npx pod-install"
253
- ]
254
- }
255
- }
256
- ```
257
-
258
- **Implementation:**
259
-
260
- ```typescript
261
- // src/commands/add.ts
262
-
263
- // After copying files
264
- if (manifest.dependencies) {
265
- log.info('');
266
- log.warn('⚠ This feature requires additional packages:');
267
-
268
- const npmDeps = manifest.dependencies.npm || {};
269
- const expoDeps = manifest.dependencies.expo || {};
270
-
271
- if (Object.keys(npmDeps).length > 0) {
272
- log.plain('');
273
- log.plain(' NPM packages:');
274
- Object.entries(npmDeps).forEach(([pkg, version]) => {
275
- log.plain(` • ${pkg}@${version}`);
276
- });
277
- }
278
-
279
- if (Object.keys(expoDeps).length > 0) {
280
- log.plain('');
281
- log.plain(' Expo packages:');
282
- Object.entries(expoDeps).forEach(([pkg, version]) => {
283
- log.plain(` • ${pkg}@${version}`);
284
- });
285
- }
286
-
287
- log.plain('');
288
- log.info('📦 Install with:');
289
-
290
- // Generate install commands
291
- const npmPackages = Object.entries(npmDeps)
292
- .map(([pkg, version]) => `${pkg}@${version}`)
293
- .join(' ');
294
-
295
- if (npmPackages) {
296
- log.plain(` npm install ${npmPackages}`);
297
- log.plain(` OR`);
298
- log.plain(` yarn add ${npmPackages}`);
299
- }
300
-
301
- // Ask if user wants to install now
302
- if (!options.dryRun && !options.skipInstall) {
303
- const answer = await promptUser('\nInstall packages now? (Y/n): ');
304
- if (answer.toLowerCase() !== 'n') {
305
- log.info('Installing packages...');
306
- await installPackages(npmDeps, expoDeps);
307
- }
308
- }
309
-
310
- // Post-install instructions
311
- if (manifest.postInstall) {
312
- log.plain('');
313
- log.info('📝 Post-install steps:');
314
- log.plain(` ${manifest.postInstall.message}`);
315
- }
316
- }
317
- ```
318
-
319
- ---
320
-
321
- ### Enhancement 3: Modification Detection
322
-
323
- **Journal Format Update:**
324
-
325
- ```json
326
- {
327
- "entries": [
328
- {
329
- "feature": "charts",
330
- "target": "native",
331
- "files": [
332
- {
333
- "path": "/abs/path/to/file.tsx",
334
- "hash": "sha256-hash-of-original-content"
335
- }
336
- ],
337
- "insertedNav": true,
338
- "ts": 1762912823535
339
- }
340
- ]
341
- }
342
- ```
343
-
344
- **Implementation:**
345
-
346
- ```typescript
347
- // src/commands/remove.ts
348
-
349
- // Before deleting files
350
- const modifiedFiles: string[] = [];
351
-
352
- for (const fileEntry of entry.files) {
353
- const currentHash = await hashFile(fileEntry.path);
354
- if (currentHash !== fileEntry.hash) {
355
- modifiedFiles.push(fileEntry.path);
356
- }
357
- }
358
-
359
- if (modifiedFiles.length > 0) {
360
- log.warn('⚠ The following files were modified by you:');
361
- modifiedFiles.forEach(f => log.plain(` • ${f}`));
362
- log.warn('');
363
- log.warn('These changes will be LOST if you continue!');
364
- log.info('Make sure you have committed to Git.');
365
- log.plain('');
366
-
367
- const answer = await promptUser('Continue with removal? (y/N): ');
368
- if (answer.toLowerCase() !== 'y') {
369
- log.info('Removal cancelled');
370
- return;
371
- }
372
- }
373
- ```
374
-
375
- ---
376
-
377
- ## 🎯 Features That Should Be CLI-Managed
378
-
379
- ### ✅ Good Candidates for CLI
380
-
381
- These can be fully automated:
382
-
383
- 1. **UI Components**
384
- - Charts, graphs, data visualization
385
- - Form components
386
- - Card layouts
387
- - Modal dialogs
388
- - Bottom sheets
389
-
390
- 2. **Standalone Features**
391
- - Image picker/camera
392
- - QR code scanner
393
- - PDF viewer
394
- - Audio/video player
395
- - Maps integration
396
-
397
- 3. **Self-Contained Screens**
398
- - Profile screen
399
- - Settings screen
400
- - About screen
401
- - Help/FAQ screen
402
-
403
- 4. **Utilities**
404
- - Date/time formatters
405
- - Currency formatters
406
- - Validation helpers
407
- - API clients (typed)
408
-
409
- ---
410
-
411
- ### ⚠️ Partial CLI Support (Needs Manual Steps)
412
-
413
- These need user intervention:
414
-
415
- 1. **Sentry** 🔴
416
- - CLI can: Install files, add provider
417
- - User must: Add DSN to .env, configure release tracking
418
-
419
- ```json
420
- {
421
- "name": "sentry",
422
- "manualSteps": [
423
- {
424
- "step": 1,
425
- "title": "Add Sentry DSN to .env",
426
- "description": "Add SENTRY_DSN=your-dsn-here to .env file",
427
- "file": ".env",
428
- "example": "SENTRY_DSN=https://xxx@xxx.ingest.sentry.io/xxx"
429
- },
430
- {
431
- "step": 2,
432
- "title": "Configure Sentry in app config",
433
- "description": "Update app.json with Sentry project info",
434
- "file": "app.json"
435
- }
436
- ]
437
- }
438
- ```
439
-
440
- 2. **PostHog** 🔴
441
- - CLI can: Install files, add provider
442
- - User must: Add API key to .env
443
-
444
- 3. **RevenueCat** 🔴
445
- - CLI can: Install files, add provider
446
- - User must: Add API keys, configure products
447
-
448
- 4. **Firebase** 🔴
449
- - CLI can: Install files
450
- - User must: Download google-services.json, add to project
451
-
452
- 5. **Supabase** 🔴
453
- - CLI can: Install client, types
454
- - User must: Add URL and anon key to .env
455
-
456
- ---
457
-
458
- ### ❌ Should NOT Be CLI-Managed
459
-
460
- These are too complex or require deep customization:
461
-
462
- 1. **Authentication System**
463
- - Too many variations (email, social, phone)
464
- - Requires backend integration
465
- - User-specific flows
466
-
467
- 2. **Payment Processing**
468
- - Requires merchant accounts
469
- - Legal compliance varies
470
- - Too many providers
471
-
472
- 3. **Custom Business Logic**
473
- - User-specific requirements
474
- - Can't be templated
475
-
476
- ---
477
-
478
- ## 📋 Recipe Format for Services with Manual Steps
479
-
480
- ```json
481
- {
482
- "name": "sentry",
483
- "version": "1.0.0",
484
- "description": "Error tracking with Sentry",
485
- "target": "native",
486
- "copy": [...],
487
- "dependencies": {
488
- "npm": {
489
- "@sentry/react-native": "^5.15.0"
490
- }
491
- },
492
- "env": {
493
- "required": [
494
- {
495
- "key": "SENTRY_DSN",
496
- "description": "Your Sentry DSN from sentry.io",
497
- "example": "https://xxx@xxx.ingest.sentry.io/xxx",
498
- "link": "https://sentry.io/settings/projects/"
499
- }
500
- ]
501
- },
502
- "manualSteps": [
503
- {
504
- "step": 1,
505
- "title": "Create Sentry Project",
506
- "description": "Go to sentry.io and create a new React Native project",
507
- "link": "https://sentry.io/signup/"
508
- },
509
- {
510
- "step": 2,
511
- "title": "Add DSN to .env",
512
- "description": "Copy your DSN and add it to .env file",
513
- "file": ".env",
514
- "action": "add",
515
- "content": "SENTRY_DSN=your-dsn-here"
516
- },
517
- {
518
- "step": 3,
519
- "title": "Test Error Tracking",
520
- "description": "Trigger a test error to verify Sentry is working",
521
- "command": "npm run test:sentry"
522
- }
523
- ],
524
- "postInstall": {
525
- "message": "Sentry installed! Complete the manual steps above to finish setup.",
526
- "checklist": true
527
- }
528
- }
529
- ```
530
-
531
- **CLI Output:**
532
-
533
- ```bash
534
- $ vf add sentry
535
-
536
- ✓ sentry installed successfully!
537
- ℹ Files added: 8
538
-
539
- 📦 Installing packages...
540
- ✓ @sentry/react-native@^5.15.0 installed
541
-
542
- ⚠ MANUAL STEPS REQUIRED:
543
-
544
- This feature requires some manual configuration:
545
-
546
- ┌─────────────────────────────────────────────────────────────┐
547
- │ Step 1: Create Sentry Project │
548
- │ │
549
- │ Go to sentry.io and create a new React Native project │
550
- │ 🔗 https://sentry.io/signup/ │
551
- └─────────────────────────────────────────────────────────────┘
552
-
553
- ┌─────────────────────────────────────────────────────────────┐
554
- │ Step 2: Add DSN to .env │
555
- │ │
556
- │ Copy your DSN and add it to .env file: │
557
- │ SENTRY_DSN=your-dsn-here │
558
- │ │
559
- │ 📝 File: .env │
560
- └─────────────────────────────────────────────────────────────┘
561
-
562
- ┌─────────────────────────────────────────────────────────────┐
563
- │ Step 3: Test Error Tracking │
564
- │ │
565
- │ Trigger a test error to verify Sentry is working: │
566
- │ $ npm run test:sentry │
567
- └─────────────────────────────────────────────────────────────┘
568
-
569
- ✓ Installation complete!
570
- ⚠ Don't forget to complete the manual steps above.
571
-
572
- 💡 Tip: Run 'vf checklist sentry' to see these steps again.
573
- ```
574
-
575
- ---
576
-
577
- ## 🎯 New CLI Commands Needed
578
-
579
- ### 1. `vf checklist <feature>`
580
- Show manual steps for a feature
581
-
582
- ```bash
583
- $ vf checklist sentry
584
- ```
585
-
586
- ### 2. `vf update <feature>`
587
- Update a feature to latest version
588
-
589
- ```bash
590
- $ vf update charts
591
- ```
592
-
593
- ### 3. `vf status`
594
- Show installed features and their status
595
-
596
- ```bash
597
- $ vf status
598
-
599
- Installed features:
600
- ✓ charts (v1.0.0) - Up to date
601
- ⚠ sentry (v1.2.0) - Update available (v1.3.0)
602
- ✓ chatbot (v2.0.0) - Up to date
603
-
604
- Manual steps pending:
605
- ⚠ sentry - 2 of 3 steps completed
606
- ```
607
-
608
- ### 4. `vf install-deps <feature>`
609
- Install only the dependencies for a feature
610
-
611
- ```bash
612
- $ vf install-deps charts
613
- ```
614
-
615
- ---
616
-
617
- ## 🚦 Production Readiness Checklist
618
-
619
- ### Before Launch
620
-
621
- - [ ] **Add interactive confirmation for overwrites**
622
- - [ ] **Add package dependency management**
623
- - [ ] **Add modification detection**
624
- - [ ] **Remove mini-native demo**
625
- - [ ] **Add `vf checklist` command**
626
- - [ ] **Add `vf status` command**
627
- - [ ] **Add `vf update` command**
628
- - [ ] **Test with real features (charts, sentry, posthog)**
629
- - [ ] **Write user documentation**
630
- - [ ] **Add telemetry (optional, with opt-out)**
631
-
632
- ### Nice to Have
633
-
634
- - [ ] Backup before deletion
635
- - [ ] Rollback command
636
- - [ ] Feature templates (create your own recipes)
637
- - [ ] Recipe validation tool
638
- - [ ] Auto-update CLI
639
-
640
- ---
641
-
642
- ## 💡 Recommendations
643
-
644
- ### For Simple Features (UI Components)
645
- ✅ **Fully automate** - No manual steps needed
646
-
647
- ### For Service Integrations (Sentry, PostHog, etc.)
648
- ⚠️ **Partial automation** - CLI installs code, user adds credentials
649
-
650
- ### For Complex Systems (Auth, Payments)
651
- ❌ **Don't automate** - Too complex, provide documentation instead
652
-
653
- ---
654
-
655
- ## 🎯 Priority Order
656
-
657
- 1. **🔴 CRITICAL:** Interactive confirmation for overwrites
658
- 2. **🔴 CRITICAL:** Package dependency management
659
- 3. **🟡 HIGH:** Modification detection
660
- 4. **🟡 HIGH:** Manual steps support in recipes
661
- 5. **🟢 MEDIUM:** `vf checklist` command
662
- 6. **🟢 MEDIUM:** `vf status` command
663
- 7. **🟢 LOW:** Remove mini-native
664
- 8. **🟢 LOW:** `vf update` command
665
-
666
- ---
667
-
668
- ## Final Answer: Is It Production Ready?
669
-
670
- ### Current State: **70% Ready**
671
-
672
- **Can ship now with:**
673
- - Clear documentation about limitations
674
- - Warning users to use Git
675
- - Only simple features (UI components)
676
-
677
- **Should NOT ship until:**
678
- - Interactive confirmation added
679
- - Package management added
680
- - At least basic modification detection
681
-
682
- **Timeline:**
683
- - 2-3 days of work to make it production-ready
684
- - 1 week to add all nice-to-have features