Retail · Our own product

TDS POS: an offline Windows point-of-sale for mini-markets

Own product · An offline Windows point-of-sale for mini-markets and small shops. It offers fast keyboard checkout in Arabic or English, stock control, cash drawer sessions, receipts, reports and optional customer credit. All data is stored on the shop’s own PC.

Retail
Own product
Tech Duo’s roleWe designed the product, packaged the desktop app, and developed the whole system, front end and back end.
Built withAngular 22, TypeScript, Tauri 2, Rust, SQLite, PrimeNG, Tailwind CSS, Chart.js
The TDS POS checkout window with a cart, barcode search and USD and LBP payment

Overview

Built for a single mini-market and in daily use there. Arabic by default with a full right-to-left layout and a one-click switch to English. Amounts are stored as whole numbers of cents and pounds, so totals never have rounding errors.

Problem

A small shop needs a till that is quick for cashiers and keeps working when the internet is down, with stock, cash and reports kept accurate. TDS POS replaces an older Windows application (built with WinForms) with a modern screen that follows the same business rules.

Solution

A Windows desktop app built with Angular and Tauri that runs fully offline on a local SQLite database. Cashiers sell from a keyboard-first checkout: search by barcode or name, edit quantities per line, hold and resume carts, take payment in USD and Lebanese pounds together, and finish with Ctrl+Enter. Owners manage products and stock, receive deliveries, run cash drawer sessions, review receipts and returns, and read reports.

What improved

  • In daily use in a mini-market
  • Runs fully offline on a local database
  • One keyboard-first flow from search to a finished sale
  • Cash drawer sessions with counted USD and LBP and a closings report
  • Automatic daily snapshots plus in-app backup and restore

These results come from real use of the product.

Tech Duo’s role

We designed the product, packaged the desktop app, and developed the whole system, front end and back end.

Users and roles

  • Cashiers (selling)
  • Shop owner (stock, cash, returns, reports)

Requirements and limits

  • It had to work fully offline, with no backend or cloud service
  • Two currencies at the till, including mixed payments and change
  • Arabic first with full right-to-left layout, plus English
  • Owners and cashiers needed different permissions, and cashiers are always charged the catalog price
  • Data lives on the shop’s own PC, so backup and restore had to be built in

What it handles

  • Checkout with barcode or name search
  • Hold and resume carts
  • Mixed USD and LBP payment with change
  • Receive deliveries with multiple lines and optional cartons
  • Stock adjustments (damaged, missing, stocktake, opening) with movement history
  • Open and close cash drawer sessions with counted USD and LBP, cash in and out, expenses and owner withdrawals
  • Receipts: filters, search, reprint, owner-only returns and thermal printing
  • Reports: daily income, sales by date range, product sales and profit, low stock, inventory valuation, cashier income and capital
  • Optional customer and supplier credit
  • Backup and restore

How it is built

  • Angular interface with PrimeNG and Tailwind CSS
  • Tauri 2 desktop shell (WebView2) with a Windows installer
  • SQLite database owned by a Rust layer, stored on the shop’s PC
  • Automatic daily snapshots (newest 14 kept) and in-app backup and restore with a safety copy
  • Offline licence activation tied to the machine
  • Role-based access for owners and cashiers

Screens from the product

Built with

Related services

Need something in this direction?

If this problem looks familiar, tell us how your operation works today. We will help you decide what to build first.

Start a project