← Work|BetaPoint of Sale · 2026

SIM - Retail Edition

SIM (Sales and Inventory Management), generalized for retail - a white-labeled, multi-branch point-of-sale system forked from the gym edition and turned into a standalone retail product in under three weeks.

Problem

A retail client needed a multi-branch point-of-sale system with purchasing, suppliers, loyalty, commissions, and offline-first checkout. The Gym Edition was gym-specific - members, NFC check-in, subscriptions, personnel attendance - so it had to be stripped down and generalized for retail.

Solution

The Retail Edition started as a copy of the Gym Edition’s codebase with every gym-specific module stripped out and replaced with retail-specific modules: purchasing, suppliers, customer loyalty, multi-branch inventory, and cashflow accounting. Same backend architecture, same Electron POS pattern, different business.

The generalization itself took a few days. Most of the following two and a half weeks went into things that don’t show up in a feature list: adding class-validator DTOs across every module (a gap in the original codebase), writing a ~790-test Jest suite, and fixing real vulnerabilities found along the way - password hashes leaking through a handful of API responses, and an unauthenticated password-reset endpoint that allowed account takeover.

Raw ingredient inventory and a cafe menu module are planned but not yet built - everything else in this changelog is implemented and covered by the test suite, though not all of it has had a full UI-level pass yet.

Features

  • Multi-branch POS - shift open/close with cash counts, full and partial refunds, petty cash logging, and offline-first sync so a branch keeps selling through a dropped connection.
  • Purchasing & suppliers - supplier records, purchase orders, and stock received against a PO, matched to inventory.
  • Customer loyalty - customer profiles with purchase history and a points program, with redemption guarded at both the database and application layer.
  • Cashflow tracking - a categorized expense ledger, income-vs-expense statement, accounts payable/receivable, and cash short/over reconciliation at shift close.
  • Employee commissions - sales tied to the cashier who made them, with commission rates correctly netted against refunds.
  • White-labeling - POS terminals auto-discover the backend server on the local network, and pull branding (logo, app identity) from the server instead of a bundled asset, so the same install works across differently-branded deployments.

Tech Stack

  • NestJS backend with parameterized queries over pg, class-validator/class-transformer DTOs
  • Angular 21 back-office admin app with dynamic white-label theming
  • Angular POS terminal renderer, offline-first with a local SQLite mirror synced over Electron IPC
  • Electron desktop shell, plus a Docker/nginx static deployment option for the back-office
  • PostgreSQL
  • Role-based access control with route and endpoint guards
  • ~790 Jest tests across 9 backend modules, GitHub Actions CI

Status

Beta

Category

Point of Sale · 2026

Tech Stack

NestJSAngularElectronPostgreSQLclass-validator

Used By

LCS

Interested?

Get in Touch →