AB Logistics
Cross-platform logistics software built around real business workflows.
Expo / React Native Web · Node.js · Express · MySQL · AWS
01Problem
Transport accounting for a logistics business: consignment notes (bilty), vouchers, a day book and billing, in one app for phone and desktop.
The business ran this work by hand and across separate records. The goal was one system for all of it.
02My role
Primary developer
03What I built
Users
Three roles
Phone and browser
Cross-platform app
Expo · React Native Web · one codebase
REST
API
Node.js · Express · role-based access
Shared TypeScript types
Database
MySQL
Deployed on
Cloud
AWS Elastic Beanstalk
- One Expo codebase for Android and the web, with TypeScript interfaces shared with the API.
- An Express and MySQL API with three user roles, access tokens and refresh cookies.
- Transport accounting: consignment notes, vouchers, a day book, master data and billing.
- Deployments on Vercel with Railway, then AWS Elastic Beanstalk, plus a cPanel package.
04Engineering decisions
Option A
Leave the “Sync from Tally” button
Option BChosen
Remove it
- Trade-off
- Keeping it signals intent. But its backend only ever returned “not implemented”.
- Decision
- Removed it from five screens, five services and five routes.
- Why
- A button that always fails is worse than no button.
Option AChosen
A shared TypeScript codebase
Option B
Native apps per platform
- Trade-off
- Native per platform gives full control. One codebase ships Android, PWA and web together.
- Decision
- One shared TypeScript codebase for Android, PWA and web.
- Why
- The business logic and behaviour stay the same on every platform, and a change is made once instead of three times.
05What I learned
Software has to fit the way a business actually works, not just look right technically. And some problems only appear once a real application is in production.