// WEB

Invoice Management System I

A system for small and medium-sized businesses, featuring role-based access, invoice generation, company administration, customer management, and product pricing.

ROLEFull-Stack Developer
TEAMSolo project
CONTEXTPersonal project
CREATED2023
Next.jsMongoDBTailwind CSSNextAuthMongooseVercel

Overview

Invoice Management System is a full-stack web application designed to help small and medium-sized businesses organise their invoicing and related business data.

The application brings invoices, customers, products, pricing, staff accounts, and company settings into a single system.

It supports two primary roles — Admin and Staff — with different permissions depending on the user’s role.

Key features

Authentication and roles

The application uses role-based access control to separate administrator and staff functionality.

  • Admin users can manage company-level settings and perform privileged operations.

  • Staff users can access day-to-day functionality while restricted from administrative operations.

Staff registration requires a company code provided by an administrator.

Dashboard

Administrators have access to a dashboard containing statistical information and summaries related to the business.

Invoice management

The invoice module allows users to:

  • View invoices and invoice details
  • Create invoices
  • Print invoices
  • Preview invoices before printing
  • Edit invoices (admin only)
  • Delete invoices (admin only)
  • Use an integrated calculator while creating invoices

Customer management

Users can manage customer records through:

  • Customer listing
  • Customer details
  • Add customer
  • Edit customer (admin only)
  • Delete customer (admin only)

Product and price list

The price list provides a central place to manage products and their pricing.

Administrators can:

  • View products and product details
  • Add products
  • Edit products
  • Delete products
  • Manage the purchase price of each product

Staff members can only view available products and their selling prices.

Company management

Administrators can manage staff accounts through the company management section.

This includes:

  • Viewing the company code
  • Viewing staff accounts
  • Removing staff accounts
  • Reviewing staff registration requests
  • Approving requests
  • Rejecting requests

Profile and settings

Users can manage their own accounts through the profile section.

Available functionality includes:

  • View profile
  • Edit profile
  • Change password
  • Delete account
  • Sign out

The application also supports:

  • Light and dark modes
  • English and Bahasa language settings
  • Currency settings (planned)

Technical approach

The application was built with Next.js as the main framework, with MongoDB used for the database and Mongoose for data modelling. NextAuth handled authentication and user sessions, while Tailwind CSS was used to build the interface.

The application also uses role-based permissions to separate admin features from the day-to-day workflows used by staff.

Preview

Login Page

Invoice Management System login page

Registration Page

Invoice Management System registration page

Dashboard

Invoice Management System dashboard Invoice Management System navigation sidebar

Invoices

Invoice Management System invoices page

Invoice Details

Invoice Management System invoice details

Add Invoice

Invoice Management System add invoice page

Edit Invoice

Invoice Management System edit invoice page Invoice Management System print preview

Calculator

Invoice Management System calculator

Customers

Invoice Management System customers page

Price List

Invoice Management System price list

Company Code

Invoice Management System company code management

Profile

Invoice Management System user profile

Settings

Invoice Management System settings

Lessons learned

This project gave me practical experience building a complete full-stack application around a real-world business workflow.

It strengthened my understanding of authentication, role-based authorisation, database modelling, CRUD operations, application state, invoice workflows, and responsive UI development.

It also provided experience designing an application around multiple user roles rather than treating the application as a collection of independent CRUD pages.