MunchMap is a mobile-first application designed to help users discover nearby food trucks and enjoy a seamless browsing experience. The app features a sleek design, modern UI/UX, and functionality for user authentication, account creation, and personalization.
- Sign-In Screen: Users can log in via phone or email with a beautifully designed interface.
- Sign-Up Screen: Simple and intuitive account creation with fields for personal and contact information.
- Theming: Unified theme for consistent design, including colors, font sizes, and padding.
- Custom Components: Custom and standardized components built from scratch that provide style consistency throughout our application.
- Blur and Gradient Effects: Modern design elements such as background blur and gradients.
- Food Truck List and Search:
- Dynamically filter food trucks by category.
- Dynamically order trucks by rating or by distance.
- Interactive Google Places search integration for seamless location updates.
- Interactive Map:
- Custom marker icons for food trucks.
- Smooth zooming and animation transitions upon truck selection.
- Center map based on user searches.
- Selected Truck Details:
- View detailed truck information with categories, ratings, and image galleries.
- Interactive buttons for menu, directions, and truck-specific views.
- Search Page Integrated:
- Recommended truck lists rendered out.
- Search by category rendered out.
FOODTRUCK-APP
β
βββ .expo # This folder automatically appears when a dev server is ran
β
βββ android # This folder automatically appears when an android prebuild is created
β
βββ ios # This folder automatically appears when an ios prebuild is created
β
βββ app
| βββ (auth) # Root Authentication Route
β β βββ createBusiness.tsx # Vendor Account Creation & Business Onboarding
β | β βββ _layout.tsx # Create Business Stack Layout
β | β βββ step1.tsx # Step 1: Vendor Name
β | β βββ step2.tsx # Step 2: Vendor Contact Info
β | β βββ step3.tsx # Step 3: Vendor Password
β | β βββ step4.tsx # Step 4: Review & Create Vendor Account
β | β βββ step5.tsx # Step 5: Verify Account Email With Code
β | β βββ step6.tsx # Step 6: Register Business Name
β | β βββ step7.tsx # Step 7: Set Public Business Info
β | β βββ step8.tsx # Step 8: Set Business Categories
β | β βββ step9.tsx # Step 9: Set Business Socials
β β βββ createUser.tsx # User Account Creation
β | β βββ _layout.tsx # Create Business Stack Layout
β | β βββ step1.tsx # Step 1: User Name
β | β βββ step2.tsx # Step 2: User Contact Info
β | β βββ step3.tsx # Step 3: User Password
β | β βββ step4.tsx # Step 4: Review & Create User Account
β | β βββ step5.tsx # Step 5: Verify Account Email With Code
β β βββ _layout.tsx # Auth layout file
| | βββ login.tsx # Login Screen
| |
| βββ (public) # Public Tabs Route
β β βββ profile # Public User Profile Route
β | β βββ settings.tsx # User Profile Settings Page
| β | β βββ [section].tsx # Settings Section (profile, security, notifs...)
| | β | β βββ _layout.tsx # Settings Section Layout
| | β | β βββ [subsection].tsx # Edit Settings Input Page
| | β | β βββ index.tsx # Edit Section Settings
| β | β βββ _layout.tsx # Settings Stack Layout
| β | β βββ index.tsx # User Profile Settings Index
β | β βββ _layout.tsx # Profile Tab Inner Stack Layout
β | β βββ [subsection].tsx # Profile Tab Subsection For Truck Lists
β | β βββ categories.tsx # User Favorite Categories Page
β | β βββ profilePage.tsx # Profile Tab Main Index Page
| | |
β β βββ _layout.tsx # Public Side Root Layout - Defines Tabs
β β βββ index.tsx # Public User Home Page - Main Map
β β βββ search.tsx # Public User Search Page
| | βββ test.tsx # Public Side Test Page
| |
β βββ (vendor) # Vendor Tabs Route
β β βββ account # Account Tab
β | β βββ settings.tsx # Account Settings Route
| β | β βββ [section].tsx # Settings Section (profile, security, notifs...)
| | β | β βββ _layout.tsx # Settings Section Layout
| | β | β βββ [subsection].tsx # Edit Settings Input Page
| | β | β βββ index.tsx # Edit Section Settings
| β | β βββ _layout.tsx # Account Settings Stack Layout
| β | β βββ index.tsx # Account Settings Index
β | β βββ _layout.tsx # Account Stack Layout
β | β βββ index.tsx # Account Index
| | |
β β βββ employees # Employees Tab
β | | βββ [userID] # Manage Employee Stack
| β | β βββ _layout.tsx # Manage User Page Inner Stack Layout
| β | β βββ manageUser.tsx # Manage User Screen
| β | β βββ setAccess.tsx # Set User Access Page
β | | βββ _layout.tsx # Vendor Users Tab Inner Stack Layout
β | | βββ index.tsx # Employees Tab Index
| | |
β β βββ locations # Vendor Home Tab - Manage Locations (Trucks & Stands)
β | β βββ _layout.tsx # Locations Tab Inner Stack Layout
β | β βββ [truckID].tsx # Manage Truck/Stand Page
β | β βββ add-truck.tsx # Add Truck Page
β | β βββ index.tsx # Locations Tab Main Index Page
| | |
β β βββ menu # Menu Tab - Manage Menus
β | β βββ _layout.tsx # Menu Tab Inner Stack Layout
β | β βββ [menuID].tsx # Manage Truck/Stand Page
β | β βββ add-menu.tsx # Add Menu Page
β | β βββ index.tsx # Menu Tab Main Index Page
| | |
β β βββ _layout.tsx_ # Vendor Side Root Layout - Defines Tabs
β β βββ test.tsx_ # Vendor Test Page
| |
β βββ _layout.tsx # Root App layout
β βββ index.tsx # Root Screen (just for navigation)
β
βββ assets # Static assets
β βββ fonts # Fonts used in the application
β βββ images # Image folder
β βββ theme.ts # Global theme file
|
βββ components # Reusable UI components
β βββ buttons
β | βββ IconButton.tsx # Renders the icon buttons in vendor pages
β | βββ LargeIconButton.tsx # Renders the large buttons in profile page
β | βββ SmallIconButton.tsx # Renders the small buttons in vendor manage truck page
| | βββ StandardButton.tsx # Standard Button component with preset styles
β βββ cards
β | βββ EditInfoCard.tsx # Used for showing account settings. Has simple label and text
β | βββ FlatListCard.tsx # White labeled card with box shadow, takes in a title and children
β | βββ ItemCard.tsx # Renders a food item with name, price, description, and image
β | βββ TruckCard.tsx # Renders a fullsize food truck card
β | βββ TruckCardSmall.tsx # Renders a small food truck card
β βββ indexPage
| | βββ MapHeader.tsx # Renders Map Header with SearchBar and Toggles
| | βββ MapToggleRow.tsx # Renders Map Header Toggles
β | βββ NearbyTrucks.tsx # Renders the nearby trucks expandable card
β | βββ SelectedTruck.tsx # Renders the selected truck card
β βββ inputs
β | βββ EditInfoInput.tsx # Used for editing account settings. Has simple label and text input
β | βββ TextInputFancy.tsx # TextInput with our Signature Styling
β | βββ TextInputStandard.tsx # General TextInput component
β βββ lists
| | βββ TruckCardList.tsx # Renders a list of small truck cards
β βββ modals
β | βββ CategoryModal.tsx # Renders the category selection modal
β | βββ MenuModal.tsx # Renders the truck menu
β | βββ TruckModal.tsx # Renders the full truck modal
β βββ navigation
β | βββ InitialLayout.tsx # Used for auth navigation handling throughout app
β βββ profilePage
β | βββ AchievementSection.tsx # Renders the achievement section
β | βββ ProfileHeader.tsx # Renders the profile header
β βββ rows
β | βββ SideBySideRow.tsx # Used for auth navigation handling throughout app
β βββ search
β βββ MapSearchBar.tsx # Renders the autocomplete map searchbar
|
βββ convex # Convex Backend Folder
β βββ _generated # Automatically Generated Server Files
β βββ auth.config.ts # Auth configuration for convex
β βββ businesses.ts # Business Mutations / Queries
β βββ http.ts
β βββ README.md
β βββ schema.ts # Database Table Schemas
β βββ trucks.ts # Truck Mutations / Queries
β βββ tsconfig.json # Backend TypeScript Configuration
β βββ users.ts # User Mutations / Queries
β βββ vendors.ts # Vendor Mutations / Queries
|
βββ docs # Markdown Documentation
β βββ gitWorkflow.md # Guide for GitHub Branch/Feature Workflow
| βββ styling.md # Guide for styling
|
βββ hooks # Hooks
| βββ useTrucksInViewport.ts # Fetches trucks within map boundary
|
βββ lib # Logic Handling
β βββ userSettings # User Profile Settings Handling
| | βββ handlers.ts
| | βββ mutations.ts
β βββ vendorSettings # Vendor Profile Settings Handling
| βββ handlers.ts
| βββ mutations.ts
β
βββ node_modules # Automatically appears when npm and expo is initialized
|
βββ providers # Context Providers
| βββ ClerkAndConvexProvider.tsx
β
βββ store # Contains Zustand custom hooks
β βββ useBusinessStore.ts # State management for signed in business
β βββ useFilterStore.ts # State management for selected category filters
β βββ useMapLayerStore.ts # State management for selected map layer style
β βββ useMenuModalStore.ts # State management for menu toggle
β βββ useTruckStore.ts # State management for selected truck on map
β βββ useUserLocationStore.ts # State management for user device location
β βββ useUserOnboardingStore.ts # State management for vendor creation & onboarding
β βββ useUserStore.ts # State management for convex user
β βββ useVendorOnboardingStore.ts # State management for vendor creation & onboarding
β βββ useVendorStore.ts # State management for vendor
|
βββ utils # Utility Folder
β βββ calculateDistance.ts
β βββ convertScheduleArrayToRecord.ts
β βββ helperFunctions.ts
β βββ showToast.ts
β βββ loadFonts.ts # Preloads all MaterialCommunityIcons
β
βββ .env.local # Local environment variables
β
βββ .gitignore # List of files to be ignored on github
β
βββ app.json # Expo project configuration
β
βββ constants.ts # Shared constants (e.g., category list, initial data)
β
βββ expo-env.d.ts # Environment variable definitions
β
βββ global.d.ts # Global module definitions
β
βββ package-lock.json # Dependencies
β
βββ package.json # Dependencies
β
βββ README.md # Project documentation
β
βββ tsconfig.json # TypeScript configuration
β
βββ types.ts # Type and Interface definitions for data handling
Follow these instructions to set up and run the project locally.
- Node.js (Latest stable version recommended)
- Expo CLI (or use
npx expocommands, preferred) - Git (for version control)
- Android Studio (for android emulator/android prebuilds)
- XCode/Mac (for ios emulator/ios prebuilds)
-
MAKE SURE THE REPO IS NOT WITHIN A LONG PATH ON YOUR MACHINE
-
MAKE SURE THE REPO IS NOT WITHIN A ONEDRIVE OR DROPBOX SYNCED FOLDER
-
Clone the repository:
git clone https://github.com/juan-phzy/foodtruck-app.git cd munchmap -
Install dependencies:
npm install
-
Install Expo dependencies:
npx expo install
-
Set up your
.env.localfile with your Google API & Mapbox Key:EXPO_PUBLIC_GOOGLE_MAPS_API_KEY=your-google-api-key EXPO_PUBLIC_MAPBOX_KEY=your-mapbox-key
-
Set up your
.expo-env.d.tsfile for expo env definition:/// <reference types="expo/types" /> // NOTE: This file should not be edited and should be in your git ignore
-
Run expo doctor to ensure all dependencies are compatible:
npx expo-doctor
-
Expo GO is NOT supported for this project.
-
Prebuilds are NECESSARY to run the project
-
Create a prebuild if android or ios folder is not present within your project:
npx expo prebuild --clean
-
Choose a platform and emulator to run the app:
- Your emulator MUST have a screen size of 5". This is due to the react-native-size-matters dependency.
- npx expo run:android
- npx expo run:ios
-
Sign In:
- Launch the app.
- The backend is not yet set up, so you can access the app by simply pressing Sign In or Sign Up.
-
Search Food Trucks:
- Use the search bar to find locations using the Google Places API.
- The map will center on the selected location.
-
View Food Truck Details:
- Tap on a marker or truck card to view detailed information, including ratings, categories, and images.
- Tap on truck card's menu to view food items
- Tap on truck card's truck button to view full truck page
-
Filter Trucks:
- Filter food trucks by categories dynamically.
- Reorder food truck list by distance or rating
-
User Location:
- If you stray far on the map, press the location icon next to the search bar to move back to your device's location
-
Map Style:
- Toggle different map styles such as satellite, street, dark, and light by pressing the layers icon next to the search bar on the map
- React Native: Framework for building mobile applications.
- Expo: Development environment for React Native apps.
- TypeScript: Typed JavaScript for improved developer experience.
- Expo Router: Simplified navigation with file-based routing.
- Google Places API: Integrated location search functionality.
- Expo Blur: Background blur effects.
- Expo Linear Gradient: Stylish gradient overlays.
- rnmapbox: Interactive map rendering.
- react-native-size-matters: Auto scales sizing for consistent design across all screen sizes.
- Convex: All in one backend
- Clerk: Authentication
| Name | Role |
|---|---|
| Cheuk Tung Ho | Front-End Dev, Design Researcher |
| Elijah Ewers | Front-End Dev |
| Ghalia Azam | Backend Developer & Researcher |
| Juan Hernandez | Project Manager, Lead Developer, Designer |
| Krinal Kathiriya | Front-End Dev |
Contact the Lead at [email protected] or [email protected]