# Project export: Food Master

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: Cal Hacks 11.0
- Tagline: Optimize the price, ease, and quality of your favorite foods.
- Devpost: https://devpost.com/software/food-master
- GitHub: https://github.com/platinumblock/CalHacks11
- Team: 2 GitHub contributor(s) — chickenuget (7 commits), Daniel Lief (3 commits)

## Devpost submission (written by the team)

### Inspiration

Food can be tricky, especially for college students. There are so many options for your favorite foods, like restaurants, frozen foods, grocery stores, and even cooking yourself. We want to be able to get the foods we love, with the best experience.

### What it does

Shows you and compares all of the options for a specific dish you want to eat. Takes data from restaurants, grocery stores, and more and aggregates everything into an easy to understand list. Sorts based on a relevance algorithm to give you the best possible experience.

### How we built it

The frontend is HTML, CSS, and JS. The backend we used Python, NodeJS, Beautiful Soup for web scraping, and several APIs for getting data. We also used Google Firebase to store the data in a database.

### Challenges we ran into

It was difficult trying to decide the scope, and what we could realistically make in such a short time frame.

### Accomplishments we're proud of

We're proud of the overall smooth visuals, and the functionality of showing you many different options for foods.

### What we learned

We learned about web design, along with data collection with APIs and web scraping.

### What's next

We are hoping to implement the ChatGPT API to interpret restaurant menus and automate data collection.

## README (from the GitHub repository)

Cal Hacks 11.0 Submission 

Created in 18 hours


## Detected evidence (automated analysis)

Indexed codebase: 12 recognized source files, 44 KB.
- CSS (language) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- Firebase (technology) — claimed on Devpost, not found in the code
- Node.js (technology) — claimed on Devpost, not found in the code
- Python (language) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (12 of 12)

```
CalHacks11/index.html
CalHacks11/index.js
CalHacks11/search.html
CalHacks11/search.js
CalHacks11/style.css
index.html
index.js
README.md
script.js
search.html
search.js
style.css
```

### Dependencies

No dependency index available.

### Recent commits (newest first)

- Add files via upload
- Final Version
- Update README.md
- Add files via upload
- Add files via upload
- Add files via upload
- Add files via upload
- Add files via upload
- Add files via upload
- README.md
- Add files via upload

## Key source files (fetched from GitHub, selected and truncated for size)

### index.js

```javascript
function search(){
    location.href = "search.html?item=" + document.getElementById("search").value
}
document.getElementById("search").addEventListener('keyup', function (e) {
    if (e.key === 'Enter' || e.keyCode === 13) {
        search()
    }
});
const watchID = navigator.geolocation.watchPosition((position) => {
    console.log(position.coords.latitude + " " + position.coords.longitude);
});
```

### CalHacks11/index.js

```javascript
function search(){
    location.href = "search.html?item=" + document.getElementById("search").value
}
document.getElementById("search").addEventListener('keyup', function (e) {
    if (e.key === 'Enter' || e.keyCode === 13) {
        search()
    }
});
const watchID = navigator.geolocation.watchPosition((position) => {
    console.log(position.coords.latitude + " " + position.coords.longitude);
});
```

### index.html

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Cal Hacks 11</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <a id="title" href="index.html">Food Master</a>
    <a id="searchLink" href="search.html?item=nothing">Search</a>
    <div id="pitch1">Make Smarter Food Choices.</div>
    <div id="pitch2">Optimize the price, ease, and quality of your favorite foods.</div>
    <input type="text" id="search" placeholder="Enter a food item...">
    <button id="submitSearch" onclick="search()">Search</button>
    <img src="food.png" class="food" style="animation-delay:0s">
    <img src="food.png" class="food2" style="animation-delay:0s;">
    <img src="food.png" class="food" style="animation-delay:-6s">
    <img src="food.png" class="food2" style="animation-delay:-6s;">
    <img src="food.png" class="food" style="animation-delay:-12s">
    <img src="food.png" class="food2" style="animation-delay:-12s">
    <img src="food.png" class="food" style="animation-delay:-18s">
    <img src="food.png" class="food2" style="animation-delay:-18s">
    <script src="index.js"></script>
  </body>
