Skip to content
hubert.gunawan
All projects

Software · 2020–2023

Warehouse Stock Management

A handheld inventory app and Node.js backend that replaced manual stock tracking for warehouse operations staff.

Context
PT. Mitra Mulia Makmur
Areas
Backend, Frontend, DevOps
  • Node.js
  • React
  • SQL
  • NoSQL
  • ORM
  • Docker
  • Kubernetes
  • AWS

Problem

Warehouse stock was tracked manually. Counts were written down and later re-entered into other systems, which made stock levels slow to update and easy to get wrong. Operations staff needed a way to record stock movements on the warehouse floor, as they happened.

My role

Senior Software Engineer. I designed and built the handheld application and the Node.js backend behind it, including the API, the data model, and the deployment.

Architecture

  1. 01

    Handheld app

    Floor staff record stock in / out / counts

  2. 02

    REST API

    Node.js services, validation, auth

  3. 03

    Data layer

    SQL / NoSQL via ORM models

  4. 04

    Web app

    React dashboard for stock levels

Services ran as Docker containers, deployed with Kubernetes on AWS.

Key decisions

  • API-first backend. A RESTful API in Node.js served both the handheld app and the web tools, so business rules lived in one place.
  • ORM-based data layer. Modelling stock, locations, and movements through an ORM kept the schema explicit and migrations reviewable.
  • Containers from day one. Docker images and Kubernetes manifests made environments reproducible and deployments repeatable.
  • Tests before release. Unit tests and test automation caught regressions before they reached the warehouse floor.

Tech stack

Node.js · React · SQL / NoSQL · ORM · Docker · Kubernetes · AWS

Outcome

The handheld app replaced manual inventory tracking for warehouse operations staff, so stock movements were captured at the point of work instead of being re-keyed later.

Lessons

  • Floor tools live or die on speed: every extra tap is friction for staff who are carrying stock.
  • Putting validation in the API, not just the client, kept data clean across every app that used it.

Details are kept general because this was internal company software. Diagrams describe the architecture rather than showing proprietary screens.