Platform · architecture

How RaiseMyTickets is built.

Three services. One multi-tenant data model. Every request scoped to a tenant, every action audit-logged, every metric pre-aggregated. No agents hidden in unknown corners of the codebase.

The three pillars

Intake, configuration, analytics

Core App — the intake funnel

A FastAPI service running a slot-filling state machine. An employee opens a chat, describes the problem, and the funnel walks them through to a complete, validated ticket — submitted directly to the customer's backend.

  • Slot-filling conversation against the tenant's own ticket templates.
  • Intent classification mapping utterances to ticket categories.
  • Pluggable backends — Jira, ServiceNow, Zendesk, Frappe Helpdesk.
  • Webhook receivers + retry worker keep upstream status in sync.

Admin App — the configuration plane

A FastAPI proxy backed by its own Postgres for config audit logs. Tenant operators register platforms, design forms, set routing, and manage who can do what — without engineering involvement.

  • Platform registration + connectivity testing per ticketing backend.
  • Form & field design with versioning and AI-suggested configurations.
  • RBAC — admin, manager, agent, readonly, custom — with per-action permissions.
  • Azure AD sync auto-provisions users from the corporate directory.

Analytics App — the scoreboard

A FastAPI backend with a SvelteKit + D3 frontend. APScheduler rolls ticket events into hourly tenant-scoped metrics. A two-tier cache (in-memory L1 + Redis L2) keeps dashboard reads cheap and fast.

  • Hourly APScheduler rollups pre-aggregate metrics per tenant.
  • Two-tier L1+L2 cache with per-endpoint TTLs (60s timeseries, 600s reports).
  • Tenant-scoped audit log capturing every authenticated request.
  • Keycloak-authenticated — same identity surface as the other services.
Under the hood

A boring, observable, auditable stack

No exotic infrastructure. Async Python where it earns its keep, Postgres for everything that matters, Redis where speed pays for itself, and Keycloak for identity. Every service emits Prometheus metrics and structured JSON logs.

FastAPI & async SQLAlchemy 2

Async-first ticket submission and integration fan-out without thread-pool starvation. Uvicorn workers under the hood.

PostgreSQL 18 + pgvector

Tenant-scoped row-level isolation today; pgvector embeddings power the Phase 2 NLU classifier upgrade.

Keycloak & rmt-auth-lib

Enterprise-grade OIDC — no home-grown auth. JWTs are validated once across every service via a shared library.

Redis L1+L2 cache

In-memory plus Redis tiers with per-endpoint TTLs (60s for timeseries, 600s for reports) keep dashboard reads fast.

SvelteKit + D3 dashboards

A reactive analytics frontend with hand-built D3 charts — not generic commodity chart components.

Vault, Prometheus, structlog

Secrets resolve env → Vault → dev-ephemeral; missing secrets fail fast at startup. One consistent observability surface.

See the architecture in motion

We will walk through the three services live, against a real backend of your choice.

Request a demo