</html>
```

### search.html

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Cal Hacks 11</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body style="overflow-y:scroll">
    <a id="title" href="index.html">Food Master</a>
    <a id="searchLink2" href="search.html?item=nothing">Search</a>
    <input type="text" id="search2" placeholder="Enter a food item...">
    <button id="submitSearch2" onclick="enterSearch()">Search</button>
    <div id="noResults" style="display:none;">No Results...</div>
    <select class="filter" id="priceFilter" style="left:30%">
        <option>All Prices</option>
        <option>Under $5</option>
        <option>Under $10</option>
        <option>Under $20</option>
    </select>
    <select class="filter" id="distanceFilter" style="left:39%">
        <option>All Distances</option>
        <option>Under 0.2mi</option>
        <option>Under 0.5mi</option>
        <option>Under 1.5mi</option>
    </select>
    <select class="filter" id="ratingsFilter" style="left:49.5%">
        <option>All Ratings</option>
        <option>Over 4.5</option>
        <option>Over 4.0</option>
        <option>Over 3.5</option>
    </select>
    <button id="circleBackground" style="display:none;" onclick="hideCircle()"></button>
    <div id="circle" style="display:none;animation:none">
        <div id="circleName">Taqueria Castillo</div>
        <div id="circleCuisine">Mexican Food</div>
        <div id="circleAddress">123 Channing Way, Berkeley, CA</div>
        <div id="circleDescription">Burritos & tacos feature prominently at this small, laid-back order-at-the-counter Mexican joint.</div>
    </div>
    <script src="search.js" type="module"></script>
  </body>
</html>
```

### script.js

