|
| 1 | +# Superformula Full Stack Developer Test |
| 2 | + |
| 3 | +Be sure to read **all** of this document carefully, and follow the guidelines within. |
| 4 | + |
| 5 | +## Backend Context |
| 6 | + |
| 7 | +Build a GraphQL API that can `create/read/update/delete` user data from a persistence store. |
| 8 | + |
| 9 | +### User Model |
| 10 | + |
| 11 | +``` |
| 12 | +{ |
| 13 | + "id": "xxx", // user ID (must be unique) |
| 14 | + "name": "backend test", // user name |
| 15 | + "dob": "", // date of birth |
| 16 | + "address": "", // user address |
| 17 | + "description": "", // user description |
| 18 | + "createdAt": "" // user created date |
| 19 | + "updatedAt": "" // user updated date |
| 20 | +} |
| 21 | +``` |
| 22 | + |
| 23 | +### Functionality |
| 24 | + |
| 25 | +- The API should follow typical GraphQL API design pattern. |
| 26 | +- The data should be saved in the DB. |
| 27 | +- Proper error handling should be used. |
| 28 | +- Paginating and filtering (by name) users list |
| 29 | + |
| 30 | +### Basic Requirements |
| 31 | + |
| 32 | + - Use AWS AppSync (preferred) or AWS Lambda + API Gateway approach |
| 33 | + - Use any AWS Database-as-a-Service persistence store. DynamoDB is preferred. |
| 34 | + - Add a Query to fetch location information based off the user's address (use [NASA](https://api.nasa.gov/api.html) or [Mapbox](https://www.mapbox.com/api-documentation/) APIs); use AWS Lambda |
| 35 | + - Write concise and clear commit messages. |
| 36 | + - Write clear **documentation** on how it has been designed and how to run the code. |
| 37 | + |
| 38 | +### Bonus |
| 39 | + - Use Infrastructure-as-code tooling that can be used to deploy all resources to an AWS account. Examples: CloudFormation / SAM, Terraform, Serverless Framework, etc. |
| 40 | + - Provide proper unit tests. |
| 41 | + - Providing an online demo is welcomed, but not required. |
| 42 | + - Bundle npm modules into your Lambdas |
| 43 | + |
| 44 | +### Advanced Requirements |
| 45 | + |
| 46 | +These may be used for further challenges. You can freely skip these; feel free to try out if you feel up to it. |
| 47 | + - Describe your strategy for Lambda error handling, retries, and DLQs |
| 48 | + - Describe your cloud-native logging, monitoring, and alarming strategy across all queries/mutations |
| 49 | + |
| 50 | +## UI context |
| 51 | + |
| 52 | +Use HTML, CSS, and JavaScript (choose one of popular framework) to implement the following mock-up. You are only required to complete the desktop views, unless otherwise instructed. Application should connect to created GraphQL API. |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | + |
| 57 | + |
| 58 | +> [Source Figma file](https://www.figma.com/file/hd7EgdTxJs2fpTzzSKlNxo/Superformula-full-stack-test) |
| 59 | +
|
| 60 | +## Requirements |
| 61 | + |
| 62 | +### Functionality |
| 63 | + |
| 64 | +- The search functionality should perform real time filtering on client side data and API side data |
| 65 | +- List of users should be updated automatically after single user is updated |
| 66 | +- Infinite loading state should be saved in url query |
| 67 | +- Appear/Disappear of modal should be animated (feel free with choose how) |
| 68 | +- Map with user location should update async - when user changes "location" field |
| 69 | + |
| 70 | +### Tech stack |
| 71 | + |
| 72 | +- JS oriented |
| 73 | +- Use **React**, **Angular** or **VUE**. |
| 74 | +- Use unsplash.com to show random avatar images |
| 75 | +- You don't have to write configuration from scratch (you can use eg. CRA for React application) |
| 76 | +- Feel free to use a preprocessor like SASS/SCSS/Less or CSS in JS |
| 77 | +- Provide E2E and unit tests |
| 78 | +- Feel free to choose MAPS service (GoogleMaps, OpenStreetMap etc) |
| 79 | + |
| 80 | +### Bonus |
| 81 | + |
| 82 | +- Write clear **documentation** on how the app was designed and how to run the code. |
| 83 | +- Provide components in [Storybook](https://storybook.js.org) with tests. |
| 84 | +- Write concise and clear commit messages. |
| 85 | +- Provide an online demo of the application. |
| 86 | +- Include subtle animations to focus attention |
| 87 | +- Describe optimization opportunities when you conclude |
| 88 | +- Handle server erros |
| 89 | +- Handle loading states |
| 90 | + |
| 91 | +## What We Care About |
| 92 | + |
| 93 | +Use any libraries that you would normally use if this were a real production App. Please note: we're interested in your code & the way you solve the problem, not how well you can use a particular library or feature. |
| 94 | + |
| 95 | +_We're interested in your method and how you approach the problem just as much as we're interested in the end result._ |
| 96 | + |
| 97 | +Here's what you should strive for: |
| 98 | + |
| 99 | +- Good use of current HTML, CSS, JavaScript, Node.js & performance best practices. |
| 100 | +- Solid testing approach. |
| 101 | +- Extensible code. |
| 102 | + |
| 103 | +## Q&A |
| 104 | + |
| 105 | +> Where should I send back the result when I'm done? |
| 106 | +
|
| 107 | +Fork this repo and send us a pull request when you think you are done. There is no deadline for this task unless otherwise noted to you directly. |
| 108 | + |
| 109 | +> What if I have a question? |
| 110 | +
|
| 111 | +Create a new issue in this repo and we will respond and get back to you quickly. |
0 commit comments