Giter Club home page Giter Club logo

gooddog-challenge's Introduction

BreedSelect Homework Assignment

Context

We currently have a list of 1500 dog breeds, and we've built a BreedSelect component to allow users to search through all of them in a relatively simple and intuitive manner. However, some breeders have expressed concerns about pure breeds being interleaved with mixed breeds and have suggested that we visually group them into "Pure Breeds" and "Mixed Breeds" in the search results. So let's get started!

Getting started

  • Install Yarn
  • Run yarn install in the base directory
  • Run yarn server to start the Express server for making calls to the API
  • Run yarn client to start the Webpack server for compiling React/JSX
  • Go to http://localhost:3000 and start developing!

To run tests, use the yarn test command.

Project Structure

This is a bare-bones project with a simple Express server with a single endpoint at /breeds that returns all the breeds we have available in breeds.json. index.html has a mount point (<div id="mount"></div>) into which the React application is rendered, so there's no need to touch it!

For the assignment, you'll need to update the BreedSelect component (and potentially the App component) to make the requested feature updates.

Evaluation

We're looking for how you'd go about addressing this feature request for a live site, so attention to detail and care for the code ecosystem are part of our criteria. The feature also, of course, has to work. :)

These are some other areas we'll be looking at, with some specific examples of what they mean:

  • Code clarity
    • Does the code make sense?
    • Are there comments clarifying future TODOs or caveats?
  • Testing
    • Does the correct rendered state under different circumstances + different inputs
    • Handling of empty, edge-case states
  • Optimizations
    • How can the client-side performance be improved?
    • How can the server performance be improved?

The end result should look similar the following:

Two Groups

They don't need to be styled (just visually grouped), but bonus points if you add CSS into the mix -- see below!

Additionally, we've added a failing test cases that we'd like you to fix once you have your solution. There's also an optional one regarding the display of non-live breeds if you want to tackle that as well.

Bonus

If you're feeling up to it, you can try tackling the following tasks for some bonus/brownie points. They're not required, so don't feel pressured to get them in.

  • Add some CSS to get the finished product as close to the mockups above!

  • Add a third group, "Non-Live Breeds", for the non-live breeds (live: false):

    Three Groups

    (This means that all non-live breeds -- mixed or not -- should be moved to this new third group! No duplicates!)

Development

The following dependencies are included as part of this project:

  • babel
  • webpack
  • express
  • isomorphic-fetch
  • react
  • classnames
  • jest

Dependencies can be added for testing or CSS but not for JavaScript/React implementation.

Submission

The submit your solution, open up a pull request against the master branch. If you want to explain your solution, fill out IMPLEMENTATION_NOTES -- you can also add in some ideas for future extensions or optimizations if you don't get to them in your implementation.

SUBMISSION CHECKLIST

  • Is my solution working?
  • Did I fill out IMPLEMENTATION_NOTES with details about my solution?
    • (Optional) Did I add notes about extensions and optimizations for my solution?
  • Did I fix the failing test case?
    • (Optional) Did I enable and fix the test case about non-live breeds?

If you get stuck or have any questions/comments, don't hesitate to reach out to any one of us:

  • stephen[at]gooddog.com
  • peleg[at]gooddog.com
  • pat.mcgee[at]gooddog.com

gooddog-challenge's People

Contributors

neuhausneuhaus avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.