```javascript
const { validateHeaderValue } = require("http")

var userLocation = "Metreon" //change with user"s location to be implemented later


//format: [name, distance, {items:price}]
const restaurants = [
    ["Bonchon", 0.03, 
        {
            "Chicken Wings":17.99,
            "Chicken Drumsticks":16.99,
            "Chicken Strips":17.99,
            "French Fries":5.99,
            "Edamame":7.49,
            "Fried Rice":13.99,
            "Steamed Rice":2.99
        }
    ],
    ["The Melt", 0.4, 
        {
            "Sandwich":10.49,
            "Cheeseburger":10.49, 
            "Sandwich":8.99,
            "Mac and Cheese":8.99,
            "French Fries":3.99,
            "Tomato Soup":4.79,
            "Salad":7.99,
            "Milkshake":5.99
        }
    ],
    ["SF Pizza", 0.3,
        {
            "Chicken Wings":10.99,
            "Pizza":10.99,
            "Salad":10.99
        }
    ],
    ["Blondie's Pizza", 0.4,
        {
            "Pizza":13.00,
            "Pasta":12.99,
            "Breadsticks":9.99,
            "Chicken Wings":9.99,
            "Salad":8.99
        }
    ],
    ["Abe's Pizza", 0.4,
        {
            "Pizza":13.00,
            "Pizza Slice":6.99,
            "Salad":8.99,
            "Chicken Wings":9.99,
        }
    ],
    ["Milan Pizza", 1.0,
        {
            "Pizza":16.70,
            "Pizza Slice":4.99,
            "Lasagna":13.79,
            "French Fries":5.00,
            "Chicken Wings":7.99,
            "Breadsticks":10.00,
            "Salad":7.50,
            "Calzone":21.90,
            "Sandwich":12.00,
        }
    ],
    ["California Pizza Kitchen", 0.3,
        {
            "Pizza":16.99,
            "Salad":15.99,
            "Mac and Cheese":15.99,
            "Pasta":17.99,
            "Burger":18.49,
            "Dumplings":11.99,
            "Egg rolls":14.99,
            "Tomato Soup":10.49,
            "Sandwich":17.74
        }
    ],
    ["SF Chickenbox", 1.5,
        {
            "Fries":4.25,
            "Sandwich":10.50,
            "Fried Chicken Box":15.00,
            "Steamed Rice":3.50,
            "Salad":6.00
        }
    ],
    ["The Bird", 0.4,
        {
            "Sandwich":10.25,
            "Fried Chicken":8.00,
            "Chicken Wings":8.00,
            "Salad":7.75,
            "Curly Fries":4.00
        }
    ],
    ["Krispy Krunchy Chicken", 0.4,
        {
            "Fried Chicken":8.24,
            "Chicken Wings":10.99,
            "Sandwich":6.99,
            "French Fries":5.99,
            "Mashed Potatoes":5.99,
            "Mac and Cheese":5.99
        }
    ],
    ["Taqueria Castillo", 0.7,
        {
            "Burrito":10.60,
            "Taco":3.69,
            "Quesadilla":9.25,
            "Nachos":8.75,
            "Torta":9.67
        }
    ],
    ["Buena Vida Cantina", 0.3,
        {
            "Salad":16.00,
            "Taco":5.00,
            "Burrito":18.00,
            "Birria Ramen":26.00
        }
    ],
    ["Chipotle", 0.015,
        {
            "Burrito":11.40,
            "Tacos":3.80,
            "Quesadilla":11.95,
            "Salad":11.40
        }
    ],
    ["Tropisueno", 0.1,
        {
            "Ceviche":11.45,
            "Salad":12.50,
            "Nachos":12.95,
            "Taco":5.98,
            "Burrito":10.45,
            "Torta":14.10,
            "Quesadilla":10.50
        }
    ],
    ["Taco Bell", 1.1,
        {
            "Burrito":1.99,
            "Taco":1.79,
            "Quesadilla":5.79,
            "Nachos":2.59
        }
    ]
]
console.log(restaurants.length + " restaurants in database.") //How many restaurants?

//How many times does each food show up? takes in restaurant list, returns a dictionary
function count_frequencies(restaurants) {

    var food_frequencies = {}
    for (var i = 0; i < restaurants.length; i++) {
        for (const [key, value] of Object.entries(restaurants[i][2])) {

            var new_key = key.toLowerCase()

            if (new_key in food_frequencies) {
                //console.log(`${key} has been found!`)
                food_frequencies[new_key] += 1
            }
            else {
                food_frequencies[new_key] = 1
            }
        }
    }

    //console.log(food_frequencies)
    //console.log(Object.keys(food_frequencies).length + " unique items!") //# of unique items

    return food_frequencies
}

//Search through restaurant database for desired_food (returns list of restaurants)
function search(restaurants, desired_food) {
    var desired_food = "Chicken".toLowerCase()
    var search_results = []

    for (var i = 0; i < restaurants.length; i++) {
        for (const [key, value] of Object.entries(restaurants[i][2])) {
            if (key.toLowerCase().includes(desired_food) && !(restaurants[i] in search_results)) {
                search_results.push(restaurants[i])
            }
        }
    }
    console.log(search_results)
    console.log(search_results.length + " restaurants found!")
}

//Search through ONE restaurant to find lowest menu item that contains desired_food
function lowest_price(restaurant, desired_food) {
    let lowest_price = null
    for (const [key, value] of Object.entries(restaurant[2])) {
        if (key.toLowerCase().includes(desired_food.toLowerCase())) {
            if (lowest_price === null || value < lowest_price) {
                lowest_price = value
            }
        }
    }
    if (lowest_price === null) {
        return "Item Not Found"
    }
    return lowest_price
}

```

### style.css

