vibefast-cli 1.2.1 → 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.
- package/README.md +30 -95
- package/dist/__tests__/recipes.test.js +94 -91
- package/dist/__tests__/recipes.test.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +301 -125
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/checklist.d.ts.map +1 -1
- package/dist/commands/checklist.js +85 -44
- package/dist/commands/checklist.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +13 -4
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +118 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +202 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +61 -3
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +20 -18
- package/dist/core/auth.js.map +1 -1
- package/dist/core/codemod.d.ts +33 -0
- package/dist/core/codemod.d.ts.map +1 -1
- package/dist/core/codemod.js +116 -0
- package/dist/core/codemod.js.map +1 -1
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +24 -7
- package/dist/core/detect.js.map +1 -1
- package/dist/core/journal.d.ts +1 -0
- package/dist/core/journal.d.ts.map +1 -1
- package/dist/core/journal.js.map +1 -1
- package/dist/core/recipes.d.ts.map +1 -1
- package/dist/core/recipes.js +25 -7
- package/dist/core/recipes.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/docs/architecture.md +50 -0
- package/docs/commands.md +78 -0
- package/docs/contributing.md +27 -0
- package/docs/quickstart.md +50 -0
- package/docs/recipes.md +57 -0
- package/docs/troubleshooting.md +31 -0
- package/package.json +2 -2
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +445 -0
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +355 -0
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +31 -0
- package/recipes/0/recipe.json +18 -0
- package/recipes/animated-chip/apps/native/src/components/advanced-ui/chip/demo.tsx +2 -1
- package/recipes/animated-chip/recipe.json +5 -2
- package/recipes/animated-chip-native@latest.zip +0 -0
- package/recipes/animated-chip@latest.zip +0 -0
- package/recipes/animated-switch/apps/native/src/components/advanced-ui/switch/demo.tsx +1 -1
- package/recipes/animated-switch/recipe.json +5 -2
- package/recipes/animated-switch-native@latest.zip +0 -0
- package/recipes/animated-switch@latest.zip +0 -0
- package/recipes/audio-recorder/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
- package/recipes/audio-recorder/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -2
- package/recipes/audio-recorder/recipe.json +7 -2
- package/recipes/audio-recorder-native@latest.zip +0 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -1
- package/recipes/audio-recorder-supabase/recipe.json +12 -16
- package/recipes/audio-recorder-supabase-native@latest.zip +0 -0
- package/recipes/audio-recorder-supabase@latest.zip +0 -0
- package/recipes/audio-recorder@latest.zip +0 -0
- package/recipes/charts/apps/native/src/app/charts/index.tsx +3 -0
- package/recipes/charts/apps/native/src/features/charts/components/bar-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/candlestick-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/column-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/line-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/radar-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/stacked-bar-chart.tsx +3 -1
- package/recipes/charts/recipe.json +13 -4
- package/recipes/charts-native@latest.zip +0 -0
- package/recipes/charts@latest.zip +0 -0
- package/recipes/chatbot/apps/native/src/features/chatbot/components/chat-markdown.tsx +86 -86
- package/recipes/chatbot/apps/native/src/features/chatbot/components/markdown/code-block.tsx +4 -4
- package/recipes/chatbot/recipe.json +3 -40
- package/recipes/chatbot-native@latest.zip +0 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-markdown.tsx +4 -1
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/code-block.tsx +86 -53
- package/recipes/chatbot-supabase/recipe.json +3 -42
- package/recipes/chatbot-supabase-native@latest.zip +0 -0
- package/recipes/chatbot-supabase@latest.zip +0 -0
- package/recipes/chatbot@latest.zip +0 -0
- package/recipes/glowing-button/recipe.json +6 -2
- package/recipes/glowing-button-native@latest.zip +0 -0
- package/recipes/glowing-button@latest.zip +0 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/index.tsx +50 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/results.tsx +2 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +2 -2
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/camera.tsx +72 -65
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +65 -47
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading-screen.tsx +43 -2
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading.tsx +34 -1
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +83 -2
- package/recipes/image-analysis/recipe.json +11 -19
- package/recipes/image-analysis-native@latest.zip +0 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/index.tsx +50 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/results.tsx +2 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
- package/recipes/image-analysis-supabase/recipe.json +10 -37
- package/recipes/image-analysis-supabase-native@latest.zip +0 -0
- package/recipes/image-analysis-supabase@latest.zip +0 -0
- package/recipes/image-analysis@latest.zip +0 -0
- package/recipes/image-analyzer/apps/native/src/app/(root)/(protected)/image-analyzer/index.tsx +2 -0
- package/recipes/image-generator/apps/native/src/app/image-generator/gallery.tsx +3 -0
- package/recipes/image-generator/apps/native/src/app/image-generator/index.tsx +3 -0
- package/recipes/image-generator/recipe.json +8 -18
- package/recipes/image-generator-native@latest.zip +0 -0
- package/recipes/image-generator-supabase/recipe.json +6 -35
- package/recipes/image-generator-supabase-native@latest.zip +0 -0
- package/recipes/image-generator-supabase@latest.zip +0 -0
- package/recipes/image-generator@latest.zip +0 -0
- package/recipes/ios-widget/recipe.json +18 -119
- package/recipes/ios-widget-native@latest.zip +0 -0
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/number-stepper/apps/native/src/components/advanced-ui/stepper/demo.tsx +1 -1
- package/recipes/number-stepper/recipe.json +5 -2
- package/recipes/number-stepper-native@latest.zip +0 -0
- package/recipes/number-stepper@latest.zip +0 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/interactive-onboarding.tsx +11 -18
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/ai-tone-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/currency-step.tsx +9 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-ai-step.tsx +8 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-chatbot-step.tsx +6 -5
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-manual-step.tsx +4 -3
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-scan-step.tsx +6 -5
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/main-reason-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/notification-step.tsx +7 -6
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/overspend-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/personalizing-step.tsx +8 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/rating-step.tsx +6 -5
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/reminder-step.tsx +5 -6
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/safety-step.tsx +5 -4
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/struggle-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/welcome-step.tsx +7 -6
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/ui/onboarding-header.tsx +4 -3
- package/recipes/onboarding/recipe.json +9 -6
- package/recipes/onboarding-native@latest.zip +0 -0
- package/recipes/onboarding@latest.zip +0 -0
- package/recipes/payments/apps/native/src/app/paywall/index.tsx +74 -0
- package/recipes/payments/apps/native/src/app/paywall/local.tsx +25 -0
- package/recipes/payments/apps/native/src/app/paywall/remote.tsx +23 -0
- package/recipes/payments/packages/backend/convex/payments.ts +21 -3
- package/recipes/payments/recipe.json +14 -34
- package/recipes/payments-native@latest.zip +0 -0
- package/recipes/payments-supabase/apps/native/src/app/paywall/index.tsx +74 -0
- package/recipes/payments-supabase/apps/native/src/app/paywall/local.tsx +25 -0
- package/recipes/payments-supabase/apps/native/src/app/paywall/remote.tsx +23 -0
- package/recipes/payments-supabase/recipe.json +16 -23
- package/recipes/payments-supabase-native@latest.zip +0 -0
- package/recipes/payments-supabase@latest.zip +0 -0
- package/recipes/payments@latest.zip +0 -0
- package/recipes/posthog/apps/native/src/components/analytics/navigation-tracker.tsx +14 -0
- package/recipes/posthog/apps/native/src/lib/hooks/use-navigation-analytics.ts +44 -0
- package/recipes/posthog/apps/native/src/providers/posthog-provider.tsx +51 -0
- package/recipes/posthog/recipe.json +60 -0
- package/recipes/posthog-native@latest.zip +0 -0
- package/recipes/progress-circle/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +1 -1
- package/recipes/progress-circle/recipe.json +5 -2
- package/recipes/progress-circle-native@latest.zip +0 -0
- package/recipes/progress-circle@latest.zip +0 -0
- package/recipes/quiz/apps/native/src/app/quiz/index.tsx +47 -0
- package/recipes/quiz/recipe.json +9 -6
- package/recipes/quiz-native@latest.zip +0 -0
- package/recipes/quiz@latest.zip +0 -0
- package/recipes/screen-kits/apps/native/src/app/screen-kits/_layout.tsx +12 -0
- package/recipes/screen-kits/apps/native/src/app/screen-kits/index.tsx +114 -0
- package/recipes/screen-kits/apps/native/src/features/screen-kits/index.ts +1 -0
- package/recipes/screen-kits/apps/native/src/features/screen-kits/types.ts +28 -0
- package/recipes/screen-kits/recipe.json +26 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/_layout.tsx +12 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/home.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/index.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-complete.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-fail.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/skill-tree.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/duo-button.tsx +174 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/skill-button.tsx +186 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/xp-header.tsx +115 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/constants.ts +89 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/index.ts +3 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/home-screen.tsx +225 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-complete-screen.tsx +485 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-fail-screen.tsx +105 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-screen.tsx +384 -0
- package/recipes/screen-kits-duolingo/recipe.json +58 -0
- package/recipes/screen-kits-duolingo-native@latest.zip +0 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/_layout.tsx +45 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/asset-detail.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/notifications.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/receive.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/send.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/swap.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/wallet.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/ActionButtons.tsx +78 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/AssetRow.tsx +94 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/BalanceCard.tsx +118 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/constants.ts +85 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/asset-detail.tsx +378 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/notifications.tsx +210 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/receive-modal.tsx +317 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/send-modal.tsx +420 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/swap-modal.tsx +363 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/wallet-dashboard.tsx +281 -0
- package/recipes/screen-kits-finance/recipe.json +46 -0
- package/recipes/screen-kits-finance-native@latest.zip +0 -0
- package/recipes/screen-kits-fitness/apps/native/assets/sounds/timer-beep.wav +0 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/_layout.tsx +10 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/index.tsx +6 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/timer.tsx +3 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/workout.tsx +3 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-components.tsx +500 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-settings-modal.tsx +352 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/workout-card.tsx +105 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/constants.ts +189 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/hooks/use-timer.ts +307 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/index.ts +1 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/timer-screen.tsx +278 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/workout-dashboard.tsx +350 -0
- package/recipes/screen-kits-fitness/recipe.json +63 -0
- package/recipes/screen-kits-fitness-native@latest.zip +0 -0
- package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/habits.tsx +1 -0
- package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/kanban.tsx +1 -0
- package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/routes.ts +4 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/AddTaskModal.tsx +246 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/DraggableTaskCard.tsx +92 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/KanbanColumn.tsx +238 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/TaskCard.tsx +144 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/add-habit-modal.tsx +271 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/constants.ts +295 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/kanban-utils.ts +62 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/habit-tracker.tsx +1160 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/kanban-board.tsx +432 -0
- package/recipes/screen-kits-habits/recipe.json +52 -0
- package/recipes/screen-kits-habits-native@latest.zip +0 -0
- package/recipes/screen-kits-native@latest.zip +0 -0
- package/recipes/sentry/apps/native/src/providers/sentry-provider.tsx +64 -0
- package/recipes/sentry/recipe.json +39 -0
- package/recipes/sentry-native@latest.zip +0 -0
- package/recipes/swipe-slider/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +1 -1
- package/recipes/swipe-slider/recipe.json +5 -2
- package/recipes/swipe-slider-native@latest.zip +0 -0
- package/recipes/swipe-slider@latest.zip +0 -0
- package/recipes/timeline/apps/native/src/components/advanced-ui/timeline/demo.tsx +2 -1
- package/recipes/timeline/recipe.json +5 -2
- package/recipes/timeline-native@latest.zip +0 -0
- package/recipes/timeline@latest.zip +0 -0
- package/recipes/tracker-app/apps/native/src/app/tracker-app/index.tsx +1 -0
- package/recipes/tracker-app/recipe.json +10 -7
- package/recipes/tracker-app-native@latest.zip +0 -0
- package/recipes/tracker-app@latest.zip +0 -0
- package/recipes/upload-all.sh +8 -31
- package/recipes/voice-bot/apps/native/src/app/voice-bot/index.tsx +56 -0
- package/recipes/voice-bot/recipe.json +31 -7
- package/recipes/voice-bot-native@latest.zip +0 -0
- package/recipes/voice-bot@latest.zip +0 -0
- package/recipes/wake-word/apps/native/src/app/{(root)/(protected)/test-wake-word.tsx → test-wake-word.tsx} +43 -4
- package/recipes/wake-word/recipe.json +16 -26
- package/recipes/wake-word-native@latest.zip +0 -0
- package/recipes/wake-word@latest.zip +0 -0
- package/scripts/create-advanced-ui-recipes.sh +46 -19
- package/scripts/create-recipes.mjs +471 -117
- package/scripts/package-recipes.mjs +76 -0
- package/scripts/publish-all.sh +6 -2
- package/CHANGELOG.md +0 -198
- package/docs/archive/AUTO-DETECT-DEPS.md +0 -607
- package/docs/archive/FINAL-PACKAGE-STRATEGY.md +0 -583
- package/docs/archive/FINAL-SIMPLE-PLAN.md +0 -487
- package/docs/archive/FINAL-STATUS.md +0 -144
- package/docs/archive/FLOW-DIAGRAM.md +0 -1629
- package/docs/archive/GOTCHAS-AND-RISKS.md +0 -801
- package/docs/archive/IMPLEMENTATION-PLAN.md +0 -1360
- package/docs/archive/PLAN.md +0 -453
- package/docs/archive/PRODUCTION-READINESS.md +0 -684
- package/docs/archive/PRODUCTION-TEST-RESULTS.md +0 -465
- package/docs/archive/SIMPLIFIED-PLAN.md +0 -578
- package/docs/archive/STATUS.md +0 -199
- package/docs/archive/SUCCESS.md +0 -259
- package/docs/archive/TEST-SUMMARY.md +0 -261
- package/docs/archive/TESTING-CHECKLIST.md +0 -450
- package/docs/archive/USER-MODIFICATIONS.md +0 -448
- package/docs/decisions.md +0 -55
- package/docs/manual-testing.md +0 -91
- package/docs/next-steps.md +0 -12
- package/recipes/README.md +0 -156
- package/recipes/audio-recorder-supabase/packages/backend/src/services/recordings.ts +0 -369
- package/recipes/chatbot/apps/native/src/api-client/chatbot.ts +0 -83
- package/recipes/chatbot/packages/backend/convex/agents.ts +0 -115
- package/recipes/chatbot/packages/backend/convex/tools/index.ts +0 -18
- package/recipes/chatbot/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -97
- package/recipes/chatbot/packages/backend/convex/tools/tavilySearch.ts +0 -83
- package/recipes/chatbot/packages/backend/convex/tools/userProfile.ts +0 -72
- package/recipes/chatbot-supabase/apps/native/src/api-client/supabase/chatbot.ts +0 -515
- package/recipes/chatbot-supabase/packages/backend/src/services/conversations.ts +0 -243
- package/recipes/chatbot-supabase/packages/backend/src/services/messages.ts +0 -327
- package/recipes/image-analysis/apps/native/src/api-client/image-analyzer.ts +0 -62
- package/recipes/image-analysis-supabase/packages/backend/src/services/image-analyses.ts +0 -132
- package/recipes/image-generator/apps/native/src/api-client/image-generator.ts +0 -34
- package/recipes/payments/apps/native/src/api-client/payments.ts +0 -44
- package/recipes/payments-supabase/packages/backend/src/services/payments.ts +0 -201
- package/recipes/posthog.json +0 -47
- package/recipes/revenuecat.json +0 -43
- package/recipes/sentry.json +0 -47
- package/recipes/wake-word/apps/native/assets/vosk-model/README.md +0 -103
- package/recipes/wake-word/apps/native/scripts/download-vosk-model.mjs +0 -127
- /package/recipes/{audio-recorder/apps/native/src/app/(root)/(protected) → audio-recorder-supabase/apps/native/src/app}/audio-recorder/index.tsx +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/AppIntent.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/CalorieTrackerWidget.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/HabitTrackerWidget.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Info.plist +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/WidgetLiveActivity.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/expo-target.config.js +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/generated.entitlements +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/index.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/widgets.swift +0 -0
|
@@ -1,448 +0,0 @@
|
|
|
1
|
-
# 🔧 User Modifications & File Management
|
|
2
|
-
|
|
3
|
-
## What is mini-native?
|
|
4
|
-
|
|
5
|
-
**mini-native** is a **demo/test feature** used for testing the VibeFast CLI. It's not a real production feature, but rather a minimal example to validate the entire installation flow.
|
|
6
|
-
|
|
7
|
-
### Purpose
|
|
8
|
-
- Test the CLI installation process
|
|
9
|
-
- Validate the worker API
|
|
10
|
-
- Demonstrate the recipe format
|
|
11
|
-
- Used in E2E tests and documentation examples
|
|
12
|
-
|
|
13
|
-
### What it contains
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"name": "mini-native",
|
|
17
|
-
"version": "0.1.0",
|
|
18
|
-
"description": "Demo feature (Expo)",
|
|
19
|
-
"copy": [
|
|
20
|
-
{
|
|
21
|
-
"from": "apps/native/src/app/mini",
|
|
22
|
-
"to": "apps/native/src/app/(root)/(protected)/mini"
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"nav": {
|
|
26
|
-
"href": "/(root)/(protected)/mini",
|
|
27
|
-
"label": "Mini"
|
|
28
|
-
},
|
|
29
|
-
"target": "native"
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
It's essentially a single screen/page that gets installed to demonstrate that the CLI works correctly.
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## What Happens When Users Modify Files?
|
|
38
|
-
|
|
39
|
-
This is a **critical question** about the CLI's behavior. Here's the complete breakdown:
|
|
40
|
-
|
|
41
|
-
### Scenario 1: User Modifies Files After Installation
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
Day 1: Install charts
|
|
45
|
-
$ vf add charts
|
|
46
|
-
✓ 17 files installed
|
|
47
|
-
|
|
48
|
-
Day 5: User edits files
|
|
49
|
-
User modifies: apps/native/src/app/(root)/(protected)/charts/index.tsx
|
|
50
|
-
- Adds custom styling
|
|
51
|
-
- Removes some components
|
|
52
|
-
- Adds new features
|
|
53
|
-
|
|
54
|
-
Day 10: User removes charts
|
|
55
|
-
$ vf remove charts
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**What happens?**
|
|
59
|
-
|
|
60
|
-
### ⚠️ The CLI Will Delete ALL Files - Including User Modifications!
|
|
61
|
-
|
|
62
|
-
The CLI **does NOT track file modifications**. Here's why:
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
// From src/core/fsx.ts
|
|
66
|
-
export async function deleteFile(path: string): Promise<void> {
|
|
67
|
-
try {
|
|
68
|
-
await rm(path, { recursive: true, force: true });
|
|
69
|
-
} catch (err: any) {
|
|
70
|
-
if (err.code !== 'ENOENT') throw err;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
// From src/commands/remove.ts
|
|
77
|
-
// Delete files
|
|
78
|
-
for (const file of entry.files) {
|
|
79
|
-
log.info(`Deleting ${file}`);
|
|
80
|
-
if (!options.dryRun) {
|
|
81
|
-
await deleteFile(file);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### How It Works
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
90
|
-
│ FILE DELETION PROCESS │
|
|
91
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
92
|
-
|
|
93
|
-
Step 1: Read Journal
|
|
94
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
95
|
-
│ .vibefast/journal.json contains: │
|
|
96
|
-
│ { │
|
|
97
|
-
│ "feature": "charts", │
|
|
98
|
-
│ "files": [ │
|
|
99
|
-
│ "/path/to/apps/native/src/app/charts/index.tsx", │
|
|
100
|
-
│ "/path/to/apps/native/src/app/charts/chart-card.tsx", │
|
|
101
|
-
│ ... (15 more files) │
|
|
102
|
-
│ ] │
|
|
103
|
-
│ } │
|
|
104
|
-
└──────────────────────────────────────────────────────────────┘
|
|
105
|
-
|
|
106
|
-
Step 2: Delete Each File
|
|
107
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
108
|
-
│ For each file in the list: │
|
|
109
|
-
│ • No check if file was modified │
|
|
110
|
-
│ • No backup created │
|
|
111
|
-
│ • No diff comparison │
|
|
112
|
-
│ • Just: rm -rf <file> │
|
|
113
|
-
│ │
|
|
114
|
-
│ Result: ALL files deleted, regardless of modifications │
|
|
115
|
-
└──────────────────────────────────────────────────────────────┘
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Scenario 2: Reinstalling After Modifications
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
Day 1: Install charts
|
|
124
|
-
$ vf add charts
|
|
125
|
-
✓ 17 files installed
|
|
126
|
-
|
|
127
|
-
Day 5: User modifies files
|
|
128
|
-
User edits multiple chart files
|
|
129
|
-
|
|
130
|
-
Day 10: User tries to reinstall
|
|
131
|
-
$ vf add charts
|
|
132
|
-
⚠ charts is already installed for native
|
|
133
|
-
ℹ Use --force to reinstall
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Using --force Flag
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
$ vf add charts --force
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**What happens?**
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
146
|
-
│ FORCE REINSTALL PROCESS │
|
|
147
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
148
|
-
|
|
149
|
-
Step 1: Check Existing Installation
|
|
150
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
151
|
-
│ Journal shows charts is installed │
|
|
152
|
-
│ BUT --force flag is present │
|
|
153
|
-
│ → Skip the "already installed" warning │
|
|
154
|
-
│ → Proceed with installation │
|
|
155
|
-
└──────────────────────────────────────────────────────────────┘
|
|
156
|
-
|
|
157
|
-
Step 2: Copy Files (with force)
|
|
158
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
159
|
-
│ From src/core/fsx.ts: │
|
|
160
|
-
│ │
|
|
161
|
-
│ if (destExists && !options?.force) { │
|
|
162
|
-
│ throw new Error(`File exists: ${destPath}`); │
|
|
163
|
-
│ } │
|
|
164
|
-
│ │
|
|
165
|
-
│ With --force: │
|
|
166
|
-
│ • Existing files are OVERWRITTEN │
|
|
167
|
-
│ • User modifications are LOST │
|
|
168
|
-
│ • No backup is created │
|
|
169
|
-
│ • Fresh files from recipe replace everything │
|
|
170
|
-
└──────────────────────────────────────────────────────────────┘
|
|
171
|
-
|
|
172
|
-
Step 3: Update Journal
|
|
173
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
174
|
-
│ Journal is updated with new file list │
|
|
175
|
-
│ (Usually the same files, but fresh timestamps) │
|
|
176
|
-
└──────────────────────────────────────────────────────────────┘
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## Scenario 3: User Deletes Some Files Manually
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
Day 1: Install charts (17 files)
|
|
185
|
-
$ vf add charts
|
|
186
|
-
|
|
187
|
-
Day 5: User manually deletes 3 files
|
|
188
|
-
User removes:
|
|
189
|
-
- chart-card.tsx
|
|
190
|
-
- chart-utils.ts
|
|
191
|
-
- chart-types.ts
|
|
192
|
-
|
|
193
|
-
Day 10: User removes charts
|
|
194
|
-
$ vf remove charts
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**What happens?**
|
|
198
|
-
|
|
199
|
-
```
|
|
200
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
201
|
-
│ PARTIAL FILE DELETION │
|
|
202
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
203
|
-
|
|
204
|
-
The CLI tries to delete ALL 17 files from journal:
|
|
205
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
206
|
-
│ File 1: index.tsx → Deleted ✓ │
|
|
207
|
-
│ File 2: chart-card.tsx → Already gone (OK) │
|
|
208
|
-
│ File 3: chart-utils.ts → Already gone (OK) │
|
|
209
|
-
│ File 4: chart-types.ts → Already gone (OK) │
|
|
210
|
-
│ File 5: chart-preview.tsx → Deleted ✓ │
|
|
211
|
-
│ ... (continue for remaining files) │
|
|
212
|
-
│ │
|
|
213
|
-
│ From src/core/fsx.ts: │
|
|
214
|
-
│ catch (err: any) { │
|
|
215
|
-
│ if (err.code !== 'ENOENT') throw err; │
|
|
216
|
-
│ } │
|
|
217
|
-
│ │
|
|
218
|
-
│ ENOENT = "File not found" → Silently ignored │
|
|
219
|
-
│ Result: No error, removal completes successfully │
|
|
220
|
-
└──────────────────────────────────────────────────────────────┘
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
|
-
## Scenario 4: User Adds New Files to Feature Directory
|
|
226
|
-
|
|
227
|
-
```
|
|
228
|
-
Day 1: Install charts (17 files)
|
|
229
|
-
$ vf add charts
|
|
230
|
-
|
|
231
|
-
Day 5: User adds custom files
|
|
232
|
-
User creates:
|
|
233
|
-
- apps/native/src/app/charts/my-custom-chart.tsx
|
|
234
|
-
- apps/native/src/app/charts/my-utils.ts
|
|
235
|
-
- apps/native/src/features/charts/my-hook.ts
|
|
236
|
-
|
|
237
|
-
Day 10: User removes charts
|
|
238
|
-
$ vf remove charts
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
**What happens?**
|
|
242
|
-
|
|
243
|
-
```
|
|
244
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
245
|
-
│ ORPHANED FILES PROBLEM │
|
|
246
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
247
|
-
|
|
248
|
-
The CLI only deletes tracked files:
|
|
249
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
250
|
-
│ Journal contains 17 original files │
|
|
251
|
-
│ CLI deletes those 17 files │
|
|
252
|
-
│ │
|
|
253
|
-
│ User's custom files are NOT in journal: │
|
|
254
|
-
│ • my-custom-chart.tsx → NOT DELETED (orphaned) │
|
|
255
|
-
│ • my-utils.ts → NOT DELETED (orphaned) │
|
|
256
|
-
│ • my-hook.ts → NOT DELETED (orphaned) │
|
|
257
|
-
│ │
|
|
258
|
-
│ Result: │
|
|
259
|
-
│ ✓ Original 17 files deleted │
|
|
260
|
-
│ ⚠ User's 3 custom files remain in the directory │
|
|
261
|
-
│ ⚠ Empty directories may remain │
|
|
262
|
-
└──────────────────────────────────────────────────────────────┘
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## The Problem: No Modification Tracking
|
|
268
|
-
|
|
269
|
-
### What the CLI Does NOT Do
|
|
270
|
-
|
|
271
|
-
```
|
|
272
|
-
❌ Does NOT check if files were modified
|
|
273
|
-
❌ Does NOT create backups before deletion
|
|
274
|
-
❌ Does NOT warn about modified files
|
|
275
|
-
❌ Does NOT track user-added files
|
|
276
|
-
❌ Does NOT show diffs
|
|
277
|
-
❌ Does NOT ask for confirmation (except dry-run)
|
|
278
|
-
❌ Does NOT preserve user changes
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
### What the CLI DOES Do
|
|
282
|
-
|
|
283
|
-
```
|
|
284
|
-
✓ Tracks original file paths in journal
|
|
285
|
-
✓ Deletes files by path (regardless of content)
|
|
286
|
-
✓ Ignores missing files (ENOENT)
|
|
287
|
-
✓ Supports --dry-run to preview
|
|
288
|
-
✓ Supports --force to overwrite
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
|
-
## Best Practices for Users
|
|
294
|
-
|
|
295
|
-
### 1. Use Version Control (Git)
|
|
296
|
-
|
|
297
|
-
```bash
|
|
298
|
-
# Before installing any feature
|
|
299
|
-
$ git status
|
|
300
|
-
$ git commit -am "Before installing charts"
|
|
301
|
-
|
|
302
|
-
# Install feature
|
|
303
|
-
$ vf add charts
|
|
304
|
-
|
|
305
|
-
# Review changes
|
|
306
|
-
$ git diff
|
|
307
|
-
$ git add .
|
|
308
|
-
$ git commit -m "Add charts feature"
|
|
309
|
-
|
|
310
|
-
# If you modify files
|
|
311
|
-
$ git commit -am "Customize charts"
|
|
312
|
-
|
|
313
|
-
# If you want to remove
|
|
314
|
-
$ vf remove charts
|
|
315
|
-
$ git diff # See what was deleted
|
|
316
|
-
$ git checkout -- . # Restore if needed
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
### 2. Use --dry-run Before Operations
|
|
320
|
-
|
|
321
|
-
```bash
|
|
322
|
-
# Preview installation
|
|
323
|
-
$ vf add charts --dry-run
|
|
324
|
-
[DRY RUN] No changes will be made
|
|
325
|
-
ℹ Files that would be added: 17
|
|
326
|
-
|
|
327
|
-
# Preview removal
|
|
328
|
-
$ vf remove charts --dry-run
|
|
329
|
-
[DRY RUN] No changes will be made
|
|
330
|
-
ℹ Files that would be deleted: 17
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### 3. Don't Modify Feature Files Directly
|
|
334
|
-
|
|
335
|
-
**Instead of modifying feature files:**
|
|
336
|
-
```
|
|
337
|
-
❌ apps/native/src/features/charts/chart-card.tsx
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**Create wrapper components:**
|
|
341
|
-
```
|
|
342
|
-
✓ apps/native/src/components/custom-chart-card.tsx
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
This way:
|
|
346
|
-
- Feature files remain untouched
|
|
347
|
-
- Your customizations are separate
|
|
348
|
-
- Removal doesn't affect your code
|
|
349
|
-
- Updates are easier
|
|
350
|
-
|
|
351
|
-
### 4. Fork Features Into Your Own Code
|
|
352
|
-
|
|
353
|
-
If you need heavy customization:
|
|
354
|
-
|
|
355
|
-
```bash
|
|
356
|
-
# Install feature
|
|
357
|
-
$ vf add charts
|
|
358
|
-
|
|
359
|
-
# Copy to your own directory
|
|
360
|
-
$ cp -r apps/native/src/features/charts apps/native/src/features/my-charts
|
|
361
|
-
|
|
362
|
-
# Remove original
|
|
363
|
-
$ vf remove charts
|
|
364
|
-
|
|
365
|
-
# Now you own the code completely
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
## Potential Improvements (Not Currently Implemented)
|
|
371
|
-
|
|
372
|
-
### Idea 1: Modification Detection
|
|
373
|
-
|
|
374
|
-
```typescript
|
|
375
|
-
// Hypothetical future feature
|
|
376
|
-
interface JournalEntry {
|
|
377
|
-
feature: string;
|
|
378
|
-
files: Array<{
|
|
379
|
-
path: string;
|
|
380
|
-
hash: string; // SHA-256 of original content
|
|
381
|
-
}>;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// Before removal, check:
|
|
385
|
-
for (const file of entry.files) {
|
|
386
|
-
const currentHash = await hashFile(file.path);
|
|
387
|
-
if (currentHash !== file.hash) {
|
|
388
|
-
log.warn(`${file.path} was modified by user`);
|
|
389
|
-
// Ask for confirmation or create backup
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
### Idea 2: Backup Before Deletion
|
|
395
|
-
|
|
396
|
-
```typescript
|
|
397
|
-
// Hypothetical future feature
|
|
398
|
-
$ vf remove charts --backup
|
|
399
|
-
|
|
400
|
-
// Creates:
|
|
401
|
-
.vibefast/backups/charts-2024-11-13/
|
|
402
|
-
├── index.tsx
|
|
403
|
-
├── chart-card.tsx
|
|
404
|
-
└── ...
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### Idea 3: Smart Merge on Reinstall
|
|
408
|
-
|
|
409
|
-
```typescript
|
|
410
|
-
// Hypothetical future feature
|
|
411
|
-
$ vf add charts --force --merge
|
|
412
|
-
|
|
413
|
-
// Would:
|
|
414
|
-
// 1. Detect modifications
|
|
415
|
-
// 2. Create .orig files
|
|
416
|
-
// 3. Install new version
|
|
417
|
-
// 4. Show merge conflicts
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
---
|
|
421
|
-
|
|
422
|
-
## Summary
|
|
423
|
-
|
|
424
|
-
### mini-native
|
|
425
|
-
- Demo/test feature for CLI validation
|
|
426
|
-
- Contains minimal code (single screen)
|
|
427
|
-
- Used in examples and tests
|
|
428
|
-
- Not a production feature
|
|
429
|
-
|
|
430
|
-
### User Modifications
|
|
431
|
-
- **CLI does NOT track modifications**
|
|
432
|
-
- `vf remove` deletes ALL tracked files (modified or not)
|
|
433
|
-
- `vf add --force` overwrites ALL files (losing modifications)
|
|
434
|
-
- User-added files are orphaned (not deleted)
|
|
435
|
-
- **Best practice: Use Git for safety**
|
|
436
|
-
- **Best practice: Don't modify feature files directly**
|
|
437
|
-
|
|
438
|
-
### Key Takeaway
|
|
439
|
-
|
|
440
|
-
The VibeFast CLI treats features as **atomic units**:
|
|
441
|
-
- Install = Copy all files
|
|
442
|
-
- Remove = Delete all files
|
|
443
|
-
- No middle ground, no modification tracking
|
|
444
|
-
|
|
445
|
-
This is simple and predictable, but requires users to:
|
|
446
|
-
1. Use version control
|
|
447
|
-
2. Keep customizations separate
|
|
448
|
-
3. Understand that modifications will be lost on remove/reinstall
|
package/docs/decisions.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# VibeFast CLI — Decisions & Ground Rules
|
|
2
|
-
|
|
3
|
-
## Package Details
|
|
4
|
-
- **Package name:** `vibefast-cli`
|
|
5
|
-
- **Binary alias:** `vf`
|
|
6
|
-
- **Default target:** `native` (override with `--target web`)
|
|
7
|
-
|
|
8
|
-
## Authentication
|
|
9
|
-
- **Method:** Fixed opaque token per customer
|
|
10
|
-
- **Device slots:** 2 by default
|
|
11
|
-
- **Storage:** Cloudflare Worker validates token/seat → issues short-lived signed URL to recipe zip in R2/KV
|
|
12
|
-
|
|
13
|
-
## Repository Signature
|
|
14
|
-
Requires `.vibefast/starter.json`:
|
|
15
|
-
```json
|
|
16
|
-
{
|
|
17
|
-
"name": "vibefast",
|
|
18
|
-
"version": "1.0.0",
|
|
19
|
-
"targets": ["native", "web"]
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Code Markers
|
|
24
|
-
|
|
25
|
-
### Native Target
|
|
26
|
-
File: `apps/native/src/app/(root)/(protected)/(tabs)/index.tsx`
|
|
27
|
-
```tsx
|
|
28
|
-
// --- @vibefast:navigation:start ---
|
|
29
|
-
{/* CLI will inject feature links here */}
|
|
30
|
-
// --- @vibefast:navigation:end ---
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Web Target
|
|
34
|
-
File: `apps/web/app/page.tsx`
|
|
35
|
-
```tsx
|
|
36
|
-
{/* @vibefast:nav:start */}
|
|
37
|
-
{/* CLI will inject feature cards here */}
|
|
38
|
-
{/* @vibefast:nav:end */}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Journal
|
|
42
|
-
- **Location:** `.vibefast/journal.json`
|
|
43
|
-
- **Purpose:** Tracks installed files and nav inserts
|
|
44
|
-
|
|
45
|
-
## Rate Limits
|
|
46
|
-
- **Daily:** 500 requests per token
|
|
47
|
-
- **Per minute:** 30 requests per token
|
|
48
|
-
- Subject to tuning based on usage patterns
|
|
49
|
-
|
|
50
|
-
## Delivery Architecture
|
|
51
|
-
1. CLI sends token + device info to Cloudflare Worker
|
|
52
|
-
2. Worker validates token and checks device slots
|
|
53
|
-
3. Worker issues short-lived signed URL to recipe zip in R2/KV
|
|
54
|
-
4. CLI downloads and extracts recipe
|
|
55
|
-
5. CLI applies codemod and updates journal
|
package/docs/manual-testing.md
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# Manual Testing Guide
|
|
2
|
-
|
|
3
|
-
This guide explains how to manually test the `vibefast-cli` during development without affecting your globally installed version (if any).
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- You are in the `vibefast-cli` directory.
|
|
8
|
-
- You have run `npm install`.
|
|
9
|
-
|
|
10
|
-
## Method 1: The "Alias" Method (Recommended)
|
|
11
|
-
|
|
12
|
-
This method allows you to run your local build as `vf-dev` without overwriting your global `vf` command.
|
|
13
|
-
|
|
14
|
-
1. **Build the CLI**:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm run build
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
2. **Create an Alias** (run this in your terminal):
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
# Run this inside the vibefast-cli directory
|
|
24
|
-
alias vf-dev="node $(pwd)/dist/index.js"
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
3. **Test in a Sandbox**:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
# Go to a temporary directory
|
|
31
|
-
mkdir ~/Desktop/vf-playground
|
|
32
|
-
cd ~/Desktop/vf-playground
|
|
33
|
-
|
|
34
|
-
# Run your local CLI
|
|
35
|
-
vf-dev init
|
|
36
|
-
vf-dev add chatbot
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Method 2: The "Link" Method
|
|
40
|
-
|
|
41
|
-
Use this if you want to replace your global `vf` command with your local version.
|
|
42
|
-
|
|
43
|
-
1. **Build**:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
npm run build
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
2. **Link**:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
npm link
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
3. **Test**:
|
|
56
|
-
Now `vf` runs your local code anywhere.
|
|
57
|
-
|
|
58
|
-
4. **Unlink (Revert)**:
|
|
59
|
-
```bash
|
|
60
|
-
npm unlink -g vibefast-cli
|
|
61
|
-
# Then reinstall the production version if needed
|
|
62
|
-
npm i -g vibefast-cli
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## What to Test?
|
|
66
|
-
|
|
67
|
-
### 1. Initialization
|
|
68
|
-
|
|
69
|
-
- Run `vf init`.
|
|
70
|
-
- Check if `.vibefast/starter.json` is created.
|
|
71
|
-
- Check if it asks for a license key (if not already saved).
|
|
72
|
-
|
|
73
|
-
### 2. Adding Features
|
|
74
|
-
|
|
75
|
-
- Run `vf add <feature>`.
|
|
76
|
-
- **Verify**:
|
|
77
|
-
- Files are copied to `apps/native` or `apps/web`.
|
|
78
|
-
- `app.config.ts` (Native) has the plugin added (if applicable).
|
|
79
|
-
- `package.json` dependencies are updated (or prompted).
|
|
80
|
-
|
|
81
|
-
### 3. Removing Features
|
|
82
|
-
|
|
83
|
-
- Run `vf remove <feature>`.
|
|
84
|
-
- **Verify**:
|
|
85
|
-
- Files are deleted.
|
|
86
|
-
- `app.config.ts` plugin is removed (if implemented) or you are warned.
|
|
87
|
-
|
|
88
|
-
### 4. Edge Cases
|
|
89
|
-
|
|
90
|
-
- Run in a folder that is _not_ a VibeFast project (should fail gracefully).
|
|
91
|
-
- Run with invalid arguments.
|
package/docs/next-steps.md
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# CLI Next Steps Backlog
|
|
2
|
-
|
|
3
|
-
Work on these items is tracked here so contributors can see what remains after the initial implementation. Update the status column when a task is started or complete.
|
|
4
|
-
|
|
5
|
-
| Status | Task | Details | Owner |
|
|
6
|
-
| --- | --- | --- | --- |
|
|
7
|
-
| 🟡 Open | Test with real features | Create example recipes (charts, Sentry, PostHog, etc.) and run the full install/remove flow against them to validate the experience end-to-end. | TBD |
|
|
8
|
-
| 🟡 Open | Update documentation | Expand `README.md` (and related docs) with the latest commands, flags, and troubleshooting notes captured in version `0.2.2`. | TBD |
|
|
9
|
-
| 🟡 Open | Create example recipes | Publish representative zips that can be shared internally and used in automated tests. | TBD |
|
|
10
|
-
| 🟡 Open | Publish to npm | Bump the package version, run the build pipeline, and push a new release to the npm registry. | TBD |
|
|
11
|
-
| 🟡 Open | Get user feedback | Share the CLI with pilot customers, collect their notes, and iterate on UX/edge cases. | TBD |
|
|
12
|
-
|