Internal transport dashboard for Bama (Aug–Oct 2023) — Next.js, GraphQL, and Tailwind for logistics routing and planning. Maps and tables built for operators, not demos.
The hard part was information density: show enough to decide fast, hide the rest. If the route view is wrong, trucks are wrong.
Bama moves a lot of produce around Norway. From August to October 2023 I worked on the frontend for an internal transport optimisation dashboard — a routing and planning view for logistics operators who need to trust what is on screen before trucks roll.
This was not a customer-facing product. It was ops software — the kind where a confusing column header wastes someone’s morning and a wrong route costs real money. Internal tools deserve the same clarity as public sites; they just optimise for decision speed instead of marketing.
Bama’s logistics tooling had grown messy over time — different UIs, unclear data ownership, and people doing workarounds in spreadsheets because the software did not show them what they needed in one place. The new dashboard had to pull transport data into a single view operators could actually use during planning.
Next.js, TypeScript, and TailwindCSS on the frontend. GraphQL for transport data. The interesting engineering was not drawing a map — it was deciding what to hide so an operator could make a call in seconds instead of hunting through panels.
Information density is the whole game in logistics UI. Show too little and people reopen Excel. Show too much and nobody trusts the screen. I spent most of the project on hierarchy — which metrics belong above the fold, which details wait for drill-down, and how map and table views stay in sync when the dataset grows.
Internal software, real users who do not care about your component library. If the route view is wrong, trucks are wrong. Screenshots on this page are from the shipped dashboard — no public URL, but the constraints were sharper than many consumer projects I have worked on since.