Skip to content

coder-family/cherishly-mobile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“± Growing Together – Mobile App

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.


✨ Current Features

βœ… Implemented

  • πŸ” 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
  • πŸ—οΈ Robust Architecture

    • Redux Toolkit for state management
    • TypeScript for type safety
    • Comprehensive error handling
    • Extensive test coverage
    • Modular component structure

🚧 In Development

  • πŸ‘Ά Children profile management (API ready)
  • πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ Family groups system (API ready)
  • πŸ“Š Health tracking features
  • πŸ’¬ Q&A system
  • πŸ“Έ Memories timeline

πŸ› οΈ Tech Stack

  • 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

πŸ“ Project Structure

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

πŸš€ Getting Started

Prerequisites

  • Node.js (v18 or higher)
  • npm or yarn
  • Expo CLI (npm install -g @expo/cli)
  • Expo Go app on your mobile device (for testing)

Installation

  1. Clone the repository

    git clone <repository-url>
    cd growing-together-mobile
  2. Install dependencies

    npm install
  3. 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
  4. Start the development server

    npm start
    # or
    npx expo start
  5. 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

Development Commands

# 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

πŸ§ͺ Testing

The project includes comprehensive testing with Jest and React Native Testing Library:

Test Coverage

  • 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

Running 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"

πŸ“± Building for Production

EAS Build (Recommended)

  1. Install EAS CLI

    npm install -g @expo/eas-cli
  2. Login to Expo

    eas login
  3. Configure EAS

    eas build:configure
  4. Build for platforms

    # iOS
    eas build --platform ios
    
    # Android
    eas build --platform android
    
    # Both platforms
    eas build --platform all

πŸ”§ Configuration

Deep Linking

  • Custom Scheme: growing-together://
  • Universal Links: https://growing-together.com/*
  • Testing Tools: Built-in deep link tester (development mode)

Environment Variables

  • API_BASE_URL: Backend API endpoint
  • CLOUDINARY_UPLOAD_URL: Media upload endpoint
  • CLOUDINARY_UPLOAD_PRESET: Upload configuration

API Integration

  • RESTful API with JWT authentication
  • Automatic token refresh
  • Comprehensive error handling
  • Offline support (planned)

πŸ› Troubleshooting

Common Issues

  1. Metro bundler issues

    npx expo start --clear
  2. Dependency conflicts

    rm -rf node_modules package-lock.json
    npm install
  3. iOS build issues

    cd ios && pod install && cd ..
  4. Deep linking not working

    • Check app.json configuration
    • Verify URL scheme setup
    • Use built-in tester for debugging

πŸ“š Documentation


🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Code Style

  • 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

βœ… Development Roadmap

πŸ” Phase I: Authentication & Foundation βœ… COMPLETE

  • 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

🏠 Phase II: Core Infrastructure βœ… COMPLETE

  • 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

πŸ“± Phase III: Media & Communication βœ… COMPLETE

  • Advanced audio recording system
  • Video recording and preview
  • Image picker with editing
  • File upload with progress tracking
  • Cloud storage integration
  • Multiple recordings management

πŸ‘Ά Phase IV: Children Management 🚧 IN PROGRESS

  • Child service API integration
  • Redux slice for children state
  • Add child profile UI
  • Edit child information
  • Child selection and switching
  • Child-specific navigation

πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ Phase V: Family Groups 🚧 IN PROGRESS

  • 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

🩺 Phase VI: Health Tracking πŸ“‹ PLANNED

  • Health records data structure
  • Growth tracking (height/weight)
  • Vaccination records
  • Illness tracking
  • Health timeline view
  • Growth charts and analytics

❓ Phase VII: Q&A System πŸ“‹ PLANNED

  • Question prompts system
  • Custom question creation
  • Multi-media answer support
  • Q&A timeline view
  • Question categories and tags

πŸ“Έ Phase VIII: Memories πŸ“‹ PLANNED

  • Memory creation with media
  • Memory timeline and filtering
  • Milestone tracking
  • Memory sharing within family
  • Memory export and backup

πŸ”§ Phase IX: Polish & Optimization πŸ“‹ PLANNED

  • Performance optimization
  • Offline functionality
  • Push notifications
  • App icon and splash screen
  • App store preparation

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ“ˆ Project Statistics

  • 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

About

Mobile app for Growing Together

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •