The essentials of a busy shop

Keep the line moving.

A self-hosted retail cash register for SKU lookup, held carts, stock receiving, returns and store reports.

Jawa RetailPROJECT OVERVIEW
01Scan products
02Review the basket
03Record cash received

Illustrated workflow · not a live application session

01 / Inside the project

Built around the work.

Start with the implemented workflow, then follow the source to understand how it works.

01

Build a basket

Scan exact SKUs or choose products, then review quantities and configured taxes.

02

Hold and recall

Save carts for later; current prices and stock apply when completing a sale.

03

Close the day

Reconcile cash shifts, inspect reports and back up the store.

In the application

A look at the register.

Jawa Retail register screenshot from the repository
Repository capture from September 2026. Example catalogue shown; this image is not a live store.
02 / Explore the workflow

Three steps to understand it.

Build a basket

Scan exact SKUs or choose products, then review quantities and configured taxes.

Full setup and implementation ↗
03 / Run it yourself

Start from the source.

Node.js 24 or later. Open http://localhost:8787 and use the local setup token to create the owner account.

Clone the repository and run these commands from its root. Review the README before connecting external services.

Open repository ↗
SOURCE CHECKOUT
git clone https://github.com/honeyamn10-source/pos-retail.git
cd pos-retail
corepack enable
corepack prepare pnpm@11.19.0 --activate
pnpm install --frozen-lockfile
pnpm run build:server
pnpm run start:server
04 / Know the scope

Clear expectations.

Development/training release. Card payments, live phone service and physical printers require separate integrations and validation. Held carts do not reserve stock.

Check the latest results in GitHub Actions. A passing automated check covers its tested paths, not every real-world integration.

Keep exploring