Skip to content

ehwreck/food-trucks

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Engineering Challenge

We strive to be a practical and pragmatic team. That extends to the way that we work with you to understand if this team is a great fit for you. We want you to come away with a great understanding of the kind of things that we actually do day to day and what it is like to work in our teams.

We don't believe that whiteboard coding with someone watching over your shoulder accurately reflects our day to day. Instead we'd like to be able to discuss code that you have already written when we meet.

This can be a project of your own or a substantial pull request on an open source project, but we recognize that most people have done private or proprietary work and this engineering challenge is for you.

We realize that taking on this assignment represents a time commitment for you, and we do not take that lightly. Throughout the recruitment process we will be respectful of your time and commit to working quickly and efficiently. This will be the only technical assessment you'll be asked to do. The brief following conversations will be based on this assessment and your prior experiences.

Challenge Guidelines

  • This is meant to be an assignment that you spend approximately two to three hours of focused coding. Do not feel that you need to spend extra time to make a good impression. Smaller amounts of high quality code will let us have a much better conversation than large amounts of low quality code.

  • Think of this like an open source project. Create a repo on Github, use git for source control, and use a Readme file to document what you built for the newcomer to your project.

  • We build systems engineered to run in production. Given this, please organize, design, test, deploy, and document your solution as if you were going to put it into production. We completely understand this might mean you can't do much in the time budget. Prioritize production-readiness over features.

  • Think out loud in your documentation. Write our tradeoffs, the thoughts behind your choices, or things you would do or do differently if you were able to spend more time on the project or do it a second time.

  • We have a variety of languages and frameworks that we use, but we don't expect you to know them ahead of time. For this assignment you can make whatever choices that let you express the best solution to the problem given your knowledge and favorite tools without any restriction. Please make sure to document how to get started with your solution in terms of setup so that we'd be able to run it.

  • Once this is functioning and documented to your liking, either send us a link to your public repo or compress the project directory, give the file a pithy name which includes your own name, and send the file to us.

The Challenge

As the song says, "you've got to play the hand you're dealt", and in this case your hand is to implement something to help us manage our food truck habit.

Our team loves to eat. They are also a team that loves variety, so they also like to discover new places to eat.

In fact, we have a particular affection for food trucks. One of the great things about Food Trucks in San Francisco is that the city releases a list of them as open data.

Your assignment is to make it possible for our teams to do something interesting with this food trucks data.

This is a freeform assignment. You can write a web API that returns a set of food trucks. You can write a web frontend that visualizes the nearby food trucks for a given place. You can create a CLI that lets us get the names of all the taco trucks in the city. You can create system that spits out a container with a placeholder webpage featuring the name of each food truck to help their marketing efforts. You're not limited by these ideas at all, but hopefully those are enough help spark your own creativity. San Francisco's food truck open dataset is located here and there is an endpoint with a CSV dump of the latest data here. We've also included a copy of the data in this repo as well.

Developer Notes

To start the servers run the following command in the root directory: npm start

The functionality added is listed below:

  • If the searchbox is empty - general results will be displayed
  • If the searchbox is not empty a search will be requested from the api. The API will then return results based on relevance from the keywords entered. Relevance is calculated based on how many times the keywords in the searchbox are present in a given result. If no relevant results are found a "No results found" indicator will be shown in the application. If relevant results were found, results will be sorted by relevance. The most relevant results will be listed first. The UI will only show the first 12 results. I will maybe add pagination. (Let me know if you want to see this.)
  • The front end application is a react application and it is running on PORT 3000.
  • The NODE JS API is running on PORT 3001
  • The HTTP request from the React application to the NODE JS API is being made using the fetch API.
  • The Node JS server has two endpoint.
  • The first endpoint is for a GET request with path '/'. This first endpoint creates a new array of objects with only the name, address, and menu.
  • The second endpoing is for a POST request with path '/'. This second endpoint creates a new array of objects with only the name, address, and menu. It then calculates relevancy from the results (previously explained) and adds a property to the objects called relevance which contains an integer value. The array is then filtered to only show relevant results by removing all object with a relevance of 0. The array is then sorted by the relevance property and places the most relevant results first.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 64.6%
  • HTML 20.2%
  • CSS 15.2%