---
title: Workspaces and commands in rpm-example-app
sidebar_label: Workspaces and commands
description: Understand the monorepo's npm workspaces, app boundaries, and Turborepo commands.
---

# Workspaces and commands

The monorepo keeps the mobile app and dashboard in separate npm workspaces under `apps/*`. The root lockfile installs both; each application owns its runtime and dependencies.

## Repository map

| Path | Responsibility | Source |
| --- | --- | --- |
| `apps/mobile` | Expo and React Native patient experience | [Mobile workspace](https://github.com/Ovok-Dev/rpm-example-app/tree/dev/apps/mobile) |
| `apps/dashboard` | React and Vite clinician dashboard | [Dashboard workspace](https://github.com/Ovok-Dev/rpm-example-app/tree/dev/apps/dashboard) |
| `package.json` | Root workspaces and combined commands | [Root package.json](https://github.com/Ovok-Dev/rpm-example-app/blob/dev/package.json) |
| `turbo.json` | Dev, check, and build task behavior | [Turborepo config](https://github.com/Ovok-Dev/rpm-example-app/blob/dev/turbo.json) |

There is no shared UI package in the root. Keep native and browser-specific code in the app that owns it; the apps use Ovok as their shared backend.

## Commands from the repository root

| Command | Purpose |
| --- | --- |
| `npm run dev` | Start both development servers. |
| `npm run mobile` | Start the Expo development server. |
| `npm run dashboard` | Start the Vite dashboard. |
| `npm run ios` / `npm run android` | Build and launch the mobile app on the selected platform. |
| `npm run typecheck` | Type-check both workspaces. |
| `npm test` | Run tests in the workspaces. |
| `npm run build` | Build the dashboard and export the mobile JavaScript bundle. |
| `npm run check` | Run type checks, tests, Expo dependency validation, and builds. |

Turborepo defines these tasks in [`turbo.json`](https://github.com/Ovok-Dev/rpm-example-app/blob/dev/turbo.json). See the per-app guides for their environment and sandbox requirements.
