NEXUS is the logistics platform for fertilizer distribution at Pupuk Indonesia Holding Company. I am the main author: 197 of 262 backend commits and 327 of 335 frontend commits. I built the multi-entry frontend, the Delta contract and tariff tools including BBM fuel freight simulation, and the route optimizer service, and I ported Arca into the platform.
- Year
- 2026
- Status
- In development
- Stack
- React 19, TypeScript, Rsbuild, Bun, TanStack Router, Tailwind CSS v4, OpenLayers, Vitest, FastAPI, SQLAlchemy (async), PostgreSQL, asyncpg, Neo4j, openpyxl
- Source
- Internal. Source is not public.
The story
NEXUS supports fertilizer distribution logistics at Pupuk Indonesia Holding Company. Before it, freight tariffs, carrier contracts, and route costs lived in spreadsheets. I am the main author of both repositories.
The platform has three modules. Delta holds carrier contracts and freight tariffs. Tariffs come in from Excel through a preview step that shows conflicts before anything is written.
When fuel (BBM) prices change, Delta can simulate the freight adjustment before it is applied. Contract expiry alerts have configurable warning and critical thresholds. Vista draws routes on an OpenLayers map and uses a route optimizer service over a Neo4j graph.
Colleagues wrote the original Cypher scripts, and I extended the route search. Arca monitors warehouse and kiosk stock. I ported it from an earlier stock dashboard together with another engineer.
All modules live in one frontend repository. Rsbuild picks the entry from APP_MODULE, so each module runs alone during development. On the backend, Delta and Arca start without Neo4j through a startup flag.
Performance and savings are not measured yet.
Scope
- who
- Aditya Vahlevy Nugraha as main author. Colleagues wrote the original Neo4j Cypher scripts and part of Arca.
- what
- Three modules on one platform: Delta (contracts, tariffs, BBM freight adjustment), Vista (route simulation on a map), and Arca (warehouse and kiosk stock monitoring).
- when
- May to October 2026.
- where
- Internal logistics tool at Pupuk Indonesia Holding Company.
- why
- Freight tariffs, contracts, and routes lived in spreadsheets, and route costs were worked out by hand.
- how
- React 19 with Rsbuild multi-entry builds, FastAPI with async SQLAlchemy on PostgreSQL, Neo4j for the route graph, and openpyxl for Excel import.
Problems solved
Problem
Tariffs came from spreadsheets, and a bad import could overwrite existing rates.
Change
Built a tariff Excel import with a preview step and a conflict resolution dialog before commit (tarif_routes.py, TariffConflictModal.tsx).
Result
Conflicts are shown before data is written. Error rate change: Not measured.
Problem
Fuel (BBM) price changes had to be applied to freight tariffs by hand.
Change
Built BBM parameter alignment and freight adjustment simulation in Delta (c3d3f61, a32852d).
Result
Freight impact of a BBM change can be simulated before applying it. Time saved: Not measured.
Problem
Each module needed its own dev setup, and Delta pulled in Neo4j it did not use.
Change
Built Rsbuild multi-entry builds selected by APP_MODULE and an enable_neo4j startup flag for standalone backends.
Result
Delta, Vista, Arca, and the shell build and run on their own. Build time: Not measured.
Before and after
| Measure | Before | After |
|---|---|---|
| Frontend entry points | Not measured | 4 entries selected by APP_MODULE: shell, delta, vista, arcaprojects/nexus/nexus-fe/rsbuild.config.ts |
| Neo4j in standalone backends | Not measured | Off for Delta and Arca via enable_neo4jprojects/nexus/nexus-be/packages/core/factory.py |
| Contract expiry alerts | Not measured | Configurable warning and critical days (default 90 and 30)projects/nexus/nexus-be/packages/delta/schemas/contract_alert.py, commit 925aee5 |
| Backend test functions | Not measured | 548 pytest functions (counted, not run here)projects/nexus/nexus-be/tests, commit c8ba061 |
My part
- Built the multi-entry frontend (shell, Delta, Vista, Arca) and restructured both repositories into symmetric monorepos (07cea38, a91a980).
- Built BBM fuel parameter alignment and freight adjustment simulation (c3d3f61, a32852d).
- Added configurable contract expiry alert thresholds (925aee5).
- Ported the Arca stock dashboard and added the global auth module, with another engineer contributing (dab13dc).
- Built the route optimizer service on top of the Neo4j graph and extended the Cypher route search.
- Moved UI primitives into a shared package and added the pytest suite (93c92fc, c8ba061).
Platform scope
- Built Rsbuild multi-entry builds selected by APP_MODULE for the shell, Delta, Vista, and Arca.
- Restructured frontend and backend into symmetric monorepos with a shared UI package.
- Built tariff Excel import with preview and conflict resolution, using openpyxl on the backend and exceljs for export.
- Built BBM fuel parameter alignment and freight adjustment simulation.
- Added configurable contract expiry alert thresholds.
- Built the route optimizer service over the Neo4j route graph and drew routes on an OpenLayers map in Vista.
- Added an enable_neo4j startup flag so standalone Delta and Arca run without a graph database.
- Ported the Arca warehouse and kiosk stock dashboard and added the global auth module, with another engineer.
- Added the backend pytest suite and Arca route tests.
Decisions
- 01
One repository, many entries
Rsbuild picks the entry from APP_MODULE, so each module runs alone in development and ships together in the shell. Trade-off: shared code must stay in the shared package (rsbuild.config.ts, 93c92fc).
- 02
Neo4j as an opt-in dependency
create_app takes enable_neo4j, so Delta and Arca start without a graph database. Only Vista and the shell connect to Neo4j (packages/core/factory.py).
- 03
Preview before tariff import
The Excel import runs a preview and asks the user to resolve conflicts before commit, so existing tariffs are never overwritten silently (packages/delta/routes/tarif_routes.py).
Hard parts
- Kept modules independent in one repository: each runs alone in development and they ship together in the shell build.
- Detected tariff conflicts during Excel import and let users resolve them before commit.
- Fixed CORS for credentialed requests by echoing the exact origin with allow_origin_regex (bf69b4b).
- Fixed Docker builds by copying workspace manifests before bun install (495d080).
Not measured yet
- Route optimizer latency.
- Tariff discrepancies found through the tools.
- Build time per module before and after the multi-entry setup.
My own readiness estimate, self-assessed and not audited:
- tests
- 65/100
- docs
- 85/100
- quality
- 85/100
Commits
Commit hashes the claims on this page trace back to. The repositories are internal.
- 07cea38
- a91a980
- c3d3f61
- a32852d
- 925aee5
- dab13dc
- 93c92fc
- c8ba061
- bf69b4b
- 495d080