{
  "slug": "quickstart",
  "title": "Quickstart",
  "description": "Get a self-hosted Cuitty up and running in five minutes with Docker Compose.",
  "url": "https://cuitty.com/docs/quickstart",
  "markdown_url": "https://cuitty.com/docs/quickstart.md",
  "json_url": "https://cuitty.com/docs/quickstart.json",
  "frontmatter": {
    "title": "Quickstart",
    "description": "Get a self-hosted Cuitty up and running in five minutes with Docker Compose.",
    "order": 1,
    "section": "Getting Started",
    "updatedAt": "2026-04-27"
  },
  "headings": [
    {
      "depth": 1,
      "slug": "quickstart",
      "text": "Quickstart"
    },
    {
      "depth": 2,
      "slug": "prerequisites",
      "text": "Prerequisites"
    },
    {
      "depth": 2,
      "slug": "1-clone-the-repository",
      "text": "1. Clone the repository"
    },
    {
      "depth": 2,
      "slug": "2-bring-up-the-stack",
      "text": "2. Bring up the stack"
    },
    {
      "depth": 2,
      "slug": "3-open-the-portal",
      "text": "3. Open the portal"
    },
    {
      "depth": 2,
      "slug": "4-create-a-project-and-an-api-key",
      "text": "4. Create a project and an API key"
    },
    {
      "depth": 2,
      "slug": "5-send-your-first-event",
      "text": "5. Send your first event"
    },
    {
      "depth": 2,
      "slug": "where-to-go-next",
      "text": "Where to go next"
    }
  ],
  "body_markdown": "# Quickstart\n\nThis guide walks you from a clean machine to a running Cuitty portal in under five minutes. By the end you will have:\n\n- The Cuitty portal at `http://localhost:7700`\n- Postgres + SpiceDB + libSQL running in containers\n- A first project, an API key, and your first event in the audit module\n\n## Prerequisites\n\n- Docker 24 or later\n- Docker Compose v2\n- 2 GB of free RAM\n- Ports `7700`, `5432`, and `50051` available\n\n## 1. Clone the repository\n\n```bash\ngit clone https://gitlab.com/cuitty/root cuitty\ncd cuitty\n```\n\n## 2. Bring up the stack\n\n```bash\ndocker compose up -d\n```\n\nCompose starts four services:\n\n| Service     | Purpose                                |\n| ----------- | -------------------------------------- |\n| `portal`    | The Astro + Bun portal on `:7700`      |\n| `postgres`  | BetterAuth + project metadata          |\n| `spicedb`   | Fine-grained RBAC                      |\n| `libsql`    | Per-module event storage               |\n\nWait roughly twenty seconds for the health checks to pass.\n\n## 3. Open the portal\n\nVisit `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.\n\n## 4. Create a project and an API key\n\nFrom the portal, navigate to **Projects → New Project**, then **Settings → API Keys → Create**. Copy the key — you will not see it again.\n\n## 5. Send your first event\n\n```bash\ncurl -X POST http://localhost:7700/api/ingest \\\n  -H \"Authorization: Bearer $CUITTY_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"events\": [\n      {\n        \"type\": \"audit\",\n        \"ts\": \"2026-04-27T12:00:00Z\",\n        \"data\": {\n          \"actor\": \"you@example.com\",\n          \"action\": \"quickstart.complete\",\n          \"resource\": \"cuitty\"\n        }\n      }\n    ]\n  }'\n```\n\nYou should see `{\"accepted\":1,\"rejected\":[]}`. Open the **Audit** module and your event is there.\n\n## Where to go next\n\n- [Wire protocol reference](/docs/reference/wire-protocol) — the canonical contract for `/api/ingest`\n- [Install on Kubernetes](/docs/install/kubernetes) — production deployment\n- [TypeScript SDK](/docs/sdk/typescript) — `@cuitty/sdk` for Node and Bun\n- [Modules overview](/docs/modules/audit) — what each module captures",
  "links_out": [
    "/docs/reference/wire-protocol",
    "/docs/install/kubernetes",
    "/docs/sdk/typescript",
    "/docs/modules/audit"
  ]
}