Tumoni Mobile Dev Technical Assessment
Tumoni Mobile Dev Technical Assessment
Tumoni Mobile Dev Technical Assessment
July 2024
Introduction
The purpose of this assessment is for you to demonstrate your technical and problem-solving
skills to the Tumoni Engineering team. It is important to remember that there is no single
“correct” way to approach this assessment. However, some options are obviously better than
others and it is our hope that you will be able to navigate through those scenarios and make
informed decisions. If you have any questions, we encourage you to reach out and ask
questions. Our aim is to respond to any correspondence within 24 hours. Additionally, if it would
be easier to set up a brief call to discuss any questions, please let us know.
We deeply appreciate you taking the time to complete this assessment and are looking forward
to seeing your work. Good luck!
Process
1. Complete assessment (10 days):
a. Please email your source code as a zip file within the allotted time to
andreas@tumoni.com and alex@tumoni.com
2. Internal assessment evaluation (2-3 days):
a. After you have completed the assessment, we will review your work internally
and compile feedback and questions to discuss during your demo
3. Demo + QA (30-45 mins)
a. During this session, we will ask you to briefly present your work and approach
before Q&A
b. Please arrive ready to share your app in an emulator
Tumoni
July 2024
Instructions
For this assessment, we are asking you to build a simple test app using React Native with the
provided API (details below). The app will allow users to sign-up, sign-in, and view a simple list
once signed in. While we are leaving most of the implementation details up to you, please
carefully review the requirements specified below.
Requirements
1. Do not use Expo
2. Use bare React Native with any UI library of your choosing like the React Native Paper.
You are free to use custom styles but remember it should look and feel the same on
Android and iOS. We do not require that you make your test app run on both Android
and iOS.
3. In your zip file submission, do not include any local download dependencies or build
artifacts. We only want to see the source code.
4. Do not use state management frameworks and libraries like Redux. Use Context API
from React.
5. Do not send APK files.
6. Do not use FlatList.
7. Do not use Axios. Use fetch.
We are primarily evaluating your work based on code quality and not on the aesthetics of your
app. We will not be providing any designs. If you are not able to complete all the sections of the
app within the allotted time, please submit whatever work you have completed. Completeness is
of secondary importance to us than code quality.
We also acknowledge that the simple API we have created is a work in progress. If you discover
any bugs or issues, please let us know. Lastly, we encourage you to think thoroughly through
the details specified below and clarify any questions you have early on in the process.
ii. Fetch user object, if user is already signed in, by calling the user info
endpoint
iii. If user fetch returns 200, update user in local storage
iv. If user fetch returns 401, show a login screen with a “session expired”
message
d. Handle errors and show error messages
2. Sign-in screen:
a. You can use the following test credentials for testing sign-in:
i. Username: test
ii. Password: 12345678
b. Apply Secondary color to StatusBar background
c. Username input
d. Password input
e. Submit button
i. Submit button is active only when inputs have valid formats (see
validation section in API.md file)
f. On Submit, call the sign-in endpoint
g. While calling the API, show a loading indicator inside the submit button
h. On 200 response, fetch user object by calling the user info endpoint, save user
and JWT token to local storage, and redirect to Home screen
i. Handle errors and show error messages
3. Sign up:
a. Apply Secondary color to StatusBar background
b. Email input
c. Username input
d. Password input
e. Submit button (follow the same requirements specified above for sign-in)
f. On submit, call the sign up endpoint
g. On 201 response, automatically sign the user in
h. Handle errors and show error messages
4. Home screen:
a. Apply secondary color to StatusBar background
b. Call book list endpoint and display the simple scrollable list of items using
ScrollView from React Native
c. Use a bottom bar (fixed position) with two buttons that allow the user to refresh
the list and sign-out
d. If the user pulls down the screen, refresh the list using RefreshControl from
React Native
e. If book list fetch returns 401, redirect to login screen with a “session expired”
message
f. Handle errors and show error messages
Tumoni
July 2024
API endpoints:
We have provided you with a markdown file (API.md) that describes each endpoint’s expected
parameters and responses. The DB on your instance wipes once a day, so please do not expect
any data like device UUID to persist for a long time.
Endpoints:
1. POST /device/register
2. POST /auth/signup
3. POST /auth/signin
4. GET /user/info
5. GET /book/user
Submission guidelines
1. Please email your source code as a zip file within the allotted time to
andreas@tumoni.com and alex@tumoni.com.
2. In your zip file submission, do not include any local download dependencies or build
artifacts. We only want to see the source code. As such, your zip should not be larger
than a few MBs.
3. Please do not publish your code in public GitHub repos.