feat(analytics): migrate from Firebase Analytics to Amplitude#232
Conversation
* docs(analytics): add Amplitude migration implementation plan * chore(deps): replace Firebase Analytics with Amplitude SDK - Remove @react-native-firebase/analytics - Remove @react-native-firebase/app - Remove firebase - Add @amplitude/analytics-react-native * feat(analytics): update types for Amplitude with Title Case events - Change event values to Title Case (Amplitude convention) - Add 17 new events for comprehensive tracking (37 total) - Add new user properties (onboarding_completed, task_streak_current, etc.) - Simplify AnalyticsConfig to single apiKey - Add StepsCompletedBucket type - Support string arrays in EventParamValue * refactor(analytics): simplify utils for Amplitude - Remove Platform import (no longer needed) - Update shouldInitializeAnalytics to check AMPLITUDE_API_KEY - Add calculateStepsCompletedBucket helper - Update tests for new behavior * feat(analytics): implement Amplitude SDK for native platforms - Replace Firebase with Amplitude SDK - Add amplitude mock to jest.setup.js - Update native platform implementation - Use Identify class for user properties * fix(analytics): add error handling and use constant for screen view - Add try-catch to setUserPropertiesPlatform() for robustness - Use AnalyticsEvents.SCREEN_VIEWED instead of hardcoded string - Add JSDoc param documentation to trackScreenViewPlatform() * feat(analytics): implement Amplitude SDK for web platform - Replace Firebase with Amplitude browser SDK in platform.web.ts - Add @amplitude/analytics-browser mock to jest.setup.js - Update web platform tests for Amplitude - Fix index.ts to use Amplitude configuration - Install @amplitude/analytics-browser package * refactor(analytics): update main module for Amplitude - Export calculateStepsCompletedBucket utility - Update tests for new export * chore(config): remove Firebase config, add Amplitude - Remove googleServicesFile from iOS/Android config - Remove Firebase plugins from app.config.ts - Replace Firebase env vars with AMPLITUDE_API_KEY in .env.example - Clean up Firebase documentation from config * chore(cleanup): remove Firebase plugin files - Delete withFirebaseConfig.js plugin - Delete withModularHeaders.js plugin - Delete firebase.json - Delete associated test files * test(config): remove Firebase-related tests from app.config Firebase configuration was removed in the Amplitude migration. Updated tests to reflect the new configuration structure. * docs(changelog): add Amplitude Analytics migration entry Added: - Amplitude Analytics integration with native/web platform support - 35+ Title Case analytics events for user engagement tracking - 9 user properties for cohort analysis Changed: - Firebase Analytics replaced with Amplitude SDK - Analytics module architecture updated with platform-specific implementations Removed: - Firebase Analytics dependencies and configuration files * test(tasks): add accessibility tests for TaskCard status icons and due dates * docs(changelog): add TaskCard accessibility tests and bug fix entries * test(analytics): improve coverage for platform modules - Add tests for uninitialized state (setUserId, setUserProperties, reset) - Add test for undefined property values - Add test for default screen class in trackScreenView * docs(changelog): add analytics platform test coverage entry * fix(analytics): rethrow initialization errors to enable retry Platform implementations were catching errors and not rethrowing them, causing initializeAnalytics() to set state='completed' even on failure. This prevented retry and caused silent analytics failures. - Rethrow errors from initializePlatformAnalytics in both platforms - Add tests for error propagation behavior * fix(analytics): remove unreachable code and trim API key - Remove dead code: API key warning was unreachable after shouldInitializeAnalytics check - Trim API key in config to match validation behavior - Update JSDoc example to use AnalyticsEvents constant - Remove obsolete test for removed warning 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Bill Chirico <undefined@users.noreply.github.com> * refactor(analytics): remove unreachable API key warning shouldInitializeAnalytics() already checks for API key existence, so the warning at lines 128-131 was unreachable dead code. - Remove redundant !config.apiKey check - Use non-null assertion since key is guaranteed by shouldInitializeAnalytics() - Remove test for unreachable code path * fix(analytics): handle negative values in calculateStepsCompletedBucket Negative step counts now correctly return '0' bucket instead of falling through to '10-12'. Added test cases for negative values. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs(changelog): add entry for negative bucket fix 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(analytics): replace fragile exact event count with sanity check Per PR review: hardcoded event count (37) is fragile and breaks when events are legitimately added/removed. Changed to verify events are defined (>0). * fix(analytics): add error handling to trackEventPlatform Per PR review: wrap amplitude.track() in try-catch to prevent unexpected exceptions from propagating, matching the pattern in setUserPropertiesPlatform. * fix(analytics): add consistent error handling to setUserIdPlatform and resetAnalyticsPlatform Per PR review: apply consistent error handling pattern across all Amplitude API calls to prevent unexpected exceptions from propagating. * fix(analytics): properly await Amplitude init() using .promise pattern Per PR review: Amplitude SDK v2+ requires calling .promise on init() return value to properly await initialization. Without this, tracking may occur before initialization completes, causing potential data loss. * fix(analytics): update Amplitude mocks to use .promise pattern - Update jest.setup.js mocks for @amplitude/analytics-browser and @amplitude/analytics-react-native to return { promise: Promise.resolve() } from init() to match the actual SDK behavior - Update test files to use mockReturnValueOnce with promise rejection instead of mockRejectedValueOnce for init error tests * fix(docs): update CHANGELOG comparison links to reference v1.2.1 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore(deps): add Sentry Spotlight for local dev debugging - Install @spotlightjs/spotlight as dev dependency - Add pnpm spotlight script to run the sidecar server - Spotlight captures Sentry events locally in development Usage: Run `pnpm spotlight` in a separate terminal before `pnpm web` * test(analytics): add missing AnalyticsEvents constant assertions Cover all 35 event constants in analytics.test.ts to catch any renamed or removed constants. Added assertions for: - ONBOARDING_STEP_COMPLETED, ONBOARDING_SOBRIETY_DATE_SET - SCREEN_VIEWED, TASK_VIEWED, TASK_STARTED - MILESTONE_SHARED - SPONSOR_CONNECTED, SPONSOR_INVITE_SENT, SPONSOR_INVITE_ACCEPTED - MESSAGE_SENT, APP_OPENED, DAILY_CHECK_IN * docs(changelog): consolidate duplicate Removed sections 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * 📝 Add docstrings to `feat/amplitude-analytics` (#231) Docstrings generation was requested by @BillChirico. * #229 (comment) The following files were modified: * `lib/analytics-utils.ts` * `lib/analytics/index.ts` * `lib/analytics/platform.native.ts` * `lib/analytics/platform.web.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(analytics): track SAVINGS_UPDATED event when editing savings - Add trackEvent call in handleSave with amount, frequency, is_first_setup - Include isSetupMode in useCallback dependency array * fix(analytics): add missing JSDoc closing delimiter in sanitizeValue The JSDoc comment for the sanitizeValue function was missing its closing `*/` delimiter, causing TypeScript to interpret the function declaration as part of the comment and fail with TS2304: Cannot find name 'sanitizeValue'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(analytics): add tracking for engagement, settings, and onboarding events Add analytics tracking for: - APP_OPENED, APP_BACKGROUNDED, APP_SESSION_STARTED, DAILY_CHECK_IN (engagement) - SETTINGS_CHANGED for theme and dashboard preferences - ONBOARDING_ABANDONED when user signs out during onboarding - SAVINGS_UPDATED when editing savings settings Also: - Add AppState mock to jest.setup.js for testing - Add AnalyticsEvents to analytics mock in layout tests * fix: update comment to reference Amplitude instead of Firebase Co-authored-by: Bill Chirico <undefined@users.noreply.github.com> * feat(analytics): add comprehensive onboarding analytics tracking Add tracking for all 7 onboarding events: - ONBOARDING_STARTED: on mount - ONBOARDING_SCREEN_VIEWED: on mount with screen_name - ONBOARDING_FIELD_COMPLETED: for display_name, sobriety_date, savings_tracking - ONBOARDING_SOBRIETY_DATE_SET: when date is changed (existing) - ONBOARDING_STEP_COMPLETED: on completion with step_name, step_number - ONBOARDING_COMPLETED: on completion with duration_seconds, savings_enabled - ONBOARDING_ABANDONED: on sign out (added previously) Uses refs to prevent duplicate field completion events. --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Bill Chirico <undefined@users.noreply.github.com> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (29)
✨ Finishing touches
🧪 Generate unit tests (beta)❌ Error creating Unit Test PR.
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Claude finished @BillChirico's task in 2m 32s —— View job PR Review: Firebase to Amplitude Analytics MigrationI've completed a comprehensive review of PR #232. This is a well-structured migration from Firebase Analytics to Amplitude with clean architecture and good test coverage. Summary✅ Overall Assessment: Approve with minor observations This PR successfully migrates analytics from Firebase to Amplitude while:
Architecture ReviewStrengths:
Code QualityPositive Observations:
Test Coverage:
Security Review✅ No security concerns identified
Minor Observations (Non-blocking)
Files Reviewed
ConclusionThis is a clean, well-executed migration. The code follows best practices, has good test coverage, and properly handles cross-platform concerns. The removal of Firebase configuration and plugins is complete. Recommendation: Approve ✅ |
|
Note Docstrings generation - SUCCESS |
|
Note Unit test generation is an Early Access feature. Expect some limitations and changes as we gather feedback and continue to improve it. Generating unit tests... This may take up to 20 minutes. |
Docstrings generation was requested by @BillChirico. * #232 (comment) The following files were modified: * `lib/analytics-utils.ts` * `lib/analytics/index.ts` * `lib/analytics/platform.web.ts`
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #232 +/- ##
==========================================
- Coverage 92.91% 92.02% -0.89%
==========================================
Files 79 79
Lines 3936 3836 -100
Branches 1316 1288 -28
==========================================
- Hits 3657 3530 -127
- Misses 269 296 +27
Partials 10 10 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Review CompleteYour review story is ready! Comment !reviewfast on this PR to re-generate the story. |
There was a problem hiding this comment.
Pull request overview
This pull request migrates analytics from Firebase Analytics to Amplitude for improved cross-platform support. The migration involves removing Firebase dependencies and configuration, adding Amplitude SDK integration for native and web platforms, updating analytics utilities and types, and adding comprehensive analytics tests.
Key changes:
- Replaced Firebase Analytics SDK with Amplitude SDK for both native and web platforms
- Updated event naming from snake_case to Title Case per Amplitude conventions
- Simplified analytics configuration from 4 Firebase parameters to a single Amplitude API key
- Added new analytics events and user properties
- Removed Firebase-specific plugins and configuration files
Reviewed changes
Copilot reviewed 29 out of 30 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| types/analytics.ts | Updated type definitions to support Amplitude; changed event names to Title Case; added array support to EventParamValue; added new user properties and event constants |
| pnpm-lock.yaml | Removed Firebase packages; added Amplitude browser and React Native SDKs; added Spotlight for debugging |
| plugins/withFirebaseConfig.js | Deleted Firebase configuration plugin (no longer needed) |
| plugins/withModularHeaders.js | Deleted Firebase modular headers plugin (no longer needed) |
| package.json | Removed Firebase dependencies; added Amplitude packages and Spotlight |
| lib/analytics/platform.web.ts | Rewrote web analytics to use Amplitude instead of Firebase; simplified implementation |
| lib/analytics/platform.native.ts | Rewrote native analytics to use Amplitude; removed Firebase-specific code |
| lib/analytics/index.ts | Updated initialization logic for Amplitude single API key configuration |
| lib/analytics-utils.ts | Removed Platform.OS checks; added calculateStepsCompletedBucket utility |
| jest.setup.js | Added mocks for Amplitude SDKs; added AppState mock |
| firebase.json | Deleted Firebase configuration file |
| components/tasks/TaskCard.tsx | Added accessibility labels to status icons (unrelated to analytics migration) |
| components/sheets/EditSavingsSheet.tsx | Added SAVINGS_UPDATED event tracking |
| components/settings/SettingsContent.tsx | Added SETTINGS_CHANGED event tracking |
| app/onboarding.tsx | Enhanced onboarding analytics with field completion, abandonment, and screen view tracking |
| app/_layout.tsx | Added app lifecycle analytics (opened, backgrounded, session started, daily check-in) |
| app.config.ts | Removed Firebase configuration and plugins |
| tests/types/analytics.test.ts | Rewrote tests for Amplitude event naming and new types |
| tests/lib/analytics.test.ts | Updated tests for Amplitude configuration |
| tests/config/app.config.test.ts | Removed Firebase configuration tests |
| tests/app/layout.test.tsx | Added AnalyticsEvents to mock |
| .env.example | Replaced Firebase environment variables with Amplitude API key |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
* feat(analytics): migrate from Firebase Analytics to Amplitude (#229) * docs(analytics): add Amplitude migration implementation plan * chore(deps): replace Firebase Analytics with Amplitude SDK - Remove @react-native-firebase/analytics - Remove @react-native-firebase/app - Remove firebase - Add @amplitude/analytics-react-native * feat(analytics): update types for Amplitude with Title Case events - Change event values to Title Case (Amplitude convention) - Add 17 new events for comprehensive tracking (37 total) - Add new user properties (onboarding_completed, task_streak_current, etc.) - Simplify AnalyticsConfig to single apiKey - Add StepsCompletedBucket type - Support string arrays in EventParamValue * refactor(analytics): simplify utils for Amplitude - Remove Platform import (no longer needed) - Update shouldInitializeAnalytics to check AMPLITUDE_API_KEY - Add calculateStepsCompletedBucket helper - Update tests for new behavior * feat(analytics): implement Amplitude SDK for native platforms - Replace Firebase with Amplitude SDK - Add amplitude mock to jest.setup.js - Update native platform implementation - Use Identify class for user properties * fix(analytics): add error handling and use constant for screen view - Add try-catch to setUserPropertiesPlatform() for robustness - Use AnalyticsEvents.SCREEN_VIEWED instead of hardcoded string - Add JSDoc param documentation to trackScreenViewPlatform() * feat(analytics): implement Amplitude SDK for web platform - Replace Firebase with Amplitude browser SDK in platform.web.ts - Add @amplitude/analytics-browser mock to jest.setup.js - Update web platform tests for Amplitude - Fix index.ts to use Amplitude configuration - Install @amplitude/analytics-browser package * refactor(analytics): update main module for Amplitude - Export calculateStepsCompletedBucket utility - Update tests for new export * chore(config): remove Firebase config, add Amplitude - Remove googleServicesFile from iOS/Android config - Remove Firebase plugins from app.config.ts - Replace Firebase env vars with AMPLITUDE_API_KEY in .env.example - Clean up Firebase documentation from config * chore(cleanup): remove Firebase plugin files - Delete withFirebaseConfig.js plugin - Delete withModularHeaders.js plugin - Delete firebase.json - Delete associated test files * test(config): remove Firebase-related tests from app.config Firebase configuration was removed in the Amplitude migration. Updated tests to reflect the new configuration structure. * docs(changelog): add Amplitude Analytics migration entry Added: - Amplitude Analytics integration with native/web platform support - 35+ Title Case analytics events for user engagement tracking - 9 user properties for cohort analysis Changed: - Firebase Analytics replaced with Amplitude SDK - Analytics module architecture updated with platform-specific implementations Removed: - Firebase Analytics dependencies and configuration files * test(tasks): add accessibility tests for TaskCard status icons and due dates * docs(changelog): add TaskCard accessibility tests and bug fix entries * test(analytics): improve coverage for platform modules - Add tests for uninitialized state (setUserId, setUserProperties, reset) - Add test for undefined property values - Add test for default screen class in trackScreenView * docs(changelog): add analytics platform test coverage entry * fix(analytics): rethrow initialization errors to enable retry Platform implementations were catching errors and not rethrowing them, causing initializeAnalytics() to set state='completed' even on failure. This prevented retry and caused silent analytics failures. - Rethrow errors from initializePlatformAnalytics in both platforms - Add tests for error propagation behavior * fix(analytics): remove unreachable code and trim API key - Remove dead code: API key warning was unreachable after shouldInitializeAnalytics check - Trim API key in config to match validation behavior - Update JSDoc example to use AnalyticsEvents constant - Remove obsolete test for removed warning 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Bill Chirico <undefined@users.noreply.github.com> * refactor(analytics): remove unreachable API key warning shouldInitializeAnalytics() already checks for API key existence, so the warning at lines 128-131 was unreachable dead code. - Remove redundant !config.apiKey check - Use non-null assertion since key is guaranteed by shouldInitializeAnalytics() - Remove test for unreachable code path * fix(analytics): handle negative values in calculateStepsCompletedBucket Negative step counts now correctly return '0' bucket instead of falling through to '10-12'. Added test cases for negative values. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs(changelog): add entry for negative bucket fix 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(analytics): replace fragile exact event count with sanity check Per PR review: hardcoded event count (37) is fragile and breaks when events are legitimately added/removed. Changed to verify events are defined (>0). * fix(analytics): add error handling to trackEventPlatform Per PR review: wrap amplitude.track() in try-catch to prevent unexpected exceptions from propagating, matching the pattern in setUserPropertiesPlatform. * fix(analytics): add consistent error handling to setUserIdPlatform and resetAnalyticsPlatform Per PR review: apply consistent error handling pattern across all Amplitude API calls to prevent unexpected exceptions from propagating. * fix(analytics): properly await Amplitude init() using .promise pattern Per PR review: Amplitude SDK v2+ requires calling .promise on init() return value to properly await initialization. Without this, tracking may occur before initialization completes, causing potential data loss. * fix(analytics): update Amplitude mocks to use .promise pattern - Update jest.setup.js mocks for @amplitude/analytics-browser and @amplitude/analytics-react-native to return { promise: Promise.resolve() } from init() to match the actual SDK behavior - Update test files to use mockReturnValueOnce with promise rejection instead of mockRejectedValueOnce for init error tests * fix(docs): update CHANGELOG comparison links to reference v1.2.1 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore(deps): add Sentry Spotlight for local dev debugging - Install @spotlightjs/spotlight as dev dependency - Add pnpm spotlight script to run the sidecar server - Spotlight captures Sentry events locally in development Usage: Run `pnpm spotlight` in a separate terminal before `pnpm web` * test(analytics): add missing AnalyticsEvents constant assertions Cover all 35 event constants in analytics.test.ts to catch any renamed or removed constants. Added assertions for: - ONBOARDING_STEP_COMPLETED, ONBOARDING_SOBRIETY_DATE_SET - SCREEN_VIEWED, TASK_VIEWED, TASK_STARTED - MILESTONE_SHARED - SPONSOR_CONNECTED, SPONSOR_INVITE_SENT, SPONSOR_INVITE_ACCEPTED - MESSAGE_SENT, APP_OPENED, DAILY_CHECK_IN * docs(changelog): consolidate duplicate Removed sections 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * 📝 Add docstrings to `feat/amplitude-analytics` (#231) Docstrings generation was requested by @BillChirico. * #229 (comment) The following files were modified: * `lib/analytics-utils.ts` * `lib/analytics/index.ts` * `lib/analytics/platform.native.ts` * `lib/analytics/platform.web.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(analytics): track SAVINGS_UPDATED event when editing savings - Add trackEvent call in handleSave with amount, frequency, is_first_setup - Include isSetupMode in useCallback dependency array * fix(analytics): add missing JSDoc closing delimiter in sanitizeValue The JSDoc comment for the sanitizeValue function was missing its closing `*/` delimiter, causing TypeScript to interpret the function declaration as part of the comment and fail with TS2304: Cannot find name 'sanitizeValue'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(analytics): add tracking for engagement, settings, and onboarding events Add analytics tracking for: - APP_OPENED, APP_BACKGROUNDED, APP_SESSION_STARTED, DAILY_CHECK_IN (engagement) - SETTINGS_CHANGED for theme and dashboard preferences - ONBOARDING_ABANDONED when user signs out during onboarding - SAVINGS_UPDATED when editing savings settings Also: - Add AppState mock to jest.setup.js for testing - Add AnalyticsEvents to analytics mock in layout tests * fix: update comment to reference Amplitude instead of Firebase Co-authored-by: Bill Chirico <undefined@users.noreply.github.com> * feat(analytics): add comprehensive onboarding analytics tracking Add tracking for all 7 onboarding events: - ONBOARDING_STARTED: on mount - ONBOARDING_SCREEN_VIEWED: on mount with screen_name - ONBOARDING_FIELD_COMPLETED: for display_name, sobriety_date, savings_tracking - ONBOARDING_SOBRIETY_DATE_SET: when date is changed (existing) - ONBOARDING_STEP_COMPLETED: on completion with step_name, step_number - ONBOARDING_COMPLETED: on completion with duration_seconds, savings_enabled - ONBOARDING_ABANDONED: on sign out (added previously) Uses refs to prevent duplicate field completion events. --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Bill Chirico <undefined@users.noreply.github.com> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * 📝 Add docstrings to `develop` Docstrings generation was requested by @BillChirico. * #232 (comment) The following files were modified: * `lib/analytics-utils.ts` * `lib/analytics/index.ts` * `lib/analytics/platform.web.ts` * fix: add missing trailing newlines to files The docstrings PR removed trailing newlines from the end of files. This commit restores them to follow POSIX file format conventions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Bill Chirico <bill@chirico.dev> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Bill Chirico <undefined@users.noreply.github.com> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Summary
Changes
withFirebaseConfig.jsandwithModularHeaders.jspluginsapp.config.tsto remove Firebase configurationTest Plan
Important
Migrate analytics from Firebase to Amplitude, updating dependencies, types, and platform-specific implementations, and removing Firebase-related code.
types/analytics.tsto define Amplitude event types and user properties.StepsCompletedBuckettype.platform.native.tsandplatform.web.ts.amplitude.init()for initialization andamplitude.track()for event tracking.analytics-utils.tsto handle Amplitude-specific logic.calculateStepsCompletedBucket()function.app.config.ts..env.exampleto include Amplitude API key.jest.setup.js.package.jsonto include Amplitude dependencies.This description was created by
for 599e89c. You can customize this summary. It will automatically update as commits are pushed.