README

QuickBite App

A mobile-style food delivery web app built with React and AWS. Browse restaurants, add items to your cart, and place orders - all secured with Cognito authentication.

React 18 + Vite React Router v6 AWS Amplify Lambda (Python) Lambda (Node.js) API Gateway DynamoDB Cognito Terraform S3 / CloudFront GitHub Actions

Project Structure

QuickBite/
├── quickbite-react/        React frontend
│   ├── src/
│   │   ├── auth/           Cognito + Amplify config
│   │   ├── components/     BottomNav, RestaurantCard, SectionHeader
│   │   ├── data/            API fetch functions
│   │   └── pages/          Home, Search, Orders, Cart, Account, etc.
│   └── lambda/              Restaurants Lambda (Python)
├── lambda-orders/          Orders Lambda (Node.js)
├── terraform/               All AWS infrastructure as code
└── .github/workflows/      GitHub Actions CI/CD

Pages

RouteDescriptionAuth Required
/Home - browse restaurantsNo
/searchSearch and filterNo
/restaurant/:idRestaurant detail + menuNo
/cartCart and checkoutYes
/ordersOrder historyYes
/favoritesSaved restaurantsYes
/accountAccount settingsYes
/loginLoginNo
/signupSign upNo

Local Development

cd quickbite-react
npm install
npm run dev

Create a .env file in quickbite-react/ using .env.example as a template:

VITE_COGNITO_USER_POOL_ID=us-east-2_xxxxxxxxx
VITE_COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx
VITE_COGNITO_REGION=us-east-2
VITE_API_URL=https://<api-id>.execute-api.us-east-2.amazonaws.com/prod/restaurants
VITE_ORDERS_API_URL=https://<api-id>.execute-api.us-east-2.amazonaws.com/orders

Deploying

Build and upload frontend to S3

cd quickbite-react
npm run build
aws s3 sync dist/ s3://www.joesparkman.com/quickbite/ --delete
aws cloudfront create-invalidation --distribution-id E3HHU0R4DHMA69 --paths "/quickbite/*"

Deploy infrastructure changes

cd terraform
terraform plan
terraform apply

Or push changes to main and GitHub Actions applies automatically.

Infrastructure

All AWS resources are managed with Terraform (see terraform/README.md in the repo for the full setup guide).

ResourceName
DynamoDBQuickBiteRestaurants, QuickBiteOrders
Cognitoquickbite-user-pool
LambdaQuickBiteRestaurants, QuickBiteOrders
API GatewayQuickBiteRestaurantsAPI, QuickBiteOrdersAPI
CloudFrontd378laui85ajnz.cloudfront.net
State Bucketjoesparkman-terraform-state
Open App Story Visual Diagram Back to Portfolio