vibefast-cli 0.6.2 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/recipes.test.js +5 -5
- package/dist/__tests__/recipes.test.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +136 -48
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +106 -89
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/remove.js +1 -1
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/__tests__/fsx.test.js +3 -1
- package/dist/core/__tests__/fsx.test.js.map +1 -1
- package/dist/core/__tests__/prompt.test.js +12 -12
- package/dist/core/__tests__/prompt.test.js.map +1 -1
- package/dist/core/__tests__/validate.test.js +4 -3
- package/dist/core/__tests__/validate.test.js.map +1 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +8 -0
- package/dist/core/auth.js.map +1 -1
- package/dist/core/codemod.d.ts +13 -0
- package/dist/core/codemod.d.ts.map +1 -1
- package/dist/core/codemod.js +50 -0
- package/dist/core/codemod.js.map +1 -1
- package/dist/core/errors.js +1 -1
- package/dist/core/fsx.js +1 -1
- package/dist/core/fsx.js.map +1 -1
- package/dist/core/recipes.d.ts.map +1 -1
- package/dist/core/recipes.js +71 -9
- package/dist/core/recipes.js.map +1 -1
- package/package.json +1 -1
- package/recipes/animated-chip/recipe.json +15 -0
- package/recipes/animated-chip@latest.zip +0 -0
- package/recipes/animated-switch/recipe.json +15 -0
- package/recipes/animated-switch@latest.zip +0 -0
- package/recipes/audio-recorder@latest.zip +0 -0
- package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +29 -18
- package/recipes/charts@latest.zip +0 -0
- package/recipes/chatbot/apps/native/src/features/chatbot/components/message-list.tsx +1 -1
- package/recipes/chatbot/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +6 -0
- package/recipes/chatbot/recipe.json +21 -5
- package/recipes/chatbot@latest.zip +0 -0
- package/recipes/glowing-button/recipe.json +1 -3
- package/recipes/glowing-button@latest.zip +0 -0
- package/recipes/image-analysis/recipe.json +36 -19
- package/recipes/image-analysis@latest.zip +0 -0
- package/recipes/image-generator/apps/native/src/features/image-generator/app/_layout.tsx +1 -0
- package/recipes/image-generator/apps/native/src/features/image-generator/app/gallery.tsx +1 -1
- package/recipes/image-generator/apps/native/src/features/image-generator/components/gallery-image.tsx +2 -3
- package/recipes/image-generator/recipe.json +5 -3
- package/recipes/image-generator@latest.zip +0 -0
- package/recipes/ios-widget/recipe.json +24 -0
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/number-stepper/recipe.json +15 -0
- package/recipes/number-stepper@latest.zip +0 -0
- package/recipes/payments/recipe.json +30 -0
- package/recipes/payments@latest.zip +0 -0
- package/recipes/posthog.json +2 -1
- package/recipes/progress-circle/recipe.json +15 -0
- package/recipes/progress-circle@latest.zip +0 -0
- package/recipes/quiz@latest.zip +0 -0
- package/recipes/sentry.json +2 -1
- package/recipes/swipe-slider/recipe.json +15 -0
- package/recipes/swipe-slider@latest.zip +0 -0
- package/recipes/{0 → timeline}/recipe.json +3 -6
- package/recipes/timeline@latest.zip +0 -0
- package/recipes/tracker-app@latest.zip +0 -0
- package/recipes/upload-all.sh +13 -2
- package/recipes/voice-bot/recipe.json +15 -2
- package/recipes/voice-bot@latest.zip +0 -0
- package/recipes/wake-word/apps/native/src/app/(root)/(protected)/test-wake-word.tsx +0 -2
- package/recipes/wake-word/recipe.json +2 -2
- package/recipes/wake-word@latest.zip +0 -0
- package/src/__tests__/recipes.test.ts +5 -5
- package/src/commands/add.ts +230 -54
- package/src/commands/init.ts +118 -102
- package/src/commands/remove.ts +1 -1
- package/src/core/__tests__/fsx.test.ts +3 -1
- package/src/core/__tests__/prompt.test.ts +12 -12
- package/src/core/__tests__/validate.test.ts +4 -3
- package/src/core/auth.ts +8 -0
- package/src/core/codemod.ts +66 -0
- package/src/core/errors.ts +1 -1
- package/src/core/fsx.ts +1 -1
- package/src/core/recipes.ts +73 -9
- package/2/.claude/agents/architect.md +0 -74
- package/2/.claude/agents/convex-reviewer.md +0 -267
- package/2/.claude/agents/debug-detective.md +0 -62
- package/2/.claude/agents/learner.md +0 -64
- package/2/.claude/agents/perf-optimizer.md +0 -71
- package/2/.claude/agents/security-researcher.md +0 -42
- package/2/.claude/agents/tech-researcher.md +0 -46
- package/2/.claude/agents/ux-designer.md +0 -45
- package/2/.claude/commands/create-app-design.md +0 -279
- package/2/.claude/commands/create-prd-interactive.md +0 -113
- package/2/.claude/commands/create-prd.md +0 -111
- package/2/.claude/commands/create-tech-stack.md +0 -345
- package/2/.claude/commands/update-app-design.md +0 -298
- package/2/.claude/commands/update-project-structure.md +0 -14
- package/2/.claude/commands/update-tech-stack.md +0 -325
- package/2/.claude/docs/CONVEX_FEATURES_PLAN.md +0 -249
- package/2/.claude/docs/app-design-document.md +0 -0
- package/2/.claude/docs/project-status.md +0 -25
- package/2/.claude/docs/project-structure.md +0 -7
- package/2/.claude/docs/tech-stack.md +0 -157
- package/2/.claude/scripts/tree.sh +0 -70
- package/2/.claude/settings.json +0 -30
- package/2/.cursor/commands/code-review-high.md +0 -190
- package/2/.cursorignore +0 -3
- package/2/.github/ISSUE_TEMPLATE.md +0 -13
- package/2/.github/PULL_REQUEST_TEMPLATE.md +0 -23
- package/2/.github/actions/eas-build/action.yml +0 -85
- package/2/.github/actions/setup-jdk-generate-apk/action.yml +0 -48
- package/2/.github/actions/setup-node-pnpm-install/action.yml +0 -29
- package/2/.github/scripts/expo-doctor.sh +0 -26
- package/2/.github/workflows/compress-images.yml +0 -48
- package/2/.github/workflows/e2e-android-eas-build.yml +0 -111
- package/2/.github/workflows/e2e-android-maestro.yml +0 -52
- package/2/.github/workflows/e2e-android.yml +0 -119
- package/2/.github/workflows/eas-build-prod.yml +0 -43
- package/2/.github/workflows/eas-build-qa.yml +0 -47
- package/2/.github/workflows/expo-doctor.yml +0 -61
- package/2/.github/workflows/lint-ts.yml +0 -49
- package/2/.github/workflows/new-app-version.yml +0 -65
- package/2/.github/workflows/new-github-release.yml +0 -34
- package/2/.github/workflows/stale.yml +0 -24
- package/2/.github/workflows/test.yml +0 -50
- package/2/.github/workflows/type-check.yml +0 -54
- package/2/.husky/commit-msg +0 -1
- package/2/.husky/common.sh +0 -8
- package/2/.husky/post-merge +0 -18
- package/2/.husky/pre-commit +0 -24
- package/2/.prettierignore +0 -14
- package/2/.prettierrc.json +0 -10
- package/2/.vibefast/README.md +0 -59
- package/2/.vibefast/config.json +0 -4
- package/2/.vibefast/journal.json +0 -234
- package/2/.vibefast/starter.json +0 -5
- package/2/AGENTS.md +0 -48
- package/2/LICENSE +0 -21
- package/2/README.md +0 -127
- package/2/apps/native/__mocks__/bottom-sheet.js +0 -6
- package/2/apps/native/__mocks__/expo-router.js +0 -16
- package/2/apps/native/__mocks__/react-native-gesture-handler.ts +0 -17
- package/2/apps/native/app-env.d.ts +0 -2
- package/2/apps/native/app.config.ts +0 -167
- package/2/apps/native/assets/adaptive-icon.png +0 -0
- package/2/apps/native/assets/favicon.png +0 -0
- package/2/apps/native/assets/fonts/Inter.ttf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/2/apps/native/assets/fonts/SpaceMono-Regular.ttf +0 -0
- package/2/apps/native/assets/icon.png +0 -0
- package/2/apps/native/assets/images/cover-image.png +0 -0
- package/2/apps/native/assets/lottie-animations/onboarding-1.json +0 -6504
- package/2/apps/native/assets/lottie-animations/onboarding-2.json +0 -1993
- package/2/apps/native/assets/lottie-animations/onboarding-3.json +0 -50159
- package/2/apps/native/assets/lottie-animations/onboarding-4.json +0 -735
- package/2/apps/native/assets/lottie-animations/onboarding-6.json +0 -2167
- package/2/apps/native/assets/splash-icon.png +0 -0
- package/2/apps/native/babel.config.js +0 -39
- package/2/apps/native/eas.json +0 -75
- package/2/apps/native/env.js +0 -196
- package/2/apps/native/global.css +0 -51
- package/2/apps/native/index.ts +0 -5
- package/2/apps/native/jest-setup.ts +0 -7
- package/2/apps/native/jest.config.js +0 -72
- package/2/apps/native/metro.config.js +0 -85
- package/2/apps/native/nativewind-env.d.ts +0 -1
- package/2/apps/native/package.json +0 -232
- package/2/apps/native/scripts/DRY_RUN_REPORT.md +0 -0
- package/2/apps/native/scripts/QUICK_START.md +0 -76
- package/2/apps/native/scripts/README.md +0 -187
- package/2/apps/native/scripts/convex-setup.js +0 -48
- package/2/apps/native/scripts/genrate-apk-and-install +0 -39
- package/2/apps/native/scripts/i18next-syntax-validation.js +0 -23
- package/2/apps/native/scripts/starter-setup.mjs +0 -246
- package/2/apps/native/src/api-client/auth.ts +0 -68
- package/2/apps/native/src/api-client/chatbot.ts +0 -83
- package/2/apps/native/src/api-client/client.ts +0 -4
- package/2/apps/native/src/api-client/image-generator.ts +0 -34
- package/2/apps/native/src/api-client/index.ts +0 -27
- package/2/apps/native/src/api-client/payments.ts +0 -44
- package/2/apps/native/src/api-client/reporting.ts +0 -29
- package/2/apps/native/src/api-client/shared.ts +0 -43
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/_layout.tsx +0 -166
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/index.tsx +0 -174
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/profile.tsx +0 -320
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/settings.tsx +0 -344
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/_layout.tsx +0 -198
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/accordion.tsx +0 -60
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/advanced.tsx +0 -24
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/avatar.tsx +0 -154
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/badge-chips-toggle.tsx +0 -81
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/buttons.tsx +0 -24
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/charts.tsx +0 -3
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/date-picker.tsx +0 -120
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/file-picker.tsx +0 -133
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/gallery-video.tsx +0 -119
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/index.tsx +0 -69
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/inputs-stepper.tsx +0 -78
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/picker-dropdown.tsx +0 -56
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/popover-bottomsheet.tsx +0 -229
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/progress.tsx +0 -38
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/searchbar.tsx +0 -70
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/sliders.tsx +0 -93
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/spinner.tsx +0 -80
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/switch.tsx +0 -47
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/table.tsx +0 -352
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/tabs-timeline.tsx +0 -122
- package/2/apps/native/src/app/(root)/(protected)/_layout.tsx +0 -143
- package/2/apps/native/src/app/(root)/(protected)/audio-recorder/index.tsx +0 -5
- package/2/apps/native/src/app/(root)/(protected)/charts/index.tsx +0 -6
- package/2/apps/native/src/app/(root)/(protected)/chatbot/index.tsx +0 -2
- package/2/apps/native/src/app/(root)/(protected)/image-generator/gallery.tsx +0 -3
- package/2/apps/native/src/app/(root)/(protected)/image-generator/index.tsx +0 -3
- package/2/apps/native/src/app/(root)/(protected)/paywall/index.tsx +0 -74
- package/2/apps/native/src/app/(root)/(protected)/paywall/local.tsx +0 -25
- package/2/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +0 -23
- package/2/apps/native/src/app/(root)/(protected)/quick-actions-demo/index.tsx +0 -32
- package/2/apps/native/src/app/(root)/(protected)/quiz/index.tsx +0 -47
- package/2/apps/native/src/app/(root)/(protected)/test-wake-word.tsx +0 -214
- package/2/apps/native/src/app/(root)/(protected)/tracker-app/index.tsx +0 -1
- package/2/apps/native/src/app/(root)/(protected)/voice-bot/index.tsx +0 -27
- package/2/apps/native/src/app/(root)/(public)/(auth)/_layout.tsx +0 -44
- package/2/apps/native/src/app/(root)/(public)/(auth)/forgot-password.tsx +0 -185
- package/2/apps/native/src/app/(root)/(public)/(auth)/login.tsx +0 -219
- package/2/apps/native/src/app/(root)/(public)/(auth)/otp-verification.tsx +0 -369
- package/2/apps/native/src/app/(root)/(public)/(auth)/reset-password.tsx +0 -247
- package/2/apps/native/src/app/(root)/(public)/(auth)/signup.tsx +0 -207
- package/2/apps/native/src/app/(root)/(public)/_layout.tsx +0 -60
- package/2/apps/native/src/app/(root)/(public)/onboarding/demo-one.tsx +0 -5
- package/2/apps/native/src/app/(root)/(public)/onboarding/demo-two.tsx +0 -52
- package/2/apps/native/src/app/(root)/(public)/onboarding/index.tsx +0 -82
- package/2/apps/native/src/app/(root)/_layout.tsx +0 -30
- package/2/apps/native/src/app/+html.tsx +0 -46
- package/2/apps/native/src/app/[...messing].tsx +0 -24
- package/2/apps/native/src/app/_layout.tsx +0 -56
- package/2/apps/native/src/app/tsconfig.json +0 -3
- package/2/apps/native/src/components/advanced-ui/buttons/glowing-button.tsx +0 -366
- package/2/apps/native/src/components/analytics/navigation-tracker.tsx +0 -10
- package/2/apps/native/src/components/demo/advanced-ui-components.tsx +0 -46
- package/2/apps/native/src/components/demo/buttons-demo.tsx +0 -56
- package/2/apps/native/src/components/demo/colors-demo.tsx +0 -52
- package/2/apps/native/src/components/demo/dropdown-picker-demo.tsx +0 -274
- package/2/apps/native/src/components/demo/inputs-demo.tsx +0 -99
- package/2/apps/native/src/components/demo/notification-demo.tsx +0 -434
- package/2/apps/native/src/components/demo/title-demo.tsx +0 -16
- package/2/apps/native/src/components/demo/toast-demo.tsx +0 -81
- package/2/apps/native/src/components/demo/typography-demo.tsx +0 -28
- package/2/apps/native/src/components/performance/render-performance-monitor.tsx +0 -36
- package/2/apps/native/src/components/ui/accordion.tsx +0 -138
- package/2/apps/native/src/components/ui/avatar.tsx +0 -66
- package/2/apps/native/src/components/ui/badge.tsx +0 -68
- package/2/apps/native/src/components/ui/bottom-sheet.tsx +0 -61
- package/2/apps/native/src/components/ui/colors.js +0 -290
- package/2/apps/native/src/components/ui/core/button.tsx +0 -317
- package/2/apps/native/src/components/ui/core/card.tsx +0 -40
- package/2/apps/native/src/components/ui/core/checkbox.tsx +0 -264
- package/2/apps/native/src/components/ui/core/feature-button.tsx +0 -162
- package/2/apps/native/src/components/ui/core/focus-aware-status-bar.tsx +0 -21
- package/2/apps/native/src/components/ui/core/image.tsx +0 -30
- package/2/apps/native/src/components/ui/core/inputs/floating-text-input.tsx +0 -369
- package/2/apps/native/src/components/ui/core/inputs/input-otp.tsx +0 -304
- package/2/apps/native/src/components/ui/core/inputs/input.tsx +0 -373
- package/2/apps/native/src/components/ui/core/list.tsx +0 -60
- package/2/apps/native/src/components/ui/core/navigation/animated-header.tsx +0 -87
- package/2/apps/native/src/components/ui/core/navigation/screen-footer.tsx +0 -67
- package/2/apps/native/src/components/ui/core/overlays/dropdown.tsx +0 -290
- package/2/apps/native/src/components/ui/core/overlays/full-screen-loading.tsx +0 -15
- package/2/apps/native/src/components/ui/core/overlays/modal-keyboard-aware-scroll-view.tsx +0 -46
- package/2/apps/native/src/components/ui/core/overlays/modal.tsx +0 -247
- package/2/apps/native/src/components/ui/core/pagination-dots.tsx +0 -231
- package/2/apps/native/src/components/ui/core/pressable.tsx +0 -48
- package/2/apps/native/src/components/ui/core/progress-bar.tsx +0 -47
- package/2/apps/native/src/components/ui/core/progress.tsx +0 -149
- package/2/apps/native/src/components/ui/core/select.tsx +0 -261
- package/2/apps/native/src/components/ui/core/spinner.tsx +0 -387
- package/2/apps/native/src/components/ui/core/text.tsx +0 -45
- package/2/apps/native/src/components/ui/core/toast.tsx +0 -190
- package/2/apps/native/src/components/ui/custom-switch.tsx +0 -90
- package/2/apps/native/src/components/ui/date-time-picker.tsx +0 -268
- package/2/apps/native/src/components/ui/debug.ts +0 -2
- package/2/apps/native/src/components/ui/extras/debug-credit-tester.tsx +0 -107
- package/2/apps/native/src/components/ui/extras/debug-mmkv-state.tsx +0 -53
- package/2/apps/native/src/components/ui/extras/handle-error.ts +0 -191
- package/2/apps/native/src/components/ui/extras/hello-wave.tsx +0 -70
- package/2/apps/native/src/components/ui/extras/icon.tsx +0 -36
- package/2/apps/native/src/components/ui/extras/network-connectivity-wrapper.tsx +0 -36
- package/2/apps/native/src/components/ui/extras/offline-indicator.tsx +0 -55
- package/2/apps/native/src/components/ui/extras/social-login-buttons.tsx +0 -296
- package/2/apps/native/src/components/ui/file-picker.tsx +0 -177
- package/2/apps/native/src/components/ui/gallery.tsx +0 -79
- package/2/apps/native/src/components/ui/icons/apple.tsx +0 -19
- package/2/apps/native/src/components/ui/icons/arrow-right.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/camera.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/caret-down.tsx +0 -20
- package/2/apps/native/src/components/ui/icons/chevron-up.tsx +0 -21
- package/2/apps/native/src/components/ui/icons/claude.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/copy.tsx +0 -27
- package/2/apps/native/src/components/ui/icons/deepseek.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/download.tsx +0 -32
- package/2/apps/native/src/components/ui/icons/feed.tsx +0 -12
- package/2/apps/native/src/components/ui/icons/gemini.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/github.tsx +0 -30
- package/2/apps/native/src/components/ui/icons/google.tsx +0 -24
- package/2/apps/native/src/components/ui/icons/groq.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/home.tsx +0 -19
- package/2/apps/native/src/components/ui/icons/index.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/language.tsx +0 -33
- package/2/apps/native/src/components/ui/icons/llama.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/microphone.tsx +0 -20
- package/2/apps/native/src/components/ui/icons/mistral.tsx +0 -22
- package/2/apps/native/src/components/ui/icons/nutrition.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/openai.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/perplexity.tsx +0 -22
- package/2/apps/native/src/components/ui/icons/qwen.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/rate.tsx +0 -24
- package/2/apps/native/src/components/ui/icons/report.tsx +0 -20
- package/2/apps/native/src/components/ui/icons/send-horizontal.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/settings.tsx +0 -12
- package/2/apps/native/src/components/ui/icons/share.tsx +0 -16
- package/2/apps/native/src/components/ui/icons/square.tsx +0 -9
- package/2/apps/native/src/components/ui/icons/style.tsx +0 -22
- package/2/apps/native/src/components/ui/icons/support.tsx +0 -27
- package/2/apps/native/src/components/ui/icons/trash2.tsx +0 -42
- package/2/apps/native/src/components/ui/icons/user.tsx +0 -12
- package/2/apps/native/src/components/ui/icons/website.tsx +0 -28
- package/2/apps/native/src/components/ui/icons/wifi-off.tsx +0 -17
- package/2/apps/native/src/components/ui/index.tsx +0 -14
- package/2/apps/native/src/components/ui/nav-item.tsx +0 -42
- package/2/apps/native/src/components/ui/patterns/index.ts +0 -16
- package/2/apps/native/src/components/ui/picker.tsx +0 -244
- package/2/apps/native/src/components/ui/popover.tsx +0 -313
- package/2/apps/native/src/components/ui/primitives/index.ts +0 -38
- package/2/apps/native/src/components/ui/radio-group.tsx +0 -47
- package/2/apps/native/src/components/ui/searchbar.tsx +0 -118
- package/2/apps/native/src/components/ui/sheet.tsx +0 -93
- package/2/apps/native/src/components/ui/switch.tsx +0 -37
- package/2/apps/native/src/components/ui/table.tsx +0 -296
- package/2/apps/native/src/components/ui/tabs.tsx +0 -115
- package/2/apps/native/src/components/ui/toggle.tsx +0 -50
- package/2/apps/native/src/components/ui/utils.tsx +0 -34
- package/2/apps/native/src/components/ui/video.tsx +0 -39
- package/2/apps/native/src/core/analytics/analytics-service.ts +0 -94
- package/2/apps/native/src/core/analytics/index.ts +0 -2
- package/2/apps/native/src/core/analytics/posthog-analytics-adapter.ts +0 -192
- package/2/apps/native/src/core/auth/auth-service.ts +0 -33
- package/2/apps/native/src/core/auth/index.ts +0 -1
- package/2/apps/native/src/core/cache/__tests__/cache-service.test.ts +0 -599
- package/2/apps/native/src/core/cache/cache-service.ts +0 -89
- package/2/apps/native/src/core/cache/index.ts +0 -45
- package/2/apps/native/src/core/config/config.service.ts +0 -153
- package/2/apps/native/src/core/config/index.ts +0 -2
- package/2/apps/native/src/core/config/telemetry.ts +0 -38
- package/2/apps/native/src/core/local-notifications/local-notification-manager.ts +0 -409
- package/2/apps/native/src/core/logging/custom-transports.ts +0 -126
- package/2/apps/native/src/core/logging/index.ts +0 -1
- package/2/apps/native/src/core/logging/logger.ts +0 -182
- package/2/apps/native/src/core/navigation/deep-link-handler.ts +0 -295
- package/2/apps/native/src/core/navigation/navigation-types.ts +0 -53
- package/2/apps/native/src/core/payments/index.ts +0 -1
- package/2/apps/native/src/core/payments/payment-service.ts +0 -32
- package/2/apps/native/src/core/quick-actions/index.ts +0 -2
- package/2/apps/native/src/core/quick-actions/quick-actions-adapter.ts +0 -54
- package/2/apps/native/src/core/quick-actions/types.ts +0 -29
- package/2/apps/native/src/core/storage/index.ts +0 -1
- package/2/apps/native/src/core/storage/mmkv.ts +0 -62
- package/2/apps/native/src/core/storage/notification-storage.ts +0 -312
- package/2/apps/native/src/core/types/common.ts +0 -0
- package/2/apps/native/src/core/utils/convex-http-api.ts +0 -30
- package/2/apps/native/src/features/audio-recorder/components/audio-player.tsx +0 -301
- package/2/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +0 -373
- package/2/apps/native/src/features/audio-recorder/components/audio-waveform.tsx +0 -270
- package/2/apps/native/src/features/audio-recorder/components/index.ts +0 -4
- package/2/apps/native/src/features/audio-recorder/components/recording-list.tsx +0 -89
- package/2/apps/native/src/features/audio-recorder/demo/audio-player-demo.tsx +0 -66
- package/2/apps/native/src/features/audio-recorder/demo/audio-recorder-cloud.tsx +0 -68
- package/2/apps/native/src/features/audio-recorder/demo/audio-recorder-interview.tsx +0 -102
- package/2/apps/native/src/features/audio-recorder/demo/basic.tsx +0 -27
- package/2/apps/native/src/features/audio-recorder/demo/index.ts +0 -5
- package/2/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +0 -82
- package/2/apps/native/src/features/authentication/components/auth-watcher.tsx +0 -115
- package/2/apps/native/src/features/authentication/components/login-form.tsx +0 -85
- package/2/apps/native/src/features/authentication/services/__tests__/convex-auth.adapter.test.ts +0 -399
- package/2/apps/native/src/features/authentication/services/convex-auth.adapter.ts +0 -497
- package/2/apps/native/src/features/authentication/services/index.ts +0 -2
- package/2/apps/native/src/features/charts/README.md +0 -185
- package/2/apps/native/src/features/charts/app/preview.tsx +0 -226
- package/2/apps/native/src/features/charts/components/area-chart.tsx +0 -43
- package/2/apps/native/src/features/charts/components/bar-chart.tsx +0 -146
- package/2/apps/native/src/features/charts/components/candlestick-chart.tsx +0 -199
- package/2/apps/native/src/features/charts/components/chart-card.tsx +0 -68
- package/2/apps/native/src/features/charts/components/column-chart.tsx +0 -146
- package/2/apps/native/src/features/charts/components/doughnut-chart.tsx +0 -260
- package/2/apps/native/src/features/charts/components/index.ts +0 -13
- package/2/apps/native/src/features/charts/components/line-chart.tsx +0 -311
- package/2/apps/native/src/features/charts/components/radar-chart.tsx +0 -183
- package/2/apps/native/src/features/charts/components/radial-bar-chart.tsx +0 -191
- package/2/apps/native/src/features/charts/components/stacked-area-chart.tsx +0 -268
- package/2/apps/native/src/features/charts/components/stacked-bar-chart.tsx +0 -325
- package/2/apps/native/src/features/charts/data/mock-data.ts +0 -186
- package/2/apps/native/src/features/charts/types/index.ts +0 -69
- package/2/apps/native/src/features/chatbot/app/index.tsx +0 -303
- package/2/apps/native/src/features/chatbot/components/chat-header-buttons.tsx +0 -60
- package/2/apps/native/src/features/chatbot/components/chat-input-bar.tsx +0 -470
- package/2/apps/native/src/features/chatbot/components/chat-markdown.tsx +0 -576
- package/2/apps/native/src/features/chatbot/components/chat-message-bubble.tsx +0 -247
- package/2/apps/native/src/features/chatbot/components/chat-settings-modal.tsx +0 -162
- package/2/apps/native/src/features/chatbot/components/image-preview-list.tsx +0 -116
- package/2/apps/native/src/features/chatbot/components/markdown/code-block.tsx +0 -166
- package/2/apps/native/src/features/chatbot/components/markdown/index.ts +0 -11
- package/2/apps/native/src/features/chatbot/components/markdown/table-renderer.tsx +0 -130
- package/2/apps/native/src/features/chatbot/components/message-error-boundary.tsx +0 -79
- package/2/apps/native/src/features/chatbot/components/message-list.tsx +0 -174
- package/2/apps/native/src/features/chatbot/components/model-selector.tsx +0 -284
- package/2/apps/native/src/features/chatbot/components/report-content-modal.tsx +0 -189
- package/2/apps/native/src/features/chatbot/components/suggested-messages.tsx +0 -68
- package/2/apps/native/src/features/chatbot/constants/models.ts +0 -21
- package/2/apps/native/src/features/chatbot/constants/report-reasons.ts +0 -10
- package/2/apps/native/src/features/chatbot/hooks/use-attachment-cache.ts +0 -144
- package/2/apps/native/src/features/chatbot/hooks/use-chat-config.ts +0 -665
- package/2/apps/native/src/features/chatbot/hooks/use-chat-handlers.ts +0 -360
- package/2/apps/native/src/features/chatbot/hooks/use-chatbot-settings.ts +0 -90
- package/2/apps/native/src/features/chatbot/hooks/use-conversation.ts +0 -80
- package/2/apps/native/src/features/chatbot/hooks/use-image-picker.ts +0 -123
- package/2/apps/native/src/features/chatbot/hooks/use-keyboard-coordinator.ts +0 -162
- package/2/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +0 -214
- package/2/apps/native/src/features/chatbot/models/index.ts +0 -87
- package/2/apps/native/src/features/chatbot/models/models.ts +0 -163
- package/2/apps/native/src/features/chatbot/models/providers.ts +0 -63
- package/2/apps/native/src/features/chatbot/models/types.ts +0 -41
- package/2/apps/native/src/features/chatbot/services/file-uploader.ts +0 -239
- package/2/apps/native/src/features/chatbot/services/message-handler-service.ts +0 -181
- package/2/apps/native/src/features/chatbot/types/index.ts +0 -61
- package/2/apps/native/src/features/chatbot/utils/chat-telemetry.ts +0 -92
- package/2/apps/native/src/features/image-generator/app/_layout.tsx +0 -26
- package/2/apps/native/src/features/image-generator/app/gallery.tsx +0 -217
- package/2/apps/native/src/features/image-generator/app/index.tsx +0 -237
- package/2/apps/native/src/features/image-generator/components/gallery-image.tsx +0 -25
- package/2/apps/native/src/features/image-generator/components/image-detail-modal.tsx +0 -215
- package/2/apps/native/src/features/image-generator/components/image-model-selector.tsx +0 -210
- package/2/apps/native/src/features/image-generator/components/image-placeholder.tsx +0 -26
- package/2/apps/native/src/features/image-generator/hooks/use-image-gallery.ts +0 -71
- package/2/apps/native/src/features/image-generator/hooks/use-image-generator-settings.ts +0 -152
- package/2/apps/native/src/features/image-generator/hooks/use-image-generator.ts +0 -93
- package/2/apps/native/src/features/image-generator/models/models.ts +0 -66
- package/2/apps/native/src/features/image-generator/services/image-gallery-service.ts +0 -98
- package/2/apps/native/src/features/image-generator/services/image-save-service.ts +0 -121
- package/2/apps/native/src/features/onboarding/analytics/index.ts +0 -9
- package/2/apps/native/src/features/onboarding/components/onboarding-with-analytics.tsx +0 -141
- package/2/apps/native/src/features/onboarding/components/onboarding.tsx +0 -173
- package/2/apps/native/src/features/onboarding/config/onboarding-flow-config.ts +0 -189
- package/2/apps/native/src/features/onboarding/demo-one/app/index.tsx +0 -43
- package/2/apps/native/src/features/onboarding/demo-one/data.ts +0 -32
- package/2/apps/native/src/features/onboarding/hooks/use-onboarding-analytics.ts +0 -323
- package/2/apps/native/src/features/onboarding/services/onboarding-analytics.ts +0 -432
- package/2/apps/native/src/features/payments/README.md +0 -200
- package/2/apps/native/src/features/payments/app/local-paywall.tsx +0 -194
- package/2/apps/native/src/features/payments/app/remote-paywall.tsx +0 -79
- package/2/apps/native/src/features/payments/components/payment-initializer.tsx +0 -95
- package/2/apps/native/src/features/payments/components/paywall-error-state.tsx +0 -60
- package/2/apps/native/src/features/payments/components/paywall-local-mode.tsx +0 -116
- package/2/apps/native/src/features/payments/components/paywall-product-card.tsx +0 -133
- package/2/apps/native/src/features/payments/components/paywall-remote-mode.tsx +0 -146
- package/2/apps/native/src/features/payments/hooks/use-entitlement.ts +0 -63
- package/2/apps/native/src/features/payments/index.ts +0 -8
- package/2/apps/native/src/features/payments/services/revenuecat-adapter.ts +0 -407
- package/2/apps/native/src/features/quick-actions/components/quick-actions-demo.tsx +0 -139
- package/2/apps/native/src/features/quick-actions/config/default-actions.ts +0 -83
- package/2/apps/native/src/features/quick-actions/hooks/use-quick-actions.ts +0 -45
- package/2/apps/native/src/features/quick-actions/index.ts +0 -4
- package/2/apps/native/src/features/quick-actions/utils/quick-actions-manager.ts +0 -105
- package/2/apps/native/src/features/quiz/components/question.tsx +0 -67
- package/2/apps/native/src/features/quiz/config.ts +0 -11
- package/2/apps/native/src/features/quiz/index.tsx +0 -133
- package/2/apps/native/src/features/settings/ui/debug-info.tsx +0 -75
- package/2/apps/native/src/features/settings/ui/dev-tools.tsx +0 -1
- package/2/apps/native/src/features/settings/ui/item.tsx +0 -45
- package/2/apps/native/src/features/settings/ui/items-container.tsx +0 -23
- package/2/apps/native/src/features/settings/ui/language-item.tsx +0 -52
- package/2/apps/native/src/features/settings/ui/notification-item.tsx +0 -59
- package/2/apps/native/src/features/settings/ui/theme-item.tsx +0 -45
- package/2/apps/native/src/features/tracker-app/app/index.tsx +0 -108
- package/2/apps/native/src/features/tracker-app/components/animated-number.tsx +0 -102
- package/2/apps/native/src/features/tracker-app/components/calorie-card.tsx +0 -66
- package/2/apps/native/src/features/tracker-app/components/circular-progress.tsx +0 -97
- package/2/apps/native/src/features/tracker-app/components/floating-add-button.tsx +0 -27
- package/2/apps/native/src/features/tracker-app/components/macro-card.tsx +0 -80
- package/2/apps/native/src/features/tracker-app/components/promo-banner.tsx +0 -98
- package/2/apps/native/src/features/tracker-app/components/recently-logged.tsx +0 -64
- package/2/apps/native/src/features/tracker-app/components/week-calendar.tsx +0 -68
- package/2/apps/native/src/features/vibefast-features.ts +0 -42
- package/2/apps/native/src/features/voice-bot/README.md +0 -185
- package/2/apps/native/src/features/voice-bot/components/conversation-status.tsx +0 -76
- package/2/apps/native/src/features/voice-bot/components/index.ts +0 -4
- package/2/apps/native/src/features/voice-bot/components/message-input.tsx +0 -98
- package/2/apps/native/src/features/voice-bot/components/voice-bot-screen.tsx +0 -173
- package/2/apps/native/src/features/voice-bot/components/voice-controls.tsx +0 -73
- package/2/apps/native/src/features/voice-bot/index.ts +0 -3
- package/2/apps/native/src/features/voice-bot/services/index.ts +0 -1
- package/2/apps/native/src/features/voice-bot/services/use-voice-bot.ts +0 -161
- package/2/apps/native/src/features/voice-bot/types.ts +0 -29
- package/2/apps/native/src/features/wake-word/components/index.ts +0 -1
- package/2/apps/native/src/features/wake-word/components/wake-word-indicator.tsx +0 -61
- package/2/apps/native/src/features/wake-word/constants.ts +0 -10
- package/2/apps/native/src/features/wake-word/hooks/use-wake-word.ts +0 -181
- package/2/apps/native/src/features/wake-word/index.ts +0 -22
- package/2/apps/native/src/features/wake-word/services/audio-session.ts +0 -40
- package/2/apps/native/src/features/wake-word/services/event-bus.ts +0 -31
- package/2/apps/native/src/features/wake-word/services/keywords.ts +0 -88
- package/2/apps/native/src/features/wake-word/services/wake-word-manager.ts +0 -249
- package/2/apps/native/src/features/wake-word/types.ts +0 -22
- package/2/apps/native/src/lib/env.js +0 -13
- package/2/apps/native/src/lib/hooks/index.tsx +0 -6
- package/2/apps/native/src/lib/hooks/use-device-identifier.tsx +0 -80
- package/2/apps/native/src/lib/hooks/use-gradual-animation.ts +0 -28
- package/2/apps/native/src/lib/hooks/use-is-first-time.tsx +0 -25
- package/2/apps/native/src/lib/hooks/use-navigation-analytics.ts +0 -44
- package/2/apps/native/src/lib/hooks/use-navigation-options.tsx +0 -87
- package/2/apps/native/src/lib/hooks/use-push-notifications.ts +0 -250
- package/2/apps/native/src/lib/hooks/use-responsive-size.tsx +0 -37
- package/2/apps/native/src/lib/hooks/use-selected-theme.tsx +0 -38
- package/2/apps/native/src/lib/hooks/use-viewport-lazy-loading.tsx +0 -124
- package/2/apps/native/src/lib/i18n/index.tsx +0 -30
- package/2/apps/native/src/lib/i18n/react-i18next.d.ts +0 -9
- package/2/apps/native/src/lib/i18n/resources.ts +0 -25
- package/2/apps/native/src/lib/i18n/types.ts +0 -23
- package/2/apps/native/src/lib/i18n/utils.tsx +0 -112
- package/2/apps/native/src/lib/index.tsx +0 -3
- package/2/apps/native/src/lib/state/auth-client-slice.ts +0 -34
- package/2/apps/native/src/lib/state/index.ts +0 -1
- package/2/apps/native/src/lib/storage.tsx +0 -7
- package/2/apps/native/src/lib/test-utils.tsx +0 -43
- package/2/apps/native/src/lib/use-theme-config.tsx +0 -108
- package/2/apps/native/src/lib/utils.ts +0 -29
- package/2/apps/native/src/polyfills.ts +0 -61
- package/2/apps/native/src/providers/convex-provider.tsx +0 -31
- package/2/apps/native/src/providers/index.tsx +0 -6
- package/2/apps/native/src/providers/notification-provider.tsx +0 -168
- package/2/apps/native/src/providers/posthog-provider.tsx +0 -47
- package/2/apps/native/src/providers/root-providers.tsx +0 -46
- package/2/apps/native/src/providers/sentry-provider.tsx +0 -62
- package/2/apps/native/src/providers/splash-screen-provider.tsx +0 -122
- package/2/apps/native/src/providers/theme-provider.tsx +0 -67
- package/2/apps/native/src/translations/ar.json +0 -394
- package/2/apps/native/src/translations/de.json +0 -394
- package/2/apps/native/src/translations/en.json +0 -394
- package/2/apps/native/src/translations/es.json +0 -394
- package/2/apps/native/src/translations/fr.json +0 -394
- package/2/apps/native/src/types/flash-list.d.ts +0 -3
- package/2/apps/native/src/types/index.ts +0 -3
- package/2/apps/native/src/types/react-native-reanimated.d.ts +0 -5
- package/2/apps/native/tailwind.config.js +0 -57
- package/2/apps/native/targets/widget/AppIntent.swift +0 -46
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -122
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
- package/2/apps/native/targets/widget/CalorieTrackerWidget.swift +0 -424
- package/2/apps/native/targets/widget/HabitTrackerWidget.swift +0 -305
- package/2/apps/native/targets/widget/Info.plist +0 -11
- package/2/apps/native/targets/widget/WidgetLiveActivity.swift +0 -75
- package/2/apps/native/targets/widget/expo-target.config.js +0 -10
- package/2/apps/native/targets/widget/generated.entitlements +0 -5
- package/2/apps/native/targets/widget/index.swift +0 -18
- package/2/apps/native/targets/widget/widgets.swift +0 -96
- package/2/apps/native/tsconfig.json +0 -88
- package/2/apps/native/vitest.config.mts +0 -14
- package/2/apps/web/README.md +0 -36
- package/2/apps/web/app/favicon.ico +0 -0
- package/2/apps/web/app/globals.css +0 -122
- package/2/apps/web/app/layout.tsx +0 -38
- package/2/apps/web/app/page.tsx +0 -35
- package/2/apps/web/app/users/page.tsx +0 -301
- package/2/apps/web/components/AdminDashboard.tsx +0 -336
- package/2/apps/web/components/AppleLogo.tsx +0 -15
- package/2/apps/web/components/GitHubLogo.tsx +0 -11
- package/2/apps/web/components/GoogleLogo.tsx +0 -23
- package/2/apps/web/components/Layout.tsx +0 -77
- package/2/apps/web/components/ThemeToggle.tsx +0 -23
- package/2/apps/web/components/UserMenu.tsx +0 -66
- package/2/apps/web/components/auth/CodeInput.tsx +0 -24
- package/2/apps/web/components/auth/ResetPasswordWithEmailCode.tsx +0 -85
- package/2/apps/web/components/auth/SignInFormEmailCode.tsx +0 -72
- package/2/apps/web/components/auth/SignInFormEmailLink.tsx +0 -81
- package/2/apps/web/components/auth/SignInFormPassword.tsx +0 -17
- package/2/apps/web/components/auth/SignInFormPasswordAndCustomField.tsx +0 -42
- package/2/apps/web/components/auth/SignInFormPasswordAndResetViaCode.tsx +0 -32
- package/2/apps/web/components/auth/SignInFormPasswordAndVerifyViaCode.tsx +0 -86
- package/2/apps/web/components/auth/SignInFormPhoneCode.tsx +0 -89
- package/2/apps/web/components/auth/SignInFormsShowcase.tsx +0 -64
- package/2/apps/web/components/auth/SignInMethodDivider.tsx +0 -17
- package/2/apps/web/components/auth/SignInWithEmailCode.tsx +0 -49
- package/2/apps/web/components/auth/SignInWithOAuth.tsx +0 -16
- package/2/apps/web/components/auth/SignInWithPassword.tsx +0 -100
- package/2/apps/web/components/auth/oauth/SignInWithApple.tsx +0 -27
- package/2/apps/web/components/auth/oauth/SignInWithGitHub.tsx +0 -27
- package/2/apps/web/components/auth/oauth/SignInWithGoogle.tsx +0 -27
- package/2/apps/web/components/ui/button.tsx +0 -60
- package/2/apps/web/components/ui/card.tsx +0 -92
- package/2/apps/web/components/ui/dialog.tsx +0 -143
- package/2/apps/web/components/ui/dropdown-menu.tsx +0 -257
- package/2/apps/web/components/ui/input-otp.tsx +0 -77
- package/2/apps/web/components/ui/input.tsx +0 -21
- package/2/apps/web/components/ui/skeleton.tsx +0 -13
- package/2/apps/web/components/ui/tabs.tsx +0 -66
- package/2/apps/web/components/ui/toast.tsx +0 -130
- package/2/apps/web/components/ui/toaster.tsx +0 -36
- package/2/apps/web/components/ui/toggle-group.tsx +0 -83
- package/2/apps/web/components/ui/toggle.tsx +0 -47
- package/2/apps/web/components/ui/use-toast.ts +0 -192
- package/2/apps/web/components.json +0 -22
- package/2/apps/web/eslint.config.mjs +0 -18
- package/2/apps/web/lib/convex-provider.tsx +0 -18
- package/2/apps/web/lib/utils.ts +0 -6
- package/2/apps/web/next.config.ts +0 -7
- package/2/apps/web/package.json +0 -46
- package/2/apps/web/postcss.config.mjs +0 -7
- package/2/apps/web/public/file.svg +0 -1
- package/2/apps/web/public/globe.svg +0 -1
- package/2/apps/web/public/next.svg +0 -1
- package/2/apps/web/public/vercel.svg +0 -1
- package/2/apps/web/public/window.svg +0 -1
- package/2/apps/web/tsconfig.json +0 -34
- package/2/bts.jsonc +0 -21
- package/2/commitlint.config.js +0 -1
- package/2/eslint.config.mjs +0 -182
- package/2/lint-staged.config.js +0 -16
- package/2/package.json +0 -64
- package/2/packages/backend/.env.example +0 -20
- package/2/packages/backend/convex/README.md +0 -90
- package/2/packages/backend/convex/_generated/api.d.ts +0 -2599
- package/2/packages/backend/convex/_generated/api.js +0 -23
- package/2/packages/backend/convex/_generated/dataModel.d.ts +0 -60
- package/2/packages/backend/convex/_generated/server.d.ts +0 -149
- package/2/packages/backend/convex/_generated/server.js +0 -90
- package/2/packages/backend/convex/agents.ts +0 -116
- package/2/packages/backend/convex/auth.config.ts +0 -8
- package/2/packages/backend/convex/auth.ts +0 -103
- package/2/packages/backend/convex/authCustomEmailOtpProvider.ts +0 -175
- package/2/packages/backend/convex/authOtp.ts +0 -144
- package/2/packages/backend/convex/authPasswordReset.ts +0 -367
- package/2/packages/backend/convex/authPasswordResetActions.ts +0 -150
- package/2/packages/backend/convex/chatbot/index.ts +0 -30
- package/2/packages/backend/convex/chatbotAgent.ts +0 -1085
- package/2/packages/backend/convex/chatbotHistory.ts +0 -307
- package/2/packages/backend/convex/convex.config.ts +0 -13
- package/2/packages/backend/convex/deviceGrants.ts +0 -58
- package/2/packages/backend/convex/grantFunctions.ts +0 -444
- package/2/packages/backend/convex/http.ts +0 -8
- package/2/packages/backend/convex/imageGeneration/index.ts +0 -12
- package/2/packages/backend/convex/imageGeneratorFunctions.ts +0 -290
- package/2/packages/backend/convex/lib/ai/analysisConfigs.ts +0 -257
- package/2/packages/backend/convex/lib/ai/config.ts +0 -71
- package/2/packages/backend/convex/lib/ai/geminiAdapter.ts +0 -43
- package/2/packages/backend/convex/lib/ai/openaiAdapter.ts +0 -43
- package/2/packages/backend/convex/lib/ai/schemas.ts +0 -79
- package/2/packages/backend/convex/lib/config.ts +0 -111
- package/2/packages/backend/convex/lib/rateLimit.ts +0 -100
- package/2/packages/backend/convex/lib/telemetry.ts +0 -29
- package/2/packages/backend/convex/paymentFunctions.ts +0 -119
- package/2/packages/backend/convex/payments/index.ts +0 -13
- package/2/packages/backend/convex/pushNotificationFunctions.ts +0 -342
- package/2/packages/backend/convex/ragKnowledge.ts +0 -714
- package/2/packages/backend/convex/rateLimit.ts +0 -13
- package/2/packages/backend/convex/recordingFunctions.ts +0 -98
- package/2/packages/backend/convex/reportFunctions.ts +0 -344
- package/2/packages/backend/convex/reporting/index.ts +0 -9
- package/2/packages/backend/convex/router.ts +0 -81
- package/2/packages/backend/convex/schema.ts +0 -237
- package/2/packages/backend/convex/shared/email.ts +0 -172
- package/2/packages/backend/convex/shared/files.ts +0 -96
- package/2/packages/backend/convex/shared/index.ts +0 -17
- package/2/packages/backend/convex/shared/templates/PasswordResetEmail.tsx +0 -72
- package/2/packages/backend/convex/shared/templates/VerificationCodeEmail.tsx +0 -65
- package/2/packages/backend/convex/sharedUsers.ts +0 -48
- package/2/packages/backend/convex/tools/index.ts +0 -18
- package/2/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -92
- package/2/packages/backend/convex/tools/tavilySearch.ts +0 -83
- package/2/packages/backend/convex/tools/userProfile.ts +0 -72
- package/2/packages/backend/convex/tsconfig.json +0 -25
- package/2/packages/backend/convex/users.ts +0 -54
- package/2/packages/backend/index.ts +0 -20
- package/2/packages/backend/package.json +0 -32
- package/2/packages/ui/README.md +0 -63
- package/2/packages/ui/index.ts +0 -1
- package/2/packages/ui/package.json +0 -21
- package/2/packages/ui/src/components/SharedButton.tsx +0 -31
- package/2/packages/ui/src/components/SharedCard.tsx +0 -48
- package/2/packages/ui/src/components/index.ts +0 -2
- package/2/packages/ui/tsconfig.json +0 -10
- package/2/pnpm-lock.yaml +0 -23292
- package/2/pnpm-workspace.yaml +0 -3
- package/2/scripts/i18next-syntax-validation.js +0 -1
- package/2/tsconfig.json +0 -43
- package/2/turbo.json +0 -33
- package/2/vercel.json +0 -6
- package/2/vf-agent/agent-teams/team-vibefast.yaml +0 -14
- package/2/vf-agent/agents/analyst.md +0 -53
- package/2/vf-agent/agents/architect.md +0 -105
- package/2/vf-agent/agents/dev.md +0 -40
- package/2/vf-agent/agents/orchestrator.md +0 -181
- package/2/vf-agent/agents/pm.md +0 -48
- package/2/vf-agent/agents/po.md +0 -38
- package/2/vf-agent/agents/qa.md +0 -30
- package/2/vf-agent/agents/sm.md +0 -38
- package/2/vf-agent/agents/ux-expert.md +0 -33
- package/2/vf-agent/checklists/po-master-checklist.md +0 -73
- package/2/vf-agent/checklists/story-dod-checklist.md +0 -37
- package/2/vf-agent/core-config.yaml +0 -43
- package/2/vf-agent/data/knowledge_base/backend/convex-advanced.md +0 -43
- package/2/vf-agent/data/knowledge_base/backend/convex-database.md +0 -53
- package/2/vf-agent/data/knowledge_base/backend/convex-main.md +0 -65
- package/2/vf-agent/data/knowledge_base/backend/full-guidelines.md +0 -795
- package/2/vf-agent/data/knowledge_base/coding-standards.md +0 -253
- package/2/vf-agent/data/knowledge_base/frontend/full-guidelines.md +0 -254
- package/2/vf-agent/data/knowledge_base/frontend/image-handling.md +0 -48
- package/2/vf-agent/data/knowledge_base/frontend/react-native-main.md +0 -24
- package/2/vf-agent/data/knowledge_base/frontend/ui-and-styling.md +0 -169
- package/2/vf-agent/data/knowledge_base/general-principles.md +0 -26
- package/2/vf-agent/data/knowledge_base/master-rulebook.md +0 -42
- package/2/vf-agent/data/knowledge_base/starter-docs/audio-recorder-reference.md +0 -98
- package/2/vf-agent/data/knowledge_base/starter-docs/authentication-reference.md +0 -155
- package/2/vf-agent/data/knowledge_base/starter-docs/charts-reference.md +0 -149
- package/2/vf-agent/data/knowledge_base/starter-docs/chatbot-reference.md +0 -123
- package/2/vf-agent/data/knowledge_base/starter-docs/feature-reference-index.md +0 -211
- package/2/vf-agent/data/knowledge_base/starter-docs/features-overview.md +0 -221
- package/2/vf-agent/data/knowledge_base/starter-docs/image-analyzer-reference.md +0 -118
- package/2/vf-agent/data/knowledge_base/starter-docs/image-generator-reference.md +0 -110
- package/2/vf-agent/data/knowledge_base/starter-docs/index.md +0 -28
- package/2/vf-agent/data/knowledge_base/starter-docs/onboarding-reference.md +0 -96
- package/2/vf-agent/data/knowledge_base/starter-docs/payments-reference.md +0 -148
- package/2/vf-agent/data/knowledge_base/starter-docs/prd.md +0 -82
- package/2/vf-agent/data/knowledge_base/starter-docs/push-notifications-reference.md +0 -453
- package/2/vf-agent/data/knowledge_base/starter-docs/quick-actions-reference.md +0 -253
- package/2/vf-agent/data/knowledge_base/starter-docs/quiz-reference.md +0 -169
- package/2/vf-agent/data/knowledge_base/starter-docs/settings-reference.md +0 -146
- package/2/vf-agent/data/knowledge_base/starter-docs/tech-stack.md +0 -159
- package/2/vf-agent/data/knowledge_base/starter-docs/tracker-app-reference.md +0 -150
- package/2/vf-agent/data/knowledge_base/starter-docs/unified-project-structure.md +0 -98
- package/2/vf-agent/data/knowledge_base/testing/backend-testing.md +0 -54
- package/2/vf-agent/data/knowledge_base/testing/frontend-testing.md +0 -71
- package/2/vf-agent/data/knowledge_base/testing/testing-strategy.md +0 -31
- package/2/vf-agent/tasks/advanced-elicitation.md +0 -117
- package/2/vf-agent/tasks/brownfield-create-epic.md +0 -160
- package/2/vf-agent/tasks/create-deep-research-prompt.md +0 -278
- package/2/vf-agent/tasks/create-doc.md +0 -42
- package/2/vf-agent/tasks/create-story.md +0 -43
- package/2/vf-agent/tasks/document-project.md +0 -343
- package/2/vf-agent/tasks/facilitate-brainstorming-session.md +0 -136
- package/2/vf-agent/tasks/index-docs.md +0 -173
- package/2/vf-agent/tasks/kb-mode-interaction.md +0 -75
- package/2/vf-agent/tasks/review-story.md +0 -154
- package/2/vf-agent/tasks/shard-doc.md +0 -185
- package/2/vf-agent/tasks/troubleshoot-issue.md +0 -65
- package/2/vf-agent/tasks/validate-next-story.md +0 -47
- package/2/vf-agent/templates/brainstorming-output-tmpl.yaml +0 -156
- package/2/vf-agent/templates/brownfield-architecture-tmpl.yaml +0 -111
- package/2/vf-agent/templates/brownfield-prd-tmpl.yaml +0 -247
- package/2/vf-agent/templates/competitor-analysis-tmpl.yaml +0 -293
- package/2/vf-agent/templates/market-research-tmpl.yaml +0 -252
- package/2/vf-agent/templates/project-brief-tmpl.yaml +0 -221
- package/2/vf-agent/templates/story-tmpl.yaml +0 -143
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +0 -444
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +0 -355
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +0 -31
- package/recipes/wake-word/scripts/download-vosk-model.mjs +0 -121
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/animated-chip.tsx +0 -0
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/chip.tsx +0 -0
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/demo.tsx +0 -0
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/types.ts +0 -0
- /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/animated-switch.tsx +0 -0
- /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/demo.tsx +0 -0
- /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/types.ts +0 -0
- /package/{2 → recipes/glowing-button}/apps/native/src/components/advanced-ui/buttons/demo.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/front.jpg +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/side.jpg +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/threeQuarter.jpg +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/api-client/image-analyzer.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/_layout.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/analysis-options.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/camera.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/index.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/loading.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/results.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/trait-details.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/camera.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/loading-screen.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/loading.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/results.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/trait-details.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/use-analysis-data.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/use-results-screen.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-badge.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-card.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-unlocked-modal.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievements-section.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/advice-list.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/circular-progress.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/content-card.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/error-state.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/index.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/loading-state.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/profile-image.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/results-header.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/score-display.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/share-options-modal.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/traits-grid.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/config/analysis-config.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/config/master-analysis-config.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/index.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/use-analysis.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/analysis-service.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/share-service.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/trait-details-service.ts +0 -0
- /package/{2 → recipes/image-analysis}/packages/backend/convex/imageAnalysis/index.ts +0 -0
- /package/{2 → recipes/image-analysis}/packages/backend/convex/imageAnalysisFunctions.ts +0 -0
- /package/{2 → recipes/image-analysis}/packages/backend/convex/lib/ai/imageAnalysisAdapter.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/button/stepper-button.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/button/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/content/stepper-content.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/content/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/value/stepper-value.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/value/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/context/stepper-context.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/context/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/demo.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/index.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/stepper.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/types.ts +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/animated-progress-bar.tsx +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/dropdown-picker-page.tsx +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/progress-circle.tsx +0 -0
- /package/{2 → recipes/swipe-slider}/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +0 -0
- /package/{2 → recipes/swipe-slider}/apps/native/src/components/advanced-ui/sliders/swipe-slider.tsx +0 -0
- /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/demo.tsx +0 -0
- /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +0 -0
- /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/types.ts +0 -0
- /package/{2 → recipes/wake-word}/apps/native/scripts/download-vosk-model.mjs +0 -0
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# Chatbot Reference
|
|
2
|
-
|
|
3
|
-
> Frontend paths reference the Expo workspace (`apps/native/src/...`); backend paths reference `packages/backend/convex/...`.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The VibeFast starter kit includes a full-featured, streaming AI chatbot. It's built to be highly performant and easily extensible, leveraging the Vercel AI SDK for the frontend and a powerful Convex backend to connect with various AI models like OpenAI's GPT and Google's Gemini.
|
|
8
|
-
|
|
9
|
-
### Core Technologies
|
|
10
|
-
|
|
11
|
-
- **[Vercel AI SDK](https://sdk.vercel.ai):** The `useChat` hook is the centerpiece of the frontend, managing message state, streaming UI updates, and handling user input.
|
|
12
|
-
- **[Convex](https://convex.dev):** The backend is built entirely on Convex. A `httpAction` provides the streaming API endpoint, while standard mutations and queries handle conversation and message persistence.
|
|
13
|
-
- **[AI Providers (OpenAI/Gemini)](https://openai.com/):** The backend is designed to be provider-agnostic. The `chatbotHttpActions.ts` file contains adapters for both OpenAI and Gemini, which can be selected dynamically.
|
|
14
|
-
- **[Expo Image Picker](https://docs.expo.dev/versions/latest/sdk/imagepicker/):** Used for selecting and attaching images to messages, enabling multi-modal chat capabilities.
|
|
15
|
-
|
|
16
|
-
## Getting Started
|
|
17
|
-
|
|
18
|
-
The chatbot is ready to use out-of-the-box. The main configuration step is to add your desired AI provider API keys to your environment variables.
|
|
19
|
-
|
|
20
|
-
### Environment Variables
|
|
21
|
-
|
|
22
|
-
Add the following to your `.env.local` file:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# For OpenAI
|
|
26
|
-
OPENAI_API_KEY="sk-..."
|
|
27
|
-
|
|
28
|
-
# For Google Gemini
|
|
29
|
-
GEMINI_API_KEY="..."
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Chatbot Flow
|
|
33
|
-
|
|
34
|
-
1. **Conversation Start:** The `useChatConversation` hook ensures a default conversation exists for the user by calling the `getOrCreateDefaultConversation` mutation.
|
|
35
|
-
2. **User Input:** The user types a message or attaches an image using the `MessageInputBar` component. The `useChatInput` hook manages the local UI state.
|
|
36
|
-
3. **Submission:** When the user sends the message, the `useChat` hook from the Vercel AI SDK is triggered. It sends a POST request to the app's internal API route (`/api/chat/stream`).
|
|
37
|
-
4. **Backend HTTP Action:** The Convex `httpAction` at `chatbotHttpActions.ts` receives the request. It authenticates the user, retrieves image attachments from file storage if necessary, and formats the message history into the format required by the target AI provider (e.g., OpenAI).
|
|
38
|
-
5. **AI Stream:** The action calls the selected AI provider (e.g., `streamOpenAIChat`). The provider's response is streamed back to the client.
|
|
39
|
-
6. **UI Streaming:** The `useChat` hook receives the stream and continuously updates the message list, creating the real-time typing effect.
|
|
40
|
-
7. **Persistence:**
|
|
41
|
-
- The user's message is saved to the database immediately via the `storeMessage` mutation.
|
|
42
|
-
- Once the AI's response stream is complete, an `onFinishCallback` in the HTTP action triggers the `storeFinalBotMessage` mutation to save the complete bot message to the database.
|
|
43
|
-
|
|
44
|
-
## Key Components & Hooks
|
|
45
|
-
|
|
46
|
-
### Core Components
|
|
47
|
-
|
|
48
|
-
- `ChatLayout`: Provides the main structure for the chat screen, including the message list and the input bar.
|
|
49
|
-
- `ChatMessageList`: Renders the list of messages, handles infinite scrolling for history, and displays the `TypingIndicator`.
|
|
50
|
-
- `ChatMessage`: The main component for a single message, composing the avatar, content, and actions.
|
|
51
|
-
- `MessageInputBar`: The bottom input bar containing the text input, image picker, and send button.
|
|
52
|
-
- `ChatMessageText`: Renders the message content using `react-native-markdown-display` to support rich text formatting.
|
|
53
|
-
|
|
54
|
-
### Core Hooks
|
|
55
|
-
|
|
56
|
-
- `useChat` (from `ai/react`): The most important hook. It manages the entire client-side state of the conversation, including the message list, input state, and connection to the streaming API.
|
|
57
|
-
- `useChatConversation`: Manages the lifecycle of a conversation, ensuring a default one is created and providing the ability to clear it.
|
|
58
|
-
- `useChatHistory`: A separate hook that uses a `usePaginatedQuery` to load historical messages from the database.
|
|
59
|
-
- `useSendMessage`: A hook that handles the initial part of sending a message: uploading attachments to Convex file storage and storing the user's message in the database.
|
|
60
|
-
- `useImagePicker`: A utility hook that wraps `expo-image-picker` to provide a simple interface for selecting images from the device.
|
|
61
|
-
|
|
62
|
-
## How-To Guides
|
|
63
|
-
|
|
64
|
-
### 1. Change the System Prompt
|
|
65
|
-
|
|
66
|
-
The AI's personality and instructions are defined in a system prompt. You can change it by editing the `chatbotHttpActions.ts` file.
|
|
67
|
-
|
|
68
|
-
```ts
|
|
69
|
-
// packages/backend/convex/chatbotHttpActions.ts
|
|
70
|
-
|
|
71
|
-
// ... inside the httpAction
|
|
72
|
-
|
|
73
|
-
// ── 3 ▶ Inject System Message ──────────────────
|
|
74
|
-
const systemMessage: ClientMessage = {
|
|
75
|
-
role: 'system',
|
|
76
|
-
content: `You are a helpful assistant. Your new persona goes here.`,
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// ...
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### 2. Change the Default AI Provider or Model
|
|
83
|
-
|
|
84
|
-
You can change the default provider (OpenAI or Gemini) and the model used for responses in `chatbotHttpActions.ts`.
|
|
85
|
-
|
|
86
|
-
```ts
|
|
87
|
-
// packages/backend/convex/chatbotHttpActions.ts
|
|
88
|
-
|
|
89
|
-
// ... inside the httpAction
|
|
90
|
-
|
|
91
|
-
// ── 5 ▶ Invoke the LLM stream ───────────────────────────
|
|
92
|
-
const model =
|
|
93
|
-
preferredModel ||
|
|
94
|
-
(preferredProvider === 'openai' ? 'gpt-4o' : 'gemini-1.5-pro-latest'); // Change model here
|
|
95
|
-
|
|
96
|
-
const result =
|
|
97
|
-
preferredProvider === 'gemini' // Change default provider here
|
|
98
|
-
? await streamGeminiChat(coreMessages, { model }, onFinishCallback)
|
|
99
|
-
: await streamOpenAIChat(coreMessages, { model }, onFinishCallback);
|
|
100
|
-
|
|
101
|
-
// ...
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### 3. Add a New AI Provider
|
|
105
|
-
|
|
106
|
-
To add a new provider (e.g., Anthropic Claude):
|
|
107
|
-
|
|
108
|
-
1. **Create an Adapter:** Create a new file in `packages/backend/convex/lib/ai/` (e.g., `anthropicAdapter.ts`) that conforms to the same interface as `openaiAdapter.ts` and `geminiAdapter.ts`. It should handle converting messages to the provider's format and processing the streamed response.
|
|
109
|
-
2. **Import and Integrate:** Import your new adapter into `packages/backend/convex/chatbotHttpActions.ts`.
|
|
110
|
-
3. **Add Logic:** Add logic to the HTTP action to select your new provider based on the `preferredProvider` parameter.
|
|
111
|
-
|
|
112
|
-
### 4. Customize Chat Message Appearance
|
|
113
|
-
|
|
114
|
-
You can change the styling of chat messages by modifying the components in `apps/native/src/features/chatbot/components/`.
|
|
115
|
-
|
|
116
|
-
- **Colors & Fonts:** For text messages, the `ChatMessageText` component uses `react-native-markdown-display`. You can adjust the styles in `apps/native/src/features/chatbot/utils/markdown-styles.ts`.
|
|
117
|
-
- **Layout:** The overall layout of a message bubble is controlled by `ChatMessageWrapper` and `ChatMessageContent`.
|
|
118
|
-
|
|
119
|
-
## Backend (Convex)
|
|
120
|
-
|
|
121
|
-
- **`packages/backend/convex/chatbotHttpActions.ts`:** This is the heart of the backend. It's a Convex `httpAction` that provides a public API endpoint for the frontend to connect to. It handles authentication, data transformation, and calling the appropriate AI service.
|
|
122
|
-
- **`packages/backend/convex/chatbotHistory.ts`:** This file contains all the standard Convex queries and mutations for managing chat data in the database. This includes creating conversations, storing messages, and listing message history.
|
|
123
|
-
- **`packages/backend/convex/lib/ai/`:** This directory contains the provider-specific adapters (`openaiAdapter.ts`, `geminiAdapter.ts`). These files are responsible for the direct interaction with the AI APIs, keeping the main HTTP action clean and provider-agnostic.
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
# VibeFast Feature Reference Index
|
|
2
|
-
|
|
3
|
-
## Quick Reference Guide
|
|
4
|
-
|
|
5
|
-
This index provides quick access to all VibeFast starter features and their documentation. Paths reference the monorepo layout (e.g. `apps/native/src/...` for Expo code, `packages/backend/convex/...` for Convex).
|
|
6
|
-
|
|
7
|
-
## Core Features Documentation
|
|
8
|
-
|
|
9
|
-
### 🚀 Quick Actions
|
|
10
|
-
|
|
11
|
-
- **Reference**: `quick-actions-reference.md`
|
|
12
|
-
- **Implementation**: `apps/native/src/features/quick-actions/`
|
|
13
|
-
- **Core Service**: `apps/native/src/core/quick-actions/`
|
|
14
|
-
- **Key Capabilities**: Home screen shortcuts, deep linking, platform-specific icons
|
|
15
|
-
- **Integration Points**: Settings management, demo screen, root layout routing
|
|
16
|
-
|
|
17
|
-
### 🤖 AI Chatbot
|
|
18
|
-
|
|
19
|
-
- **Reference**: `chatbot-reference.md`
|
|
20
|
-
- **Implementation**: `apps/native/src/features/chatbot/`
|
|
21
|
-
- **Key Capabilities**: Streaming responses, conversation history, multiple AI providers
|
|
22
|
-
- **Integration Points**: AI SDK, Convex backend, message persistence
|
|
23
|
-
|
|
24
|
-
### 🎨 AI Image Generator
|
|
25
|
-
|
|
26
|
-
- **Reference**: `image-generator-reference.md`
|
|
27
|
-
- **Implementation**: `apps/native/src/features/image-generator/`
|
|
28
|
-
- **Key Capabilities**: AI image generation, gallery management, sharing
|
|
29
|
-
- **Integration Points**: Multiple AI providers, local storage, image manipulation
|
|
30
|
-
|
|
31
|
-
### 🔐 Authentication System
|
|
32
|
-
|
|
33
|
-
- **Reference**: `authentication-reference.md`
|
|
34
|
-
- **Implementation**: `apps/native/src/features/authentication/`
|
|
35
|
-
- **Core Service**: `apps/native/src/core/auth/`
|
|
36
|
-
- **Key Capabilities**: Email/password, guest mode, OTP verification, password reset
|
|
37
|
-
- **Integration Points**: Convex Auth, session management, protected routes
|
|
38
|
-
|
|
39
|
-
### 💳 Payments & Subscriptions
|
|
40
|
-
|
|
41
|
-
- **Reference**: `payments-reference.md`
|
|
42
|
-
- **Implementation**: `apps/native/src/features/payments/`
|
|
43
|
-
- **Core Service**: `apps/native/src/core/payments/`
|
|
44
|
-
- **Key Capabilities**: RevenueCat integration, subscription management, paywall UI
|
|
45
|
-
- **Integration Points**: In-app purchases, receipt validation, cross-platform
|
|
46
|
-
|
|
47
|
-
### 🎵 Audio Recorder
|
|
48
|
-
|
|
49
|
-
- **Reference**: `audio-recorder-reference.md`
|
|
50
|
-
- **Implementation**: `apps/native/src/features/audio-recorder/`
|
|
51
|
-
- **Key Capabilities**: Voice recording, playback, file management
|
|
52
|
-
- **Integration Points**: Expo Audio, file system, waveform visualization
|
|
53
|
-
|
|
54
|
-
### 📊 Data Visualization (Charts)
|
|
55
|
-
|
|
56
|
-
- **Reference**: `charts-reference.md`
|
|
57
|
-
- **Implementation**: `apps/native/src/features/charts/`
|
|
58
|
-
- **Key Capabilities**: Interactive charts, data visualization, animations
|
|
59
|
-
- **Integration Points**: D3 shapes, responsive design, export functionality
|
|
60
|
-
|
|
61
|
-
### 🖼️ Image Analysis
|
|
62
|
-
|
|
63
|
-
- **Reference**: `image-analyzer-reference.md`
|
|
64
|
-
- **Implementation**: `apps/native/src/features/image-analyzer/`
|
|
65
|
-
- **Key Capabilities**: AI-powered image analysis, facial feature detection
|
|
66
|
-
- **Integration Points**: Camera, image picker, AI processing
|
|
67
|
-
|
|
68
|
-
### 🎯 Quiz System
|
|
69
|
-
|
|
70
|
-
- **Reference**: `quiz-reference.md`
|
|
71
|
-
- **Implementation**: `apps/native/src/features/quiz/`
|
|
72
|
-
- **Key Capabilities**: Interactive quizzes, scoring, progress tracking
|
|
73
|
-
- **Integration Points**: State management, result persistence
|
|
74
|
-
|
|
75
|
-
### 📱 Push Notifications
|
|
76
|
-
|
|
77
|
-
- **Reference**: `push-notifications-reference.md`
|
|
78
|
-
- **Implementation**: `apps/native/src/features/notifications/`
|
|
79
|
-
- **Key Capabilities**: Local and remote notifications, scheduling
|
|
80
|
-
- **Integration Points**: Expo Notifications, permission handling
|
|
81
|
-
|
|
82
|
-
### ⚙️ Settings Management
|
|
83
|
-
|
|
84
|
-
- **Reference**: `settings-reference.md`
|
|
85
|
-
- **Implementation**: `apps/native/src/features/settings/`
|
|
86
|
-
- **Key Capabilities**: App configuration, theme switching, language selection
|
|
87
|
-
- **Integration Points**: MMKV storage, i18n, system preferences
|
|
88
|
-
|
|
89
|
-
### 📈 Tracker App
|
|
90
|
-
|
|
91
|
-
- **Reference**: `tracker-app-reference.md`
|
|
92
|
-
- **Implementation**: `apps/native/src/features/tracker/`
|
|
93
|
-
- **Key Capabilities**: Calorie tracking, nutrition monitoring, progress visualization
|
|
94
|
-
- **Integration Points**: Data persistence, chart integration
|
|
95
|
-
|
|
96
|
-
### 🎓 Onboarding
|
|
97
|
-
|
|
98
|
-
- **Reference**: `onboarding-reference.md`
|
|
99
|
-
- **Implementation**: `apps/native/src/features/onboarding/`
|
|
100
|
-
- **Key Capabilities**: Multi-step onboarding, progress tracking, skip functionality
|
|
101
|
-
- **Integration Points**: First-time user detection, navigation flow
|
|
102
|
-
|
|
103
|
-
## Architecture Integration Points
|
|
104
|
-
|
|
105
|
-
### Core Services (`apps/native/src/core/`)
|
|
106
|
-
|
|
107
|
-
All features integrate through abstraction layers:
|
|
108
|
-
|
|
109
|
-
- **Authentication**: `apps/native/src/core/auth/`
|
|
110
|
-
- **Analytics**: `apps/native/src/core/analytics/`
|
|
111
|
-
- **Payments**: `apps/native/src/core/payments/`
|
|
112
|
-
- **Quick Actions**: `apps/native/src/core/quick-actions/`
|
|
113
|
-
- **Logging**: `apps/native/src/core/logging/`
|
|
114
|
-
- **Cache**: `apps/native/src/core/cache/`
|
|
115
|
-
|
|
116
|
-
### UI Component System
|
|
117
|
-
|
|
118
|
-
Features build upon the established UI hierarchy:
|
|
119
|
-
|
|
120
|
-
- **Base Components**: `apps/native/src/components/ui/`
|
|
121
|
-
- **Advanced Components**: `apps/native/src/components/advanced-ui/`
|
|
122
|
-
- **Feature Components**: Within each feature directory
|
|
123
|
-
|
|
124
|
-
### Navigation Integration
|
|
125
|
-
|
|
126
|
-
All features integrate with Expo Router:
|
|
127
|
-
|
|
128
|
-
- **Tab Navigation**: `apps/native/src/app/(tabs)/`
|
|
129
|
-
- **Feature Routes**: `apps/native/src/app/(root)/(protected)/`
|
|
130
|
-
- **Authentication Routes**: `apps/native/src/app/(routes)/(auth)/`
|
|
131
|
-
|
|
132
|
-
### Backend Integration (Convex)
|
|
133
|
-
|
|
134
|
-
Features connect to Convex backend:
|
|
135
|
-
|
|
136
|
-
- **Schema**: `packages/backend/convex/schema.ts`
|
|
137
|
-
- **Queries**: Feature-specific query functions
|
|
138
|
-
- **Mutations**: Feature-specific mutation functions
|
|
139
|
-
- **Actions**: Server-side logic and external API calls
|
|
140
|
-
|
|
141
|
-
## Development Guidelines
|
|
142
|
-
|
|
143
|
-
### When Extending Features
|
|
144
|
-
|
|
145
|
-
1. **Check Existing Implementation**: Review the feature's reference documentation
|
|
146
|
-
2. **Identify Reuse Opportunities**: Look for existing patterns and components
|
|
147
|
-
3. **Follow Architecture Patterns**: Maintain consistency with established patterns
|
|
148
|
-
4. **Update Documentation**: Keep feature documentation current
|
|
149
|
-
|
|
150
|
-
### When Creating New Features
|
|
151
|
-
|
|
152
|
-
1. **Follow Feature Structure**: Use established directory patterns
|
|
153
|
-
2. **Implement Core Services**: Create abstraction layers for external dependencies
|
|
154
|
-
3. **Build on UI System**: Extend existing UI components
|
|
155
|
-
4. **Add Navigation**: Integrate with Expo Router structure
|
|
156
|
-
5. **Document Thoroughly**: Create comprehensive reference documentation
|
|
157
|
-
|
|
158
|
-
### Integration Best Practices
|
|
159
|
-
|
|
160
|
-
- **Modularity**: Keep features self-contained and loosely coupled
|
|
161
|
-
- **Abstraction**: Use core services for external integrations
|
|
162
|
-
- **Type Safety**: Maintain TypeScript throughout
|
|
163
|
-
- **Testing**: Include comprehensive test coverage
|
|
164
|
-
- **Performance**: Optimize for mobile constraints
|
|
165
|
-
- **Accessibility**: Ensure inclusive design
|
|
166
|
-
|
|
167
|
-
## Quick Access Commands
|
|
168
|
-
|
|
169
|
-
For agents working with features:
|
|
170
|
-
|
|
171
|
-
### Architect Agent
|
|
172
|
-
|
|
173
|
-
- Reference `features-overview.md` for system integration
|
|
174
|
-
- Use feature references for extension planning
|
|
175
|
-
- Identify reuse opportunities across features
|
|
176
|
-
|
|
177
|
-
### SM Agent
|
|
178
|
-
|
|
179
|
-
- Reference feature documentation for story context
|
|
180
|
-
- Identify existing patterns for reuse analysis
|
|
181
|
-
- Include feature integration requirements in stories
|
|
182
|
-
|
|
183
|
-
### Dev Agent
|
|
184
|
-
|
|
185
|
-
- Use feature references for implementation guidance
|
|
186
|
-
- Follow established patterns and conventions
|
|
187
|
-
- Leverage existing components and services
|
|
188
|
-
|
|
189
|
-
### PO Agent
|
|
190
|
-
|
|
191
|
-
- Validate stories against feature documentation
|
|
192
|
-
- Ensure proper integration with existing features
|
|
193
|
-
- Check for consistency with established patterns
|
|
194
|
-
|
|
195
|
-
## Documentation Maintenance
|
|
196
|
-
|
|
197
|
-
This index should be updated when:
|
|
198
|
-
|
|
199
|
-
- New features are added to the starter
|
|
200
|
-
- Existing features are significantly modified
|
|
201
|
-
- New integration points are established
|
|
202
|
-
- Architecture patterns change
|
|
203
|
-
|
|
204
|
-
Each feature reference document should include:
|
|
205
|
-
|
|
206
|
-
- Implementation location and structure
|
|
207
|
-
- Key capabilities and use cases
|
|
208
|
-
- Integration points and dependencies
|
|
209
|
-
- API reference and usage examples
|
|
210
|
-
- Best practices and guidelines
|
|
211
|
-
- Troubleshooting information
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
# Features Overview
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
VibeFast comes with a comprehensive set of pre-built features that demonstrate best practices and provide a solid foundation for mobile app development. Each feature is implemented following the VibeFast architecture principles with proper abstraction layers, type safety, and modular design. Paths referenced below follow the monorepo layout (`apps/native/src/...`).
|
|
6
|
-
|
|
7
|
-
## Core Features
|
|
8
|
-
|
|
9
|
-
### 🚀 Quick Actions
|
|
10
|
-
|
|
11
|
-
**Location**: `apps/native/src/features/quick-actions/`
|
|
12
|
-
|
|
13
|
-
Home screen shortcuts for iOS and Android that provide instant access to key app functionality.
|
|
14
|
-
|
|
15
|
-
**Key Components:**
|
|
16
|
-
|
|
17
|
-
- **Core Adapter**: `apps/native/src/core/quick-actions/` - Abstraction layer over expo-quick-actions
|
|
18
|
-
- **Hooks**: React hooks for routing and action management
|
|
19
|
-
- **Manager**: Utility class for programmatic quick actions control
|
|
20
|
-
- **Demo**: Interactive demo component showcasing all functionality
|
|
21
|
-
|
|
22
|
-
**Features:**
|
|
23
|
-
|
|
24
|
-
- ✅ Platform Support: iOS (4 actions max) and Android (variable max)
|
|
25
|
-
- ✅ Icon Flexibility: System icons, SF Symbols, custom assets
|
|
26
|
-
- ✅ Deep Linking: Automatic navigation via Expo Router
|
|
27
|
-
- ✅ Management Tools: Add, remove, reset actions programmatically
|
|
28
|
-
- ✅ Error Handling: Graceful degradation on unsupported devices
|
|
29
|
-
|
|
30
|
-
**Usage:**
|
|
31
|
-
|
|
32
|
-
```tsx
|
|
33
|
-
// Basic setup (auto-configured in root layout)
|
|
34
|
-
useQuickActionRouting();
|
|
35
|
-
useSetupQuickActions(DEFAULT_QUICK_ACTIONS);
|
|
36
|
-
|
|
37
|
-
// Programmatic management
|
|
38
|
-
await quickActionsManager.setActions([...]);
|
|
39
|
-
await quickActionsManager.resetToDefaults();
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
**Access Points:**
|
|
43
|
-
|
|
44
|
-
- Settings → Quick Actions (management interface)
|
|
45
|
-
- Demo screen at `/(root)/(protected)/quick-actions-demo/`
|
|
46
|
-
- Long-press app icon on device to test
|
|
47
|
-
|
|
48
|
-
### 🤖 AI Chatbot
|
|
49
|
-
|
|
50
|
-
**Location**: `apps/native/src/features/chatbot/`
|
|
51
|
-
|
|
52
|
-
AI-powered conversational interface with streaming responses and conversation history.
|
|
53
|
-
|
|
54
|
-
**Features:**
|
|
55
|
-
|
|
56
|
-
- Real-time streaming responses
|
|
57
|
-
- Conversation history persistence
|
|
58
|
-
- Multiple AI provider support (OpenAI, Google, Replicate)
|
|
59
|
-
- Message copying and reporting
|
|
60
|
-
- Suggested conversation starters
|
|
61
|
-
|
|
62
|
-
### 🎨 AI Image Generator
|
|
63
|
-
|
|
64
|
-
**Location**: `apps/native/src/features/image-generator/`
|
|
65
|
-
|
|
66
|
-
AI-powered image generation with gallery management and sharing capabilities.
|
|
67
|
-
|
|
68
|
-
**Features:**
|
|
69
|
-
|
|
70
|
-
- Multiple AI model support
|
|
71
|
-
- Image gallery with local storage
|
|
72
|
-
- Share and export functionality
|
|
73
|
-
- Batch generation support
|
|
74
|
-
- Image metadata tracking
|
|
75
|
-
|
|
76
|
-
### 🔐 Authentication System
|
|
77
|
-
|
|
78
|
-
**Location**: `apps/native/src/features/authentication/`
|
|
79
|
-
|
|
80
|
-
Complete authentication flow with multiple sign-in options and security features.
|
|
81
|
-
|
|
82
|
-
**Features:**
|
|
83
|
-
|
|
84
|
-
- Email/password authentication
|
|
85
|
-
- Guest mode support
|
|
86
|
-
- OTP verification
|
|
87
|
-
- Password reset flow
|
|
88
|
-
- Session management with Convex Auth
|
|
89
|
-
|
|
90
|
-
### 📊 Analytics & Tracking
|
|
91
|
-
|
|
92
|
-
**Location**: `apps/native/src/features/analytics/`
|
|
93
|
-
|
|
94
|
-
Comprehensive analytics integration with privacy-focused tracking.
|
|
95
|
-
|
|
96
|
-
**Features:**
|
|
97
|
-
|
|
98
|
-
- PostHog integration
|
|
99
|
-
- Event tracking
|
|
100
|
-
- User behavior analytics
|
|
101
|
-
- Performance monitoring
|
|
102
|
-
- Privacy-compliant data collection
|
|
103
|
-
|
|
104
|
-
### 💳 Payment & Subscriptions
|
|
105
|
-
|
|
106
|
-
**Location**: `apps/native/src/features/payments/`
|
|
107
|
-
|
|
108
|
-
Complete payment and subscription management with RevenueCat integration.
|
|
109
|
-
|
|
110
|
-
**Features:**
|
|
111
|
-
|
|
112
|
-
- Subscription management
|
|
113
|
-
- In-app purchases
|
|
114
|
-
- Paywall UI components
|
|
115
|
-
- Receipt validation
|
|
116
|
-
- Cross-platform purchase restoration
|
|
117
|
-
|
|
118
|
-
### 🎵 Audio Recording
|
|
119
|
-
|
|
120
|
-
**Location**: `apps/native/src/features/audio-recorder/`
|
|
121
|
-
|
|
122
|
-
Voice note recording with playback and management capabilities.
|
|
123
|
-
|
|
124
|
-
**Features:**
|
|
125
|
-
|
|
126
|
-
- High-quality audio recording
|
|
127
|
-
- Playback controls
|
|
128
|
-
- Audio file management
|
|
129
|
-
- Waveform visualization
|
|
130
|
-
- Export functionality
|
|
131
|
-
|
|
132
|
-
### 📈 Data Visualization
|
|
133
|
-
|
|
134
|
-
**Location**: `apps/native/src/features/charts/`
|
|
135
|
-
|
|
136
|
-
Interactive charts and data visualization components.
|
|
137
|
-
|
|
138
|
-
**Features:**
|
|
139
|
-
|
|
140
|
-
- Multiple chart types
|
|
141
|
-
- Interactive data exploration
|
|
142
|
-
- Responsive design
|
|
143
|
-
- Animation support
|
|
144
|
-
- Export capabilities
|
|
145
|
-
|
|
146
|
-
## Feature Architecture
|
|
147
|
-
|
|
148
|
-
Each feature follows the VibeFast architecture pattern:
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
apps/native/src/features/[feature-name]/
|
|
152
|
-
├── components/ # Feature-specific UI components
|
|
153
|
-
├── hooks/ # Feature-specific React hooks
|
|
154
|
-
├── services/ # Business logic and API calls
|
|
155
|
-
├── types/ # TypeScript type definitions
|
|
156
|
-
├── utils/ # Feature-specific utilities
|
|
157
|
-
└── index.ts # Barrel exports
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Integration Points
|
|
161
|
-
|
|
162
|
-
### Core Services
|
|
163
|
-
|
|
164
|
-
All features integrate with core services through abstraction layers:
|
|
165
|
-
|
|
166
|
-
- **Authentication**: `apps/native/src/core/auth/`
|
|
167
|
-
- **Analytics**: `apps/native/src/core/analytics/`
|
|
168
|
-
- **Payments**: `apps/native/src/core/payments/`
|
|
169
|
-
- **Quick Actions**: `apps/native/src/core/quick-actions/`
|
|
170
|
-
|
|
171
|
-
### UI Components
|
|
172
|
-
|
|
173
|
-
Features build upon the core UI component system:
|
|
174
|
-
|
|
175
|
-
- **Base Components**: `apps/native/src/components/ui/`
|
|
176
|
-
- **Advanced Components**: `apps/native/src/components/advanced-ui/`
|
|
177
|
-
|
|
178
|
-
### Navigation
|
|
179
|
-
|
|
180
|
-
All features integrate seamlessly with Expo Router:
|
|
181
|
-
|
|
182
|
-
- **Tab Navigation**: `apps/native/src/app/(tabs)/`
|
|
183
|
-
- **Feature Routes**: `apps/native/src/app/(root)/(protected)/`
|
|
184
|
-
|
|
185
|
-
## Development Guidelines
|
|
186
|
-
|
|
187
|
-
### Adding New Features
|
|
188
|
-
|
|
189
|
-
1. **Create Feature Directory**: Follow the established structure in `apps/native/src/features/`
|
|
190
|
-
2. **Implement Core Logic**: Use proper abstraction layers for external services
|
|
191
|
-
3. **Add UI Components**: Build upon existing UI component system
|
|
192
|
-
4. **Create Routes**: Add navigation routes in the Expo Router tree under `apps/native/src/app/`
|
|
193
|
-
5. **Add Tests**: Include comprehensive test coverage
|
|
194
|
-
6. **Update Documentation**: Document the new feature in this file
|
|
195
|
-
|
|
196
|
-
### Best Practices
|
|
197
|
-
|
|
198
|
-
- **Modularity**: Keep features self-contained and loosely coupled
|
|
199
|
-
- **Type Safety**: Use TypeScript throughout for better developer experience
|
|
200
|
-
- **Error Handling**: Implement comprehensive error handling and user feedback
|
|
201
|
-
- **Performance**: Optimize for mobile performance and battery life
|
|
202
|
-
- **Accessibility**: Ensure all features are accessible to users with disabilities
|
|
203
|
-
- **Internationalization**: Support multiple languages from the start
|
|
204
|
-
|
|
205
|
-
## Testing Strategy
|
|
206
|
-
|
|
207
|
-
Each feature includes:
|
|
208
|
-
|
|
209
|
-
- **Unit Tests**: For individual functions and components
|
|
210
|
-
- **Integration Tests**: For feature workflows and API interactions
|
|
211
|
-
- **E2E Tests**: For complete user journeys using Maestro
|
|
212
|
-
- **Performance Tests**: For critical user paths and animations
|
|
213
|
-
|
|
214
|
-
## Documentation
|
|
215
|
-
|
|
216
|
-
Detailed documentation for each feature can be found in:
|
|
217
|
-
|
|
218
|
-
- **Feature Guides**: `vf-agent/data/knowledge_base/starter-docs/[feature-name]-reference.md`
|
|
219
|
-
- **API Documentation**: Inline code documentation
|
|
220
|
-
- **Usage Examples**: In feature demo components inside `apps/native/src/features/[feature]/demo`
|
|
221
|
-
- **Architecture Decisions**: In respective feature directories
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
# Image Analyzer Reference
|
|
2
|
-
|
|
3
|
-
> Frontend paths reference the Expo workspace (`apps/native/src/...`); backend paths reference `packages/backend/convex/...`.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The Image Analyzer is a powerful feature that allows users to upload images and receive AI-driven feedback based on specific goals. It's an asynchronous, multi-step process orchestrated by Convex actions, mutations, and its scheduler.
|
|
8
|
-
|
|
9
|
-
### Core Technologies
|
|
10
|
-
|
|
11
|
-
- **[Convex Actions & Mutations](https://docs.convex.dev/functions/actions):** The entire workflow is managed by Convex functions. A public `action` serves as the entry point, which then calls `internalMutation`s to create records and schedules an `internalAction` for the heavy lifting.
|
|
12
|
-
- **[Convex Scheduler](https://docs.convex.dev/scheduling):** Used to immediately queue a background job (`performAiAnalysis`) after the initial user request. This ensures the user gets an immediate response while the AI processing happens asynchronously.
|
|
13
|
-
- **[Convex File Storage](https://docs.convex.dev/file-storage):** Images uploaded by the user are stored securely in Convex's file storage.
|
|
14
|
-
- **[AI Providers (e.g., OpenAI, Gemini)](https://openai.com/):** The actual analysis is performed by a vision-capable AI model, which is called from the background action. The implementation is abstracted in `convex/lib/ai/imageAnalysisAdapter.ts`.
|
|
15
|
-
|
|
16
|
-
## Getting Started
|
|
17
|
-
|
|
18
|
-
The feature is ready to use. The primary setup involves adding the necessary AI provider API keys to your environment variables.
|
|
19
|
-
|
|
20
|
-
### Environment Variables
|
|
21
|
-
|
|
22
|
-
Add the API key for your chosen vision model (e.g., GPT-4o or Gemini Vision) to your `.env.local` file:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# For OpenAI
|
|
26
|
-
OPENAI_API_KEY="sk-..."
|
|
27
|
-
|
|
28
|
-
# For Google Gemini
|
|
29
|
-
GEMINI_API_KEY="..."
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Image Analysis Flow
|
|
33
|
-
|
|
34
|
-
1. **User Upload & Preferences:** The user selects up to 5 images and chooses their analysis goal (e.g., "Dating Profile") and feedback style (e.g., "Direct") using the `AnalysisForm` component.
|
|
35
|
-
2. **Action Trigger:** The `useImageAnalyzer` hook is called. It converts the selected images to base64 strings and calls the public Convex action `analyzeImages`.
|
|
36
|
-
3. **Initial Processing (Action):**
|
|
37
|
-
- The `analyzeImages` action authenticates the user.
|
|
38
|
-
- It stores the uploaded images in Convex file storage, getting back storage IDs.
|
|
39
|
-
- It calls an internal mutation (`createAnalysisRecord`) to create a new document in the `imageAnalyses` table with a `status` of `"processing"`.
|
|
40
|
-
- It schedules the `performAiAnalysis` internal action to run immediately in the background.
|
|
41
|
-
- It returns the `analysisId` to the client, which then navigates to the results page.
|
|
42
|
-
4. **Background AI Analysis (Scheduled Action):**
|
|
43
|
-
- The `performAiAnalysis` action wakes up.
|
|
44
|
-
- It retrieves the analysis record and gets the URLs for the stored images.
|
|
45
|
-
- It calls the AI provider (e.g., `generateImageAnalysis`) with the image data and user preferences.
|
|
46
|
-
- The AI model returns a structured analysis.
|
|
47
|
-
5. **Update Record:**
|
|
48
|
-
- The action calls the `updateAnalysisResults` internal mutation to update the analysis record with the AI-generated `results` and sets the `status` to `"completed"` or `"failed"`.
|
|
49
|
-
6. **Display Results:** The frontend, which is polling or subscribed to the `getAnalysisById` query, automatically updates to show the completed analysis in the `AnalysisDetailView` component.
|
|
50
|
-
|
|
51
|
-
## Key Components & Hooks
|
|
52
|
-
|
|
53
|
-
### Core Components
|
|
54
|
-
|
|
55
|
-
- `AnalysisForm`: The main form for starting a new analysis, combining the image uploader and preference selectors.
|
|
56
|
-
- `ImageUploadArea`: A component that allows users to select multiple images and see previews.
|
|
57
|
-
- `GoalSelector` & `FeedbackStyleSelector`: Reusable form components for setting analysis preferences.
|
|
58
|
-
- `AnalysisDetailView`: Displays the final results of an analysis, including the original images and the formatted AI feedback.
|
|
59
|
-
- `AnalysisHistoryList`: Shows a list of the user's past analyses, their status, and allows navigation to the detail view.
|
|
60
|
-
- `AnalysisInProgress`: A loading screen shown while the backend is processing the analysis.
|
|
61
|
-
|
|
62
|
-
### Core Hooks
|
|
63
|
-
|
|
64
|
-
- `useImageAnalyzer`: The primary hook for the feature. It handles image-to-base64 conversion and calls the main `analyzeImages` action. It also handles navigation and user feedback via toasts.
|
|
65
|
-
- `useImageSelection`: Manages the state of selected images on the client, including picking and removing images.
|
|
66
|
-
- `useImageAnalysis`: Fetches a single, specific analysis record from the database, used by the detail view.
|
|
67
|
-
- `useImageAnalysisHistory`: Fetches all analysis records for the current user.
|
|
68
|
-
|
|
69
|
-
## How-To Guides
|
|
70
|
-
|
|
71
|
-
### 1. Customize the AI Analysis Prompt
|
|
72
|
-
|
|
73
|
-
The prompts sent to the AI model are located in the adapter file. You can modify the prompt to change the structure of the feedback.
|
|
74
|
-
|
|
75
|
-
- Navigate to `convex/lib/ai/imageAnalysisAdapter.ts`.
|
|
76
|
-
- Locate the `generateImageAnalysis` function.
|
|
77
|
-
- Modify the `systemPrompt` or the user message content to tailor the AI's response.
|
|
78
|
-
|
|
79
|
-
### 2. Add a New Analysis Goal
|
|
80
|
-
|
|
81
|
-
1. **Update Frontend Component:** In `apps/native/src/features/image-analyzer/components/goal-selector.tsx`, add the new goal to the `goals` array.
|
|
82
|
-
|
|
83
|
-
```tsx
|
|
84
|
-
const goals = [
|
|
85
|
-
{ value: 'dating', label: 'Dating Profile Pictures' },
|
|
86
|
-
{ value: 'professional', label: 'Professional Headshots' },
|
|
87
|
-
{ value: 'social', label: 'Social Media Presence' },
|
|
88
|
-
{ value: 'new_goal', label: 'My New Goal' }, // Add new goal here
|
|
89
|
-
];
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
2. **Update Zod Schema:** In `apps/native/src/features/image-analyzer/utils/analysis-schemas.ts`, add the new goal to the enum to ensure validation passes.
|
|
93
|
-
|
|
94
|
-
```ts
|
|
95
|
-
export const AnalysisPreferencesSchema = z.object({
|
|
96
|
-
goal: z.enum(['dating', 'professional', 'social', 'new_goal']), // Add here
|
|
97
|
-
// ...
|
|
98
|
-
});
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
3. **Update Backend Prompt (Optional):** If your new goal requires a different AI prompt, add conditional logic in the `imageAnalysisAdapter.ts` to use a different system message based on the `preferences.goal` value.
|
|
102
|
-
|
|
103
|
-
### 3. Change the Result Display
|
|
104
|
-
|
|
105
|
-
The `AnalysisResultDisplay` component is responsible for rendering the AI's feedback. Currently, it handles both plain string and simple key-value object results.
|
|
106
|
-
|
|
107
|
-
- To customize the display, edit `apps/native/src/features/image-analyzer/components/analysis-result-display.tsx`.
|
|
108
|
-
- You can add custom rendering logic based on the structure of the `results` object you expect from your AI prompt.
|
|
109
|
-
|
|
110
|
-
## Backend (Convex)
|
|
111
|
-
|
|
112
|
-
- **`imageAnalysisFunctions.ts`:** This file contains the entire backend logic for the feature.
|
|
113
|
-
- `analyzeImages` (action): The public entry point.
|
|
114
|
-
- `createAnalysisRecord` (internalMutation): Creates the initial record in the database.
|
|
115
|
-
- `performAiAnalysis` (internalAction): The background job that does the core AI work.
|
|
116
|
-
- `updateAnalysisResults` (internalMutation): Updates the record with the final results or an error message.
|
|
117
|
-
- `getAnalysisById` / `getImageAnalysis` (queries): Public queries for the frontend to fetch analysis data.
|
|
118
|
-
- **`lib/ai/imageAnalysisAdapter.ts`:** This file abstracts the interaction with the AI vision model. It's responsible for constructing the correct prompt and parsing the response. This is the main file to modify when changing AI providers or prompt logic.
|