Skip to content

juan-phzy/foodtruck-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MunchMap πŸ“πŸ”

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.


Current Completed Progress πŸš€

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

Current Project Directory Structure πŸ—‚οΈ

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

Getting Started πŸ› οΈ

Follow these instructions to set up and run the project locally.

Prerequisites

  • Node.js (Latest stable version recommended)
  • Expo CLI (or use npx expo commands, preferred)
  • Git (for version control)
  • Android Studio (for android emulator/android prebuilds)
  • XCode/Mac (for ios emulator/ios prebuilds)

Installation

WARNINGS:

  1. MAKE SURE THE REPO IS NOT WITHIN A LONG PATH ON YOUR MACHINE

  2. MAKE SURE THE REPO IS NOT WITHIN A ONEDRIVE OR DROPBOX SYNCED FOLDER

  3. Clone the repository:

    git clone https://github.com/juan-phzy/foodtruck-app.git
    cd munchmap
  4. Install dependencies:

    npm install
  5. Install Expo dependencies:

    npx expo install
  6. Set up your .env.local file with your Google API & Mapbox Key:

    EXPO_PUBLIC_GOOGLE_MAPS_API_KEY=your-google-api-key
    EXPO_PUBLIC_MAPBOX_KEY=your-mapbox-key
  7. Set up your .expo-env.d.ts file for expo env definition:

    /// <reference types="expo/types" />
    // NOTE: This file should not be edited and should be in your git ignore
  8. Run expo doctor to ensure all dependencies are compatible:

    npx expo-doctor

Running the App

WARNINGS

  1. Expo GO is NOT supported for this project.

  2. Prebuilds are NECESSARY to run the project

  3. Create a prebuild if android or ios folder is not present within your project:

    npx expo prebuild --clean
  4. 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

How to Use πŸ§‘β€πŸ’»

  1. 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.
  2. Search Food Trucks:

    • Use the search bar to find locations using the Google Places API.
    • The map will center on the selected location.
  3. 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
  4. Filter Trucks:

    • Filter food trucks by categories dynamically.
    • Reorder food truck list by distance or rating
  5. 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
  6. 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

Key Technologies Used πŸ› οΈ

  • 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

Team Members πŸ‘₯

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]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5