Featured Case Study

Smart Inventory Management System.

A full-stack dashboard that replaces manual college-lab asset tracking with live stock counts, item condition, low-stock alerts, charts, and a recent-activity feed.

Live Demo All Projects
Hosted on a free tier that sleeps when idle — the first load can take up to 30 seconds to wake the server. It is awake after that.

Problem

Lab assets were tracked by hand.

Stock levels, item condition, and low-stock items were hard to see at a glance, and there was no quick record of recent changes.

Approach

One dashboard for the whole picture.

Summary cards for totals and categories, a clear add/edit flow, condition tracking, low-stock flags, and a recent-activity feed — all in one view.

Build

A real full-stack app.

An Express REST API handles CRUD, MongoDB stores the inventory, and Chart.js renders category and condition breakdowns. A dark mode keeps it comfortable to use.

Result

Deployed and usable.

A live, hosted application demonstrating end-to-end ownership: data model, API, visualizations, responsive UI, and deployment.

Results

What it tracks in production.

Figures read from the live deployment.

23lab assets tracked live
4asset categories charted
3condition states (working, faulty, repair)
1low-stock alert firing automatically

Decisions & Tradeoffs

Built like product work, sized like a lab tool.

A small app is the right place to practise the decisions large apps are made of.

API

A REST API with a separate frontend, not server-rendered pages.

The Express API owns the data and the browser owns the view — the shape most product teams actually work in. Tradeoff: more moving parts than a small app strictly needs, chosen deliberately for what it teaches.

Data

MongoDB documents, one per asset.

An inventory item — name, category, room, condition, stock — is naturally one document, so reads and writes stay simple. Tradeoff: the chart breakdowns need aggregation work that a SQL GROUP BY would hand over for free.

Validation

The server validates everything, whatever the form said.

Client-side checks are for the user's convenience; the API checks are the actual guarantee. I hold this rule because I have bypassed enough forms in security labs to know the difference — the reasoning is in this garden note.

Hosting

A free tier that sleeps, stated plainly.

The live demo costs nothing to keep up, which is why it is still up. Tradeoff: a cold start can take 30 seconds — so the page says so next to the button instead of letting a visitor think the app is broken.

What This Shows

Beyond static pages.

This project proves I can design a data model, build an API, persist data, visualize it, and ship a working full-stack product — not just a front end.

01

Model

Define inventory items, categories, condition states, and stock thresholds.

02

Build

Express API + MongoDB for CRUD, Chart.js for category and condition views.

03

Ship

Responsive UI, dark mode, and deployment to a live host.