---
title: Quickstart
description: Get a self-hosted Cuitty up and running in five minutes with Docker Compose.
section: Getting Started
order: 1
updatedAt: 2026-04-27
slug: quickstart
---
# Quickstart

This guide walks you from a clean machine to a running Cuitty portal in under five minutes. By the end you will have:

- The Cuitty portal at `http://localhost:7700`
- Postgres + SpiceDB + libSQL running in containers
- A first project, an API key, and your first event in the audit module

## Prerequisites

- Docker 24 or later
- Docker Compose v2
- 2 GB of free RAM
- Ports `7700`, `5432`, and `50051` available

## 1. Clone the repository

```bash
git clone https://gitlab.com/cuitty/root cuitty
cd cuitty
```

## 2. Bring up the stack

```bash
docker compose up -d
```

Compose starts four services:

| Service     | Purpose                                |
| ----------- | -------------------------------------- |
| `portal`    | The Astro + Bun portal on `:7700`      |
| `postgres`  | BetterAuth + project metadata          |
| `spicedb`   | Fine-grained RBAC                      |
| `libsql`    | Per-module event storage               |

Wait roughly twenty seconds for the health checks to pass.

## 3. Open the portal

Visit `http://localhost:7700`. The first request runs the bootstrap flow: you create the root admin account and pick an organization name. There are no seed users.

## 4. Create a project and an API key

From the portal, navigate to **Projects → New Project**, then **Settings → API Keys → Create**. Copy the key — you will not see it again.

## 5. Send your first event

```bash
curl -X POST http://localhost:7700/api/ingest \
  -H "Authorization: Bearer $CUITTY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      {
        "type": "audit",
        "ts": "2026-04-27T12:00:00Z",
        "data": {
          "actor": "you@example.com",
          "action": "quickstart.complete",
          "resource": "cuitty"
        }
      }
    ]
  }'
```

You should see `{"accepted":1,"rejected":[]}`. Open the **Audit** module and your event is there.

## Where to go next

- [Wire protocol reference](/docs/reference/wire-protocol) — the canonical contract for `/api/ingest`
- [Install on Kubernetes](/docs/install/kubernetes) — production deployment
- [TypeScript SDK](/docs/sdk/typescript) — `@cuitty/sdk` for Node and Bun
- [Modules overview](/docs/modules/audit) — what each module captures