All work
Platforms2025Ongoing since 2025

Exfinity

A multi-tenant AI commerce platform for the experiences and ticketing industry. Merchants connect once and sell experiences from many suppliers in natural language, through unified search, AI booking agents and embeddable widgets, all under their own brand. Built for Exfinity GmbH.

Client: Exfinity GmbH

At a glance

8
Specialized AI agents
27
Governed MCP tools
8
Platform services on AWS
6
Layers of tenant isolation

The Challenge

The experiences market is fragmented. Every merchant rebuilds the same supplier connections from scratch, supplier catalogs arrive in mismatched formats, and no one can offer AI-powered search or booking without first building their own AI systems. There is no single, safe way to search across every supplier or let an AI agent book on a customer's behalf.

Our Approach

Exfinity works like a Stripe for experiences. A merchant connects once and gets search, booking and support across every supplier, all under their own brand. Behind that simplicity, supplier catalogs are pulled in automatically, cleaned into one common format and made searchable by meaning, not just by keywords. A team of eight AI agents handles discovery, booking and support, and they can act only through a controlled set of tools with strict per-merchant rules, rate limits and a full audit trail. Everything runs in the EU, in Frankfurt, and personal data is masked before it ever reaches an AI model.

System Architecture

Loading diagram...

System Architecture: Suppliers: API, crawler, feeds, Ingestion, Kafka: ProductFetched, Processor: normalize and embed, OpenSearch: keyword and vector, Merchant site and embeddable widgets, Search API, AI Runtime: Mastra agents, ex-mcp: 27 governed tools, Checkout, SQS FIFO, Supplier connector

AI Layer

The AI layer is the core of Exfinity: a Mastra agent runtime, a Model Context Protocol tool server, permission-aware retrieval and a per-tenant learning loop, all built for GDPR-grade safety.

Runtime and agents

A Mastra runtime runs a master orchestrator and seven specialists (search, booking, helpdesk, recommendation, ops, PIM copilot and price optimization). Models are routed across Anthropic Claude and OpenAI, responses stream over server-sent events, and every turn is bounded by step, delegation and token caps.

MCP tool layer

The ex-mcp server exposes 27 tools across commerce, recommendations, analytics, content, knowledge, operations and market intelligence, over streamable HTTP and server-sent events. Every call is policy-checked per tenant, rate-limited and audited, and writes fail closed.

Retrieval and RAG

Product search is hybrid keyword and vector over OpenSearch with 1024-dimension embeddings. A per-tenant knowledge base is chunked, embedded and searched under tenant scope, feeding a seven-layer context pipeline where all retrieved data is fenced as untrusted input.

Memory and context

Agent memory runs on LibSQL with recent messages, working memory and semantic recall scoped per tenant and principal. Long threads are compacted, and a per-tenant knowledge graph of eight node types and nine edge types surfaces popular products and unanswered questions.

Knowledge graph memory

A per-tenant knowledge graph on LibSQL records queries, responses, products, documents and tool calls as eight node types linked by nine edge types. Edge weights decay over time, so the graph surfaces genuinely popular products and the questions the assistant could not answer, feeding both retrieval and the per-tenant learning loop.

Safety and governance

Personal data is tokenized before every model call, retrieved content is fenced against prompt injection, prices and bookings stay server-authoritative, and human-in-the-loop gates hold sensitive actions. Per-tier cost caps bound spend, and an auto-learn loop routes low-confidence answers to human review before they become knowledge.

Loading diagram...

AI Layer: User message, Auth and tenant scope, Context assembly: 7 fenced layers, Master agent: intent and delegate, Specialist agent, MCP tool call, Policy and rate limit, Denied, Policy error, Allowed, Tool: search, RAG, checkout, Hybrid search and tenant KB, LLM: Claude or GPT, Guarded response, Audit log: long retention, Knowledge graph and auto-learn

Infrastructure and deployment

Exfinity runs entirely on AWS in Frankfurt (eu-central-1), provisioned as code and deployed across isolated accounts, so the platform is reproducible, EU-resident and safe to change.

Compute

Stateless request paths run as AWS Lambda functions (core API, checkout, notifications, PDF generation). Long-running and streaming services (ingestion, search, the AI runtime, the MCP server and the dashboard) run as containers on ECS Fargate. There are no servers to patch, and each workload scales on its own.