```css
@import url('https://fonts.googleapis.com/css2?family=Lexend+Deca:wght@100..900&display=swap');
body{
    font-family: "Lexend Deca", serif;
    overflow-x:hidden;
    overflow-y:hidden;
}
.food{
    width:30%;
    position:absolute;
    animation:slidedown 24s linear infinite;
    left:53%;
}
.food2{
    width:30%;
    position:absolute;
    animation:slidedown 24s linear infinite;
    left:82%;
}
@keyframes slidedown{
    0%{top:-35%;}
    100%{top:120%;}
}
#pitch1{
    font-size:30px;
    position:absolute;
    left:8%;
    top:30%;
    background: linear-gradient(orange, rgb(255, 132, 0));
    color:white;
    width:38%;
    height:10%;
    border-radius:5px;
    font-weight:700;
    display:flex;
    justify-content:center;
    align-items:center;
}
#pitch2{
    font-size:15px;
    position:absolute;
    left:10%;
    top:48%;
}
#search{
    background-color:rgb(235,235,235);
    position:absolute;
    width:24%;
    left:8%;
    border-radius:5px;
    top:58%;
    height:7%;
    border:none;
    font-family: "Lexend Deca", serif;
    padding-left:16px;
    font-size:18px;
    border:1px solid rgb(225,225,225);
    transition:0.1s all;
}
#search:focus{
    outline:none;
    transform:scale(1.02);
}
#submitSearch{
    font-size:20px;
    font-weight:700;
    position:absolute;
    background: linear-gradient(orange, rgb(255, 132, 0));
    color:white;
    left:36%;
    top:58%;
    width:10%;
    height:7.5%;
    display:flex;
    justify-content:center;
    align-items:center;
    font-family: "Lexend Deca", serif;
    border:none;
    border-radius:5px;
    transition:0.1s all;
}
#submitSearch:hover{
    transform:scale(1.05);
    cursor:pointer;
}
#title{
    font-size:23px;
    position:absolute;
    left:3%;
    top:5%;
    text-decoration:none;
    color:black;
}
#searchLink{
    font-size:23px;
    position:absolute;
    left:44%;
    top:5%;
    text-underline-offset:7px;
    color:black;
}
#searchLink2{
    font-size:23px;
    position:absolute;
    left:90%;
    top:5%;
    text-underline-offset:7px;
    color:black;
}
#search2{
    background-color:rgb(235,235,235);
    position:absolute;
    width:26%;
    left:30%;
    border-radius:5px;
    top:15%;
    height:7%;
    border:none;
    font-family: "Lexend Deca", serif;
    padding-left:16px;
    font-size:18px;
    border:1px solid rgb(225,225,225);
    transition:0.1s all;
}
#search2:focus{
    outline:none;
    transform:scale(1.02);
}
#submitSearch2{
    font-size:20px;
    font-weight:700;
    position:absolute;
    background: linear-gradient(orange, rgb(255, 132, 0));
    color:white;
    left:59%;
    top:15%;
    width:10%;
    height:7.5%;
    display:flex;
    justify-content:center;
    align-items:center;
    font-family: "Lexend Deca", serif;
    border:none;
    border-radius:5px;
    transition:0.1s all;
}
#submitSearch2:hover{
    transform:scale(1.05);
    cursor:pointer;
}
.place{
    width:50%;
    left:22.5%;
    height:15%;
    position:absolute;
    animation:fadein 0.2s forwards;
    font-family: "Lexend Deca", serif;
    background:none;
    border:none;
}
.place:hover{
    cursor:pointer;
}
.place:hover .placeName{
    transform:scale(1.05);
}
.place:hover .placeImage{
    transform:scale(1.05);
}
.place:hover .placeStats{
    transform:scale(1.05);
}
@keyframes fadein{
    0%{transform:scale(0);}
    100%{transform:scale(1);}
}
.placeImage{
    height:100%;
    width:14%;
    border-radius:5px;
    position:absolute;
    left:15%;
    top:0%;
    transition:0.1s all;
}
.placeName{
    position:absolute;
    left:35%;
    top:5%;
    font-size:27px;
    font-weight:700;
    transition:0.1s all;
}
.placeStats{
    position:absolute;
    left:35%;
    top:60%;
    font-size:19px;
    color:white;
    word-spacing:10px;
    transition:0.1s all;
}
.price{
    background:linear-gradient(rgb(22, 192, 22),rgb(0, 154, 0));
    padding-left:7px;
    padding-right:7px;
    padding-top:2px;
    padding-bottom:2px;
    border-radius:5px;
}
.distance{
    background:linear-gradient(rgb(0, 160, 223),rgb(26, 114, 222));
    padding-left:7px;
    padding-right:7px;
    padding-top:2px;
    padding-bottom:2px;
    border-radius:5px;
}
.reviews{
    background: linear-gradient(orange, rgb(255, 132, 0));
    padding-left:7px;
    padding-right:7px;
    padding-top:2px;
    padding-bottom:2px;
    border-radius:5px;
}
.filter{
    border:none;
    background-color:rgb(235,235,235);
    font-family: "Lexend Deca", serif;
    padding:5px;
    border-radius:5px;
    position:absolute;
    top:26%;
    border:1px solid rgb(225,225,225);
}
.filter:hover{
    cursor:pointer;
}
.filter:focus{
    outline:none;
}
#noResults{
    position:absolute;
    width:100%;
    left:0%;
    text-align:center;
    top:40%;
    font-size:45px;
}
@keyframes expand{
    0%{transform:scale(0);}
    100%{transform:scale(0.5);}
}
@keyframes depand{
    0%{transform:scale(0.5);}
    100%{transform:scale(0);}
}
#circle{
    position:absolute;
    width:100%;
    height:100%;;
    background-color:white;
    left:0%;
    top:0%;
    z-index:3;
    border-radius:20px;
    border:2px solid rgb(225,225,225);
}
#circleBackground{
    position:absolute;
    width:100%;
    height:100%;
    opacity:0;
    left:0%;
    top:0%;
    z-index:2;
    border-radius:20px;
}
#circleName{
    position:absolute;
    left:5%;
    top:5%;
    font-size:70px;
    font-weight:700;
}
#circleCuisine{
    position:absolute;
    right:5%;
    top:7%;
    font-size:40px;
    background: linear-gradient(orange, rgb(255, 132, 0));
    padding-left:17px;
    padding-right:17px;
    padding-top:6px;
    padding-bottom:6px;
    border-radius:5px;
    color:white;
}
#circleAddress{
[truncated — 188 more characters]
```

