Vendix SFA
Product · Multi-tenant architecture

Multi-tenant by physics,
not by query filter.

Most multi-tenant SaaS shoves every customer into a shared table with a tenant_id column. One bad WHERE clause and you've leaked a competitor's price list. Vendix gives every tenant three of its own databases - physically separate. There is no “forgot to filter by tenant” to forget.

3+1
DBs per tenant
AES-256
Encrypted CS
0
Cross-tenant joins

Per-tenant DB stack

VendixDb master · 1 total

tenants · super admins · audit · pipeline config

TenantDb OLTP · 3NF

users · products · orders · invoices · chat history · sync logs

ReportDb OLAP · star

fact tables · dimension tables · ETL tracking

Vector Store RAG

embeddings for chatbot semantic search

Group tenants get a fifth: ReportDb_Group

Why three?

Different jobs need different shapes.

Cramming everything into one schema means transaction speed fights reporting speed, and both fight chat-context retrieval. Vendix uses the right shape per job - normalised for transactions, denormalised for reports, vector-indexed for AI - and lets each scale independently.

  • 1 VendixDb (master, 1 total) - knows about all tenants, super admins, the audit pipeline, and per-tenant transaction-step configuration. Behind the curtain. Tenants never query it.
  • 2 TenantDb (per tenant, OLTP, 3NF) - every user, product, order, invoice, GRN, payment, return, visit, chat conversation. Indexed for write speed. This is the live system.
  • 3 ReportDb (per tenant, OLAP, star schema) - fact + dimension tables, populated by the Hangfire ETL pipeline. Reports never touch TenantDb directly.
  • + Per-tenant vector store - embeddings of products, outlets, knowledge base. Dedicated to the AI chatbot's RAG retrieval.

When each DB is touched

VendixDb login · audit write · super-admin tenant ops · pipeline config lookup
TenantDb every transaction · every chat message · every sync push/pull
ReportDb every dashboard · Power BI Embedded queries · scheduled email reports
Vector RAG retrieval before each chatbot prompt

Onboarding a new tenant

  1. 1

    Click "Create tenant" in super-admin

    Fill in name, region, default language, currency.

  2. 2

    Three databases provision automatically

    Live transactions, reporting, AI search - each with the right structure.

  3. 3

    Demo data seeds (optional)

    Realistic Pharma or FMCG dataset loads in seconds.

  4. 4

    Tenant logs in

    From zero to first transaction in under five minutes.

Onboarding without the deploy window

Add a new tenant in minutes. Update them all in one release.

Most multi-tenant SaaS chokes on schema updates - you either run an upgrade script against every tenant database (slow, fragile) or you don't, and your tenants drift apart. Vendix is built so structural updates apply themselves automatically the first time a tenant comes back online after a release. No 90-minute deploy window. No 2 a.m. tickets.

  • Self-healing structure - new tables and columns appear automatically. Safe to retry. No manual scripts to run per tenant.
  • Tenant onboarding in minutes, not days. Three databases, region-pinned, demo data optional.
  • Audit trail captured separately from structural changes - so the audit log is always about user activity, never platform housekeeping.
Group consolidation

Holding companies. Group P&L. No spreadsheet glue.

A pharma group with five subsidiaries needs a way to see one consolidated number without each subsidiary giving up its operational autonomy. Vendix supports group tenants natively - every sub-tenant runs independently with its own three databases, and a fifth database, ReportDb_Group, aggregates all of them nightly at 02:30 UTC.

  • Sub-tenants stay autonomous - own users, own pricing, own pipelines.
  • The ReportUser role gets the consolidated view via a dedicated Power BI workspace.
  • Hangfire GroupReportEtlJob handles the rollup; failures alert without breaking sub-tenant ETLs.

Group tenant · 5 sub-tenants

Pharma SL

3 DBs

Pharma BD

3 DBs

Pharma MV

3 DBs

Pharma NP

3 DBs

Pharma TH

3 DBs

ReportDb_Group

02:30 UTC nightly · ReportUser only

The plumbing other SaaS hides from you.

Encrypted connection strings

Every tenant's DB connection string is AES-256-CBC encrypted at rest in VendixDb. Decrypted only inside the request scope; never in logs.

Region pinning

Each tenant declares its data residency. EU tenants get EU-region SQL; APAC stays in APAC. No accidental cross-border replication.

Per-tenant timezone + currency

All money goes through TenantFormat.Money; all dates through TenantFormat.DateTime. EC2 stays in UTC; tenants render in Asia/Colombo (or wherever).

Onboarding in minutes

Super-admin "Create Tenant" provisions VendixDb row + TenantDb (EnsureCreated) + ReportDb (star schema bootstrap) + vector store. Tenant logs in immediately.

Configurable per tenant

TenantInvoiceParameters, TenantDocumentNumberFormats, TenantTransactionSteps - each tenant overrides defaults without forking the platform. See the Pipeline Engine.

Demo data on tap

Super-admin "Seed demo data" loads a realistic Pharma/FMCG dataset into a sandbox tenant - 60+ price-list revisions, full credit-approval ladder, pre-activated free-issue schemas.

Provision a tenant in three minutes.

On a demo we'll spin up a fresh tenant in front of you - three new databases, encrypted connection strings, demo data seeded. From zero to your first chatbot answer.