← ALL WORK
CASE STUDY · BASF · PUBLIC · MASAR.BASF.COM

Masar

BASF's public shipment tracking portal — secure customer accounts, bulk shipment import, history and search, and an admin panel with its own email-template engine.

CLIENT
ROLE
Sole developer, end to end
STACK
NestJS · Prisma · PostgreSQL · React
HOSTING
Self-managed AWS EC2
THE PROBLEM

BASF's shipment tracking lived on the intranet. Employees could see everything; the customers actually waiting for the shipments could see nothing. Every status check meant an email or a phone call to a BASF contact. Masar closes that gap: a secure public portal where customers track their own shipments, on their own accounts, without touching BASF's network.

SCREENSHOT SLOT — SHIPMENT DASHBOARD (CLIENT-SAFE CAPTURE PENDING)
WHAT IT DOES

Customer self-service tracking

Customers log in to their own view of shipment status, history, search, and documents. Two roles (admin and customer) enforced by route guards, so each side sees exactly what it should.

Secure login without the friction

JWT sessions in signed HTTP-only cookies, OTP email verification for account access: security that holds up without making a logistics manager fight a password policy.

Bulk data in, bulk data out

Shipments and users arrive by CSV import and leave by CSV export, because that's how logistics teams actually work. Status-change emails go out asynchronously through a BullMQ/Redis job queue.

An admin panel that runs itself

Customer and company management, enquiry handling, and an email-template engine. BASF's team edits the emails customers receive without asking a developer.

Hardened for the public internet

Rate-limiting, CSP and Helmet security headers, centralized error handling, and scheduled automated backups: the unglamorous parts that keep a public portal boring, in the good way.

UNDER THE HOOD

NestJS + Prisma on PostgreSQL: modules for shipments (import/export, history, search, summary analytics), customers and companies, users, enquiries, and settings. BullMQ + Redis handle background email jobs; a scheduled module takes the backups.

React + TypeScript frontend on TanStack Router and Query, with shadcn-style components. Runs on a dedicated EC2 instance provisioned solo over SSH: Nginx with HTTP/2, PostgreSQL, and PgBouncer on the same VM.

Your customers asking you for updates?

A portal like this is exactly the shape of problem to describe in two sentences.

TELL ME ABOUT IT