# Dev Setup

> Learn how to set up your local development environment.

#### Monorepo Structure

Shelve uses a monorepo structure to manage multiple packages and applications. The main packages are:

- `apps/shelve`: The main Shelve application.
- `apps/lp`: The landing page for Shelve.
- `apps/vault`: The vault application.
- `apps/base`: This is the base layer that contains the shared configuration lp and shelve (components, plugins, etc).
- `packages/cli`: The CLI connected to the Shelve application (push, pull, etc).
- `packages/crypto`: The encryption and decryption package.
- `packages/types`: The shared types inside the monorepo.
- `packages/utils`: The shared utilities inside the monorepo.

The monorepo is managed utilizing [Turborepo](https://turbo.build). With Turborepo, it is possible to execute commands across all packages or target specific packages. Consequently, you will primarily operate from the root of the repository and execute commands such as `pnpm run dev:app` to initiate the Shelve application.

#### Necessary Environment Variables

- `DATABASE_URL` (PostgreSQL)
- `NUXT_OAUTH_GITHUB_CLIENT_ID` (or google)
- `NUXT_OAUTH_GITHUB_CLIENT_SECRET` (or google)
- `NUXT_PRIVATE_ENCRYPTION_KEY`

To set up the development environment for Shelve, follow these steps:

<steps>

### Clone the Repository:

```sh [terminal]
git clone https://github.com/HugoRCD/shelve.git && cd shelve
```

### Install Dependencies:

```sh [terminal]
pnpm install
```

### Copy the Example Environment File:

```sh [terminal]
cp apps/shelve/.env.example apps/shelve/.env
```

### Update Environment Variables:

Edit the `apps/shelve/.env` file and update the necessary environment variables.

### Start the Development Server:

```sh [terminal]
pnpm run dev:app
```

</steps>
