Your task is to build a meal roulette app that integrates with the Meal Roulette API and presents the retrieved data. Please agree with your hiring team regarding the tech stack choice.
The app should have a meal selection view and a meal details view.
Tapping on the refresh button should present a selection of the next 4 meals.
Tapping on a meal on the list should open the details view for that meal.
There should also be a way to navigate back to the list view from the details view.
When finished developing make sure to add a screen recording + executable (.apk
or .app
depending on the platform choice) to the repo.
Make sure to check with your hiring team whether you need to integrate with the GraphQL API or the REST API.
Click to expand the request examples.
https://playground.devskills.co/api/rest/meal-roulette-app/meals
https://playground.devskills.co/api/rest/meal-roulette-app/meals/limit/4/offset/4
https://playground.devskills.co/api/rest/meal-roulette-app/meals/4
Click to expand the request examples.
Endpoint: https://playground.devskills.co/v1/graphql
query GetAllMeals {
meal_roulette_app_meals {
id
title
picture
description
ingredients
}
}
query MealsWithOffset {
meal_roulette_app_meals_aggregate(limit: 4, offset: 4) {
nodes {
id
title
picture
description
ingredients
}
}
}
query SingleMeal {
meal_roulette_app_meals_by_pk(id: 5) {
id
title
picture
description
ingredients
}
}
Here you can play with the Meal Roulette GraphQL API. Start by copy-pasting an example from above.
Need help? Head over to our community on GitHub to get assistance.
Import a project boilerplate for your selected tech stack.
- Use the API with the assumption that the full meal list wouldn't eventually fit the device. It's up to you to define the strategy. We want to see your approach to dealing with large data sets.
- Implement error handling for cases when the API cannot be reached or returns a server error.
- Ensure that the app remains responsive (i.e. doesn't block the UI) while the data is being loaded.
- Avoid duplication and extract re-usable components where it makes sense. We want to see your approach to creating a codebase that is easy to maintain.
- Unit test one component of choice. There is no need to test the whole app, as we only want to understand what you take into consideration when writing unit tests.
- Add instructions describing how to run your app locally.
- Make a screen recording of your working app and add the recorded screencast to the repo (see how).
- Upload a compiled version of the app (debug mode) to the repo. For iOS this needs to be a
.app
file that is build for the simulator and for Android it needs to be anapk
debug file. For projects created in Flutter or React Native you can choose which platform is most convenient for you. Click here for more detailed instructions. - Push your code to the
implementation
branch. We encourage you to commit and push your changes regularly as it's a way for us to understand your thinking process. - Create a new pull request, but please do not merge it.
- Document the tech decisions you've made by creating a new review on your PR (see how). In particular, document how you've made your app responsive and how you've implemented server error handling.
- Answer the questions you get on your Pull Request.
About 3 hours depending on your experience level + the time to set up the project/environment (go with one of the provided boilerplates to move faster).
Authored by Rémon Helmond via DevSkills.
How was your experience? Don't hesitate to give us a shout.