vibefast-cli 1.1.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +63 -169
- package/dist/__tests__/recipes.test.js +89 -85
- package/dist/__tests__/recipes.test.js.map +1 -1
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +576 -588
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/checklist.d.ts +1 -1
- package/dist/commands/checklist.d.ts.map +1 -1
- package/dist/commands/checklist.js +40 -39
- package/dist/commands/checklist.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.js +22 -22
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/env.d.ts +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +58 -53
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/health.d.ts +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +101 -93
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +416 -296
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/remove.d.ts +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +77 -64
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +15 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/core/__tests__/detect.test.js +68 -34
- package/dist/core/__tests__/detect.test.js.map +1 -1
- package/dist/core/ast.d.ts +14 -0
- package/dist/core/ast.d.ts.map +1 -0
- package/dist/core/ast.js +239 -0
- package/dist/core/ast.js.map +1 -0
- package/dist/core/codemod.d.ts.map +1 -1
- package/dist/core/codemod.js +62 -44
- package/dist/core/codemod.js.map +1 -1
- package/dist/core/config.d.ts +10 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +51 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/detect.d.ts +8 -2
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +52 -21
- package/dist/core/detect.js.map +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +9 -8
- package/dist/core/errors.js.map +1 -1
- package/dist/core/exec.d.ts +16 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +48 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/manualSteps.d.ts +7 -0
- package/dist/core/manualSteps.d.ts.map +1 -0
- package/dist/core/manualSteps.js +59 -0
- package/dist/core/manualSteps.js.map +1 -0
- package/dist/core/paths.d.ts +3 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +14 -10
- package/dist/core/paths.js.map +1 -1
- package/dist/core/spinner.d.ts +1 -1
- package/dist/core/spinner.d.ts.map +1 -1
- package/dist/core/spinner.js +38 -8
- package/dist/core/spinner.js.map +1 -1
- package/dist/core/vosk.d.ts.map +1 -1
- package/dist/core/vosk.js +50 -39
- package/dist/core/vosk.js.map +1 -1
- package/docs/manual-testing.md +91 -0
- package/package.json +6 -3
- package/recipes/audio-recorder/apps/native/src/app/audio-recorder/index.tsx +5 -0
- package/recipes/audio-recorder/recipe.json +3 -3
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-player.tsx +301 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +373 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-waveform.tsx +270 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/index.ts +4 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/recording-list.tsx +89 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/audio-player-demo.tsx +66 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/audio-recorder-cloud.tsx +68 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/audio-recorder-interview.tsx +102 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/basic.tsx +27 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/index.ts +5 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +82 -0
- package/recipes/audio-recorder-supabase/packages/backend/src/services/recordings.ts +369 -0
- package/recipes/audio-recorder-supabase/packages/backend/supabase/migrations/recordings.sql +70 -0
- package/recipes/audio-recorder-supabase/recipe.json +52 -0
- package/recipes/audio-recorder-supabase@latest.zip +0 -0
- package/recipes/audio-recorder@latest.zip +0 -0
- package/recipes/charts/apps/native/src/features/charts/components/bar-chart.tsx +3 -3
- package/recipes/charts/apps/native/src/features/charts/components/candlestick-chart.tsx +2 -2
- package/recipes/charts/apps/native/src/features/charts/components/chart-card.tsx +5 -5
- package/recipes/charts/apps/native/src/features/charts/components/column-chart.tsx +3 -3
- package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +20 -4
- package/recipes/charts/apps/native/src/features/charts/components/line-chart.tsx +7 -6
- package/recipes/charts/apps/native/src/features/charts/components/radar-chart.tsx +6 -4
- package/recipes/charts/apps/native/src/features/charts/components/radial-bar-chart.tsx +1 -1
- package/recipes/charts/apps/native/src/features/charts/components/stacked-bar-chart.tsx +5 -4
- package/recipes/charts/recipe.json +4 -13
- package/recipes/charts@latest.zip +0 -0
- package/recipes/chatbot/apps/native/src/app/chatbot/index.tsx +1 -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 +86 -53
- package/recipes/chatbot/recipe.json +26 -92
- package/recipes/chatbot-supabase/apps/native/src/api-client/supabase/chatbot.ts +515 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/app/index.tsx +257 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-header-buttons.tsx +59 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-input-bar.tsx +485 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-markdown.tsx +575 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-message-bubble.tsx +223 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-settings-modal.tsx +161 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/image-preview-list.tsx +116 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/code-block.tsx +165 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/index.ts +10 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/table-renderer.tsx +129 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/message-error-boundary.tsx +78 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/message-list.tsx +170 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/model-selector.tsx +283 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/report-content-modal.tsx +188 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/suggested-messages.tsx +67 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/constants/models.ts +20 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/constants/report-reasons.ts +9 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-attachment-cache.ts +142 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-chat-config.ts +458 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-chat-handlers.ts +429 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-chatbot-settings.ts +89 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-conversation.ts +90 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-image-picker.ts +122 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-keyboard-coordinator.ts +161 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +213 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/index.ts +86 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/models.ts +162 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/providers.ts +62 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/types.ts +40 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/services/file-uploader.ts +287 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/services/message-handler-service.ts +189 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/types/index.ts +70 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/utils/chat-telemetry.ts +91 -0
- package/recipes/chatbot-supabase/packages/backend/src/services/conversations.ts +243 -0
- package/recipes/chatbot-supabase/packages/backend/src/services/messages.ts +327 -0
- package/recipes/chatbot-supabase/packages/backend/supabase/functions/chat-stream/index.ts +347 -0
- package/recipes/chatbot-supabase/packages/backend/supabase/migrations/chatbot.sql +104 -0
- package/recipes/chatbot-supabase/recipe.json +106 -0
- package/recipes/chatbot-supabase@latest.zip +0 -0
- package/recipes/chatbot.zip +0 -0
- package/recipes/chatbot@latest.zip +0 -0
- package/recipes/image-analysis/packages/backend/convex/imageAnalysis/index.ts +2 -2
- package/recipes/image-analysis/packages/backend/convex/imageAnalysis.ts +0 -1
- package/recipes/image-analysis/recipe.json +15 -55
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +304 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/camera.tsx +221 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +333 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/loading-screen.tsx +214 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/loading.tsx +191 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/results.tsx +137 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/trait-details.tsx +172 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/use-analysis-data.ts +160 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/use-results-screen.ts +151 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievement-badge.tsx +77 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievement-card.tsx +75 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievement-unlocked-modal.tsx +162 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievements-section.tsx +44 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/advice-list.tsx +42 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/circular-progress.tsx +233 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/content-card.tsx +38 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/error-state.tsx +42 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/index.ts +9 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/loading-state.tsx +26 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/profile-image.tsx +60 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/results-header.tsx +62 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/score-display.tsx +54 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/share-options-modal.tsx +110 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/traits-grid.tsx +74 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/config/analysis-config.ts +80 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/config/master-analysis-config.ts +157 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/hooks/index.ts +1 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/hooks/use-analysis.ts +38 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +208 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/services/analysis-service.ts +262 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/services/share-service.ts +176 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/services/trait-details-service.ts +289 -0
- package/recipes/image-analysis-supabase/packages/backend/src/services/image-analyses.ts +132 -0
- package/recipes/image-analysis-supabase/packages/backend/supabase/functions/analyze-image/index.ts +312 -0
- package/recipes/image-analysis-supabase/packages/backend/supabase/migrations/image_analysis.sql +42 -0
- package/recipes/image-analysis-supabase/recipe.json +90 -0
- package/recipes/image-analysis-supabase@latest.zip +0 -0
- package/recipes/image-analysis@latest.zip +0 -0
- package/recipes/image-generator/apps/native/src/features/image-generator/app/index.tsx +16 -2
- package/recipes/image-generator/apps/native/src/features/image-generator/components/image-model-selector.tsx +11 -5
- package/recipes/image-generator/apps/native/src/features/image-generator/hooks/use-image-generator.ts +11 -5
- package/recipes/image-generator/packages/backend/convex/imageGeneration/index.ts +2 -2
- package/recipes/image-generator/recipe.json +16 -39
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/app/_layout.tsx +26 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/app/gallery.tsx +217 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/app/index.tsx +251 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/gallery-image.tsx +25 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/image-detail-modal.tsx +215 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/image-model-selector.tsx +216 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/image-placeholder.tsx +26 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/hooks/use-image-gallery.ts +71 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/hooks/use-image-generator-settings.ts +152 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/hooks/use-image-generator.ts +103 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/models/models.ts +66 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/services/image-gallery-service.ts +96 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/services/image-save-service.ts +120 -0
- package/recipes/image-generator-supabase/packages/backend/supabase/functions/generate-image/index.ts +291 -0
- package/recipes/image-generator-supabase/packages/backend/supabase/migrations/image_generator.sql +71 -0
- package/recipes/image-generator-supabase/recipe.json +86 -0
- package/recipes/image-generator-supabase@latest.zip +0 -0
- package/recipes/image-generator@latest.zip +0 -0
- package/recipes/ios-widget/recipe.json +15 -24
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/analytics/index.ts +9 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/components/onboarding-with-analytics.tsx +141 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/components/onboarding.tsx +173 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/config/onboarding-flow-config.ts +189 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/demo-one/app/index.tsx +42 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/demo-one/data.ts +32 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/app/index.tsx +43 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/interactive-onboarding.tsx +222 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/ai-tone-step.tsx +133 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/currency-step.tsx +165 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-ai-step.tsx +199 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-chatbot-step.tsx +154 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-manual-step.tsx +156 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-scan-step.tsx +158 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/main-reason-step.tsx +139 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/notification-step.tsx +129 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/overspend-step.tsx +138 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/personalizing-step.tsx +190 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/rating-step.tsx +98 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/reminder-step.tsx +181 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/safety-step.tsx +110 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/struggle-step.tsx +139 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/welcome-step.tsx +217 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/ui/onboarding-header.tsx +58 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/constants.ts +179 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/hooks/use-onboarding-analytics.ts +323 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/services/onboarding-analytics.ts +432 -0
- package/recipes/onboarding/recipe.json +15 -0
- package/recipes/onboarding@latest.zip +0 -0
- package/recipes/payments/recipe.json +28 -61
- package/recipes/payments-supabase/apps/native/src/features/payments/README.md +200 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/app/local-paywall.tsx +194 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/app/remote-paywall.tsx +79 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/payment-initializer.tsx +95 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-error-state.tsx +60 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-local-mode.tsx +116 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-product-card.tsx +133 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-remote-mode.tsx +146 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/hooks/use-entitlement.ts +63 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/index.ts +8 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/services/revenuecat-adapter.ts +407 -0
- package/recipes/payments-supabase/packages/backend/src/services/payments.ts +201 -0
- package/recipes/payments-supabase/packages/backend/supabase/migrations/payments.sql +35 -0
- package/recipes/payments-supabase/recipe.json +72 -0
- package/recipes/payments-supabase@latest.zip +0 -0
- package/recipes/payments@latest.zip +0 -0
- package/recipes/quiz/apps/native/src/features/quiz/index.tsx +1 -2
- package/recipes/quiz/recipe.json +6 -9
- package/recipes/quiz@latest.zip +0 -0
- package/recipes/tracker-app/apps/native/src/features/tracker-app/app/index.tsx +1 -2
- package/recipes/tracker-app/recipe.json +7 -10
- package/recipes/tracker-app@latest.zip +0 -0
- package/recipes/voice-bot/recipe.json +8 -68
- package/recipes/voice-bot.zip +0 -0
- package/recipes/voice-bot@latest.zip +0 -0
- package/recipes/wake-word/recipe.json +10 -9
- package/recipes/wake-word.zip +0 -0
- package/recipes/wake-word@latest.zip +0 -0
- package/recipes/charts/apps/native/src/app/(root)/(protected)/charts/index.tsx +0 -3
- package/recipes/chatbot/packages/backend/convex/lib/rateLimit.ts +0 -100
- package/recipes/chatbot/packages/backend/convex/lib/telemetry.ts +0 -29
- package/recipes/chatbot/packages/backend/convex/ragKnowledge.ts +0 -0
- package/recipes/image-analysis/apps/native/assets/features/image-analyzer/front.jpg +0 -0
- package/recipes/image-analysis/apps/native/assets/features/image-analyzer/side.jpg +0 -0
- package/recipes/image-analysis/apps/native/assets/features/image-analyzer/threeQuarter.jpg +0 -0
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/_layout.tsx +0 -5
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/analysis-options.tsx +0 -50
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/camera.tsx +0 -2
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/index.tsx +0 -50
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/loading.tsx +0 -50
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/results.tsx +0 -2
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/trait-details.tsx +0 -3
- package/recipes/image-analysis/packages/backend/convex/imageAnalysisFunctions.ts +0 -325
- package/recipes/image-analysis/packages/backend/convex/lib/ai/imageAnalysisAdapter.ts +0 -200
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/index.tsx +0 -74
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/local.tsx +0 -25
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +0 -23
- package/recipes/quiz/apps/native/src/app/(root)/(protected)/quiz/index.tsx +0 -47
- package/recipes/tracker-app/apps/native/src/app/(root)/(protected)/tracker-app/index.tsx +0 -1
- package/recipes/voice-bot/apps/native/src/app/(root)/(protected)/voice-bot/index.tsx +0 -27
- package/recipes/voice-bot/packages/backend/convex/router.ts +0 -81
- /package/recipes/{chatbot/apps/native/src/app/(root)/(protected) → chatbot-supabase/apps/native/src/app}/chatbot/index.tsx +0 -0
- /package/recipes/{image-generator/apps/native/src/app/(root)/(protected) → image-generator-supabase/apps/native/src/app}/image-generator/gallery.tsx +0 -0
- /package/recipes/{image-generator/apps/native/src/app/(root)/(protected) → image-generator-supabase/apps/native/src/app}/image-generator/index.tsx +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,11 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to VibeFast CLI will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.2.0] - 2024-11-27
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **AST-Based Modifications**: The CLI now uses Abstract Syntax Trees (AST) to safely modify `app.config.ts` when installing plugins. This replaces fragile regex-based replacements.
|
|
10
|
+
- **E2E Testing Suite**: Added comprehensive End-to-End tests for `init`, `add`, and `remove` commands to ensure stability.
|
|
11
|
+
- **Local CI**: Integrated Husky for pre-push checks, running tests automatically before every push.
|
|
12
|
+
- **Manual Testing Guide**: Added `docs/manual-testing.md` to help contributors test the CLI locally.
|
|
13
|
+
- **`--skip-install` for `add`**: Added a flag to skip dependency installation during `vf add`, useful for testing and CI.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **Recipe Imports**: Fixed incorrect import paths in `image-analysis` and `image-generator` recipes (`imageAnalysisFunctions` -> `imageAnalysis`).
|
|
18
|
+
- **Path Handling**: Improved cross-platform path compatibility for Windows/Linux.
|
|
19
|
+
- **Test Stability**: Fixed flaky tests by increasing timeouts and improving sandbox cleanup.
|
|
20
|
+
|
|
5
21
|
## [0.3.0] - 2024-11-15
|
|
6
22
|
|
|
7
23
|
### Added - Phase 1, 2 & 3 Features 🚀
|
|
8
24
|
|
|
9
25
|
**Phase 1 & 2:**
|
|
26
|
+
|
|
10
27
|
- **`vf init` Command**: One command to initialize a new VibeFast project
|
|
11
28
|
- Interactive prompts for branch selection (clean/full)
|
|
12
29
|
- Automatic repository cloning
|
|
@@ -31,6 +48,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
31
48
|
- Better UX for interactive workflows
|
|
32
49
|
|
|
33
50
|
**Phase 3:**
|
|
51
|
+
|
|
34
52
|
- **Auto-Install Dependencies**: After `vf add`, automatically prompts to install required packages
|
|
35
53
|
- Native: Uses `npx expo install` for compatible versions
|
|
36
54
|
- Web: Auto-detects package manager (pnpm/npm/yarn/bun)
|
|
@@ -51,6 +69,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
51
69
|
- Exit codes: 0 = healthy, 1 = warnings, 2 = errors
|
|
52
70
|
|
|
53
71
|
### Improved
|
|
72
|
+
|
|
54
73
|
- **`vf add` Command**: Now uses spinners and auto-detects target
|
|
55
74
|
- **`vf list` Command**: Shows spinner while fetching features
|
|
56
75
|
- **Error Messages**: More helpful messages for Git and permission errors
|
|
@@ -58,26 +77,31 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
58
77
|
- **Performance**: Parallel operations where possible
|
|
59
78
|
|
|
60
79
|
### New Core Modules
|
|
80
|
+
|
|
61
81
|
- `src/core/detect.ts` - Target and package manager detection
|
|
62
82
|
- `src/core/spinner.ts` - Progress indicators
|
|
63
83
|
- `src/core/prompts.ts` - Interactive prompts
|
|
64
84
|
|
|
65
85
|
### New Dependencies
|
|
86
|
+
|
|
66
87
|
- `ora` - Terminal spinners
|
|
67
88
|
- `inquirer` - Interactive prompts
|
|
68
89
|
- `simple-git` - Git operations
|
|
69
90
|
|
|
70
91
|
### Documentation
|
|
92
|
+
|
|
71
93
|
- Added `PHASE-1-2-IMPLEMENTATION.md` - Implementation details
|
|
72
94
|
- Added `QUICK-START.md` - Quick start guide with new features
|
|
73
95
|
|
|
74
96
|
### Testing
|
|
97
|
+
|
|
75
98
|
- Added unit tests for detection module (9 tests)
|
|
76
99
|
- All tests passing
|
|
77
100
|
|
|
78
101
|
## [0.2.2] - 2024-11-14
|
|
79
102
|
|
|
80
103
|
### Fixed
|
|
104
|
+
|
|
81
105
|
- **Error Messages**: Removed nested error wrapping that caused confusing messages
|
|
82
106
|
- Error messages are now clean and single-level with helpful context
|
|
83
107
|
- Improved error display in `list`, `devices`, and `add` commands
|
|
@@ -85,6 +109,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
85
109
|
## [0.2.0] - 2024-11-13
|
|
86
110
|
|
|
87
111
|
### Added
|
|
112
|
+
|
|
88
113
|
- **Interactive Confirmation**: CLI now asks before overwriting existing files
|
|
89
114
|
- **Package Dependency Display**: Shows required packages with `npx expo install` command
|
|
90
115
|
- **Modification Detection**: Warns before deleting files you've modified
|
|
@@ -97,6 +122,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
97
122
|
- **Comprehensive Tests**: 34 unit tests covering all core functionality
|
|
98
123
|
|
|
99
124
|
### Improved
|
|
125
|
+
|
|
100
126
|
- **Error Messages**: User-friendly error messages with clear actionable solutions
|
|
101
127
|
- **Support Contact**: All error messages include support@vibefast.pro
|
|
102
128
|
- **CI/CD Compatibility**: Detects non-interactive environments and behaves appropriately
|
|
@@ -104,10 +130,12 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
104
130
|
- **Documentation**: Comprehensive documentation and examples
|
|
105
131
|
|
|
106
132
|
### Changed
|
|
133
|
+
|
|
107
134
|
- **Package Management**: Now uses `npx expo install` for native apps (no version management needed)
|
|
108
135
|
- **Journal Format**: Updated to store file hashes (auto-migrates old format)
|
|
109
136
|
|
|
110
137
|
### Fixed
|
|
138
|
+
|
|
111
139
|
- Files being overwritten without confirmation
|
|
112
140
|
- No warning when deleting modified files
|
|
113
141
|
- Missing package installation information
|
|
@@ -116,6 +144,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
116
144
|
## [0.1.4] - 2024-11-11
|
|
117
145
|
|
|
118
146
|
### Added
|
|
147
|
+
|
|
119
148
|
- Initial release
|
|
120
149
|
- Basic `vf add` and `vf remove` commands
|
|
121
150
|
- Authentication with `vf login` and `vf logout`
|
|
@@ -127,6 +156,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
127
156
|
- Journal tracking
|
|
128
157
|
|
|
129
158
|
### Security
|
|
159
|
+
|
|
130
160
|
- Path security with directory traversal prevention
|
|
131
161
|
- Token storage in user home directory
|
|
132
162
|
- HTTPS-only communication
|
|
@@ -141,6 +171,7 @@ All notable changes to VibeFast CLI will be documented in this file.
|
|
|
141
171
|
No breaking changes! The CLI will automatically migrate your journal to the new format.
|
|
142
172
|
|
|
143
173
|
**New Features You Can Use:**
|
|
174
|
+
|
|
144
175
|
```bash
|
|
145
176
|
# Check what's installed
|
|
146
177
|
vf status
|
|
@@ -161,6 +192,7 @@ The CLI now provides much clearer error messages with actionable solutions.
|
|
|
161
192
|
## Support
|
|
162
193
|
|
|
163
194
|
For issues or questions:
|
|
195
|
+
|
|
164
196
|
- Email: support@vibefast.pro
|
|
165
197
|
- GitHub: https://github.com/vibefast/vibefast-cli/issues
|
|
166
198
|
- Website: https://vibefast.pro
|
package/README.md
CHANGED
|
@@ -1,219 +1,113 @@
|
|
|
1
1
|
# VibeFast CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<div align="center">
|
|
4
|
+
<img src="vibefast_cli_architecture.png" alt="VibeFast CLI Architecture" width="100%" />
|
|
5
|
+
<br />
|
|
6
|
+
<br />
|
|
7
|
+
<a href="https://vibefast.pro">
|
|
8
|
+
<img src="https://img.shields.io/badge/VibeFast-Pro-7C3AED?style=for-the-badge" alt="VibeFast Pro" />
|
|
9
|
+
</a>
|
|
10
|
+
<a href="https://www.npmjs.com/package/vibefast-cli">
|
|
11
|
+
<img src="https://img.shields.io/npm/v/vibefast-cli?style=for-the-badge&color=blue" alt="NPM Version" />
|
|
12
|
+
</a>
|
|
13
|
+
</div>
|
|
4
14
|
|
|
5
|
-
##
|
|
15
|
+
## Overview
|
|
6
16
|
|
|
7
|
-
|
|
8
|
-
- **Package Management** - Shows required packages with `npx expo install` command
|
|
9
|
-
- **Modification Detection** - Warns before deleting files you've modified
|
|
10
|
-
- **Manual Steps** - Clear setup instructions for services like Sentry, PostHog
|
|
11
|
-
- **New Commands** - `vf status` and `vf checklist` for better management
|
|
12
|
-
- **Better Errors** - User-friendly error messages with actionable solutions
|
|
17
|
+
The **VibeFast CLI** is the command center for your VibeFast monorepo. It automates the complex task of integrating full-stack features—handling file copying, dependency management, configuration updates, and code modifications safely and reliably.
|
|
13
18
|
|
|
14
|
-
|
|
19
|
+
Think of it as a "smart installer" that understands your project structure.
|
|
15
20
|
|
|
16
|
-
##
|
|
21
|
+
## Architecture
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
npm install -g vibefast-cli
|
|
20
|
-
```
|
|
23
|
+
The CLI operates as a bridge between the **VibeFast Cloud** (where recipes are stored) and your **Local Project**.
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
1. **Command Execution**: You run a command like `vf add chatbot`.
|
|
26
|
+
2. **Authentication & Fetch**: The CLI verifies your license and fetches the latest "Recipe" (a zip bundle of code) from our edge network (R2).
|
|
27
|
+
3. **Smart Installation**:
|
|
28
|
+
- **Extraction**: Files are extracted to the correct locations (`apps/native`, `apps/web`, `packages/backend`).
|
|
29
|
+
- **AST Modification**: We use Abstract Syntax Trees to safely modify your `app.config.ts`, `babel.config.js`, and other config files—no fragile regex replacements.
|
|
30
|
+
- **Dependency Management**: Automatically detects your package manager (pnpm, npm, yarn, bun) and installs required libraries.
|
|
31
|
+
4. **Journaling**: Every action is recorded in `.vibefast/journal.json`, allowing for clean uninstalls via `vf remove`.
|
|
27
32
|
|
|
28
33
|
## Quick Start
|
|
29
34
|
|
|
30
|
-
1.
|
|
31
|
-
Use the same license key you received in your LemonSqueezy receipt:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
vf login --token YOUR_LICENSE_KEY
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
2. **Verify your setup:**
|
|
38
|
-
```bash
|
|
39
|
-
vf doctor
|
|
40
|
-
```
|
|
35
|
+
### 1. Installation
|
|
41
36
|
|
|
42
|
-
3. **List available features:**
|
|
43
37
|
```bash
|
|
44
|
-
|
|
38
|
+
npm install -g vibefast-cli
|
|
45
39
|
```
|
|
46
40
|
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
vf add charts
|
|
50
|
-
vf add charts-web --target web
|
|
51
|
-
```
|
|
41
|
+
### 2. Login
|
|
52
42
|
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
vf status
|
|
56
|
-
```
|
|
43
|
+
Authenticate with your license key (from your purchase receipt):
|
|
57
44
|
|
|
58
|
-
6. **Remove a feature:**
|
|
59
45
|
```bash
|
|
60
|
-
vf
|
|
46
|
+
vf login --token YOUR_LICENSE_KEY
|
|
61
47
|
```
|
|
62
48
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
### `vf login --token <TOKEN>`
|
|
66
|
-
Authenticate with your VibeFast license token.
|
|
67
|
-
|
|
68
|
-
### `vf logout`
|
|
69
|
-
Clear your stored token.
|
|
70
|
-
|
|
71
|
-
### `vf devices`
|
|
72
|
-
List your active device activations.
|
|
73
|
-
|
|
74
|
-
**Options:**
|
|
75
|
-
- `--deactivate <id>` - Free up a device slot
|
|
76
|
-
|
|
77
|
-
### `vf doctor`
|
|
78
|
-
Check your VibeFast setup and verify all requirements.
|
|
79
|
-
|
|
80
|
-
### `vf list`
|
|
81
|
-
Show all available features for your license.
|
|
49
|
+
### 3. Initialize a Project
|
|
82
50
|
|
|
83
|
-
|
|
84
|
-
Install a feature into your project.
|
|
51
|
+
Start a new VibeFast project from scratch:
|
|
85
52
|
|
|
86
|
-
**Options:**
|
|
87
|
-
- `--target <native|web>` - Target platform (default: native)
|
|
88
|
-
- `--dry-run` - Preview changes without applying
|
|
89
|
-
- `--force` - Overwrite existing files without asking
|
|
90
|
-
- `--yes` - Answer yes to all prompts (for automation)
|
|
91
|
-
|
|
92
|
-
**Example:**
|
|
93
53
|
```bash
|
|
94
|
-
vf
|
|
95
|
-
vf add chatbot --target web --force
|
|
96
|
-
vf add sentry --yes # For CI/CD
|
|
54
|
+
vf init
|
|
97
55
|
```
|
|
98
56
|
|
|
99
|
-
|
|
100
|
-
1. Downloads and extracts the feature
|
|
101
|
-
2. Copies files to your project
|
|
102
|
-
3. Adds navigation link (if applicable)
|
|
103
|
-
4. Shows required packages to install
|
|
104
|
-
5. Shows manual setup steps (if needed)
|
|
105
|
-
|
|
106
|
-
### `vf remove <feature>`
|
|
107
|
-
Remove an installed feature.
|
|
57
|
+
### 4. Add Features
|
|
108
58
|
|
|
109
|
-
|
|
110
|
-
- `--target <native|web>` - Target platform (default: native)
|
|
111
|
-
- `--dry-run` - Preview changes without applying
|
|
112
|
-
- `--force` - Skip modification check
|
|
113
|
-
- `--yes` - Answer yes to all prompts
|
|
59
|
+
Install pre-built features instantly:
|
|
114
60
|
|
|
115
|
-
**Example:**
|
|
116
61
|
```bash
|
|
117
|
-
vf
|
|
62
|
+
vf add charts
|
|
63
|
+
vf add chatbot --target web
|
|
118
64
|
```
|
|
119
65
|
|
|
120
|
-
|
|
121
|
-
1. Checks if files were modified (warns you)
|
|
122
|
-
2. Deletes all tracked files
|
|
123
|
-
3. Removes navigation link
|
|
124
|
-
4. Updates journal
|
|
125
|
-
|
|
126
|
-
### `vf status` 🆕
|
|
127
|
-
Show all installed features and their status.
|
|
128
|
-
|
|
129
|
-
**Example:**
|
|
130
|
-
```bash
|
|
131
|
-
$ vf status
|
|
132
|
-
|
|
133
|
-
Installed features:
|
|
66
|
+
## Core Commands
|
|
134
67
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
68
|
+
| Command | Description |
|
|
69
|
+
| :----------------------- | :------------------------------------------------------- |
|
|
70
|
+
| `vf init` | Scaffolds a new VibeFast monorepo project. |
|
|
71
|
+
| `vf add <feature>` | Installs a feature, handling all file ops and configs. |
|
|
72
|
+
| `vf remove <feature>` | Uninstalls a feature and cleans up files. |
|
|
73
|
+
| `vf list` | Lists all available features for your license. |
|
|
74
|
+
| `vf status` | Shows installed features and their health. |
|
|
75
|
+
| `vf doctor` | Diagnoses issues with your project setup. |
|
|
76
|
+
| `vf checklist <feature>` | Shows manual setup steps (e.g., API keys) for a feature. |
|
|
77
|
+
| `vf devices` | Manages your active device sessions. |
|
|
138
78
|
|
|
139
|
-
|
|
140
|
-
Files: 5
|
|
141
|
-
Installed: 11/13/2024
|
|
142
|
-
⚠ Has manual setup steps
|
|
79
|
+
## Advanced Usage
|
|
143
80
|
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### `vf checklist <feature>` 🆕
|
|
148
|
-
Show manual setup steps for an installed feature.
|
|
149
|
-
|
|
150
|
-
**Options:**
|
|
151
|
-
- `--target <native|web>` - Target platform (default: native)
|
|
152
|
-
|
|
153
|
-
**Example:**
|
|
154
|
-
```bash
|
|
155
|
-
vf checklist sentry
|
|
156
|
-
```
|
|
81
|
+
### Automation (CI/CD)
|
|
157
82
|
|
|
158
|
-
|
|
159
|
-
Some features (like Sentry, PostHog, Stripe) require external service setup. After installing such features, you'll see:
|
|
83
|
+
The CLI is designed for automation. Use flags to bypass interactive prompts:
|
|
160
84
|
|
|
161
85
|
```bash
|
|
162
|
-
|
|
86
|
+
# Install without prompts
|
|
87
|
+
vf add sentry --yes --force
|
|
163
88
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
🔗 https://sentry.io/signup/
|
|
167
|
-
|
|
168
|
-
💡 Run 'vf checklist sentry' to see these steps again
|
|
89
|
+
# Skip dependency installation (faster for CI)
|
|
90
|
+
vf add chatbot --skip-install
|
|
169
91
|
```
|
|
170
92
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
## Requirements
|
|
174
|
-
|
|
175
|
-
- Node.js 18+
|
|
176
|
-
- A VibeFast monorepo with `.vibefast/starter.json`
|
|
177
|
-
- Valid VibeFast license token
|
|
178
|
-
|
|
179
|
-
## Device Limits
|
|
93
|
+
### Manual Testing
|
|
180
94
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
vf devices # List active devices
|
|
185
|
-
vf devices --deactivate <id> # Free a slot
|
|
186
|
-
```
|
|
95
|
+
If you are contributing to the CLI, see our [Manual Testing Guide](docs/manual-testing.md).
|
|
187
96
|
|
|
188
97
|
## Troubleshooting
|
|
189
98
|
|
|
190
99
|
**"Not a VibeFast repo"**
|
|
191
|
-
|
|
192
|
-
- Check that `.vibefast/starter.json` exists
|
|
193
|
-
|
|
194
|
-
**"Not logged in"**
|
|
195
|
-
- Run `vf login --token <YOUR_TOKEN>`
|
|
100
|
+
Ensure you are in the root of your project and that `.vibefast/starter.json` exists.
|
|
196
101
|
|
|
197
102
|
**"Device limit reached"**
|
|
198
|
-
|
|
199
|
-
- Deactivate unused devices with `vf devices --deactivate <id>`
|
|
200
|
-
|
|
201
|
-
**"Missing navigation markers"**
|
|
202
|
-
- Ensure your nav files have the required marker comments
|
|
203
|
-
- Run `vf doctor` to check
|
|
204
|
-
|
|
205
|
-
## Environment Variables
|
|
103
|
+
Your license has a limit on active devices. Run `vf devices` to see them and `vf devices --deactivate <id>` to free up a slot.
|
|
206
104
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
## Documentation
|
|
105
|
+
## Support
|
|
210
106
|
|
|
211
|
-
|
|
212
|
-
- **[CHANGELOG.md](CHANGELOG.md)** - Version history
|
|
213
|
-
- **[HOW-IT-WORKS.md](HOW-IT-WORKS.md)** - Technical architecture
|
|
214
|
-
- **[MANUAL-STEPS-GUIDE.md](MANUAL-STEPS-GUIDE.md)** - Guide for recipe creators
|
|
215
|
-
- **[IMPLEMENTATION-COMPLETE.md](IMPLEMENTATION-COMPLETE.md)** - Implementation details
|
|
107
|
+
For issues, please contact [support@vibefast.pro](mailto:support@vibefast.pro).
|
|
216
108
|
|
|
217
|
-
|
|
109
|
+
---
|
|
218
110
|
|
|
219
|
-
|
|
111
|
+
<div align="center">
|
|
112
|
+
<sub>Built with ❤️ by the VibeFast Team</sub>
|
|
113
|
+
</div>
|