Growing Together is a mobile application designed to help families document, cherish, and share a child's growth journey. Parents can record memories, track health, ask questions, and create private family groups β all in one beautifully crafted mobile experience.
-
π Complete Authentication System
- User registration with form validation
- Secure login with JWT token management
- Password reset with email tokens
- Auto-login on app start
- Change password functionality
-
π€ User Profile Management
- View and edit user profiles
- Avatar upload with image picker
- Personal information updates
- Redux state management
-
π Home Dashboard
- User state detection (new user, no children, has children)
- Profile overview and quick edit
- Navigation to key features
-
π± Advanced Media Features
- Audio recording with pause/resume
- Video recording and preview
- Image picker with editing
- File upload with progress tracking
- Multiple recordings management
- Cloud storage integration (Cloudinary ready)
-
π Deep Linking Support
- Custom URL scheme (
growing-together://
) - Universal links for web integration
- In-app deep link testing tools
- Custom URL scheme (
-
ποΈ Robust Architecture
- Redux Toolkit for state management
- TypeScript for type safety
- Comprehensive error handling
- Extensive test coverage
- Modular component structure
- πΆ Children profile management (API ready)
- π¨βπ©βπ§βπ¦ Family groups system (API ready)
- π Health tracking features
- π¬ Q&A system
- πΈ Memories timeline
- React Native + Expo SDK 53
- TypeScript for type safety
- Redux Toolkit for state management
- Expo Router for file-based navigation
- React Hook Form + Yup for form handling
- AsyncStorage for local data persistence
- Axios for API communication
- Expo AV for audio/video recording
- Expo Image Picker for media selection
- React Native Paper for UI components
- Jest + React Native Testing Library for testing
growing-together-mobile/
βββ app/ # Main application directory (Expo Router)
β βββ _layout.tsx # Root layout with Redux & deep linking
β βββ index.tsx # Welcome/intro screen
β βββ login.tsx # Login screen
β βββ register.tsx # Registration screen
β βββ change-password.tsx # Change password screen
β β
β βββ assets/ # Static assets
β β βββ fonts/
β β β βββ SpaceMono-Regular.ttf
β β βββ images/
β β βββ background2.png
β β βββ backgroundMb.png
β β βββ logo1.png
β β
β βββ components/ # Reusable UI components
β β βββ child/ # Child-related components
β β β βββ ChildProfileCard.tsx
β β β βββ GrowthChart.tsx
β β β βββ HealthRecordItem.tsx
β β β βββ QAMemoryItem.tsx
β β β
β β βββ form/ # Form components
β β β βββ ErrorText.tsx
β β β βββ FormWrapper.tsx
β β β βββ InputField.tsx
β β β βββ LabelText.tsx
β β β βββ PasswordInput.tsx
β β β βββ PrimaryButton.tsx
β β β
β β βββ layout/ # Layout components
β β β βββ AppHeader.tsx
β β β βββ ScreenWrapper.tsx
β β β
β β βββ media/ # Media handling components
β β β βββ AudioRecorder.tsx # Complete audio recorder
β β β βββ AudioRecorderExample.tsx # Demo implementation
β β β βββ AvatarUpload.tsx # User avatar upload
β β β βββ ErrorBox.tsx # Error display
β β β βββ ImagePicker.tsx # Image selection
β β β βββ RecordingControls.tsx # Audio controls
β β β βββ RecordingDuration.tsx # Duration display
β β β βββ RecordingInfo.tsx # Recording metadata
β β β βββ RecordingStorage.ts # Storage utilities
β β β βββ RecordingsList.tsx # Recordings list
β β β βββ UploadProgressBar.tsx # Upload progress
β β β βββ VideoPreview.tsx # Video preview
β β β βββ VideoPreviewWithRedux.tsx # Redux video preview
β β β βββ VideoUploadExample.tsx # Demo implementation
β β β
β β βββ ui/ # Basic UI components
β β β βββ Divider.tsx
β β β βββ EmptyState.tsx
β β β βββ ErrorView.tsx
β β β βββ LoadingSpinner.tsx
β β β βββ ModalConfirm.tsx
β β β βββ SectionCard.tsx
β β β βββ ThemedText.tsx
β β β
β β βββ DeepLinkTester.tsx # Development deep link testing
β β
β βββ constants/ # App constants
β β βββ Colors.ts
β β
β βββ hooks/ # Custom React hooks
β β βββ useColorScheme.ts
β β βββ useColorScheme.web.ts
β β βββ useThemeColor.ts
β β
β βββ redux/ # State management
β β βββ store.ts # Redux store configuration
β β βββ hooks.ts # Typed Redux hooks
β β βββ rootReducer.ts # Root reducer
β β βββ slices/ # Redux slices
β β βββ authSlice.ts # Authentication state
β β βββ userSlice.ts # User profile state
β β βββ childSlice.ts # Children management
β β βββ familySlice.ts # Family groups
β β
β βββ reset-password/ # Password reset flow
β β βββ index.tsx # Reset request screen
β β βββ [token].tsx # Token-based reset
β β βββ reset-password-page.tsx
β β βββ ResetPassword.tsx
β β
β βββ services/ # API services
β β βββ apiService.ts # Base API configuration
β β βββ authService.ts # Authentication API
β β βββ userService.ts # User management API
β β βββ childService.ts # Children API
β β βββ familyService.ts # Family groups API
β β
β βββ tabs/ # Tab navigation
β β βββ _layout.tsx # Tab layout configuration
β β βββ index.tsx # Tab navigator
β β βββ home.tsx # Home dashboard
β β βββ profile.tsx # User profile
β β
β βββ types/ # TypeScript definitions
β β
β βββ utils/ # Utility functions
β βββ linkingUtils.ts # Deep linking utilities
β βββ logUtils.ts # Logging utilities
β βββ validation.ts # Form validation
β
βββ tests/ # Test files
β βββ authSlice.test.ts # Auth state tests
β βββ userSlice.test.ts # User state tests
β βββ validation.test.ts # Validation tests
β βββ Login.test.tsx # Login component tests
β βββ Register.test.tsx # Registration tests
β βββ ResetPassword.test.tsx # Password reset tests
β βββ HomeScreen.test.tsx # Home screen tests
β βββ Intro.test.js # Intro screen tests
β
βββ scripts/ # Utility scripts
β βββ reset-project.js # Project reset utility
β βββ test-deep-links.js # Deep link testing
β
βββ mocks/ # Test mocks
β βββ expo-winter.js
β βββ ModalMock.js
β βββ NativeAnimatedHelper.js
β
βββ Documentation/ # Project documentation
β βββ API_INTEGRATION.md # API integration guide
β βββ DEEP_LINKING.md # Deep linking setup
β βββ USER_SERVICE_UPDATES.md # User service updates
β
βββ Configuration Files
βββ app.json # Expo app configuration
βββ babel.config.js # Babel configuration
βββ eslint.config.js # ESLint configuration
βββ jest.config.js # Jest test configuration
βββ jest.setup.js # Jest setup file
βββ metro.config.js # Metro bundler config
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ README.md # This file
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI (
npm install -g @expo/cli
) - Expo Go app on your mobile device (for testing)
-
Clone the repository
git clone <repository-url> cd growing-together-mobile
-
Install dependencies
npm install
-
Set up environment variables
Create a
.env
file in the root directory:# API Configuration API_BASE_URL=https://your-api-url.com # Cloudinary Configuration (for media uploads) CLOUDINARY_UPLOAD_URL=https://api.cloudinary.com/v1_1/your-cloud-name CLOUDINARY_UPLOAD_PRESET=your-upload-preset # Optional: Development settings NODE_ENV=development
-
Start the development server
npm start # or npx expo start
-
Run on your device
- Install Expo Go from App Store (iOS) or Google Play (Android)
- Scan the QR code displayed in your terminal
- The app will load on your device
# Start development server
npm start
# Run on specific platform
npm run ios # iOS simulator
npm run android # Android emulator
npm run web # Web browser
# Testing
npm test # Run all tests
npm test -- --watch # Run tests in watch mode
# Deep link testing
npm run test-links # Interactive deep link tester
The project includes comprehensive testing with Jest and React Native Testing Library:
- Authentication Flow: Login, register, password reset
- Redux State Management: All slices and async operations
- Form Validation: User input validation
- Component Rendering: UI component tests
- Navigation: Screen navigation tests
# Run all tests
npm test
# Run specific test file
npm test Login.test.tsx
# Run tests with coverage
npm test -- --coverage
# Run tests in watch mode
npm test -- --watch
# Run specific test pattern
npm test -- --testNamePattern="login"
-
Install EAS CLI
npm install -g @expo/eas-cli
-
Login to Expo
eas login
-
Configure EAS
eas build:configure
-
Build for platforms
# iOS eas build --platform ios # Android eas build --platform android # Both platforms eas build --platform all
- Custom Scheme:
growing-together://
- Universal Links:
https://growing-together.com/*
- Testing Tools: Built-in deep link tester (development mode)
API_BASE_URL
: Backend API endpointCLOUDINARY_UPLOAD_URL
: Media upload endpointCLOUDINARY_UPLOAD_PRESET
: Upload configuration
- RESTful API with JWT authentication
- Automatic token refresh
- Comprehensive error handling
- Offline support (planned)
-
Metro bundler issues
npx expo start --clear
-
Dependency conflicts
rm -rf node_modules package-lock.json npm install
-
iOS build issues
cd ios && pod install && cd ..
-
Deep linking not working
- Check app.json configuration
- Verify URL scheme setup
- Use built-in tester for debugging
- API Integration Guide - Complete API setup and usage
- Deep Linking Guide - URL scheme configuration and testing
- User Service Updates - Backend integration details
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Follow existing TypeScript patterns
- Write tests for new features
- Use Redux Toolkit for state management
- Follow React Native best practices
- Update documentation for new features
- User registration and login UI/UX
- JWT token management with AsyncStorage
- Auto-login on app start
- Password reset flow with email tokens
- Change password functionality
- Form validation and error handling
- Redux state management setup
- Home dashboard with user state detection
- Navigation system with Expo Router
- Tab layout structure
- Redux store with multiple slices
- API service architecture
- Comprehensive error handling
- Deep linking system
- Advanced audio recording system
- Video recording and preview
- Image picker with editing
- File upload with progress tracking
- Cloud storage integration
- Multiple recordings management
- Child service API integration
- Redux slice for children state
- Add child profile UI
- Edit child information
- Child selection and switching
- Child-specific navigation
- Family service API integration
- Redux slice for family state
- Create family group UI
- Join family group with invite codes
- Family member management
- Group-specific features
- Health records data structure
- Growth tracking (height/weight)
- Vaccination records
- Illness tracking
- Health timeline view
- Growth charts and analytics
- Question prompts system
- Custom question creation
- Multi-media answer support
- Q&A timeline view
- Question categories and tags
- Memory creation with media
- Memory timeline and filtering
- Milestone tracking
- Memory sharing within family
- Memory export and backup
- Performance optimization
- Offline functionality
- Push notifications
- App icon and splash screen
- App store preparation
This project is licensed under the MIT License - see the LICENSE file for details.
- Components: 40+ reusable components
- Redux Slices: 4 comprehensive state slices
- API Services: 5 service modules
- Test Coverage: 8 test suites with extensive coverage
- Features: Authentication, Profile Management, Media Handling, Deep Linking
- Documentation: 4 detailed guides
- Platform Support: iOS, Android, Web
Last Updated: January 2024