Platform

Self-hosting quickstart

The moving parts of a self-hosted TicketMan AI deployment and how to bring them up.

Self-hosting quickstart

TicketMan AI runs where .NET runs. The platform is a clean CQRS backend on .NET 10 with a React frontend and a thin background worker, backed by your own PostgreSQL.

This page is an orientation to the moving parts. To get the self-host bundle and its one-command setup, book a demo from the home page and we'll set you up.

Prerequisites

  • .NET 10 SDK
  • Node.js with npm 10+
  • PostgreSQL
  • An Entra ID (Azure AD) app registration for authentication
  • Optional: an LLM provider key, or a local Ollama install for fully on-prem AI

The pieces

ComponentRole
TicketMan.ApiThe web API, SignalR hubs and the mail webhook. The entry point.
TicketMan.WorkerBackground host: mailbox sync, subscription lifecycle, AI sweeps.
PostgreSQLYour database. Every ticket, conversation and record lives here.
FrontendThe React agent workspace and requester portal.

Start the backend services

The backend needs PostgreSQL and two text-embedding sidecars (TEI) for knowledge base retrieval and reranking. Use Docker to start them:

# Start PostgreSQL, embedding service, and reranker (one time)
docker compose -f src/docker-compose.yaml up -d postgres tei tei-reranker

Then run the API from the repo root:

# Run the API (defaults to http://localhost:5000)
dotnet run --project src/TicketMan.Api

# Run once with a fresh database (dev only, resets all data)
dotnet run --project src/TicketMan.Api -- --reset-db

Run the worker

dotnet run --project src/TicketMan.Worker

The worker's encryption key and salt must match the API's, so encrypted secrets and webhook client-state round-trip correctly.

Run the frontend

From the src/TicketMan directory:

npm install
npm run dev        # dev server on port 3000
npm run build      # production build

Configure AI

  1. Sign in as an admin and open Settings → LLM (/settings/llm).
  2. Add a connection: pick a provider (OpenAI, Azure OpenAI, Anthropic, Grok, or Ollama) and paste the key. For Ollama, point at your local endpoint (http://localhost:11434/v1 by default).
  3. Assign each LLM function to a connection and model. Under Settings → Prompts (/settings/prompts), every function has an editable Scriban template with sensible defaults.

AI actions then appear in the agent cockpit. For the full picture, see AI and models and Security and data ownership.

Add crash reporting

Install the Diagnostics SDK in the applications you support so their errors flow into the platform automatically.