A comprehensive Augmentative and Alternative Communication (AAC) app built with React Native and Expo, featuring dual-mode functionality for parents/carers and children. Echo Kids helps children with autism, ADHD, and communication challenges express themselves through an intuitive, colorful interface.
- β Create, edit, and delete vocabulary boards
- β Add custom icons and phrases with TTS
- β Adjust grid size (2x2, 3x3, 4x4, 5x5, 6x6)
- β Configure TTS voice and volume settings
- β Manage favorites section
- β Button modes: One-word or Sentence
- β Multiple themes: Default, Colorful, Minimal
- β Math-protected access control
- β Simple, grid-based vocabulary boards
- β Large, colorful buttons optimized for children with ASD/ADHD
- β Tap-to-speak functionality with high-quality TTS
- β Favorites section for quick access
- β No editing capabilities (child-safe)
- β Minimal navigation and clutter
- β Offline functionality with iOS native TTS
- β 30+ predefined daily-life vocabulary buttons
- β Valid Ionicons for consistent display
- β TypeScript for type safety
- β Comprehensive testing and verification system
- β Automated quality checks
- Node.js 18+
- npm or yarn
- Expo CLI
- iOS Simulator (for iOS testing)
# Clone the repository
git clone <repository-url>
cd AAC/AACApp
# Run automated setup
npm run dev:setupThis will:
- Install all dependencies
- Set up Git hooks
- Run initial verification
- Prepare the development environment
# Start the development server
npm start
# Run on iOS simulator
npm run ios
# Run on Android emulator
npm run android
# Run on web
npm run webThis project includes a comprehensive verification system to ensure code quality and prevent regressions.
npm run verify:quickChecks:
- β File structure integrity
- β Button mode logic (sentence vs one-word)
- β Voice configuration (Apple TTS voices)
- β TTS utility functionality
- β Navigation setup
- β Icon mapping (valid Ionicons)
npm run dev:verifyIncludes:
- β Quick verification checks
- β TypeScript compilation
- β Code quality (ESLint)
- β Test suite with coverage
# Show all available commands
npm run dev:workflow
# Diagnose project health
npm run dev:doctor
# Auto-fix linting issues
npm run dev:fix
# Test production build
npm run dev:build
# Clean and reinstall dependencies
npm run dev:clean
# Run pre-push checks
npm run dev:pre-push# Run all tests
npm test
# Run tests with coverage
npm run dev:test
# Run specific test file
npm test -- VocabularyGrid.test.tsx- β VocabularyGrid component functionality
- β TTS utility functions
- β Navigation between modes
- β Button mode logic (sentence vs one-word)
- β Icon mapping validation
- β Constants and configuration
src/
βββ components/ # Reusable UI components
β βββ VocabularyGrid.tsx
β βββ AddEditItemModal.tsx
βββ screens/ # Screen components
β βββ ModeSelectionScreen.tsx
β βββ ParentVocabularyScreen.tsx
β βββ ChildVocabularyScreen.tsx
β βββ SettingsScreen.tsx
β βββ FavoritesScreen.tsx
βββ utils/ # Utility functions
β βββ tts.ts # Text-to-speech functionality
β βββ storage.ts # AsyncStorage helpers
βββ types/ # TypeScript type definitions
β βββ index.ts
βββ constants/ # App constants and configuration
β βββ index.ts
βββ __tests__/ # Test files
βββ VocabularyGrid.test.tsx
βββ TTS.test.ts
βββ Navigation.test.tsx
βββ ButtonMode.test.tsx
βββ IconMapping.test.ts
βββ Constants.test.ts
- Displays vocabulary items in a configurable grid
- Handles button mode logic (sentence vs one-word)
- Manages icon display using Ionicons
- Supports both parent and child modes
- Uses Apple TTS voices for natural speech
- Supports voice selection and configuration
- Handles speech rate and volume control
- Math-protected parent access
- Quick switching between modes
- Secure child-to-parent transition
- Edit
src/constants/index.ts - Add new items to
BUTTON_TEMPLATES - Map icons in
VocabularyGrid.tsx - Run verification:
npm run verify:quick
- Choose valid Ionicons from Ionicons Library
- Update
ICON_MAPinVocabularyGrid.tsx - Add to validation list in verification scripts
- Test with
npm run verify:quick
- Update
VOICE_OPTIONSinsrc/constants/index.ts - Use Apple TTS bundle identifiers for best quality
- Test with different voices in settings
- Pre-commit hooks: Run verification before each commit
- GitHub Actions: Continuous integration on push/PR
- TypeScript: Compile-time type checking
- ESLint: Code quality and consistency
- Jest: Unit and integration testing
- Parent mode: Create/edit/delete vocabulary items
- Child mode: Tap buttons and verify TTS works
- Mode switching: Math question protection works
- Settings: Voice, grid size, theme changes work
- Button modes: Sentence vs one-word behavior
- Icons: All icons display correctly (no "?" symbols)
- Offline: App works without internet connection
Icons not displaying (showing "?")
npm run verify:quick
# Check icon mapping validationTTS voices sound robotic
npm run dev:doctor
# Verify Apple TTS configurationButton modes not working correctly
npm test -- ButtonMode.test.tsx
# Run button mode testsBuild failures
npm run dev:clean
npm run dev:setup- Run
npm run dev:doctorto diagnose issues - Check verification output:
npm run verify:quick - Review test results:
npm test - Check GitHub Actions for CI failures
# Test build
npm run dev:build
# Create iOS build
npx expo build:ios# Start with tunnel for device testing
npx expo start --tunnel
# Use Expo Go app to scan QR code- Fork the repository
- Create a feature branch
- Make your changes
- Run full verification:
npm run dev:verify - Run pre-push checks:
npm run dev:pre-push - Submit a pull request
- β Always run verification before committing
- β Write tests for new functionality
- β
Use TypeScript strictly (no
anytypes) - β Follow existing code patterns
- β Update documentation for new features
This project is licensed under the MIT License.
- Built with Expo
- Icons from Ionicons
- TTS powered by iOS Speech Framework
- Testing with Jest and React Native Testing Library