### search.js

```javascript

const restaurants = [
    ["Bonchon", 0.03, 
        {
            "Chicken Wings":17.99,
            "Chicken Drumsticks":16.99,
            "Chicken Strips":17.99,
            "French Fries":5.99,
            "Edamame":7.49,
            "Fried Rice":13.99,
            "Steamed Rice":2.99
        }, 4.2, "bonchon.png", "Korean Food", "135 4th Street, San Francisco, CA", "Bonchon is famous for crunchy Korean Fried Chicken. Our menu features unique recipes and a wide range of Korean comfort foods."
    ],
    ["The Melt", 0.4, 
        {
            "Cheeseburger":10.49, 
            "Sandwich":8.99,
            "Mac and Cheese":8.99,
            "French Fries":3.99,
            "Tomato Soup":4.79,
            "Salad":7.99,
            "Milkshake":5.99
        }, 4.0, "the-melt.png", "American Food", "925 Market Street, San Francisco, CA", "Here at The Melt, we believe when you melt with honest ingredients, amazing flavors come naturally."
    ],
    ["SF Pizza", 0.3,
        {
            "Chicken Wings":10.99,
            "Pizza":10.99,
            "Salad":10.99
        }, 3.1, "sf-pizza.jpg", "American Food", "883 Mission Street, San Francisco, CA", "Pizzeria offering a wide variety of pies, including vegan and gluten-free options."
    ],
    ["Blondie's Pizza", 0.4,
        {
            "Pizza":13.00,
            "Pasta":12.99,
            "Breadsticks":9.99,
            "Chicken Wings":9.99,
            "Salad":8.99
        }, 4.8, "blondie's-pizza.jpeg", "Italian Food", "865 Market Street, San Francisco, CA", "FRESH FROM BLONDIE'S PIZZA."
    ],
    ["Abe's Pizza", 0.4,
        {
            "Pizza":13.00,
            "Pizza Slice":6.99,
            "Salad":8.99,
            "Chicken Wings":9.99,
        }, 4.9, "abe's-pizza.jpeg", "American Food", "940 Market Street, San Francisco, CA", "Counter-service pizzeria selling a range of pies, but known for dispensing grab-and-go slices."
    ],
    ["Milan Pizza", 1.0,
        {
            "Pizza":16.70,
            "Pizza Slice":4.99,
            "Lasagna":13.79,
            "French Fries":5.00,
            "Chicken Wings":7.99,
            "Breadsticks":10.00,
            "Salad":7.50,
            "Calzone":21.90,
            "Sandwich":12.00,
        }, 3.6, "milan-pizza.jpeg", "Italian Food", "606 Geary Street, San Francisco, CA", "No-frills spot with very late hours that sells pizza by the slice & offers delivery."
    ],
    ["California Pizza Kitchen", 0.3,
        {
            "Pizza":16.99,
            "Salad":15.99,
            "Mac and Cheese":15.99,
            "Pasta":17.99,
            "Burger":18.49,
            "Dumplings":11.99,
            "Egg Rolls":14.99,
            "Tomato Soup":10.49,
            "Sandwich":17.74
        }, 3.5, "california-pizza-kitchen.jpg", "American Food", "53 3rd Street, San Francisco, CA", "Chain eatery serving up inventive pizzas, plus pastas & salads in a modern setting."
    ],
    ["SF Chickenbox", 1.5,
        {
            "Fries":4.25,
            "Sandwich":10.50,
            "Fried Chicken Box":15.00,
            "Steamed Rice":3.50,
            "Salad":6.00
        }, 4.1, "sf-chickenbox.png", "American Food", "464 Broadway, San Francisco, CA", "Counter-serve spot for halal fried chicken, mochi and sides in a laid-back setting."
    ],
    ["The Bird", 0.4,
        {
            "Sandwich":10.25,
            "Fried Chicken":8.00,
            "Chicken Wings":8.00,
            "Salad":7.75,
            "Curly Fries":4.00
        }, 4.3, "the-bird.png", "American Food", "115 New Montgomery Street, San Francisco, CA", "We're the ultimate fried chicken sandwich shop, now with 2 locations in San Francisco. We're the go-to for indulgent food that's made with integrity."
    ],
    ["Krispy Krunchy", 0.4,
        {
            "Chicken Wings":10.99,
            "Sandwich":6.99,
            "French Fries":5.99,
            "Mashed Potatoes":5.99,
            "Mac and Cheese":5.99
        }, 2.3, "krispy-krunchy-chicken.jpg", "American Food", "330 5th Street, San Francisco, CA", "Serve up freshly made, golden-fried deliciousness straight from your own counter."
    ],
    ["Taqueria Castillo", 0.7,
        {
            "Burrito":10.60,
            "Taco":3.69,
            "Quesadilla":9.25,
            "Nachos":8.75,
            "Torta":9.67
        }, 3.7, "taqueria-castillo.jpeg", "Mexican Food", "86 McAllister Street, San Francisco, CA", "Burritos & tacos feature prominently at this small, laid-back order-at-the-counter Mexican joint."
    ],
    ["Buena Vida Cantina", 0.3,
        {
            "Salad":16.00,
            "Taco":5.00,
            "Burrito":18.00,
            "Ramen":26.00
        }, 4.5, "buena-vida-cantina.jpeg", "Mexican Food", "860 Folsom Street, San Francisco, CA", "Laid-back neighborhood restaurant with outdoor seating dishing up Mexican classics."
    ],
    ["Chipotle", 0.015,
        {
            "Burrito":11.40,
            "Taco":3.80,
            "Quesadilla":11.95,
            "Salad":11.40
        }, 4.0, "chipotle.png", "Mexican Food", "121 4th Street, San Francisco, CA", "An international chain of fast casual restaurants specializing in bowls, tacos, and Mission burritos made to order in front of the customer."
    ],
    ["Tropisueno", 0.1,
        {
            "Ceviche":11.45,
            "Salad":12.50,
            "Nachos":12.95,
            "Taco":5.98,
            "Burrito":10.45,
            "Torta":14.10,
            "Quesadilla":10.50
        }, 3.5, "tropisueno.jpeg", "Mexican Food", "75 Yerba Buena Lane, San Francisco, CA", "Lively Mexican eatery serving classic plates and margaritas in a relaxed, upbeat environment."
    ],
    ["Taco Bell", 1.1,
        {
            "Burrito":1.99,
            "Taco":1.79,
            "Quesadilla":5.79,
            "Nachos":2.59
        }, 4.3, "taco-bell.jpeg", 
[truncated — 7999 more characters]
```

