In the next hour, we'd like to see you build a small React Native app from scratch. At the end of our time together, we should have a mobile app that can run in the Android simulator.
This is a paired, "open-book" coding assessment. We'd like you to share your screen and have your camera on.
- Google for API or syntax, search for how-tos and examples
- Use AI coding tools and IDEs (we'd love to hear why you like the tools you use)
- Use open-source libraries and frameworks
- Ask us for clarification
- Re-use old work
- Get help from another individual
- Select a framework (or don't). Be prepared to explain your choices.
- Select a UI framework (or don't). Be prepared to explain your choices.
- Our Coding Standards include unit testing with Jest. We're not looking for 100% coverage, but we'd like to see your approach to testing.
The app will need to be able to perform / interact with the following :
- Public API endpoints that require no authentication.
- Public API endpoints that require JWT token.
- Device's GPS data.
- Biometric data.
- Display a splash screen with the Rise Logo
- Start with an unauthenticated screen that prompts users to log in with a username and password. The API (token) response will be used throughout the app.
- Once authenticated, your app should have a layout that has a Tabs at the bottom of the screen:
- HomeTab(Initial Tab) - A screen with Two Cards:
- a Card with decoded JWT token information where the CardTitle displays the
user_emailat top, and the content shows theutapayload. - a Card with a GPS payload from the device.
- a Card with decoded JWT token information where the CardTitle displays the
- Empty Tab
- A screen that shows no content.
- Profile Tab
- Display additional information returned from the
EmployeeesAPI end point- A card with user's name and title
- A working log-out button
- Button to enrol biometrics
- Display additional information returned from the
- HomeTab(Initial Tab) - A screen with Two Cards:
- id:
j.d@example.com - password:
FakePassword1
Authenticate a user and retrieve an access token and refresh token for subsequent authorized requests.
https://gateway-test.risepeople.com/tokens/with_refresh_token
| Header | Value | Description |
|---|---|---|
Accept |
application/json |
Client expects a JSON response |
Content-Type |
application/json |
Request body is formatted as JSON |
Send a JSON object containing the user’s credentials:
{
"email": "j.d@example.com",
"password": "FakePassword1",
"realm": "rise"
}| Field | Type | Description |
|---|---|---|
email |
string | The user's email address |
password |
string | The user's password (in plain text) |
realm |
string | The realm or tenant (e.g., "rise") |
{
"auth_token": "string",
"refresh_token": "string"
}| Field | Type | Description |
|---|---|---|
auth_token |
string | Token to be used in authenticated requests |
refresh_token |
string | Token used to refresh the access token |
- This endpoint transmits sensitive credentials, so ensure the request is made over HTTPS.
- Do not expose the
password,access_token, orrefresh_tokento the UI.
- Logging in a user via CLI or script
- Backend service authentication
- Testing login functionality with credentials
Retrieve detailed information about a specific employee, including their organizational structure, assignments, and relationships.
https://gateway-test.risepeople.com/employees/{id}?include=departments,teams,locations,primary_team,primary_department,primary_location,primary_manager,managers,employee_photo,employment_positions,organization&fields[departments]=name&fields[teams]=name&fields[locations]=name
| Header | Value | Description |
|---|---|---|
Accept |
application/json, text/plain, */* |
Expected response format |
Authorization |
<JWT> |
Auth_Token from login API for authorization |
⚠️ Do not include theBearerword in the Authorization Header, just use the token value instaed.
| Parameter | Type | Description |
|---|---|---|
include |
string | Comma-separated list of related resources to include |
fields[departments]=name |
string | Restrict department fields to only include the name attribute |
fields[teams]=name |
string | Restrict team fields to only include the name attribute |
fields[locations]=name |
string | Restrict location fields to only include the name attribute |
departments,teams,locationsprimary_team,primary_department,primary_locationprimary_manager,managersemployee_photoemployment_positionsorganization
{
"data": {
"id": "295029",
"type": "employee",
"attributes": {
"name": "John Doe",
"current_status": "Active",
"title": "Current Title",
...
},
"relationships": {
"departments": { "data": [...] },
"primary_manager": { "data": { "id": "1234", "type": "manager" } },
...
}
},
"included": [
{
"type": "department",
"id": "dept-1",
"attributes": { "name": "Engineering" }
},
{
"type": "team",
"id": "team-1",
"attributes": { "name": "Mobile" }
},
...
]
}- Viewing an employee's full profile and org chart context
- Admin panels and management dashboards
- Auditing employee assignments and relationships