> For the complete documentation index, see [llms.txt](https://docs.kangaroodev.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kangaroodev.net/product-docs/getting-started/publish-your-docs.md).

# Setup

***

### Requirements

* **Node.js** 18+ (or 20+ recommended)
* **PostgreSQL** database (local, Docker, or hosted e.g. Vercel Postgres, Neon, Supabase)
* **npm** (or yarn/pnpm)

Optional for full functionality:

* **Stripe** account and API key (for payment links)
* **Discord** application (for Discord OAuth)
* **SMTP** (e.g. Zoho) for password reset emails and sending alerts
* **Vercel Blob** (only if you deploy on Vercel and want banner uploads to work, because the server filesystem is read-only there)

***

### 1. Download and install

Download the zip from BBB and install dependencies:

```bash
npm install
```

***

### 2. Environment variables

Copy the example env file and fill in the values:

```bash
cp .env.example .env
```

Edit `.env`. Minimum for local run:

* **DATABASE\_URL** – PostgreSQL connection string, e.g.\
  `postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public`\
  For local Docker:\
  `postgresql://postgres:yourpassword@localhost:5432/dashboard`

Optional (see Environment Variables for full list):

* **APP\_BASE\_URL** – Base URL of the app (e.g. `http://localhost:3002`). Used for password reset links and Discord redirect.
* **STRIPE\_SECRET\_KEY** – For creating payment links in the Admin (Payments) section.
* **SMTP\_**\* – For sending password reset emails; if not set, reset link is printed in the server console.
* **Discord** – For “Login with Discord” (client id, secret, redirect URI).
* **BLOB\_READ\_WRITE\_TOKEN** – Only needed on Vercel if you want user banner uploads (Vercel Blob).

***

### 3. Database

1. **Create a PostgreSQL database** (locally, Docker, or a cloud provider).

{% hint style="info" %}
It is highly recommended to host your database with a cloud provider. A locally hosted database is typically suitable for testing purposes only. Please consider purchasing the Setup Add-on, which includes website hosting, database hosting, and environment configuration.
{% endhint %}

1. **Run Prisma migrations**
   * Development (creates/updates migrations and applies them):

     ```bash
     npx prisma migrate dev
     ```
   * Production (only applies existing migrations):

     ```bash
     npx prisma migrate deploy
     ```
2. **Generate Prisma Client** (usually done by `migrate dev` or the build script):

   ```bash
     npx prisma generate
   ```
3. **(Optional)** Open Prisma Studio to inspect data:

   ```bash
   npx prisma studio
   ```

***

### 4. Build (production)

Before running in production or deploying:

```bash
npm run build
```

This will:

* Run `prisma generate`
* Compile TypeScript (`tsc`) to `dist/`
* Copy images (if your script does that)
* Build Tailwind CSS into `public/tailwind.css`

***

### 5. Run locally

* **Development** (watch mode, no need to run build first):

  ```bash
  npm run dev
  ```

  The server usually starts on a port defined in the code (e.g. 3002). Open `http://localhost:3002` (or the port shown) and go to `/login.html`.
* **Production-like** (after `npm run build`):

  ```bash
  npm start
  ```

  This runs `node dist/index.js`.

***

### 6. First admin user

* If there is no user in the database, **register** via the login page (email + username + password).
* In the database (e.g. via Prisma Studio), set that user’s **role** to `admin` so they can access all sections and settings.
* Alternatively, implement or run a seed script that creates an admin user (if you add one to the project).

After that, log in as admin and use **Admin → Users** (or the relevant page) to create or edit other users, assign roles, permissions, boards, and commissions.