### CalHacks11/index.html

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Cal Hacks 11</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <a id="title" href="index.html">Food Master</a>
    <a id="searchLink" href="search.html?item=nothing">Search</a>
    <div id="pitch1">Make Smarter Food Choices.</div>
    <div id="pitch2">Optimize the price, ease, and quality of your favorite foods.</div>
    <input type="text" id="search" placeholder="Enter a food item...">
    <button id="submitSearch" onclick="search()">Search</button>
    <img src="food.png" class="food" style="animation-delay:0s">
    <img src="food.png" class="food2" style="animation-delay:0s;">
    <img src="food.png" class="food" style="animation-delay:-6s">
    <img src="food.png" class="food2" style="animation-delay:-6s;">
    <img src="food.png" class="food" style="animation-delay:-12s">
    <img src="food.png" class="food2" style="animation-delay:-12s">
    <img src="food.png" class="food" style="animation-delay:-18s">
    <img src="food.png" class="food2" style="animation-delay:-18s">
    <script src="index.js"></script>
  </body>
</html>
```

### CalHacks11/search.html

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Cal Hacks 11</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body style="overflow-y:scroll">
    <a id="title" href="index.html">Food Master</a>
    <a id="searchLink2" href="search.html?item=nothing">Search</a>
    <input type="text" id="search2" placeholder="Enter a food item...">
    <button id="submitSearch2" onclick="enterSearch()">Search</button>
    <div id="noResults" style="display:none;">No Results...</div>
    <select class="filter" id="priceFilter" style="left:30%">
        <option>All Prices</option>
        <option>Under $5</option>
        <option>Under $10</option>
        <option>Under $20</option>
    </select>
    <select class="filter" id="distanceFilter" style="left:39%">
        <option>All Distances</option>
        <option>Under 0.2mi</option>
        <option>Under 0.5mi</option>
        <option>Under 1.5mi</option>
    </select>
    <select class="filter" id="ratingsFilter" style="left:49.5%">
        <option>All Ratings</option>
        <option>Over 4.5</option>
        <option>Over 4.0</option>
        <option>Over 3.5</option>
    </select>
    <script src="search.js"></script>
  </body>
</html>
```

