Track your boba adventures!
A beautiful React Native app to log, rate, and discover your favorite boba drinks.
- πΈ Photo Gallery - Capture and browse photos of your boba drinks
- β Rating System - Rate drinks by sweetness, ice level, and overall taste
- π Location Tracking - Find and save your favorite boba shops with Google Places autocomplete
- π Statistics - View insights about your boba habits (total drinks, spending, favorites)
- πΊοΈ Visited Locations Map - See all the boba shops you've visited on a map
- π Secure Authentication - Sign in with Google via AWS Cognito
- βοΈ Cloud Sync - Your data syncs securely to AWS S3
- π± Offline Support - WatermelonDB provides fast local-first data storage
| Category | Technology |
|---|---|
| Framework | React Native with Expo |
| Language | TypeScript |
| Styling | NativeWind (Tailwind CSS for React Native) |
| Navigation | React Navigation |
| Database | WatermelonDB (local), AWS S3 (cloud sync) |
| Authentication | AWS Amplify with Cognito & Google OAuth |
| Location Services | Google Places API (New) |
| Image Handling | Expo Image with caching |
| Testing | Jest with React Native Testing Library |
- Node.js (v18 or later)
- npm or yarn
- Expo CLI
- EAS CLI (for builds)
- Xcode (for iOS development, macOS only)
- Android Studio (for Android development)
-
Clone the repository
git clone https://github.com/yourusername/BobaPal.git cd BobaPal -
Install dependencies
npm install
-
Set up environment variables
Create a
.env.localfile in the root directory:EXPO_PUBLIC_GOOGLE_PLACES_API_KEY=your_google_places_api_key
-
Configure AWS Amplify
Update
src/amplifyconfiguration.jsonwith your AWS Cognito settings:{ "aws_project_region": "your-region", "aws_cognito_identity_pool_id": "your-identity-pool-id", "aws_user_pools_id": "your-user-pool-id", "aws_user_pools_web_client_id": "your-client-id", "oauth": { "domain": "your-domain.auth.region.amazoncognito.com", "redirectSignIn": "bobapal://", "redirectSignOut": "bobapal://", "responseType": "code" } } -
Run the app
# Start the development server npm start # Run on iOS simulator npm run ios # Run on Android emulator npm run android
| Command | Description |
|---|---|
npm start |
Start Expo development server (port 8085) |
npm run ios |
Run on iOS simulator |
npm run android |
Run on Android emulator |
npm test |
Run Jest tests |
npm run test:coverage |
Run tests with coverage report |
npm run lint |
Run ESLint and Prettier checks |
npm run format |
Auto-fix linting and formatting issues |
npm run typecheck |
Run TypeScript compiler checks |
npm run validate |
Run typecheck, lint, and test |
npm run build:dev |
Build development version via EAS |
npm run build:prod |
Build production version via EAS |
npm run prebuild:clean |
Clean and regenerate native projects |
BobaPal/
βββ App.tsx # Main app entry point
βββ app.json # Expo configuration
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
β
βββ assets/ # Images, icons, and fonts
β
βββ components/ # Reusable UI components
β βββ BottomBar.tsx # Tab navigation bar
β βββ Button.tsx # Custom button component
β βββ FormField.tsx # Form input component
β βββ GradientBackground.tsx # App background gradient
β βββ MyDrinkCard.tsx # Drink card for gallery
β βββ StatsCard.tsx # Statistics display card
β βββ StoreAutocomplete.tsx # Google Places search
β βββ VisitedLocationsMap.tsx # Map of visited stores
β
βββ database/ # WatermelonDB setup
β βββ schema.ts # Database schema
β βββ migrations.ts # Database migrations
β βββ index.ts # Web database instance
β βββ index.native.ts # Native database instance
β βββ model/ # Data models
β
βββ hooks/ # Custom React hooks
β βββ useCurrentUser.ts # Get authenticated user
β βββ useLocation.ts # Location permissions
β βββ useS3Image.ts # S3 image loading
β
βββ pages/ # Screen components
β βββ Gallery.tsx # Main drink gallery
β βββ AddDrink.tsx # Add new drink form
β βββ EditDrink.tsx # Edit drink form
β βββ DrinkDetail.tsx # Drink details view
β βββ Stats.tsx # Statistics dashboard
β
βββ services/ # Business logic
β βββ imageCacheService.ts # Image caching
β βββ locationService.ts # Location services
β βββ placesService.ts # Google Places API
β βββ storageService.ts # S3 storage
β βββ syncService.ts # Cloud sync
β
βββ src/
β βββ config/ # Configuration files
β β βββ amplify.ts # AWS Amplify setup
β βββ constants/ # App constants
β β βββ theme.ts # Colors, spacing, typography
β β βββ ratings.ts # Rating options
β βββ types/ # TypeScript types
β βββ navigation.ts # Navigation types
β
βββ __tests__/ # Test files
BobaPal has comprehensive test coverage across components, services, and hooks.
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverage-
Configure EAS
eas login eas build:configure
-
Set EAS Secrets
eas secret:create --name EXPO_PUBLIC_GOOGLE_PLACES_API_KEY --scope project
-
Build for platforms
# Development build npm run build:dev # Production build npm run build:prod # iOS only npm run build:ios # Android only npm run build:android
-
Submit to app stores
npm run submit:ios npm run submit:android
See PRODUCTION_CHECKLIST.md for a detailed deployment guide.
- Authentication: Handled by AWS Cognito with Google OAuth
- Data Storage: Encrypted at rest in AWS S3
- API Keys: Stored securely via EAS Secrets (not committed to repo)
- Local Database: WatermelonDB with SQLite (device storage)
- Production Checklist - Pre-release checklist
- Deployment Guide - Full deployment instructions
- Privacy Policy - App privacy policy
Contributions are welcome! Please follow these steps:
- 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
This project is proprietary. All rights reserved.
KaiDevrim
- Website: devrim.tech
Made with β€οΈ and π§