---
title: Overview
icon: shapes
description: Monorepo layout and technology stack.
---
> For the complete documentation index, see [llms-docs.txt](/llms-docs.txt) or the site index [llms.txt](/llms.txt). Full docs corpus: [llms-full-docs.txt](/llms-full-docs.txt). Prefer markdown URLs (append `.md`) for agent consumption. Product skill: [skill.md](/skill.md).


Reloop is a Bun monorepo with Next.js frontends, ElysiaJS microservices, shared packages, and Docker infrastructure.

Local URL: `https://local.reloop.sh`. Bootstrap with [`bun setup`](/docs/setup).


## Structure

```
reloop/
├── apps/
│   ├── backend/         # ElysiaJS APIs + KumoMTA (smtp, inbound)
│   └── frontend/        # web, dashboard, docs, links, console
├── packages/            # @reloop/ui, @reloop/db, @reloop/bus, …
└── local/               # Docker Compose, Caddy, TLS, bun setup
```

| Path | Role |
| :--- | :--- |
| `apps/frontend/*` | Product UI and docs sites |
| `apps/backend/*` | HTTP APIs and mail edge |
| `packages/*` | Shared libraries |
| `local/` | Compose stack, Caddy, [`bun setup`](/docs/setup) |


## Frontend apps

<CardGroup cols={2}>
  <Card icon="browser" title="Web" href="/setup/frontend/web">
    Marketing site (port `3000`)
  </Card>
  <Card icon="layout" title="Dashboard" href="/setup/frontend/dashboard">
    Product UI (port `3001`)
  </Card>
  <Card icon="book-open" title="Docs" href="/setup/frontend/docs">
    This documentation (port `3003`)
  </Card>
  <Card icon="mail-single" title="Links" href="/setup/frontend/links">
    Preferences and redirects (port `3005`)
  </Card>
</CardGroup>

Stack: [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/), [Radix UI](https://www.radix-ui.com/) via `@reloop/ui`, [SWR](https://swr.vercel.app/).


## Backend services

<CardGroup cols={3}>
  <Card icon="lock" title="Auth" href="/setup/backend/auth">
    Sessions and orgs (`8000`)
  </Card>
  <Card icon="globe" title="Domain" href="/setup/backend/domain">
    Sending domains (`8011`)
  </Card>
  <Card icon="key-new" title="API Key" href="/setup/backend/api-key">
    API keys (`8012`)
  </Card>
  <Card icon="webhook" title="Webhook" href="/setup/backend/webhook">
    Event delivery (`8013`)
  </Card>
  <Card icon="users" title="Contacts" href="/setup/backend/contacts">
    Audience (`8014`)
  </Card>
  <Card icon="mail-single" title="Mail" href="/setup/backend/mail">
    Send API (`8015`)
  </Card>
  <Card icon="logs" title="Logs" href="/setup/backend/logs">
    Analytics (`8016`)
  </Card>
  <Card icon="workflow" title="Workflow" href="/setup/backend/workflow">
    Automations (`8017`)
  </Card>
  <Card icon="file-upload" title="Upload" href="/setup/backend/upload">
    Attachments (`8018`)
  </Card>
  <Card icon="layout" title="Template" href="/setup/backend/template">
    Templates (`8019`)
  </Card>
  <Card icon="mega-phone" title="Campaigns" href="/setup/backend/campaigns">
    Broadcasts (`8027`)
  </Card>
  <Card icon="inbox" title="Inbox" href="/setup/backend/inbox">
    Inbound mail (`8028`)
  </Card>
  <Card icon="envelope" title="Email" href="/setup/backend/email">
    Platform email (`8022`)
  </Card>
  <Card icon="billing-custom" title="Credits" href="/setup/backend/credits">
    Usage / billing (`8023`)
  </Card>
  <Card icon="server" title="SMTP" href="/setup/backend/smtp">
    Outbound edge (Docker)
  </Card>
  <Card icon="inbox" title="Inbound" href="/setup/backend/inbound">
    MX edge (Docker)
  </Card>
</CardGroup>

Stack: [ElysiaJS](https://elysiajs.com/), [Better Auth](https://www.better-auth.com/), [KumoMTA](https://kumomta.com/) for smtp/inbound.


## Data & infrastructure

Started by `bun docker:up` (Postgres, Redis, Caddy, Mailpit, MinIO, NATS, spam, SMTP, inbound).

<CardGroup cols={2}>
  <Card icon="database" title="PostgreSQL" href="https://www.postgresql.org/">
    Primary DB (port `5432`)
  </Card>
  <Card icon="code" title="Drizzle ORM" href="https://orm.drizzle.team/">
    Schema in `@reloop/db`
  </Card>
  <Card icon="server" title="Redis" href="https://redis.io/">
    Sessions and cache (`6379`)
  </Card>
  <Card icon="folder-open" title="MinIO" href="https://min.io/">
    Object storage (`9010` / console `9001`)
  </Card>
  <Card icon="share-nodes" title="NATS" href="https://nats.io/">
    Event bus (`4222`)
  </Card>
  <Card icon="globe" title="Caddy" href="https://caddyserver.com/">
    TLS proxy for `local.reloop.sh`
  </Card>
  <Card icon="mail-single" title="Mailpit">
    Captured mail UI at `http://localhost:8025`
  </Card>
</CardGroup>


## Tooling

<CardGroup cols={2}>
  <Card icon="rocket" title="Bun" href="https://bun.sh/">
    Runtime and package manager
  </Card>
  <Card icon="boxes" title="Turborepo" href="https://turbo.build/">
    Task runner and build cache
  </Card>
  <Card icon="cubes" title="Docker" href="https://www.docker.com/">
    Local infra via `local/docker-compose.yml`
  </Card>
  <Card icon="sparkles" title="Biome" href="https://biomejs.dev/">
    Lint and format
  </Card>
</CardGroup>


## Shared packages

| Package | Purpose |
| :--- | :--- |
| `@reloop/ui` | Design system and components |
| `@reloop/db` | Drizzle schema and Postgres client |
| `@reloop/auth` | Shared auth client utilities |
| `@reloop/bus` | NATS messaging wrapper |
| `@reloop/cache` | Redis caching helpers |
| `@reloop/apikey` | API key hashing and verification |
| `@reloop/webhook-events` | Webhook event types |
| `@reloop/tailwind` | Shared Tailwind config |
| `@reloop/tsconfig` | Shared TypeScript config |


## Next

<CardGroup cols={2}>
  <Card icon="rocket" title="Setup" href="/setup">
    One-command local bootstrap with `bun setup`
  </Card>
  <Card icon="globe" title="Port reference" href="/setup/port">
    Gateway routes and every local port
  </Card>
</CardGroup>
