Work / ERP
NEXO
One ERP where there used to be nine separate apps. A food distribution company in Lima runs sales, stock, finance, HR, production and deliveries in it.
A rebuilt screen with sample data. The real ones hold a client's numbers. A demo you can click through, with a made-up company, is in the works.
The problem
Every department had its own tool. I know, because I built most of them: a chatbot dashboard, a screening tool for applicants, a personal agenda, an app for meeting minutes, an attendance app, a delivery app, a stock app, a product catalog and a sign-in dashboard that tied them together.
Each one solved a real problem. Each one also had its own login, its own list of users and its own idea of what a customer is. Sales and stock sat in an older ERP that nobody could extend. When someone moved from the warehouse to sales, I changed their rights in every app separately.
What I built
One login, one permission system, one database. I did not rewrite everything in one go. The shell and the personal workspace went live first, in June 2026. After that the old apps moved in one at a time, as modules, while people kept working.
The customers and the sales history came over from the old ERP by import. Rights are set per role and per screen, and the company's own admin manages them. I do not get a message when someone changes jobs.
There is a test environment that is refreshed from production every night. Nothing reaches production without a full run on test first, by me, through the same screens the staff use.
How it fits together
- PeopleOffice staff in the browser, Drivers on an offline PWA, Field sales on Android
- Front doorCaddy, TLS, one sign-in for every module
- ApplicationNext.js, 594 API routes, role and screen permissions
- DataPostgres, self-hosted Supabase, 226 migrations, nightly backup
- Around itn8n for chat channels and notifications, test environment refreshed nightly
One VPS. The boring choice, on purpose: one place to back up, one place to look when something is slow.
What came out
| Separate apps merged into one | 9 | measured, project plan |
|---|---|---|
| Pages | 320 | measured, Nov 2026 |
| API routes | 594 | measured, Nov 2026 |
| Database migrations | 226 | measured, Nov 2026 |
| Commits in the repository | 1,338 | measured, Nov 2026 |
| Lines of TypeScript | about 310,000 | measured, Nov 2026 |
| Customers in the CRM after import | 1,563 | measured, June 2026 |
| Staff on the attendance clock | 75 | measured, Sept 2026 |
| Clock-ins a day without paper or spreadsheets | about 300 | estimated, 75 staff, 4 moments a day |