Skip to content

ZNova projectWeb app · Delivered

Ahad Brothers billing & inventory

Billing and stock control for Ahad Brothers, an educational shop: customer bills, inventory and payments in one SolidJS and NestJS application.

Built byAhsan Nadeem

About this project

The challenge

Ahad Brothers, an educational shop, needed one system to bill customers at the counter and keep track of every item on its shelves, so that sales and stock always tell the same story.

The approach

ZNova built a web application with a SolidJS front end and a NestJS API, on PostgreSQL through Prisma. Staff sign in, create a customer's bill and manage inventory from the same screens, while payment steps and stock changes are written as database transactions, so a sale and its stock movement are recorded together or not at all.

The outcome

The shop bills its customers and manages its inventory in one application, with a consistent record behind every sale. ZNova is now building Ahad Brothers' online store on the same foundations.

Inside the product.

A look at the screens. Drag the front one aside or use the arrows to flip through.

Billing (1 / 3)

How it's built, layer by layer.

From what people see down to what it runs on, with the stack behind each layer.

billing-inventory-app · architecture
  1. Interface

    • SolidJS
    • Sign-in for shop staff
    • Billing screen for customer bills
    • Inventory screens
  2. API

    • NestJS
    • TypeScript
    • Billing and inventory modules
    • Payment-related workflows
    • Authentication for every request
    • PDF export
  3. Data

    • Prisma
    • PostgreSQL
    • Typed queries through Prisma
    • Bills and stock movements as transactions

What shipped.

The capabilities that went live, one card each.

  • Customer bills

    Staff create a customer's bill in a few steps at the counter.

  • Inventory management

    Stock is managed in the same application that bills for it, so counts follow every sale.

  • Payment workflows

    Payment-related steps sit next to the bills they settle.

  • Secure sign-in

    Only signed-in staff can create bills or change stock.

  • One consistent record

    Bills and stock changes are saved as database transactions, together or not at all.

  • Typed end to end

    TypeScript from the SolidJS screens through the NestJS API to Prisma's queries.

Decisions that shaped it.

The engineering calls behind the build, and why they were made.

  1. Transactions as the source of truth

    Billing and stock changes go through database transactions, so a sale and its stock movement are recorded together or not at all.

  2. One system, not three

    Billing, inventory and payments share one application and one database instead of separate tools that drift apart.

  3. Types from screen to database

    Prisma generates typed queries from the schema, and TypeScript carries those types through the API to the screens, so a schema change shows up as a compile error, not a wrong bill.

Next project

Call centre & lead management platform

Team experience · SaaS · 2024–2026

A multi-tenant product for intake calls: a form engine with recursive decision trees, lead automation, role-based reporting and in-app calling.

All projects

Got a workflow nobody's tool quite fits?

That's the kind we like. Tell us about it and we'll reply with how we'd approach it.

Popular searches

Change theme