A beautiful React Native mobile application for discovering and exploring travel destinations around the world. Built with Expo and featuring an intuitive UI for browsing destinations, searching, filtering, and viewing detailed information.
This project follows industry-standard best practices and coding standards:
- Separation of Concerns: Code organized into clear layers (UI, business logic, utilities)
- DRY Principle: Reusable utility functions and components
- Type Safety: Full TypeScript implementation with strict typing
- Error Handling: Comprehensive error boundaries and standardized error handling
- Documentation: JSDoc comments on all public functions and components
-
Constants Module (
constants/app.ts): Centralized configuration- Storage keys for AsyncStorage/SecureStore
- API endpoints and configuration
- Theme colors (light/dark mode)
- Validation rules
-
Types Module (
types/index.ts): TypeScript definitions- User, Auth, and Destination interfaces
- Theme and color scheme types
- API error types
- Component prop types
-
Utilities Module (
utils/helpers.ts): Pure helper functions- Price formatting
- Safe JSON parsing with fallbacks
- Standardized error creation
- Email and password validation
- Debounce and text truncation
- Authentication Context: Secure user authentication with encrypted token storage
- Favorites Context: Persistent favorite destinations management
- Theme Context: System/light/dark theme support with user preferences
- Error Boundaries: Catch and display errors gracefully without crashes
- Standardized Errors: Consistent error format across the application
- Validation: Input validation for forms (email, password, username)
- Fallback UI: User-friendly error messages and recovery options
- Dark Mode: Full dark mode support across all screens
- Responsive Design: Adaptive layouts for various screen sizes
- Haptic Feedback: Touch feedback for better user experience
- Loading States: Proper loading indicators during async operations
- Form Validation: Real-time validation with error messages
- Featured destinations carousel
- Popular destinations list
- Category browsing (Beach, Mountain, City, Adventure, Cultural)
- Quick search functionality
- Beautiful destination cards with ratings and pricing
- Advanced search with real-time filtering
- Category filters (All, Beach, Mountain, City, Adventure, Cultural)
- Sort by rating or price
- Comprehensive destination listings
- Interactive search with clear functionality
- High-quality destination images
- Detailed descriptions and information
- Key statistics (Duration, Price, Category)
- Highlights and activities
- Best time to visit information
- Booking functionality
- React Native - Cross-platform mobile development
- Expo - Development platform and tools
- TypeScript - Type-safe development
- Expo Router - File-based routing
- Expo Vector Icons - Beautiful icon library
- React Navigation - Navigation solution
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI (
npm install -g expo-cli)
-
Install dependencies
npm install
-
Start the development server
npx expo start
-
Run on your device
- Scan the QR code with Expo Go app (Android/iOS)
- Press
afor Android emulator - Press
ifor iOS simulator - Press
wfor web browser
VistaGo/
βββ app/
β βββ (tabs)/
β β βββ index.tsx # Home screen
β β βββ explore.tsx # Explore screen with filters
β β βββ favorites.tsx # Saved destinations
β β βββ profile.tsx # User profile & settings
β β βββ _layout.tsx # Tab navigation layout
β βββ auth/
β β βββ login.tsx # Login screen with validation
β β βββ register.tsx # Registration with validation
β βββ destination/
β β βββ [id].tsx # Dynamic destination details
β βββ _layout.tsx # Root layout with error boundary
βββ components/
β βββ destination-card.tsx # Reusable destination card
β βββ error-boundary.tsx # Error catching component
β βββ ui/ # UI components
βββ constants/
β βββ app.ts # Centralized constants & config
β βββ destinations.ts # Destination data
β βββ theme.ts # Theme configuration
βββ contexts/
β βββ auth-context.tsx # Authentication state management
β βββ favorites-context.tsx # Favorites state management
β βββ theme-context.tsx # Theme state management
βββ types/
β βββ index.ts # TypeScript type definitions
βββ utils/
β βββ helpers.ts # Utility functions
βββ assets/ # Images and fonts
Centralized configuration to eliminate magic strings and improve maintainability:
STORAGE_KEYS: Keys for AsyncStorage and SecureStoreAPI_CONFIG: Base URLs, endpoints, and timeoutsCOLORS: Light and dark mode color palettesVALIDATION: Validation rules for forms
TypeScript interfaces and types for type safety:
- User authentication types
- Destination data structures
- Theme and UI types
- API error types
Pure utility functions with no side effects:
- Data formatting (prices, dates, text)
- Safe JSON parsing with fallbacks
- Validation helpers (email, password)
- Debounce and performance utilities
React Context API for global state management:
- Authentication with secure token storage
- Favorites with persistent storage
- Theme with system/light/dark modes
- Comprehensive destination type with all required fields
- 10+ pre-populated destinations with real data
- Categories: Beach, Mountain, City, Adventure, Cultural
- Rich metadata including ratings, prices, durations, activities
- Custom destination cards with images and overlays
- Category chips and filters
- Search bar with clear functionality
- Sort controls (Rating/Price)
- Responsive layouts
- Tab-based navigation (Home & Explore)
- Stack navigation for destination details
- Smooth transitions and animations
- Back navigation with custom buttons
- Real-time search filtering
- Category-based filtering
- Dynamic sorting (rating/price)
- Detailed destination views
- Favorite functionality (UI ready)
- Booking interface (UI ready)
npm start- Start Expo development servernpm run android- Run on Android device/emulatornpm run ios- Run on iOS simulatornpm run web- Run in web browsernpm run lint- Run ESLint
To add new destinations, edit constants/destinations.ts:
{
id: 'unique-id',
name: 'Destination Name',
country: 'Country',
description: 'Description...',
image: 'https://image-url.com',
rating: 4.8,
price: 1500,
duration: '7 days',
category: 'beach',
highlights: ['...'],
bestTimeToVisit: '...',
activities: ['...']
}- User authentication
- Booking system integration
- Favorites persistence
- Social sharing
- User reviews and ratings
- Map integration
- Price comparison
- Travel itinerary planner
- Offline mode
- Push notifications
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.
For questions or feedback, please reach out through GitHub issues.
Made with β€οΈ using React Native and Expo