Data and search

DynamoDB holds the control plane and operational tables (tenants, orders, policies, audit, usage). OpenSearch serves hybrid keyword and vector search. ElastiCache Redis caches queries, availability and rate-limit state. S3 stores vouchers, crawl snapshots and the long-retention audit archive, and agent memory and the knowledge graph live in Turso, a hosted LibSQL.

Streaming and messaging

Ingested catalogs flow over a Kafka stream on Amazon MSK. Order and notification work runs through SQS FIFO and standard queues, each with a dead-letter queue, and EventBridge schedules crawls and freshness checks. Transactional email is sent through Amazon SES and SMS through SNS.

Auth, edge and secrets

AWS Cognito issues role-scoped tokens. An Application Load Balancer and API Gateway front the services, CloudFront and Route53 handle the edge and DNS, and every secret sits in AWS Secrets Manager under KMS. CloudWatch and correlation IDs give end-to-end tracing.

Infrastructure as code and delivery

Every resource is defined in Terraform with Terragrunt, with remote state and locking, so environments are reproducible and reviewable. Bitbucket Pipelines deploys across separate development, staging and production accounts, with production gated behind manual approval.

SDKs and integration

The customer-facing surface ships as an embeddable widget SDK: six Lit 3.0 Web Components (search, chat, checkout, helpdesk, recommendations and copilot) with Shadow DOM isolation, theming and six languages, served from CloudFront. The Protobuf contract is generated into Go, TypeScript and Python clients, so every service and integration speaks the same types.

Loading diagram...

Infrastructure and deployment: CloudFront and Route53, ALB and API Gateway, Lambda: core API, checkout, notifications, ECS Fargate: search, AI runtime, ex-mcp, ingestion, DynamoDB, OpenSearch, ElastiCache Redis, Turso LibSQL: memory and graph, Kafka on MSK, SQS FIFO, SES email and SNS SMS, Terraform and Terragrunt, Bitbucket CI/CD

Engineering decisions

MCP as the capability boundary

Agents never touch data stores directly. They call tools through the ex-mcp server, where per-tenant policy, rate limits and audit live. That single boundary makes what an agent is allowed to do explicit and reviewable.

Protobuf as the data contract

One canonical schema spans ingestion, processing, search and checkout, generated to Go, TypeScript and Python. Services build against the same contract instead of drifting into incompatible shapes.

Retrieved data is untrusted by construction

Every catalog result, knowledge chunk and tool output is fenced at the user role and declared non-authoritative by the platform rules, which closes the prompt-injection surface that most agent systems leave open.

GDPR-first, not GDPR-later

EU-only infrastructure, personal data tokenized before inference, long-retention tamper-resistant audit and per-thread erasure were design constraints from the first commit, not a compliance retrofit.

Tech Stack

Backend
TypeScriptHonoGoNode.jsProtobuf
Infrastructure
AWSECS FargateLambdaDynamoDBOpenSearchElastiCache RedisKafka (MSK)SQSS3CognitoCloudFrontSESTerraformTerragruntBitbucket CI
AI / ML
MastraAnthropic ClaudeOpenAIMCPOpenSearch kNNTurso / LibSQL
Frontend
LitNext.jsReact

Key Outcomes

  • One integration replaces weeks of per-supplier plumbing for a merchant
  • Agents act only through a governed MCP tool layer, never directly on data
  • Hybrid keyword and vector search returns results under a 200 millisecond p95 target
  • GDPR-first by construction: EU-only infrastructure, tokenized PII, long-retention audit

The Result

One integration gives a merchant AI-powered search, booking and support across every connected supplier. It is built to production standards from day one: fast search, strict separation between each merchant's data, and a learning loop that turns weak answers into reviewed knowledge over time. Designed and built for Exfinity GmbH since 2025.

What Exfinity shows about how we build

Exfinity is a full multi-tenant AI platform, so it shows the disciplines we bring to an AI or commerce build.

  • Multi-tenant isolation designed in from the first layer, not bolted on later
  • AI capabilities placed behind a governed tool boundary with policy and audit
  • A learning loop that turns low-confidence answers into reviewed knowledge
  • EU data residency and GDPR handling treated as architecture, not paperwork