Farhaan Beeharry
Software Engineer
© 2026 All rights reserved.
NexStock
NexStock is a business operating system
for small and medium businesses — one platform in place of
the usual pile of disconnected tools. It brings
multi-store inventory, a
point of sale, quotations and invoicing,
customers and suppliers, reporting and audit logs into a
single system, configurable enough to fit a retail shop, a
wholesaler, a workshop, a garage, a printer or a repair
business.
Architecturally it is a modular monolith: a Laravel 12 API where every bounded context — Inventory, Products, Sales, Purchasing, Customers, Suppliers, Accounting, Reporting, Users, Notifications, Settings, Support — is its own module with its own domain, application, infrastructure and routes layers, and a dependency linter (Deptrac) that fails the build when a module reaches into a neighbour it has no business knowing about. The composition root wires modules together; it contains no business logic of its own.
On top of that API sit two clients: a React + TypeScript SPA for the back office and the POS, and a Flutter companion app for the shop floor — stock lookups, movements and dashboards from a phone. Both are fully bilingual (EN / FR) with light and dark themes, and — a detail that matters on shared hardware — the theme and language follow the account rather than the device, carried in a JWT claim so a fresh device adopts the right settings on first login.
The brand palette is derived from the logo rather than picked by eye, and it is documented as a contrast argument: interactive surfaces run teal → cyan, and the exact shades were chosen because they clear 3:1 against both white and near-black, with the 700 shades reserved for anything carrying white text so it clears the 4.5:1 AA threshold. Blue was retired from the brand entirely and now means status.
Inventory & stock
Selling
Contacts & purchasing
Business & platform
Engineering
Architecturally it is a modular monolith: a Laravel 12 API where every bounded context — Inventory, Products, Sales, Purchasing, Customers, Suppliers, Accounting, Reporting, Users, Notifications, Settings, Support — is its own module with its own domain, application, infrastructure and routes layers, and a dependency linter (Deptrac) that fails the build when a module reaches into a neighbour it has no business knowing about. The composition root wires modules together; it contains no business logic of its own.
On top of that API sit two clients: a React + TypeScript SPA for the back office and the POS, and a Flutter companion app for the shop floor — stock lookups, movements and dashboards from a phone. Both are fully bilingual (EN / FR) with light and dark themes, and — a detail that matters on shared hardware — the theme and language follow the account rather than the device, carried in a JWT claim so a fresh device adopts the right settings on first login.
The brand palette is derived from the logo rather than picked by eye, and it is documented as a contrast argument: interactive surfaces run teal → cyan, and the exact shades were chosen because they clear 3:1 against both white and near-black, with the 700 shades reserved for anything carrying white text so it clears the 4.5:1 AA threshold. Blue was retired from the brand entirely and now means status.
Inventory & stock
- Product catalogue with variants, barcodes and unit pricing
- Per-store stock levels with low-stock thresholds
- Stock adjustments with reason codes and a full audit trail
- Inter-store transfers with request / dispatch / receive states
- Bulk import and export of products
- Barcode scanner input on product and POS screens
- Product detail pages with per-store breakdown and movement history
- Store management for single-branch or multi-branch businesses
Selling
- Touch-friendly POS with keyboard shortcuts
- Held orders — park a sale and come back to it
- In-POS sales history
- Product customisation at the point of sale, for custom-order businesses
- Quotations that convert into invoices
- Invoices with status transitions, part payments and mark-as-paid
- Follow-up flow for unpaid invoices
- Printable / thermal receipts
- Orders queue for workshops and repair jobs
- Accounts receivable with reminder flows
Contacts & purchasing
- Customers with per-customer history and balances
- Suppliers with their own product catalogues
- Supplier orders raised from a supplier's catalogue
- Contact detail pages tying documents, orders and payments together
Business & platform
- Multi-business workspaces with a business switcher
- Guided onboarding wizard with logo upload and in-browser cropping
- Users, roles and granular permissions
- Drag-and-drop customisable dashboard widgets
- Reports with charts (Recharts) and data tables
- Searchable audit log of every privileged action
- In-app notifications
- JWT authentication with 2FA (TOTP, QR enrolment) and OTP e-mail flows
- Password policy defined once and shared by the API rule and the on-screen checklist
- Documented REST API with a generated OpenAPI spec, plus an integrations page
- Billing and plan management
- Help centre, changelog and credits pages
- EN / FR throughout, light and dark themes that follow the account
Engineering
- Laravel modules with enforced boundaries — Deptrac fails the build on a violation
- Larastan static analysis and a PHPUnit suite
- Errors carry stable
error_keyvalues; clients never match on prose - A mock server (MSW) so the SPA can be developed against the real response envelope
- Playwright end-to-end coverage
- Documented conventions for the traps that bite:
actingAs()bypassing the auth provider, andNotification::fake()never rendering the mail template
One system, every counter
The back-office stock table, the point of sale and the Flutter shop-floor app — recreated from NexStock's real screens and its teal / cyan brand palette.
Multi-store product & stock table
Point of sale
F2 hold
Alu Profile
Hinge Kit
LED Strip
| Item | Qty | Total |
|---|---|---|
| Alu Profile 40×40 | 4 | Rs 1,240 |
| Hinge Kit | 2 | Rs 460 |
| LED Strip 5m | 1 | Rs 590 |
SubtotalRs 2,290
Due
Rs 2,633
Charge
Hold
Quotation
Held orders
#H-207 · walk-in
2 items
#H-206 · Mr Ramjan
5 items
POS with held orders
Rs 48k
Today
32
Sales
Stock movements
Received · 40 pcs
Hinge Kit
Hinge Kit
Sold · 6 pcs
LED Strip 5m
LED Strip 5m
Low stock
17
Flutter shop-floor app
Laravel 12
PHP 8.3
Modular monolith
JWT + 2FA
React 18
TypeScript
Vite
TanStack Router
TanStack Query
TanStack Table
Tailwind CSS
Radix UI
Recharts
dnd-kit
Flutter
flutter_bloc
Larastan
Deptrac
Playwright
MSW
NexStock is in active development. If you would like a
walkthrough or a demo access account, contact me on
contact@farhaan.info