Skip to content

perfa01/ReqSolve

Repository files navigation

ReqSolve

ReqSolve is a self-hosted, AI-assisted request, ticket & case management system for multi-department organizations (IT, HR, Finance, Facilities…). It replaces shared Outlook mailboxes and legacy ticket tools with one system that keeps your data on your infrastructure, lets you bring your own AI (any major LLM provider — or none at all), and ships fully bilingual (English + German), UI and documentation included.

image image image

Key features

  • Tickets & formal requests ("Anträge") — queues with filters and saved views, priorities, due dates & SLA plans, tags, watchers, merge, CSV export, and a full audit trail. AI detects whether an incoming item is a plain ticket or a formal request and pre-fills the request's structured fields for the agent to review.
  • AI assistance across the workflow — grounded solution suggestions from your own knowledge base, customer-reply drafting, one-click thread summaries, priority detection, plain-language routing rules, and note cleanup. Powered by your choice of provider: Anthropic, OpenAI, Google Gemini, Mistral, Azure OpenAI, Groq, xAI, DeepSeek, OpenRouter, Together AI, a self-hosted Ollama, any custom OpenAI-compatible endpoint, or (experimental) Microsoft 365 Copilot. One provider, one key — every AI feature runs on it. AI is optional; everything else works without it.
  • Knowledge base with semantic memory — resolved cases become reusable articles (with AI cleanup and optional flow diagrams). Search and suggestions use local pgvector embeddings, so retrieval works by meaning, not just keywords.
  • Department isolation — agents, tickets, knowledge, and AI context are scoped server-side to the teams a user belongs to. One department can never see another's data, and AI suggestions can never draw on it.
  • Email channel — connect any IMAP/SMTP mailbox (or Gmail via OAuth); inbound mail becomes tickets, replies go out by email with templates.
  • Dashboards & insights — team workload, overdue and SLA tracking, and an AI weekly brief.
  • Admin & compliance — roles/permissions, custom fields/statuses/ priorities, GDPR export/erasure and retention, customer web form.
  • Polished UI — full English + German interface with a language switcher, light and dark mode.
  • Bilingual help center — a bundled VitePress documentation site (EN + DE) for your agents, admins, and end users.

Requirements

  • Docker and Docker Compose (v2) — the recommended way to run ReqSolve. Nothing else is needed on the host.
  • Hardware: 2+ CPU cores and 4 GB+ RAM recommended. Embeddings run locally via a bundled Ollama container serving the BGE-M3 model (CPU-only, no GPU required); the model is a one-time ~1.2 GB download cached in a Docker volume. Budget ~5 GB of disk for images, the model, and data.
  • Outbound internet access on first start (to pull images and the embedding model) — afterwards ReqSolve runs fully on your infrastructure. Only the optional AI generation features call your chosen AI provider.

Deployment (Docker Compose)

1. Clone the repository

git clone https://github.com/perfa01/ReqSolve reqsolve
cd reqsolve

2. Create your configuration

cp .env.example .env

Open .env and set the following (every variable is documented in the file itself):

