Rutba ERP architecture — 17 Next.js applications sharing one Strapi API, one authentication portal and one component library.
Rutba ERP — how it is put together
Enterprise resource planning

Rutba ERP

An open-source, modular business management system. Seventeen independent Next.js applications share one Strapi API, one authentication portal and one component library — so you can run the whole suite or just the modules you need.

Rutba ERP modular · open source
Licence MIT Applications 17 Frontend Next.js 16 · React 19 Backend Strapi 5 · MySQL
Why it's built this way

Modular by construction, not by configuration

Most ERPs are one enormous application with features switched off. Rutba ERP inverts that: each functional domain is a separate Next.js application in an npm workspaces monorepo, and they cooperate through a shared Strapi 5 API rather than a shared codebase.

That means a retailer can deploy point of sale and stock alone, add order management when they start shipping, and bring in manufacturing or payroll later — without carrying the weight of modules they never open, and without a migration each time.

Shared authentication, shared UI components and a generated API client keep the apps consistent. A descriptor-driven permission layer means a role defined once is enforced everywhere.

Structure
npm workspaces monorepo
Apps
17 independent Next.js applications
API
One Strapi 5 backbone
Auth
OAuth-style JWT with per-app access
Proved in production. The commerce modules — storefront, checkout, order pipeline and rider delivery — run Rutba.pk, a live retail store. Edge cases surface there before they reach anyone else.
Modules

Seventeen applications, one platform

Every module below is a deployable application in its own right, sharing state through the central API.

Commerce & sales

Point of Sale

Sales processing, cart management, returns, cash register operations and financial reports for counter and shop-floor selling.

Storefront

A server-rendered Next.js 16 shop with sale offers, express and full-address checkout, and cash on delivery.

Order Management

Stage-based order processing built around a state-machine chokepoint — returns, label printing, delivery operations, rider assignment and payment verification.

My Orders

A customer-facing portal for order tracking, returns and account management.

Inventory & supply

Stock Management

Products, purchases, suppliers, brands, categories and day-to-day inventory tracking.

Inventory Management

Warehouses and bins, stock levels, transfers, adjustments, cycle counts, batch and expiry tracking, replenishment and inventory valuation.

Reordering engine

MinMax, reorder-point, par-level or manual policies that raise purchase or work orders automatically when stock falls through the floor.

Batch & expiry

FEFO enforcement across serialised, bulk and divisible stock models — so the shortest-dated goods leave first.

Manufacturing

Work orders & operations

Work orders, task and piece-rate tracking, operations sequencing and reusable production templates.

BOM & bundles

Multi-output bills of materials with automatic component consumption, plus bundle definitions for kitted goods.

Material lots & QC

Material issues traced by lot, with quality-control checkpoints recorded against the work order.

Production templates

Repeatable production recipes so a routine build doesn't have to be re-specified every run.

People & finance

HR

Employees, departments, attendance and leave requests.

Employee Self-Service

An employee portal for profile, attendance, leave and payslips — keeping routine requests out of the HR inbox.

Payroll

Salary structures, payroll runs, payslips, deduction rules, employee profiles and adjustments.

Accounting

Chart of accounts, journal entries, invoices, expenses, double-entry posting and fiscal periods.

Customer, content & delivery

CRM

Contacts, leads, activity history and person deduplication so one customer is one record.

Rider App

Delivery offers, active runs, status updates and buyer messaging for the people actually carrying the parcels.

CMS

Page authoring, product groups, CMS sections, SEO defaults and bulk import/export.

Social

Social-account management and a post composer with product preview, for merchandising straight from the catalogue.

Architecture

How the pieces hold together

Independent apps only stay consistent if something enforces it. Three shared packages do that job.

API

Central Strapi 5 API

One headless API on port 4010 is the single source of truth. Every application talks to it over standard REST endpoints — no app owns another app's data.

SDK

Generated API clients

The api-provider package holds one descriptor for every Strapi endpoint, and a scaffolder emits matching client and server bindings per app — so a schema change can't silently drift.

UI

Shared component library

The pos-shared package supplies UI components and context providers, keeping seventeen applications visually and behaviourally coherent.

🔐

Auth portal

An OAuth-style login flow issues JWTs with per-app access rows. Users, roles and app access are administered in one place.

RBAC

Descriptor-driven permissions

The strapi-api-pro plugin enforces role scope and caches claims at the API, so authorisation is decided once rather than per-frontend.

ENV

One environment loader

A central loader with an APP_PREFIX__VAR override convention means each app can be tuned without seventeen divergent config files.

Stack & requirements

What it runs on

Rutba ERP technical specification
FrontendNext.js 16 with React 19. Bootstrap 5 for admin and POS interfaces; Tailwind CSS for the storefront.
BackendStrapi 5.x headless API with a custom strapi-api-pro plugin for descriptor-driven auth, role scope and claim caching.
DatabaseMySQL 8.x or MariaDB.
RuntimeNode.js 18 or later.
Repository layoutnpm workspaces monorepo — apps/ for applications, packages/ for shared libraries, scripts/ for tooling.
AuthenticationOAuth-style JWT flow with per-app app_access rows; X-Rutba-App and X-Rutba-App-Role headers select the active claim set.
MediaPairs with Rutba Media FileServer as the image origin.
EmailPairs with Rutba MTA for transactional and campaign delivery.
LicenceMIT — permissive commercial use with attribution.
Deployment

Three ways to run it

From a laptop to a container stack to budget shared hosting — the same codebase, three supported paths.

1

Local development

Start the workspace and each app comes up on its own port — auth on 4003, stock on 4001, sales on 4002, the Strapi API on 4010, and so on through 4017.

2

Docker

A full containerised stack — MySQL, Strapi and every Next.js application — for a reproducible production deployment.

3

Shared hosting

A Passenger + Node.js 22 toolkit that orchestrates build, upload and restart, so the suite runs on inexpensive hosting rather than requiring a cluster.

# clone and install the workspace
git clone https://github.com/eharain/Rutba-ERP.git
cd Rutba-ERP
npm install

# bring up the Strapi API, then the apps you need
npm run dev --workspace=apps/strapi

Commands are indicative — see the repository README for the current workspace names and the full environment setup.

Want Rutba ERP running in your business?

We implement, customise and support it — requirements analysis, data migration, multi-branch rollout and training.