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.
ZNova projectWeb app · Delivered
Billing and stock control for Ahad Brothers, an educational shop: customer bills, inventory and payments in one SolidJS and NestJS application.
Built byAhsan NadeemAhad 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.
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 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.
A look at the screens. Drag the front one aside or use the arrows to flip through.

Billing (1 / 3)
From what people see down to what it runs on, with the stack behind each layer.
The capabilities that went live, one card each.
Staff create a customer's bill in a few steps at the counter.
Stock is managed in the same application that bills for it, so counts follow every sale.
Payment-related steps sit next to the bills they settle.
Only signed-in staff can create bills or change stock.
Bills and stock changes are saved as database transactions, together or not at all.
TypeScript from the SolidJS screens through the NestJS API to Prisma's queries.
The engineering calls behind the build, and why they were made.
Billing and stock changes go through database transactions, so a sale and its stock movement are recorded together or not at all.
Billing, inventory and payments share one application and one database instead of separate tools that drift apart.
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
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.
That's the kind we like. Tell us about it and we'll reply with how we'd approach it.
Change theme