Variable Required? What it does
ENCRYPTION_KEY Yes (effectively) Encrypts every stored secret at rest (mailbox passwords, OAuth tokens, AI API keys) with AES-256-GCM. The app refuses to save any secret until it is set, so any real deployment needs it. Generate one with openssl rand -base64 32. Never change it once set — previously stored secrets become unreadable, and you would have to re-enter every mailbox password and API key. Back it up together with your database.
APP_URL Yes The public URL your users reach ReqSolve at (e.g. https://support.example.com). Used for links in emails and password resets, and as the base for OAuth redirect URIs.
DATABASE_URL For local (non-Docker) runs Docker Compose wires the app to its bundled Postgres automatically; you only set this when running against your own Postgres 16+ (the vector extension must be available).
ANTHROPIC_API_KEY No Optional AI fallback key. The normal way to enable AI is in the app itself (Admin → AI settings), where you pick any supported provider and enter its key.
EMAIL_POLL_SECONDS No How often inbound mail is fetched (default 60; 0 = manual "Sync now" only).
TRUSTED_PROXY_HOPS No Number of reverse proxies in front of ReqSolve (default 1). Keep the default when running behind nginx/Traefik/Caddy; set 0 only if the app is exposed directly.

3. Build and start

docker compose up -d --build

This starts three services:

  • db — PostgreSQL 16 with the pgvector extension (data persisted in the trove_db volume).
  • ollama — the local embeddings server; on first boot it downloads the BGE-M3 model (~1.2 GB, one time — the first start therefore takes a few minutes; the app container intentionally waits until the model is ready).
  • app — ReqSolve itself, on port 3000.

Database migrations run automatically every time the app container starts (its startup command is npm run db:migrate && npm run start), so a plain docker compose up always has a current schema. You never run migrations manually in the Docker setup. (The manual command npm run db:migrate exists for local, non-Docker development — see below.)

4. First-run setup

Open http://localhost:3000 (or your APP_URL behind your reverse proxy). ReqSolve starts completely empty — no demo data. The first visit prompts you to create the administrator account; after signing in you build your instance yourself (see "After the first login" below).

5. The documentation site

The help center is a separate static site (VitePress), not served by the app container:

  • Preview locally: npm run docs:devhttp://localhost:5173/documentation/
  • Deploy: npm run docs:build outputs a static site to docs/.vitepress/dist, built to be hosted under the /documentation/ path — serve that directory from any static host or from your reverse proxy alongside the app.

After the first login

A quick tour of the initial configuration (each links to the bundled help center for the details):

  1. Departments — Admin → Departments: create your teams (IT, HR, …) and assign agents. Department isolation follows from this automatically.
  2. Email — Admin → Email: connect one or more mailboxes (any IMAP/SMTP provider, or "Connect Gmail" via OAuth). Inbound mail becomes tickets.
  3. AI settings — Admin → AI settings: pick your AI provider, paste one API key (stored encrypted, never shown again), optionally override the model or endpoint, test the connection, and toggle individual AI features. Skip this entirely if you don't want AI.
  4. Optionally: SLA plans, business hours, routing rules, canned responses, custom fields/statuses/priorities, email templates, and the public web form.

Updating an existing installation

git pull
docker compose up -d --build

Rebuilding and restarting is the whole update — migrations run automatically on container start (see above). Your data lives in the named Docker volumes (trove_db, trove_uploads, ollama_models) and survives rebuilds.

Local development (without Docker)

Requires Node 22+, a reachable PostgreSQL 16 with the vector extension, and an Ollama server with the embedding model (ollama pull bge-m3).

npm install
cp .env.example .env        # set DATABASE_URL to your Postgres
npm run db:migrate          # creates the vector extension + schema
npm run dev                 # http://localhost:3000

Checks (the same ones CI runs): npm run lint, npx tsc --noEmit, npm run build, npm run docs:build, npm test.

Contributing

See CONTRIBUTING.md. In short: contributions are accepted under the project license; department isolation and security must be preserved; user-facing strings ship in both English and German; docs travel with code; all checks must pass.

License

ReqSolve is source-available under the Business Source License 1.1 (see LICENSE):

  • Free for your own organization. Any company, organization, or individual may self-host and use ReqSolve to manage their own internal requests, tickets, and cases — across all their departments and employees — at no cost, with the full source visible and modifiable.
  • Commercial offerings need a license. Offering ReqSolve (or a substantial part of its functionality) to third parties as a hosted or managed service, or otherwise for a fee or commercial benefit, requires a separate commercial license. Contact: info@it-isartal.de.
  • It becomes open source over time. Each released version automatically converts to the Apache License 2.0 four years after its publication.

About

Self-hosted, AI-assisted ticketing & request management for organizations — multi-department with strict isolation, bring-your-own-AI (Claude, Copilot, local models via Ollama), semantic knowledge base, full English/German UI.

Topics

Resources

License

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages