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,169 +0,0 @@
|
|
|
1
|
-
# Quiz Feature Reference
|
|
2
|
-
|
|
3
|
-
> Frontend paths reference the Expo workspace (`apps/native/src/...`); backend paths reference `packages/backend/convex/...`.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The Quiz feature is a self-contained, animated, and interactive quiz component for React Native. It's designed to be easily integrated into any part of the application to present users with a series of questions.
|
|
8
|
-
|
|
9
|
-
As of now, the Quiz feature is a **frontend-only** component. It receives its question data via props and does not automatically connect to a backend for fetching questions or saving results. This makes it highly flexible for various use cases, such as onboarding flows, surveys, or actual tests.
|
|
10
|
-
|
|
11
|
-
### Core Technologies
|
|
12
|
-
|
|
13
|
-
- **[React Native](https://reactnative.dev):** The core framework for the UI components.
|
|
14
|
-
- **[Moti](https://moti.fyi/):** A powerful animation library used for all transitions, including the progress bar, question slides, and continue button appearances.
|
|
15
|
-
- **[Expo Router](https://docs.expo.dev/router/):** Used for navigation, particularly for the back button functionality.
|
|
16
|
-
|
|
17
|
-
## Getting Started
|
|
18
|
-
|
|
19
|
-
To use the Quiz component, you need to import it and provide it with an array of question objects. The component handles all of its own internal state, including the current question, user selections, and progress.
|
|
20
|
-
|
|
21
|
-
### Basic Usage
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
import Quiz from '@/features/quiz';
|
|
25
|
-
|
|
26
|
-
const myQuestions = [
|
|
27
|
-
{
|
|
28
|
-
text: 'What is your favorite color?',
|
|
29
|
-
mode: 'manual-advance', // User must tap 'Continue'
|
|
30
|
-
options: [
|
|
31
|
-
{ id: '1', text: 'Red' },
|
|
32
|
-
{ id: '2', text: 'Blue' },
|
|
33
|
-
{ id: '3', text: 'Green' },
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
text: 'Do you prefer cats or dogs?',
|
|
38
|
-
mode: 'auto-advance', // Automatically moves to next question on select
|
|
39
|
-
options: [
|
|
40
|
-
{ id: '1', text: 'Cats' },
|
|
41
|
-
{ id: '2', text: 'Dogs' },
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
];
|
|
45
|
-
|
|
46
|
-
function MyQuizScreen() {
|
|
47
|
-
return <Quiz questions={myQuestions} />;
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Question Modes
|
|
52
|
-
|
|
53
|
-
The quiz supports two modes on a per-question basis, defined in `apps/native/src/features/quiz/config.ts`:
|
|
54
|
-
|
|
55
|
-
- `QuestionMode.AutoAdvance`: As soon as the user selects an option, the quiz automatically proceeds to the next question after a short delay.
|
|
56
|
-
- `QuestionMode.ManualAdvance`: After the user selects an option, a "Continue" button appears, and the user must tap it to proceed.
|
|
57
|
-
|
|
58
|
-
## Key Components
|
|
59
|
-
|
|
60
|
-
- `Quiz`: The main component that wraps the entire feature. It manages the overall state and renders the progress bar and the current question.
|
|
61
|
-
- `Question`: Renders a single question and its associated options.
|
|
62
|
-
- `Option`: A pressable component for a single answer choice, with built-in animation states for hover and press.
|
|
63
|
-
- `ProgressBar`: A visual indicator of the user's progress through the quiz.
|
|
64
|
-
|
|
65
|
-
## How-To Guides
|
|
66
|
-
|
|
67
|
-
### 1. Customize Animations
|
|
68
|
-
|
|
69
|
-
All animation durations and types can be configured in `apps/native/src/features/quiz/config.ts`.
|
|
70
|
-
|
|
71
|
-
```ts
|
|
72
|
-
// apps/native/src/features/quiz/config.ts
|
|
73
|
-
export const quizConfig = {
|
|
74
|
-
// ...
|
|
75
|
-
animation: {
|
|
76
|
-
duration: 500, // Change duration from 300ms to 500ms
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
You can also change the animation styles directly within the components by modifying the `from`, `animate`, and `transition` props on the `<MotiView>` and `<MotiPressable>` components.
|
|
82
|
-
|
|
83
|
-
### 2. Connect to a Convex Backend
|
|
84
|
-
|
|
85
|
-
To make the quiz dynamic, you can fetch questions from your Convex backend.
|
|
86
|
-
|
|
87
|
-
#### Step 1: Define Schema in Convex
|
|
88
|
-
|
|
89
|
-
First, define the schema for quizzes and questions in `packages/backend/convex/schema.ts`.
|
|
90
|
-
|
|
91
|
-
```ts
|
|
92
|
-
// packages/backend/convex/schema.ts
|
|
93
|
-
export default defineSchema({
|
|
94
|
-
// ... other tables
|
|
95
|
-
quizzes: defineTable({
|
|
96
|
-
name: v.string(),
|
|
97
|
-
description: v.optional(v.string()),
|
|
98
|
-
}),
|
|
99
|
-
|
|
100
|
-
questions: defineTable({
|
|
101
|
-
quizId: v.id('quizzes'),
|
|
102
|
-
text: v.string(),
|
|
103
|
-
mode: v.union(v.literal('auto-advance'), v.literal('manual-advance')),
|
|
104
|
-
}).index('by_quizId', ['quizId']),
|
|
105
|
-
|
|
106
|
-
questionOptions: defineTable({
|
|
107
|
-
questionId: v.id('questions'),
|
|
108
|
-
text: v.string(),
|
|
109
|
-
}).index('by_questionId', ['questionId']),
|
|
110
|
-
});
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
#### Step 2: Create a Convex Query
|
|
114
|
-
|
|
115
|
-
Create a new file `convex/quizzes.ts` to fetch a quiz with all its questions and options.
|
|
116
|
-
|
|
117
|
-
```ts
|
|
118
|
-
// convex/quizzes.ts
|
|
119
|
-
import { query } from './_generated/server';
|
|
120
|
-
import { v } from 'convex/values';
|
|
121
|
-
|
|
122
|
-
export const get = query({
|
|
123
|
-
args: { quizId: v.id('quizzes') },
|
|
124
|
-
handler: async (ctx, args) => {
|
|
125
|
-
const quiz = await ctx.db.get(args.quizId);
|
|
126
|
-
if (!quiz) return null;
|
|
127
|
-
|
|
128
|
-
const questions = await ctx.db
|
|
129
|
-
.query('questions')
|
|
130
|
-
.withIndex('by_quizId', (q) => q.eq('quizId', args.quizId))
|
|
131
|
-
.collect();
|
|
132
|
-
|
|
133
|
-
const questionsWithOptions = await Promise.all(
|
|
134
|
-
questions.map(async (q) => {
|
|
135
|
-
const options = await ctx.db
|
|
136
|
-
.query('questionOptions')
|
|
137
|
-
.withIndex('by_questionId', (opt) => opt.eq('questionId', q._id))
|
|
138
|
-
.collect();
|
|
139
|
-
return { ...q, options };
|
|
140
|
-
}),
|
|
141
|
-
);
|
|
142
|
-
|
|
143
|
-
return { ...quiz, questions: questionsWithOptions };
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
#### Step 3: Use the Query in Your Frontend
|
|
149
|
-
|
|
150
|
-
Finally, modify your quiz screen to use the `useQuery` hook to fetch the data.
|
|
151
|
-
|
|
152
|
-
```tsx
|
|
153
|
-
import Quiz from '@/features/quiz';
|
|
154
|
-
import { useQuery } from 'convex/react';
|
|
155
|
-
import { api } from 'convex/_generated/api';
|
|
156
|
-
import { FullScreenLoader } from '@/components/ui';
|
|
157
|
-
|
|
158
|
-
function MyDynamicQuizScreen() {
|
|
159
|
-
// Assume you get quizId from router params or state
|
|
160
|
-
const quizId = 'your_quiz_id_here';
|
|
161
|
-
const quizData = useQuery(api.quizzes.get, { quizId });
|
|
162
|
-
|
|
163
|
-
if (!quizData) {
|
|
164
|
-
return <FullScreenLoader />;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return <Quiz questions={quizData.questions} />;
|
|
168
|
-
}
|
|
169
|
-
```
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
# Settings Feature Reference
|
|
2
|
-
|
|
3
|
-
> Frontend paths reference the Expo workspace (`apps/native/src/...`).
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The Settings feature provides a collection of reusable components to quickly and easily build a settings screen for your application. It includes pre-built components for common settings like changing the app theme and language, and is designed to be easily extendable.
|
|
8
|
-
|
|
9
|
-
### Core Technologies
|
|
10
|
-
|
|
11
|
-
- **[React Context](https://react.dev/learn/passing-data-deeply-with-context):** The theme and language items hook into the app-wide context (`useSelectedTheme`, `useSelectedLanguage`) to manage and persist user preferences.
|
|
12
|
-
- **[i18next](https://www.i18next.com/):** The `LanguageItem` component works directly with the app's localization system to change the language on the fly.
|
|
13
|
-
- **Component-Based Architecture:** The feature is composed of small, reusable components (`Item`, `ItemsContainer`) that can be combined to build a visually consistent settings screen.
|
|
14
|
-
|
|
15
|
-
## Getting Started
|
|
16
|
-
|
|
17
|
-
The settings components are designed to be dropped into any screen. The main settings screen is located at `apps/native/src/app/(tabs)/settings.tsx`, where you can see these components in action.
|
|
18
|
-
|
|
19
|
-
### Basic Usage
|
|
20
|
-
|
|
21
|
-
To build a settings screen, you combine `ItemsContainer` and `Item` components.
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
import { ScrollView, View } from 'react-native';
|
|
25
|
-
import {
|
|
26
|
-
ItemsContainer,
|
|
27
|
-
Item,
|
|
28
|
-
ThemeItem,
|
|
29
|
-
LanguageItem,
|
|
30
|
-
} from '@/features/settings';
|
|
31
|
-
import { useAuth } from '@/features/authentication'; // Assuming useAuth has a signOut method
|
|
32
|
-
|
|
33
|
-
function SettingsScreen() {
|
|
34
|
-
const { signOut } = useAuth();
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<ScrollView>
|
|
38
|
-
<View className="p-4">
|
|
39
|
-
<ItemsContainer title="Appearance">
|
|
40
|
-
<ThemeItem />
|
|
41
|
-
<LanguageItem />
|
|
42
|
-
</ItemsContainer>
|
|
43
|
-
|
|
44
|
-
<ItemsContainer title="Account">
|
|
45
|
-
<Item
|
|
46
|
-
text="settings.account.edit_profile"
|
|
47
|
-
onPress={() => {
|
|
48
|
-
/* Navigate to profile edit */
|
|
49
|
-
}}
|
|
50
|
-
/>
|
|
51
|
-
<Item text="settings.account.logout" onPress={signOut} />
|
|
52
|
-
</ItemsContainer>
|
|
53
|
-
</View>
|
|
54
|
-
</ScrollView>
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Key Components
|
|
60
|
-
|
|
61
|
-
- **`ItemsContainer`:** A styled wrapper component that groups related settings items. It provides a border and an optional title for the section.
|
|
62
|
-
|
|
63
|
-
- **`Item`:** The base component for a single row in a settings list. It can display a label, a value, an icon, and can handle press events to navigate or trigger actions.
|
|
64
|
-
|
|
65
|
-
- **`ThemeItem`:** A specialized `Item` component that is pre-wired to the app's theme context. When pressed, it opens a modal allowing the user to select between `Light`, `Dark`, and `System` themes. The selection is persisted across the app.
|
|
66
|
-
|
|
67
|
-
- **`LanguageItem`:** A specialized `Item` component that is pre-wired to the app's localization context. When pressed, it opens a modal for the user to switch between available languages (e.g., English and Arabic).
|
|
68
|
-
|
|
69
|
-
## How-To Guides
|
|
70
|
-
|
|
71
|
-
### 1. Add a New Settings Item
|
|
72
|
-
|
|
73
|
-
To add a new, simple settings item (e.g., a link to a "Terms of Service" screen), use the base `Item` component within an `ItemsContainer`.
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
import { useRouter } from 'expo-router';
|
|
77
|
-
|
|
78
|
-
// ... inside your settings screen component
|
|
79
|
-
const router = useRouter();
|
|
80
|
-
|
|
81
|
-
<ItemsContainer title="Legal">
|
|
82
|
-
<Item
|
|
83
|
-
text="settings.legal.terms_of_service" // Add this key to your translation files
|
|
84
|
-
onPress={() => router.push('/terms')}
|
|
85
|
-
/>
|
|
86
|
-
<Item
|
|
87
|
-
text="settings.legal.privacy_policy"
|
|
88
|
-
onPress={() => router.push('/privacy')}
|
|
89
|
-
/>
|
|
90
|
-
</ItemsContainer>;
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### 2. Add a New Selectable Option (e.g., Notification Sound)
|
|
94
|
-
|
|
95
|
-
To create a new settings item with multiple choices that opens a modal, you can follow the pattern used by `ThemeItem` and `LanguageItem`.
|
|
96
|
-
|
|
97
|
-
1. **Create a Context/Hook:** First, you need a way to manage the state of the setting globally. This is often done with `React.createContext` and `useContext` or a state management library like Zustand.
|
|
98
|
-
|
|
99
|
-
```ts
|
|
100
|
-
// e.g., in apps/native/src/core/notifications/sound-context.ts
|
|
101
|
-
const { useNotificationSound, NotificationSoundProvider } = // ... your implementation
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
2. **Create a New Component:** Create a new file, e.g., `NotificationSoundItem.tsx`.
|
|
105
|
-
|
|
106
|
-
```tsx
|
|
107
|
-
// apps/native/src/features/settings/components/notification-sound-item.tsx
|
|
108
|
-
import { useModal, Options } from '@/components/ui';
|
|
109
|
-
import { useNotificationSound } from '@/core/notifications/sound-context';
|
|
110
|
-
|
|
111
|
-
export function NotificationSoundItem() {
|
|
112
|
-
const { sound, setSound } = useNotificationSound();
|
|
113
|
-
const modal = useModal();
|
|
114
|
-
|
|
115
|
-
const sounds = [
|
|
116
|
-
{ label: 'Default', value: 'default' },
|
|
117
|
-
{ label: 'Chime', value: 'chime' },
|
|
118
|
-
{ label: 'None', value: 'none' },
|
|
119
|
-
];
|
|
120
|
-
|
|
121
|
-
const onSelect = (option) => {
|
|
122
|
-
setSound(option.value);
|
|
123
|
-
modal.dismiss();
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const selectedSound = sounds.find((s) => s.value === sound);
|
|
127
|
-
|
|
128
|
-
return (
|
|
129
|
-
<>
|
|
130
|
-
<Item
|
|
131
|
-
text="settings.notifications.sound"
|
|
132
|
-
value={selectedSound?.label}
|
|
133
|
-
onPress={modal.present}
|
|
134
|
-
/>
|
|
135
|
-
<Options
|
|
136
|
-
ref={modal.ref}
|
|
137
|
-
options={sounds}
|
|
138
|
-
onSelect={onSelect}
|
|
139
|
-
value={sound}
|
|
140
|
-
/>
|
|
141
|
-
</>
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
3. **Use the Component:** Add your new `<NotificationSoundItem />` to your settings screen.
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
# Technology Stack
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This document provides a comprehensive overview of the key technologies, libraries, and services used in the VibeFast project. This is the single source of truth for the project's technical stack.
|
|
6
|
-
|
|
7
|
-
### Core Platform
|
|
8
|
-
|
|
9
|
-
| Technology | Version | Purpose | Rationale |
|
|
10
|
-
| :--------------- | :------- | :------------------------------------------------------ | :----------------------------------------------------------------------------- |
|
|
11
|
-
| **React Native** | 0.79.5 | The core framework for building the mobile application. | Enables cross-platform development for iOS and Android from a single codebase. |
|
|
12
|
-
| **Expo** | ~53.0.22 | The platform for building and deploying the app. | Simplifies the development workflow, build process, and updates. |
|
|
13
|
-
| **TypeScript** | ^5.8.3 | The primary programming language for the entire stack. | Provides strong typing to reduce errors and improve developer experience. |
|
|
14
|
-
| **React** | 19.0.0 | The core React library for building user interfaces. | Foundation for React Native and component-based architecture. |
|
|
15
|
-
|
|
16
|
-
### Frontend
|
|
17
|
-
|
|
18
|
-
| Technology | Version | Purpose | Rationale |
|
|
19
|
-
| :-------------------------- | :------ | :----------------------------------------------- | :----------------------------------------------------------------------------- |
|
|
20
|
-
| **Expo Router** | ~5.1.5 | File-based routing and navigation. | Offers a modern, web-like routing experience for native apps. |
|
|
21
|
-
| **NativeWind** | ^4.1.21 | Utility-first styling (Tailwind CSS for Native). | Allows for rapid and consistent UI development with a proven styling paradigm. |
|
|
22
|
-
| **TailwindCSS** | 3.4.4 | Core CSS framework for NativeWind. | Industry-standard utility-first CSS framework for consistent styling. |
|
|
23
|
-
| **Zustand** | ^5.0.5 | Global state management. | A minimal and unopinionated state management solution, easy for AI to use. |
|
|
24
|
-
| **React Hook Form** | ^7.53.0 | Form state management and validation. | Simplifies complex form logic and integrates seamlessly with Zod. |
|
|
25
|
-
| **Zod** | ^3.23.8 | Schema declaration and validation. | Provides robust, type-safe validation for forms and API data. |
|
|
26
|
-
| **React Native Reanimated** | ~3.17.5 | High-performance animations. | Powers smooth, fluid animations for a polished user experience. |
|
|
27
|
-
| **Moti** | ^0.29.0 | Animation library built on Reanimated. | Provides declarative animations with a simple API for UI transitions. |
|
|
28
|
-
| **Lottie** | 7.2.2 | Renders high-quality animations from JSON files. | Used for engaging onboarding and loading sequences. |
|
|
29
|
-
| **@gorhom/bottom-sheet** | ^5.0.5 | A performant bottom sheet component. | Provides a native-like, customizable bottom sheet for modals and menus. |
|
|
30
|
-
| **@tanstack/react-query** | ^5.52.1 | Server state management and caching. | Handles data fetching, caching, and synchronization with the backend. |
|
|
31
|
-
|
|
32
|
-
### Backend (Convex)
|
|
33
|
-
|
|
34
|
-
| Technology | Version | Purpose | Rationale |
|
|
35
|
-
| :--------------------- | :------ | :------------------------------------- | :-------------------------------------------------------------------------------- |
|
|
36
|
-
| **Convex** | ^1.25.2 | Full-stack backend platform. | Provides a real-time database, serverless functions, and file storage in one. |
|
|
37
|
-
| **@convex-dev/auth** | ^0.0.87 | Authentication and session management. | A dedicated auth library for Convex that simplifies user management and security. |
|
|
38
|
-
| **Resend** | ^4.6.0 | Email delivery service. | Used for sending transactional emails like OTPs and password resets. |
|
|
39
|
-
| **@convex-dev/resend** | ^0.1.6 | Convex integration for Resend. | Provides seamless integration between Convex backend and Resend email service. |
|
|
40
|
-
| **Lucia** | ^3.2.2 | Authentication library. | Provides additional auth utilities and session management capabilities. |
|
|
41
|
-
| **bcryptjs** | ^3.0.2 | Password hashing library. | Secure password hashing for user authentication. |
|
|
42
|
-
|
|
43
|
-
### AI & Machine Learning
|
|
44
|
-
|
|
45
|
-
| Technology | Version | Purpose | Rationale |
|
|
46
|
-
| :------------------------ | :------ | :---------------------------------------------- | :-------------------------------------------------------------------------- |
|
|
47
|
-
| **Vercel AI SDK** | ^4.3.17 | A library for building AI-powered applications. | Provides hooks (`useChat`) and utilities for streaming AI responses. |
|
|
48
|
-
| **@ai-sdk/openai** | ^1.3.23 | OpenAI integration for AI SDK. | Provides access to GPT models for text generation and analysis. |
|
|
49
|
-
| **@ai-sdk/google** | ^1.2.22 | Google AI integration for AI SDK. | Enables integration with Google's Gemini models for text and multimodal AI. |
|
|
50
|
-
| **@ai-sdk/replicate** | ^0.2.8 | Replicate integration for AI SDK. | Provides access to various AI models hosted on Replicate platform. |
|
|
51
|
-
| **@ai-sdk/react** | ^1.2.12 | React hooks for AI SDK. | Provides React-specific hooks like `useChat` for AI interactions. |
|
|
52
|
-
| **@google/generative-ai** | ^0.24.1 | Google's Generative AI library. | Direct integration with Google's generative AI models and services. |
|
|
53
|
-
|
|
54
|
-
### Real-time Communication & Voice
|
|
55
|
-
|
|
56
|
-
| Technology | Version | Purpose | Rationale |
|
|
57
|
-
| :-------------------------------------- | :------- | :--------------------------------------------- | :----------------------------------------------------------------------- |
|
|
58
|
-
| **LiveKit React Native** | ^2.9.1 | Real-time audio/video communication framework. | Provides high-quality, low-latency real-time communication capabilities. |
|
|
59
|
-
| **LiveKit React Native WebRTC** | ^137.0.1 | WebRTC implementation for LiveKit. | Native WebRTC support for peer-to-peer audio/video streaming. |
|
|
60
|
-
| **LiveKit Client** | ^2.15.5 | JavaScript client for LiveKit. | Core client library for interacting with LiveKit servers. |
|
|
61
|
-
| **LiveKit React Native Expo Plugin** | ^1.0.1 | Expo plugin for LiveKit integration. | Seamless integration of LiveKit with Expo projects. |
|
|
62
|
-
| **@config-plugins/react-native-webrtc** | ^12.0.0 | WebRTC configuration plugin. | Configures WebRTC for React Native applications. |
|
|
63
|
-
| **ElevenLabs React Native** | ^0.2.1 | Voice synthesis and text-to-speech. | High-quality AI-powered voice generation for natural speech synthesis. |
|
|
64
|
-
|
|
65
|
-
### Testing
|
|
66
|
-
|
|
67
|
-
| Technology | Version | Purpose | Rationale |
|
|
68
|
-
| :------------------------------- | :------ | :-------------------------------- | :---------------------------------------------------------------------------- |
|
|
69
|
-
| **Jest** | ^29.7.0 | The primary testing framework. | A widely-adopted and robust framework for unit and integration tests. |
|
|
70
|
-
| **React Native Testing Library** | ^12.7.2 | A library for testing components. | Encourages testing practices that resemble how users interact with the app. |
|
|
71
|
-
| **Vitest** | ^3.1.4 | Fast unit test framework. | Modern testing framework for backend Convex functions with fast execution. |
|
|
72
|
-
| **Convex Test** | ^0.0.37 | Testing utilities for Convex. | Provides testing helpers and mocks specifically for Convex backend functions. |
|
|
73
|
-
| **Jest Expo** | ~53.0.7 | Jest preset for Expo projects. | Configures Jest to work seamlessly with Expo and React Native environment. |
|
|
74
|
-
|
|
75
|
-
### Tooling & CI/CD
|
|
76
|
-
|
|
77
|
-
| Technology | Version | Purpose | Rationale |
|
|
78
|
-
| :--------------------------- | :------ | :---------------------- | :-------------------------------------------------------------------- |
|
|
79
|
-
| **pnpm** | 10.12.3 | Package manager. | Fast and disk-space efficient, managing dependencies in the monorepo. |
|
|
80
|
-
| **ESLint** | ^9.28.0 | Code linting. | Enforces code quality and consistency across the project. |
|
|
81
|
-
| **Prettier** | ^3.3.3 | Code formatting. | Ensures a consistent code style automatically. |
|
|
82
|
-
| **Husky** | ^9.1.5 | Git hooks. | Automates pre-commit checks for code quality and testing. |
|
|
83
|
-
| **Commitlint** | ^19.2.2 | Commit message linting. | Enforces conventional commit message format for better git history. |
|
|
84
|
-
| **Cross-env** | ^7.0.3 | Environment variables. | Enables cross-platform environment variable setting in scripts. |
|
|
85
|
-
| **@dev-plugins/react-query** | ^0.0.7 | React Query dev tools. | Development tools for debugging React Query operations. |
|
|
86
|
-
|
|
87
|
-
### Development Tools
|
|
88
|
-
|
|
89
|
-
| Technology | Version | Purpose | Rationale |
|
|
90
|
-
| :----------- | :------ | :------------------------- | :--------------------------------------------------------------- |
|
|
91
|
-
| **Expo CLI** | Latest | Expo development tools. | Essential tooling for Expo project development and deployment. |
|
|
92
|
-
| **EAS CLI** | Latest | Expo Application Services. | Cloud-based build and deployment services for Expo applications. |
|
|
93
|
-
| **Maestro** | Latest | Mobile UI testing. | End-to-end testing framework for mobile applications. |
|
|
94
|
-
|
|
95
|
-
### Additional Libraries & Utilities
|
|
96
|
-
|
|
97
|
-
| Technology | Version | Purpose | Rationale |
|
|
98
|
-
| :---------------------------------------- | :------------ | :------------------------------------------ | :------------------------------------------------------------------- |
|
|
99
|
-
| **Expo Audio** | ~0.4.9 | Audio playback and recording. | Provides cross-platform audio functionality. |
|
|
100
|
-
| **Expo Video** | ~2.2.2 | Video playback and processing. | Native video player with advanced features. |
|
|
101
|
-
| **Expo Image** | ~2.4.0 | Advanced image display and caching. | High-performance image component with caching and optimization. |
|
|
102
|
-
| **Expo Camera** | ~16.1.11 | Camera access and photo/video capture. | Native camera functionality for iOS and Android. |
|
|
103
|
-
| **Expo Image Picker** | ~16.1.4 | Image and video selection from gallery. | Access to device photo library and camera roll. |
|
|
104
|
-
| **Expo Media Library** | ~17.1.7 | Media library access and management. | Full access to device's media library. |
|
|
105
|
-
| **Expo File System** | ~18.1.11 | File system operations. | Read/write files, manage directories, and handle file operations. |
|
|
106
|
-
| **Expo Notifications** | ~0.31.4 | Push notifications and local notifications. | Comprehensive notification system for iOS and Android. |
|
|
107
|
-
| **Expo Secure Store** | ~14.2.4 | Secure key-value storage. | Encrypted storage for sensitive data like tokens and keys. |
|
|
108
|
-
| **Expo Auth Session** | ~6.2.1 | OAuth and authentication flows. | Handles authentication with various OAuth providers. |
|
|
109
|
-
| **Expo Web Browser** | ~14.2.0 | In-app web browser. | Open web content within the app using native browsers. |
|
|
110
|
-
| **Expo Linear Gradient** | ~14.1.5 | Linear gradient backgrounds. | Create smooth color gradients for UI elements. |
|
|
111
|
-
| **Expo Blur** | ~14.1.5 | Blur effects and background blur. | Add blur effects to components and backgrounds. |
|
|
112
|
-
| **Expo Haptics** | ~14.1.4 | Haptic feedback. | Provide tactile feedback to user interactions. |
|
|
113
|
-
| **Expo Device** | ~7.1.4 | Device information and capabilities. | Access device-specific information and features. |
|
|
114
|
-
| **Expo Application** | ~6.1.6 | Application metadata and state. | Get information about the app and its current state. |
|
|
115
|
-
| **Expo Constants** | ~17.1.6 | App constants and configuration. | Access app configuration and system constants. |
|
|
116
|
-
| **Expo Linking** | ~7.1.5 | Deep linking and URL handling. | Handle deep links and external URL schemes. |
|
|
117
|
-
| **Expo Localization** | ~16.1.5 | Localization and internationalization. | Access device locale and localization settings. |
|
|
118
|
-
| **Expo Splash Screen** | ~0.30.9 | Custom splash screen management. | Control the appearance and behavior of the splash screen. |
|
|
119
|
-
| **Expo Status Bar** | ~2.2.3 | Status bar customization. | Customize the appearance of the device status bar. |
|
|
120
|
-
| **Expo Store Review** | ~8.1.5 | App store review prompts. | Request app reviews from users in the app stores. |
|
|
121
|
-
| **Expo System UI** | ~5.0.11 | System UI customization. | Control system UI elements like navigation bars. |
|
|
122
|
-
| **Expo Updates** | ~0.28.17 | Over-the-air updates. | Enable OTA updates without app store submissions. |
|
|
123
|
-
| **Expo Crypto** | ~14.1.5 | Cryptographic functions. | Access to native cryptographic APIs. |
|
|
124
|
-
| **Expo Dev Client** | ~5.2.1 | Development client for Expo. | Enhanced development experience with Expo. |
|
|
125
|
-
| **Expo Modules** | Various | Native functionality access. | Provides access to device features like camera, file system, etc. |
|
|
126
|
-
| **React Native MMKV** | ~3.1.0 | High-performance key-value storage. | Fast, efficient local storage solution for app data. |
|
|
127
|
-
| **React Native Gesture Handler** | ~2.24.0 | Advanced gesture recognition. | Enables complex touch interactions and gestures. |
|
|
128
|
-
| **React Native Screens** | ^4.11.1 | Native screen management. | Optimizes navigation performance with native screen components. |
|
|
129
|
-
| **React Native SVG** | ~15.11.2 | SVG rendering support. | Enables scalable vector graphics in React Native applications. |
|
|
130
|
-
| **Lucide React Native** | ^0.525.0 | Icon library. | Comprehensive icon set with React Native compatibility. |
|
|
131
|
-
| **React Native Flash Message** | ^0.4.2 | Toast notifications. | User-friendly notification system for app feedback. |
|
|
132
|
-
| **Sonner Native** | ^0.21.1 | Modern toast notifications. | Beautiful, customizable toast notifications for React Native. |
|
|
133
|
-
| **i18next** | ^23.14.0 | Internationalization framework. | Comprehensive i18n solution for multi-language support. |
|
|
134
|
-
| **React i18next** | ^15.0.1 | React bindings for i18next. | React-specific hooks and components for internationalization. |
|
|
135
|
-
| **PostHog React Native** | ^4.2.1 | Product analytics. | User behavior tracking and product analytics platform. |
|
|
136
|
-
| **PostHog React Native Session Replay** | ^1.1.1 | Session recording and replay. | Record and replay user sessions for debugging and analytics. |
|
|
137
|
-
| **Sentry React Native** | ~6.14.0 | Error tracking and monitoring. | Real-time error tracking and performance monitoring. |
|
|
138
|
-
| **React Native Purchases** | ^8.11.9 | In-app purchase management. | Handles subscription and purchase logic with RevenueCat integration. |
|
|
139
|
-
| **React Native Purchases UI** | ^8.11.9 | Purchase UI components. | Pre-built UI components for in-app purchases. |
|
|
140
|
-
| **Expo Quick Actions** | ^5.0.0 | Home screen quick actions. | Provides iOS and Android home screen shortcuts for quick app access. |
|
|
141
|
-
| **@shopify/flash-list** | 1.7.6 | High-performance list component. | Memory-efficient list component for large datasets. |
|
|
142
|
-
| **@shopify/react-native-skia** | v2.0.0-next.4 | 2D graphics and animations. | Powerful 2D graphics library for React Native. |
|
|
143
|
-
| **React Native Animated Glow** | ^2.0.0 | Glow animation effects. | Add glow effects to components with animations. |
|
|
144
|
-
| **React Native Animated Rolling Numbers** | ^2.0.0 | Animated number counters. | Smooth animated number transitions and counters. |
|
|
145
|
-
| **React Native CSS Interop** | ^0.1.22 | CSS interoperability. | Bridge between CSS and React Native styling. |
|
|
146
|
-
| **React Native Keyboard Controller** | ^1.17.4 | Keyboard interaction control. | Advanced keyboard handling and animations. |
|
|
147
|
-
| **React Native Restart** | 0.0.27 | App restart functionality. | Programmatically restart the React Native app. |
|
|
148
|
-
| **@bacons/apple-targets** | ^3.0.2 | Apple-specific build targets. | Support for Apple-specific build configurations. |
|
|
149
|
-
| **@expo-google-fonts/plus-jakarta-sans** | ^0.4.1 | Google Fonts integration. | Easy integration of Google Fonts in Expo apps. |
|
|
150
|
-
| **@expo/metro-runtime** | ^5.0.4 | Metro bundler runtime. | Enhanced Metro bundler integration for Expo. |
|
|
151
|
-
| **@expo/vector-icons** | ^14.1.0 | Vector icon library. | Comprehensive collection of vector icons. |
|
|
152
|
-
| **@react-native-community/netinfo** | 11.4.1 | Network state information. | Monitor network connectivity and state. |
|
|
153
|
-
| **React Error Boundary** | ^4.0.13 | Error boundary component. | Graceful error handling and fallback UI. |
|
|
154
|
-
| **Tailwind Merge** | ^3.3.1 | Tailwind CSS class merging. | Intelligently merge Tailwind CSS classes. |
|
|
155
|
-
| **Tailwind Variants** | ^0.2.1 | Tailwind CSS variant utilities. | Create variant-based component styles with Tailwind. |
|
|
156
|
-
| **D3 Shape** | ^3.2.0 | Data visualization shapes. | Mathematical functions for data visualization. |
|
|
157
|
-
| **Lodash Memoize** | ^4.1.2 | Function memoization. | Optimize function performance with memoization. |
|
|
158
|
-
|
|
159
|
-
---
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
# Tracker App Feature Reference
|
|
2
|
-
|
|
3
|
-
> Frontend paths reference the Expo workspace (`apps/native/src/...`); backend paths reference `packages/backend/convex/...` when persisting data.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The Tracker App is a visually-rich, **frontend-only** demonstration of a calorie and macronutrient tracking application. It serves as an excellent example of how to build a complex, animated, and component-based UI within the VibeFast starter kit. It showcases custom progress indicators, animated numbers, and a well-structured card-based layout.
|
|
8
|
-
|
|
9
|
-
**Important:** As of now, this feature is a UI demonstration. It is not connected to a backend, and all data displayed on the screen is hardcoded within the components.
|
|
10
|
-
|
|
11
|
-
### Core Technologies
|
|
12
|
-
|
|
13
|
-
- **[React Native](https://reactnative.dev):** The core framework for all UI components.
|
|
14
|
-
- **[Reanimated 2](https://docs.swmansion.com/react-native-reanimated/):** Used extensively for the animations, including the `CircularProgress` and `AnimatedNumber` components.
|
|
15
|
-
- **[React Native SVG](https://github.com/react-native-svg/react-native-svg):** Used as the foundation for the `CircularProgress` component.
|
|
16
|
-
- **[Component-Based Architecture](https://react.dev/learn/thinking-in-react):** The screen is composed of many small, reusable components found in `apps/native/src/features/tracker-app/components/`.
|
|
17
|
-
|
|
18
|
-
## Getting Started
|
|
19
|
-
|
|
20
|
-
The main screen for this feature is located at `apps/native/src/features/tracker-app/app/index.tsx`. You can navigate to this screen to see the complete UI in action. Since it's a frontend-only demo, no additional setup is required.
|
|
21
|
-
|
|
22
|
-
## Key Components
|
|
23
|
-
|
|
24
|
-
This feature is an excellent showcase of how to build custom UI components.
|
|
25
|
-
|
|
26
|
-
- **`CalorieCard`:** A large card that displays the primary metric (e.g., calories left) and features a prominent `CircularProgress` indicator.
|
|
27
|
-
- **`MacroCard`:** Smaller cards for displaying secondary metrics like protein, carbs, and fat. Each card also contains its own `CircularProgress` indicator.
|
|
28
|
-
- **`CircularProgress`:** A highly reusable component that renders an animated circular progress bar. It is built with SVG and Reanimated and can be customized for size, color, and stroke width.
|
|
29
|
-
- **`AnimatedNumber`:** A component that animates a number rolling up to its final value, providing a dynamic feel to data presentation.
|
|
30
|
-
- **`WeekCalendar`:** A simple component to display a weekly calendar for date selection.
|
|
31
|
-
- **`PromoBanner` & `RecentlyLogged`:** Examples of other card-based UI elements that can be used to build a dashboard.
|
|
32
|
-
|
|
33
|
-
## How-To Guides
|
|
34
|
-
|
|
35
|
-
### 1. Customize Component Appearances
|
|
36
|
-
|
|
37
|
-
All components are styled using Tailwind CSS classes directly in the files. You can easily change colors, sizes, and spacing by editing the class strings.
|
|
38
|
-
|
|
39
|
-
For example, to change the color of the progress bar in the `CalorieCard`:
|
|
40
|
-
|
|
41
|
-
**File to Edit:** `apps/native/src/features/tracker-app/components/calorie-card.tsx`
|
|
42
|
-
|
|
43
|
-
```tsx
|
|
44
|
-
// ...
|
|
45
|
-
<CircularProgress
|
|
46
|
-
// ...
|
|
47
|
-
color={theme.colors.accent} // Change from theme.colors.primary
|
|
48
|
-
// ...
|
|
49
|
-
/>
|
|
50
|
-
// ...
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### 2. Connect the Tracker to a Convex Backend
|
|
54
|
-
|
|
55
|
-
To turn this UI demonstration into a functional application, you need to connect it to a backend to fetch and store user data.
|
|
56
|
-
|
|
57
|
-
#### Step 1: Define Schema in Convex
|
|
58
|
-
|
|
59
|
-
Define the necessary tables in `convex/schema.ts` to store daily tracking data.
|
|
60
|
-
|
|
61
|
-
```ts
|
|
62
|
-
// convex/schema.ts
|
|
63
|
-
export default defineSchema({
|
|
64
|
-
// ... other tables
|
|
65
|
-
dailyEntries: defineTable({
|
|
66
|
-
userId: v.id('users'),
|
|
67
|
-
date: v.string(), // e.g., "2024-12-25"
|
|
68
|
-
calories: v.number(),
|
|
69
|
-
protein: v.number(),
|
|
70
|
-
carbs: v.number(),
|
|
71
|
-
fat: v.number(),
|
|
72
|
-
}).index('by_user_and_date', ['userId', 'date']),
|
|
73
|
-
|
|
74
|
-
loggedFoods: defineTable({
|
|
75
|
-
userId: v.id('users'),
|
|
76
|
-
entryId: v.id('dailyEntries'),
|
|
77
|
-
name: v.string(),
|
|
78
|
-
calories: v.number(),
|
|
79
|
-
}).index('by_entry', ['entryId']),
|
|
80
|
-
});
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
#### Step 2: Create Convex Queries and Mutations
|
|
84
|
-
|
|
85
|
-
Create a new file `convex/tracking.ts` with functions to get and update a user's daily entry.
|
|
86
|
-
|
|
87
|
-
```ts
|
|
88
|
-
// convex/tracking.ts
|
|
89
|
-
import { query, mutation } from './_generated/server';
|
|
90
|
-
import { v } from 'convex/values';
|
|
91
|
-
|
|
92
|
-
// Get the entry for a specific day
|
|
93
|
-
export const getDailyEntry = query({
|
|
94
|
-
args: { date: v.string() },
|
|
95
|
-
handler: async (ctx, args) => {
|
|
96
|
-
const userId = (await ctx.auth.getUserIdentity())?.subject;
|
|
97
|
-
if (!userId) return null;
|
|
98
|
-
|
|
99
|
-
return await ctx.db
|
|
100
|
-
.query('dailyEntries')
|
|
101
|
-
.withIndex('by_user_and_date', (q) =>
|
|
102
|
-
q.eq('userId', userId).eq('date', args.date),
|
|
103
|
-
)
|
|
104
|
-
.first();
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
// Add a new food item
|
|
109
|
-
export const logFood = mutation({
|
|
110
|
-
// ... implementation to add a food and update the daily entry ...
|
|
111
|
-
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
#### Step 3: Use the Query in the Frontend
|
|
115
|
-
|
|
116
|
-
Modify the main screen component to fetch data from Convex instead of using hardcoded values.
|
|
117
|
-
|
|
118
|
-
**File to Edit:** `apps/native/src/features/tracker-app/app/index.tsx`
|
|
119
|
-
|
|
120
|
-
```tsx
|
|
121
|
-
import { useQuery } from 'convex/react';
|
|
122
|
-
import { api } from 'convex/_generated/api';
|
|
123
|
-
import { FullScreenLoader } from '@/components/ui';
|
|
124
|
-
|
|
125
|
-
export default function HomeScreen() {
|
|
126
|
-
const theme = useThemeConfig();
|
|
127
|
-
const today = new Date().toISOString().split('T')[0]; // Get date as "YYYY-MM-DD"
|
|
128
|
-
|
|
129
|
-
const dailyData = useQuery(api.tracking.getDailyEntry, { date: today });
|
|
130
|
-
|
|
131
|
-
// You would show a loader while dailyData is undefined
|
|
132
|
-
if (dailyData === undefined) {
|
|
133
|
-
return <FullScreenLoader />;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// You might have a default state if dailyData is null (no entry for today)
|
|
137
|
-
const calories = dailyData?.calories ?? 2000;
|
|
138
|
-
const progress = dailyData ? (dailyData.calories / 2000) * 100 : 0;
|
|
139
|
-
|
|
140
|
-
return (
|
|
141
|
-
<SafeAreaView /* ... */>
|
|
142
|
-
<ScrollView /* ... */>
|
|
143
|
-
{/* ... */}
|
|
144
|
-
<CalorieCard calories={calories} progress={progress} />
|
|
145
|
-
{/* ... other components using data from dailyData ... */}
|
|
146
|
-
</ScrollView>
|
|
147
|
-
</SafeAreaView>
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
```
|