### CalHacks11/style.css

```css
@import url('https://fonts.googleapis.com/css2?family=Lexend+Deca:wght@100..900&display=swap');
body{
    font-family: "Lexend Deca", serif;
    overflow-x:hidden;
    overflow-y:hidden;
}
.food{
    width:30%;
    position:absolute;
    animation:slidedown 24s linear infinite;
    left:53%;
}
.food2{
    width:30%;
    position:absolute;
    animation:slidedown 24s linear infinite;
    left:82%;
}
@keyframes slidedown{
    0%{top:-35%;}
    100%{top:120%;}
}
#pitch1{
    font-size:30px;
    position:absolute;
    left:8%;
    top:30%;
    background: linear-gradient(orange, rgb(255, 132, 0));
    color:white;
    width:38%;
    height:10%;
    border-radius:5px;
    font-weight:700;
    display:flex;
    justify-content:center;
    align-items:center;
}
#pitch2{
    font-size:15px;
    position:absolute;
    left:10%;
    top:48%;
}
#search{
    background-color:rgb(235,235,235);
    position:absolute;
    width:24%;
    left:8%;
    border-radius:5px;
    top:58%;
    height:7%;
    border:none;
    font-family: "Lexend Deca", serif;
    padding-left:16px;
    font-size:18px;
    border:1px solid rgb(225,225,225);
    transition:0.1s all;
}
#search:focus{
    outline:none;
    transform:scale(1.02);
}
#submitSearch{
    font-size:20px;
    font-weight:700;
    position:absolute;
    background: linear-gradient(orange, rgb(255, 132, 0));
    color:white;
    left:36%;
    top:58%;
    width:10%;
    height:7.5%;
    display:flex;
    justify-content:center;
    align-items:center;
    font-family: "Lexend Deca", serif;
    border:none;
    border-radius:5px;
    transition:0.1s all;
}
#submitSearch:hover{
    transform:scale(1.05);
    cursor:pointer;
}
#title{
    font-size:23px;
    position:absolute;
    left:3%;
    top:5%;
    text-decoration:none;
    color:black;
}
#searchLink{
    font-size:23px;
    position:absolute;
    left:44%;
    top:5%;
    text-underline-offset:7px;
    color:black;
}
#searchLink2{
    font-size:23px;
    position:absolute;
    left:90%;
    top:5%;
    text-underline-offset:7px;
    color:black;
}
#search2{
    background-color:rgb(235,235,235);
    position:absolute;
    width:26%;
    left:30%;
    border-radius:5px;
    top:15%;
    height:7%;
    border:none;
    font-family: "Lexend Deca", serif;
    padding-left:16px;
    font-size:18px;
    border:1px solid rgb(225,225,225);
    transition:0.1s all;
}
#search2:focus{
    outline:none;
    transform:scale(1.02);
}
#submitSearch2{
    font-size:20px;
    font-weight:700;
    position:absolute;
    background: linear-gradient(orange, rgb(255, 132, 0));
    color:white;
    left:59%;
    top:15%;
    width:10%;
    height:7.5%;
    display:flex;
    justify-content:center;
    align-items:center;
    font-family: "Lexend Deca", serif;
    border:none;
    border-radius:5px;
    transition:0.1s all;
}
#submitSearch2:hover{
    transform:scale(1.05);
    cursor:pointer;
}
.place{
    width:50%;
    left:22.5%;
    height:15%;
    position:absolute;
    animation:fadein 0.2s forwards;
}
@keyframes fadein{
    0%{transform:scale(0);}
    100%{transform:scale(1);}
}
.placeImage{
    height:100%;
    width:15%;
    border-radius:5px;
    position:absolute;
    left:15%;
    top:0%;
}
.placeName{
    position:absolute;
    left:35%;
    top:5%;
    font-size:27px;
    font-weight:700;
}
.placeStats{
    position:absolute;
    left:35%;
    top:60%;
    font-size:19px;
    color:white;
    word-spacing:10px;
}
.price{
    background:linear-gradient(rgb(22, 192, 22),rgb(0, 154, 0));
    padding-left:7px;
    padding-right:7px;
    padding-top:2px;
    padding-bottom:2px;
    border-radius:5px;
}
.distance{
    background:linear-gradient(rgb(0, 160, 223),rgb(26, 114, 222));
    padding-left:7px;
    padding-right:7px;
    padding-top:2px;
    padding-bottom:2px;
    border-radius:5px;
}
.reviews{
    background: linear-gradient(orange, rgb(255, 132, 0));
    padding-left:7px;
    padding-right:7px;
    padding-top:2px;
    padding-bottom:2px;
    border-radius:5px;
}
.filter{
    border:none;
    background-color:rgb(235,235,235);
    font-family: "Lexend Deca", serif;
    padding:5px;
    border-radius:5px;
    position:absolute;
    top:26%;
    border:1px solid rgb(225,225,225);
}
.filter:hover{
    cursor:pointer;
}
.filter:focus{
    outline:none;
}
#noResults{
    position:absolute;
    width:100%;
    left:0%;
    text-align:center;
    top:40%;
    font-size:45px;
}

```

[1 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]