Skip to content

What is NexisOmni

NexisOmni is a database-per-tenant POS + CRM SaaS for the Sri Lanka market. Each business (tenant) gets its own isolated database; a central admin database tracks the platform itself.

The product ships as three independent git repositories that version and deploy separately. There is no monorepo tying them together - the shared contract is the API, not a shared codebase.

Repository What it is Stack
NexisOmni Backend API .NET 10 / C# 14, ASP.NET Core, EF Core 10, PostgreSQL
nexis-omni-web Online dashboards React 19 + Vite SPA, TanStack Router/Query, pnpm + Turborepo
nexis-omni-pos Offline-first POS Flutter (Android + Windows), Drift, Riverpod, Dio

The web repo holds two dashboards: hq-dashboard (the tenant-facing business back-office) and platform-admin (the operator console). The POS is a separate native app because it must keep selling with no network.

Everything is built around one API contract. A change to that contract is the one case where a single logical change spans repositories - and even then it lands as separate commits in each repo, with the web client regenerated from the backend’s OpenAPI document.

┌─────────────────────┐
│ NexisOmni (API) │
│ central + per-tenant│
│ PostgreSQL │
└──────────┬──────────┘
ADMIN plane │ TENANT plane
┌────────────────┐ │ ┌────────────────┐
│ platform-admin │◀────┼────▶│ hq-dashboard │
│ (operator) │ │ │ (tenant) │
└────────────────┘ │ └────────────────┘
┌─────▼──────┐
│ POS app │ offline-first,
│ (Flutter) │ syncs when online
└────────────┘

To understand the system as a whole, read The API contract next - it is the single most important page here.

Locally the three repos sit side by side under one parent folder (F:\dev\unitrix). That parent is not a git repository. Always change into the relevant sub-repo before running any git, build, or test command - a command run from the parent will not do what you expect.