Overview
A point of sale (POS) system is the combination of software and hardware (e.g., tablet, scanner, card reader) that allows businesses to process customer payments, manage transactions, and record sales in real-time. It acts as a centralized hub for tracking inventory, managing staff, and analyzing sales data to optimize operations.
Afternoon POS is a point-of-sale platform currently in development, designed for retail and warehouse environments. It connects a network of checkout terminals to a central server, giving businesses a unified system for processing sales, managing stock, and keeping tabs on operations across multiple locations.
At the heart of the system is the central server, which holds the product catalog and employee data, collects reports from all terminals, and pushes out updates. Operators manage it through a desktop admin app or using the command line. For testing and development, a set of hardware emulators covers everything from barcode scanners to receipt printers, so the full workflow can be validated without physical equipment.
Each terminal can work in two ways. In standalone mode it operates entirely on its own. In managed mode it connects to the central server to stay in sync, and if the connection drops, it keeps working and automatically catches up when it reconnects.
Features
Access & Security
Staff log in with a PIN, and the system enforces role-based access across cashier, manager, and admin levels. Sensitive actions like large refunds require supervisor approval, and repeated failed login attempts trigger a lockout. Admins can manage employees and review an audit log with anomaly alerts.
Sales & Payments
Cashiers build a cart by scanning barcodes or searching products, with support for weighted items, discounts, payment certificates, and excise stamps. Payments can be made by cash or card. Receipts can be saved and resumed later, and returns — full or partial — are handled by looking up the original transaction.
Fiscal & Cash Management
The terminal integrates with a fiscal registrar for all the compliance essentials: opening and closing shifts, X and Z reports, and receipt registration. Cash management includes drawer control, deposits, withdrawals, and denomination-level reconciliation. Card terminal supervisors can also cancel transactions and print terminal reports.
Warehouse & Inventory
Staff can receive stock, make inventory corrections, view stock history, and check current quantities. The terminal also supports simple production workflows, where ingredients are consumed according to a recipe to create a finished product. Low-stock alerts, label printing, and stock valuation reports round out the warehouse features.
Interface
The interface is designed for touchscreens, with large tap targets and immediate feedback. It can run fullscreen and works even without a GPU.
Technical Stack
Terminal
The terminal is a Tauri 2 desktop application with a Rust backend and web frontend. The backend uses SQLite for local data (with encryption via SQLCipher), Tokio for async, and an HTTP client (reqwest with rustls) for the central server. Serialisation and hashing use serde, bcrypt, and related crates. The frontend is React with TypeScript, Vite for build and dev, and React Router. The app builds as a single executable for Windows and Linux.
Central Server
The central server is a Rust binary. The HTTP API is built with Axum; TLS is supported with rustls. Data is stored in SQLite (rusqlite with SQLCipher). The CLI uses Clap; the interactive menu uses Inquire. Exports support CSV and PDF (e.g. for period reports). The server runs on Tokio. Tracing and CORS are handled with tower-http.
Central Server GUI
The Central Server GUI is a Tauri 2 app with a React and TypeScript frontend. Vite and React Router are used for build and routing. The frontend talks to the central server over HTTP from the browser.
Hardware Emulators
The emulators are a Rust Cargo workspace with one crate per device (scanner, printer, scale, cash drawer, fiscal registrar, card reader) plus a unified launcher. The unified launcher is an egui desktop app for running and configuring each emulator. Emulator devices run as TCP servers (or COM/serial when needed) so the terminal can connect without real hardware.