Talym Myler

Full Stack Developer

A Graduate Software Engineer passionate about building clean, impactful web apps

Home

Bits n Bobs

A clean and reliable inventory manager that organizes products into categories, tracks stock levels, flags low inventory, and stores pricing and product details.

Key features:

  • REST API Backend
  • Real time updates
  • Password protected edits and deletions
  • Filter and search functionality with substring matching
  • Hosted on self-managed linux VPS
Homepage preview of Bits n Bobs

Why this project?

My motivation for this project was to practice building a Node.js and Express application in a real-world context while also gaining a deeper understanding of relational databases and CRUD operations. When it came time to deploy, I used it as an opportunity to learn new skills by setting up a Linux VPS on DigitalOcean to host both the database and the app. The original idea for the project came from The Odin Project, which provided the foundation for its scope and direction.

How did you do it?

    Express.js logo

    Express

    Node.js logo

    Node.JS

    PostgreSQL logo

    PostgreSQL

    Digital Ocean logo

    Digital Ocean

    HTML logo

    HTML

    CSS logo

    CSS

Database Design

My first step was designing the database schema

Database schema diagram showing fields and relationships for categories and products tables

I decided that products should only exist within a category, and that if a category is deleted, then all products within that category are also deleted.

I added some bounding for field values to limit text length, and prevent unreasonable numerical values, while also ensuring the critical stock warning value was atleast as small as the low stock warning value.

Each product has a field for critical and low stock count warnings providing up to two visual warnings on products as their stock depletes. These warnings can be seen on their respective category and product cards.

Category card from Bits N Bobs highlighting the visual warning icons Product card from Bits N Bobs highlighting the visual warning icon

Routes and API

I structured the backend using the Model-View-Controller (MVC) pattern, defining routes for each page and every database interaction. It functions as a REST API, handling all CRUD operations.

To ensure data integrity and security, I validated inputs at multiple levels:

  • HTML form attributes for basic checks
  • Express Validator for server-side validation
  • SQL constraints in the database for enforcement

Additionally, destructive actions (deletes and edits) are password-protected to prevent misuse.

In this example, trying to add a product with a duplicate title triggers validation errors and displays them to the user.

Create a product form from Bits N Bobs highlighting the field validation response to an invalid input

Deployment

When it came time to deploy, I also experimented with hosting strategies. I spun up a DigitalOcean VPS, set up dedicated app and database users to keep things separated, and reserved root only for sudo access.

The app runs under pm2, while Postgres handles the database, both living on the same always-on server.

Where can I see it?