This is a simple app that uses a Node GraphQL backend and a React/Typescript frontend.
The backend is a single GraphQL endpoint which returns a list of ICO contributions from different users. The backend uses an apollo-server as it is straight forward to implement and has proper documentation.
This is a react based app that uses apollo-client to get data from the endpoint and redux to manage the state of the app. This displays three charts that analysis the total contributions of each currency per users (per address), the total currencies per type, and the total currency contributed by each user.
Two types of filtering are implemented; filtering by currency and filtering by value.
MaterialUI and SASS are used for styling and Rechart is the choice of chart rendering tool use which is due to the varieties of chart it provides and a proper documentation with examples.
The app has been dockerized to make distribution easy and avoid dependencies issue. You can run the app by following the steps below
- start by cloning the app;
RUN git clone git@github.com:abdul-mumeen/fullstack-project.git using SSH
RUN git clone https://github.com/abdul-mumeen/fullstack-project.git using HTTPS
- Move into project root folder
RUN cd fullstack-project
-
Install a single dependecy which is docker. You will need docker to run the app without so much hassle so you can find the instruction on how to install it here
-
Start the app
RUN docker-compose up
- Go to
localhost:3000/to access the app.
-
Perform step 1 and 2 above.
-
Open the server root directory
cd serverand RUNnpm start -
Open the frontend root directory in a different terminal and RUN
npm start -
Go to
localhost:3000/to access the app.
The following are missing from the app due to time constraints;
- Testing
- Deployment
Your task is to build a NodeJS/GraphQL API that returns a list of ICO contributions and a React app that visualizes this data in a meaningful way.
- Create a new repo wherever you like. Can be GitHub/GitLab/Bitbucket, doesn't matter.
- In your repo, build a NodeJS API with a single GraphQL endpoint that returns a list of ICO contributions.
- In the same repo, build a small React app that consumes the API and visualizes the data. There's not 1 right solution, but a few example features could be:
- Use charts to visualize the data
- Filter contributions by currency type
- Filter contributions by amount
- Create a README.md explaining how to test the features you have built. Feel free to add additional thoughts, e.g. why you chose certain libraries or why you implemented a feature in a certain way etc.
- Send us an email to dev@brickblock.io when you're ready to have it reviewed
ICO contributions have the following structure:
{
"address": "183nLVZFt3W6G79o5Yx8bTiEBsjER9eMVZ", // An Ethereum, Bitcoin or Litecoin address that contributed to our ICO
"currency": "BTC", // Can be "ETH", "BTC" or "LTC"
"value": 504114, // The contributed amount in the smallest possible unit (e.g. "wei" for Ethereum contributions, or "satoshi" for Bitcoin contributions
"txid": "f6b48e20e78ed5800ca07ea2a782a14227fee043de86f88eaaebcd88d34c9650" // The transaction ID of this contribution
}
- Your API accepts a GraphQL query and returns ICO contributions
- Your React app fetches data from the API and displays it in the UI
- Your app uses redux to manage its state
- Your app is easy to install and run locally
- Code Quality - The code is clean, well-structured and easy to understand
- UX - Your app is easy to use and works well
- UI - Your app looks great
- Set up a CI pipeline for enforcing code quality e.g. eslint, flow, prettier
- Dockerize the app
- Deploy the app somewhere
- Add unit tests
- Add end-to-end tests
- Surprise us
There are not many rules, really. It's all about the result. However, here are a few clarifications:
- Feel free to use as many 3rd party libraries as you'd like.
- It’s ok and even encouraged to look for inspiration elsewhere but if you're taking the lazy way of just copy-and-pasting CodePen snippets: We’ll know.