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.
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
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.
How the pieces hold together
Independent apps only stay consistent if something enforces it. Three shared packages do that job.
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.
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.
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.
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.
One environment loader
A central loader with an APP_PREFIX__VAR override convention means each app can be tuned without seventeen divergent config files.
What it runs on
| Frontend | Next.js 16 with React 19. Bootstrap 5 for admin and POS interfaces; Tailwind CSS for the storefront. |
|---|---|
| Backend | Strapi 5.x headless API with a custom strapi-api-pro plugin for descriptor-driven auth, role scope and claim caching. |
| Database | MySQL 8.x or MariaDB. |
| Runtime | Node.js 18 or later. |
| Repository layout | npm workspaces monorepo — apps/ for applications, packages/ for shared libraries, scripts/ for tooling. |
| Authentication | OAuth-style JWT flow with per-app app_access rows; X-Rutba-App and X-Rutba-App-Role headers select the active claim set. |
| Media | Pairs with Rutba Media FileServer as the image origin. |
| Pairs with Rutba MTA for transactional and campaign delivery. | |
| Licence | MIT — permissive commercial use with attribution. |
Three ways to run it
From a laptop to a container stack to budget shared hosting — the same codebase, three supported paths.
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.
Docker
A full containerised stack — MySQL, Strapi and every Next.js application — for a reproducible production deployment.
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.