Skip to content

KaiDevrim/BobaPal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

80 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ§‹ BobaPal

BobaPal Logo

Track your boba adventures!

A beautiful React Native app to log, rate, and discover your favorite boba drinks.

React Native Expo TypeScript AWS Amplify


πŸ“± Screenshots

Gallery Page Add Drink Edit Drink Stats Page


✨ Features

  • πŸ“Έ 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

πŸ› οΈ Tech Stack

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

πŸš€ Getting Started

Prerequisites

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/BobaPal.git
    cd BobaPal
  2. Install dependencies

    npm install
  3. Set up environment variables

    Create a .env.local file in the root directory:

    EXPO_PUBLIC_GOOGLE_PLACES_API_KEY=your_google_places_api_key
  4. Configure AWS Amplify

    Update src/amplifyconfiguration.json with 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"
      }
    }
  5. Run the app

    # Start the development server
    npm start
    
    # Run on iOS simulator
    npm run ios
    
    # Run on Android emulator
    npm run android

πŸ“œ Available Scripts

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

πŸ“ Project Structure

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

πŸ§ͺ Testing

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

πŸ—οΈ Building for Production

Using EAS Build

  1. Configure EAS

    eas login
    eas build:configure
  2. Set EAS Secrets

    eas secret:create --name EXPO_PUBLIC_GOOGLE_PLACES_API_KEY --scope project
  3. 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
  4. Submit to app stores

    npm run submit:ios
    npm run submit:android

See PRODUCTION_CHECKLIST.md for a detailed deployment guide.


πŸ” Security

  • 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)

πŸ“„ Documentation


🀝 Contributing

Contributions are welcome! Please follow these steps:

  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

πŸ“ License

This project is proprietary. All rights reserved.


πŸ‘¨β€πŸ’» Author

KaiDevrim


Made with ❀️ and πŸ§‹

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published