A modern, cross-platform mobile shopping application built with React Native and Expo, designed to provide a seamless shopping experience across multiple vendors.
- Multi-Vendor Support: Browse and shop from multiple vendors in one app
- Product Catalog: Comprehensive product browsing with categories and filters
- Favorites System: Save and manage favorite products
- Search & Filter: Advanced search and filtering capabilities
- User Authentication: Secure login and user management
- Responsive Design: Optimized for both mobile and tablet devices
- Modern UI/UX: Clean, intuitive interface with smooth animations
- Dark/Light Theme: Automatic theme switching based on system preferences
- Offline Support: Basic offline functionality with local storage
- Haptic Feedback: Enhanced user interaction with haptic responses
- Image Optimization: Fast loading images with blur placeholders
- TypeScript: Full type safety throughout the application
- State Management: Efficient state management with Zustand
- Data Fetching: Optimized data fetching with React Query
- Navigation: Seamless navigation with Expo Router
- Performance: Optimized for smooth performance on all devices
- React Native (0.79.1) - Cross-platform mobile development
- Expo (53.0.4) - Development platform and tools
- TypeScript (5.8.3) - Type safety and better development experience
- NativeWind (4.1.23) - Tailwind CSS for React Native
- Zustand (5.0.2) - Lightweight state management
- React Query (5.83.0) - Server state management and caching
- AsyncStorage (2.1.2) - Local data persistence
- Expo Router (5.0.3) - File-based routing
- React Navigation (7.1.6) - Navigation library
- Lucide React Native (0.475.0) - Beautiful icons
- Expo Image (2.1.6) - Optimized image component
- ESLint (9.31.0) - Code linting
- Expo CLI - Development and build tools
Screenshots will be added here
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI (
npm install -g @expo/cli) - iOS Simulator (for iOS development) or Android Studio (for Android development)
-
Clone the repository
git clone <repository-url> cd multi-vendor-shopping-app-new
-
Install dependencies
npm install # or yarn install -
Start the development server
npm start # or yarn start -
Run on your preferred platform
# iOS npm run ios # Android npm run android # Web npm run web
multi-vendor-shopping-app-new/
โโโ app/ # Expo Router app directory
โ โโโ (tabs)/ # Tab-based navigation
โ โ โโโ index.tsx # Home screen
โ โ โโโ browse.tsx # Product browsing
โ โ โโโ favorites.tsx # Favorites screen
โ โ โโโ settings.tsx # Settings screen
โ โโโ login.tsx # Authentication screen
โ โโโ product/ # Product detail screens
โ โโโ [id].tsx # Dynamic product routes
โโโ components/ # Reusable UI components
โ โโโ ProductCard.tsx # Product display component
โ โโโ SearchBar.tsx # Search functionality
โ โโโ FilterChips.tsx # Filter components
โ โโโ LoadingSpinner.tsx # Loading states
โโโ hooks/ # Custom React hooks
โ โโโ useAuth.tsx # Authentication logic
โ โโโ useProducts.tsx # Product data management
โ โโโ useFavorites.tsx # Favorites functionality
โ โโโ useVendor.tsx # Vendor data management
โโโ services/ # API and storage services
โ โโโ api.ts # API client and endpoints
โ โโโ storage.ts # Local storage utilities
โโโ types/ # TypeScript type definitions
โ โโโ product.ts # Product-related types
โ โโโ user.ts # User-related types
โ โโโ vendor.ts # Vendor-related types
โโโ assets/ # Static assets
โโโ images/ # App icons and images
Create a .env file in the root directory:
# API Configuration
API_BASE_URL=your_api_base_url
API_KEY=your_api_key
# App Configuration
APP_NAME=Multi-Vendor Shopping App
APP_VERSION=1.0.0The app configuration is managed in app.json:
{
"expo": {
"name": "Multi-Vendor Mobile Shopping App",
"slug": "multi-vendor-mobile-shopping-app",
"version": "1.0.0",
"orientation": "portrait",
"userInterfaceStyle": "automatic"
}
}npm start- Start the Expo development servernpm run android- Run on Android device/emulatornpm run ios- Run on iOS device/simulatornpm run web- Run in web browsernpm run lint- Run ESLint for code quality
The app uses Zustand for global state management and React Query for server state:
- Zustand: Manages user authentication, favorites, and app preferences
- React Query: Handles API data fetching, caching, and synchronization
- API Layer: Centralized API client in
services/api.ts - Custom Hooks: Business logic encapsulated in custom hooks
- Components: UI components consume data through hooks
- Local Storage: Persistent data stored using AsyncStorage
- Expo Router: File-based routing system
- Tab Navigation: Main app sections (Home, Browse, Favorites, Settings)
- Stack Navigation: Product details and authentication flows
- Typography: Consistent text hierarchy and spacing
- Colors: Dynamic theming with vendor-specific primary colors
- Components: Reusable, accessible UI components
- Animations: Smooth transitions and micro-interactions
- Screen Reader Support: Proper accessibility labels
- Color Contrast: WCAG compliant color combinations
- Touch Targets: Adequate touch target sizes
- Keyboard Navigation: Full keyboard accessibility
- Authentication: Secure user authentication flow
- Data Validation: Input validation and sanitization
- API Security: Secure API communication
- Local Storage: Encrypted sensitive data storage
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage- Unit Tests: Individual component and hook testing
- Integration Tests: API and state management testing
- E2E Tests: Full user flow testing
expo build:androidexpo build:iosexpo build:web- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Follow the existing code style
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions:
- Check the Issues page for existing solutions
- Create a new issue with detailed information
- Contact the development team
- Expo Team for the amazing development platform
- React Native Community for the excellent ecosystem
- All Contributors who have helped improve this project
Made with โค๏ธ using React Native and Expo