GithubHelp home page GithubHelp logo

full-stack-challenge-moonpay's Introduction

The new standard for fiat to crypto

Take Home Test (Backend & Frontend)

Overview

This is a takehome test for candidates applying for a full-stack developer position at MoonPay. It contains three sections: "Frontend", "Backend" and "Follow-up" which together include a series of tests involving JavaScript, React, Node.js, HTML and CSS.

The goal is to test your skills in React, NodeJS and preferably TypeScript.

Feel free to solve these questions however you see fit, using whatever coding style or third-party libraries you think are appropriate.

To start the test, simply clone this repo and make your edits locally.

Frontend

For the frontend portion of the test, use the /frontend folder. There are 7 features we'd like to add:

  1. Fetch and display the list of currencies available on MoonPay (see endpoint below).
  2. Add a responsive functionality for the layout, which will display one column on mobile devices, two columns on tablet devices, and three columns on desktops.

Front-end layout

  1. Add a toggle to control if currencies not supported in the US should be displayed.
  2. Add a toggle to control if currencies not available in test mode should be displayed.
    1. We expect that filters from points 3. and 4. can be combined together.
  3. Add a button to sort the list of currencies by alphabetical order using the name of the currencies.
  4. Add a button to sort the list of currencies by alphabetical order using the symbol/code of the currencies.
  5. Add a button to apply a random shuffle to the list of currencies when it is clicked.

NOTE: Please make the app be served on port :3000.

Feel free to structure the code however you prefer and use third-party libraries at your discretion.

Do not spend too much time on making it beautiful. Basic aesthetics are welcome, but we are not grading your design skills here.

API Information

Backend

For the backend portion of the test, use the /backend folder. We'd like to write some code that achieves the following:

  1. Create a JSON API (REST or GraphQL) using Node.js which will return which cryptocurrency exchange we should use to buy a given amount of Bitcoin to minimize the amount of USD or USDT we'll spend on this trade.

Example API call (for 1 BTC):

curl http://localhost:4000/exchange-routing?amount=1

Example API response (if Coinbase price of $10,000 / BTC is the cheapest):

{
  "btcAmount": 1,
  "usdAmount": 10000,
  "exchange": "coinbase"
}
  1. You'll need to compare Binance and Coinbase order books and compute the best execution price for the given amount of Bitcoin we want to buy. (You can assume that 1 USDT = 1 USD at all time.)
  2. [Bonus] Add a third exchange to compare with Binance and Coinbase.

Feel free to structure the code however you prefer and use third-party libraries at your discretion.

NOTE: Please make the server listen on port :4000.

API Information & Documentation

Note that both APIs above are public and don't require any authentication.

Follow-up

Answer the questions in the FOLLOW-UP.md file.

Docker

The test contains a basic docker-compose.yml file. It uses the latest official NodeJS Docker image and creates two containers - one for backend and one for frontend.

The respective folder is mounted in /app directory inside the container.

We WILL run your code inside these containers so please make sure your apps load correctly in this setup.

Submitting Your Code

Once you've completed the test, please compress your files (via zip or tar) and return them as a link or email attachment in reply to your test invite. We'd like the code in your submission to remain private, so please avoid committing or pushing the code publicly.

Do not include node_modules or .git in your submission

Once we receive it, a member of our team will review and we'll get back to you as soon as possible.

Thanks!

full-stack-challenge-moonpay's People

Contributors

tiagoalves avatar nazwa avatar smalusecki avatar djanoskova avatar mashikag avatar michaldudek avatar pekunicki avatar vfaramond 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.