Build a brewing hot mobile app screen & the API endpoints it needs.
- 🎯 YOUR ASSIGNMENT
what you'll be doing
- 📑 MORE INFO
other useful information
🎭 Backstory
Ahh, coffee. The universal beverage. In every country on the planet, people drink it. It's one of those special things that binds us together as human beings. No matter the culture we come from. Or the language we speak. Most of us share a common respect for a great cup of coffee.
No other beverage has inspired developers more. And so, we dedicate this challenge to coffee. A universal challenge, for a universal beverage.
The designers & system architects have been hard at work developing the UI & API you'll find in this project. And now, two important pieces are ready to be built:
- the Coffee Catalog screen (front-end) — for discovering different coffee drinks
- the Coffee API (back-end) — providing coffee drink data to the catalog
👉 P.S. As a full-stack developer, you'll be implementing both. The Coffee Catalog screen on the front-end. And the Coffee API providing the essential data from the back-end.
🖼️ Visual Reference
➡️ Handoffs
Design Handoff
Coffee App Designs
Password:6MUiW
System Architecture
Coffee API - OpenAPI Spec File(the api you'll implement)
You can find the OpenAPI specification file in thespec/
folder.
Dummy Data
Dummy Data - JSON File
You can find the dummy data in thedata/
folder.
📝 Acceptance Criteria
- the Coffee Catalog screen looks & works as expected, based on the design handoff
- the API is implemented perfectly according to the OpenAPI specification
- the front-end renders based on data from the API
For more details, continue reading. The next section (Tasks) will provide more specifics.
A breakdown of the assignment into smaller tasks — with more details.
-
API Implementation (back-end)
🪙18 points
Implement the
Coffee API
according to the OpenAPI specification.The
Coffee API
relies on data about various Coffee Drinks. You can find this data as a json file in the/data
folder. You need to provide this data through your endpoints.
➡️ HandoffsSystem Architecture
Coffee API - OpenAPI Spec File(the api you'll implement)
You can find the OpenAPI specification file in thespec/
folder.Dummy Data
Dummy Data - JSON File
You can find the dummy data in thedata/
folder.
📝 Acceptance Criteria• the API project is initialized inside the
api/
folder — with a well-organized folder structure
• the API is implemented perfectly according to the OpenAPI specification
•unit tests
are provided, together withclear instructions
on how to run them-
Initialize Your Project
🪙3 points
Initialize your project inside the
api/
folder, and use an well-organized folder structure.
📝 Acceptance Criteria• the API project is initialized inside the
api/
folder
• a well-organized folder structure is used -
Implement the Coffee API
🪙8 points
Implement the
Coffee API
, percisely according to the OpenAPI speficiation.The
Coffee API
relies on data about various Coffee Drinks. You can find this data as a json file in the/data
folder. You need to provide this data through your endpoints.P.S. Don't implement a database. It's not needed... yet.
Feel free to follow best practices like the repository pattern to improve code readability, but don't go any further than that.
➡️ HandoffsSystem Architecture
Coffee API - OpenAPI Spec File(the api you'll implement)
You can find the OpenAPI specification file in thespec/
folder.Dummy Data
Dummy Data - JSON File
You can find the dummy data in thedata/
folder.
📝 Acceptance Criteria• the API is implemented perfectly according to the OpenAPI specification
• modern software development principles are followed
• clear instructions on how to run the project is provided in an easy-to-find location (such as theREADME.md
file found in the./api/
folder) -
Write Unit Tests
🪙7 points
Write unit tests for the
Coffee API
.If you don't know where to start, UnitTest by Martin Fowler is a good resource to check out. Remember, tests should help ensure high quality, make maintenance & refactoring easier, and improve the overall developer experience.
Make sure to:
- select & use high quality software testing packages
- aim for balance - don't test too much, or too little
📚 Relevant Resources
📝 Acceptance Criteria•
unit tests
are provided, together withclear instructions
on how to run them
-
-
Coffee Catalog Screen (front-end)
🪙19 points
Build the Catalog Screen, as seen in the design handoff, and connect it to your
Coffee API
.
➡️ Design HandoffCoffee App Designs
Password:6MUiW
📝 Acceptance Criteria• the catalog screen look & work as expected, based on the design handoff
• the catalog is integrated with, and renders based on data from theCoffee API
• the user is able to search through the catalog using the search box-
Build the Catalog Screen
🪙8 points
Build the Catalog Screen, as seen in the design handoff.
The target screen dimensions are
375x812
. Aim to make it work on any mobile device size. You can find colors, fonts and other design details in the design handoff.
➡️ Design HandoffCoffee App Designs
Password:6MUiW
📝 Acceptance Criteria• the catalog screen look & work as expected, based on the design handoff
• a component-based approach is taken, and components have easy-to-understand and clearly documented inputs (i.e. props). -
Integrate with the API
🪙8 points
Provide the UI with real data coming from the
Coffee API
you built.You need to fetch data from the
Coffee API
you've implemented.P.S. Don't worry about the
rating
andprice
values. We haven't collected these yet, so just use the values you see in the design as placeholders for now.
📝 Acceptance Criteria• the right endpoints of the
Coffee API
are called to fetch the data needed to render the UI
• the UI is displaying correct values coming from theCoffee API
-
Search
🪙3 points
Implement search functionality.
Do your best to implement search in a way that provides a good end user experience.
👤 User StoryFrom the perspective of the end user: "When using the coffee catalog, I want to search for particular coffee drinks, so that I can find what I want quickly."
📝 Acceptance Criteria• search looks & works as expected, based on the design handoff and data from the API
• the end user experience is smooth and seamless (e.g. without annoyances)
• a component-based approach is taken, and components have easy-to-understand and clearly documented inputs (i.e. props).
-
⚠️ Your solution will also be quality assured. Make sure to read the Quality Assurance section as well.
In addition to the acceptance criteria associated with each task, there are also overall criteria for evaluating the quality of your work & final result. That's what this section is about.
Your solution will be reviewed by professionals, just like it would in a normal day-to-day work situation. Below you can find the criteria specifically related to quality - which together with your task completion will determine your score in the challenge.
-
Clear Component Interfaces
🪙5 points
Are your component interfaces logical and well-named, and are they easy for others to build with?
Your component interfaces matter. The names you choose for props, their descriptions and the default values all help to make it easier for other developers to build with your components.
-
Code Readability
🪙4 points
is your code easy to understand (i.e. simple naming & syntax) and well presented (i.e. consistent & well documented where needed)?
Readability is the ease with which a reader can understand your code. In programming, things such as programmer comments, choice of loop structure, and choice of names can determine the ease with which humans can read computer program code.
-
Software Package Selection
🪙5 points
Have you chosen well-designed (e.g. easy to use & understand) highly adopted (e.g. big community, common issues raised & resolved already) and reliable (e.g. good performance, well maintained, no security vulnerabilities) and otherwise solid
software packages
?A
software package
(accessible through software package managers likeNPM
) is a collection of software components which when combined perform a set of generalized tasks that are applicable to a range of use cases.Selecting the right software package can lead to a better developer experience, less maintenance overhead, ease of fixing issues, and avoidance of security vulnerabilities. Selecting the wrong software package can lead to a host of issues, including unforeseen bugs, security vulnerabilities, maintenance nightmares, and much more. All of this makes selecting the right software packages an essential measure of quality.
❓ Frequently Asked Questions (FAQ)
Common questions and answers for getting started quickly.
How do I deliver?
To deliver your solution you'll have to commit and push the repo, and then go to the DIGGIT dashboard to submit your solution.
How do I know if I'm ready to submit?
First, check your tasks. Make sure you have given all of them your best shot. Second, check the quality assurance section. Verify that your solution is high quality by cheking your solution against this section. Once you've done your best, both in terms of tasks & quality, you're ready to submit.
I'm Stuck... help?!
Oof... sorry, but we can't do debugging for active challenges. But what we can recommend is that you take some extra time. You may just need to take a break, go have a coffee or take a walk. Or all of the above! We often find it helps to simply take your mind off the problem for a little while... Once you come back, check again your progress on both tasks & quality, and see if there is something you haven't considered or tried before. All we can ask is that you do your best. And regardless of the final result, there's a lot to gain from submitting your solution. We wish you the best of luck!