{
  "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",
  "body_html": "<h1 id=\"quickstart\">Quickstart</h1>\n<p>This guide walks you from a clean machine to a running Cuitty portal in under five minutes. By the end you will have:</p>\n<ul>\n<li>The Cuitty portal at <code>http://localhost:7700</code></li>\n<li>Postgres + SpiceDB + libSQL running in containers</li>\n<li>A first project, an API key, and your first event in the audit module</li>\n</ul>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<ul>\n<li>Docker 24 or later</li>\n<li>Docker Compose v2</li>\n<li>2 GB of free RAM</li>\n<li>Ports <code>7700</code>, <code>5432</code>, and <code>50051</code> available</li>\n</ul>\n<h2 id=\"1-clone-the-repository\">1. Clone the repository</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#B392F0\">git</span><span style=\"color:#9ECBFF\"> clone</span><span style=\"color:#9ECBFF\"> https://gitlab.com/cuitty/root</span><span style=\"color:#9ECBFF\"> cuitty</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">cd</span><span style=\"color:#9ECBFF\"> cuitty</span></span></code></pre>\n<h2 id=\"2-bring-up-the-stack\">2. Bring up the stack</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#B392F0\">docker</span><span style=\"color:#9ECBFF\"> compose</span><span style=\"color:#9ECBFF\"> up</span><span style=\"color:#79B8FF\"> -d</span></span></code></pre>\n<p>Compose starts four services:</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>Service</th><th>Purpose</th></tr></thead><tbody><tr><td><code>portal</code></td><td>The Astro + Bun portal on <code>:7700</code></td></tr><tr><td><code>postgres</code></td><td>BetterAuth + project metadata</td></tr><tr><td><code>spicedb</code></td><td>Fine-grained RBAC</td></tr><tr><td><code>libsql</code></td><td>Per-module event storage</td></tr></tbody></table>\n<p>Wait roughly twenty seconds for the health checks to pass.</p>\n<h2 id=\"3-open-the-portal\">3. Open the portal</h2>\n<p>Visit <code>http://localhost:7700</code>. The first request runs the bootstrap flow: you create the root admin account and pick an organization name. There are no seed users.</p>\n<h2 id=\"4-create-a-project-and-an-api-key\">4. Create a project and an API key</h2>\n<p>From the portal, navigate to <strong>Projects → New Project</strong>, then <strong>Settings → API Keys → Create</strong>. Copy the key — you will not see it again.</p>\n<h2 id=\"5-send-your-first-event\">5. Send your first event</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#B392F0\">curl</span><span style=\"color:#79B8FF\"> -X</span><span style=\"color:#9ECBFF\"> POST</span><span style=\"color:#9ECBFF\"> http://localhost:7700/api/ingest</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -H</span><span style=\"color:#9ECBFF\"> \"Authorization: Bearer </span><span style=\"color:#E1E4E8\">$CUITTY_API_KEY</span><span style=\"color:#9ECBFF\">\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -H</span><span style=\"color:#9ECBFF\"> \"Content-Type: application/json\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -d</span><span style=\"color:#9ECBFF\"> '{</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"events\": [</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">      {</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"type\": \"audit\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"ts\": \"2026-04-27T12:00:00Z\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"data\": {</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">          \"actor\": \"you@example.com\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">          \"action\": \"quickstart.complete\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">          \"resource\": \"cuitty\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        }</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">      }</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    ]</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">  }'</span></span></code></pre>\n<p>You should see <code>{\"accepted\":1,\"rejected\":[]}</code>. Open the <strong>Audit</strong> module and your event is there.</p>\n<h2 id=\"where-to-go-next\">Where to go next</h2>\n<ul>\n<li><a href=\"/docs/reference/wire-protocol\">Wire protocol reference</a> — the canonical contract for <code>/api/ingest</code></li>\n<li><a href=\"/docs/install/kubernetes\">Install on Kubernetes</a> — production deployment</li>\n<li><a href=\"/docs/sdk/typescript\">TypeScript SDK</a> — <code>@cuitty/sdk</code> for Node and Bun</li>\n<li><a href=\"/docs/modules/audit\">Modules overview</a> — what each module captures</li>\n</ul>",
  "links_out": [
    "/docs/reference/wire-protocol",
    "/docs/install/kubernetes",
    "/docs/sdk/typescript",
    "/docs/modules/audit"
  ]
}