System Overview
This POS System is an enterprise-grade, web-based point of sale application designed for retail stores, restaurants, and multi-location businesses. It provides a complete suite of tools for managing sales, inventory, customers, kitchen operations, procurement, expenses, and reporting.
Key Capabilities
| Module | Description |
| Point of Sale | Fast checkout terminal with barcode scanning, product search, split payments, discount codes, hold/recall, and thermal receipt printing. |
| Kitchen Display | Real-time order queue for kitchen staff with status tracking, elapsed timers, rush priority, and audio alerts. |
| Inventory | Product management with variants (size/color), unit-of-measure (sell by weight/length), product images, and per-store stock tracking. |
| Multi-Store | Manage multiple branches with separate inventory, sales, and reporting. Switch between stores instantly. |
| Offline Mode | Continue selling without internet. Sales queue locally and auto-sync when connectivity restores. |
| Customer CRM | Customer profiles with purchase history, top products, spending analytics, and account balances. |
| Reports | Sales, product performance, expenses, and profit & loss reports with export to PDF, CSV, and Excel. |
| Administration | User management, role-based permissions, system settings, audit trail, and database backup/restore. |
System Requirements
- Modern web browser (Chrome, Firefox, Edge, Safari)
- Network connection (optional with offline mode enabled)
- For receipt printing: Thermal printer connected to the device
- For barcode scanning: USB or Bluetooth barcode scanner
Logging In
Navigate to the system URL in your browser. You will see the login screen.
- Enter your Username provided by your administrator.
- Enter your Password.
- Click Login.
Upon successful login, you will be directed to the Dashboard. Your active store will be automatically set to your default assigned store.
Note
If you have access to multiple stores, you can switch between them using the store dropdown in the top navigation bar.
Dashboard
The Dashboard provides a real-time overview of your store's performance for the current day and month.
Dashboard Cards
- Today's Sales — Total revenue and transaction count for today.
- Monthly Sales — Cumulative revenue and transactions for the current month.
- Total Products — Number of active products in your catalog.
- Total Customers — Number of registered customers.
Sales Chart
A 7-day sales trend chart shows daily revenue. Hover over data points to see exact amounts.
Low Stock Alerts
Products whose stock quantity has fallen to or below their minimum stock threshold are listed here. Click on a product name to go to its edit page.
Recent Transactions
The 10 most recent sales are shown with invoice number, cashier name, total, and status.
POS Terminal
The POS Terminal is the primary interface for processing sales. It is accessed via Point of Sale in the sidebar.
Requirements
Important
You must have an active Cashier Session (check-in) before you can process sales. If you see "No Active Session", go to Sessions > Check In first.
Terminal Layout
- Left Panel — Product grid with category tabs, search bar, and barcode scanner indicator.
- Right Panel — Shopping cart with items, quantity controls, customer selector, discount code input, totals, and payment button.
Finding Products
- Browse — Click category tabs to filter products. Click "All" to show everything.
- Search — Type in the search bar to filter by product name, SKU, or barcode.
- Barcode Scan — Simply scan a barcode. The system detects scanner input automatically and adds the product to the cart.
Adding Items to Cart
- Simple products — Tap the product card. It's added with quantity 1.
- Products with variants — A variant picker modal appears. Select the desired variant (size, color, etc.).
- Weight/length items — A quantity input modal appears with preset buttons (e.g., 0.25 kg, 0.5 kg, 1 kg). Enter the desired quantity.
Cart Management
- +/- buttons — Increase or decrease quantity.
- Click quantity (for decimal items) — Type an exact amount.
- X button — Remove the item entirely.
- Clear — Empty the entire cart.
Processing a Sale
Step-by-Step
- Add products to the cart (tap, scan, or search).
- (Optional) Select a Customer from the dropdown, or leave as "Walk-in Customer".
- (Optional) Enter a Discount Code and click Apply.
- Click the green Process Payment button.
- In the payment modal:
- Select Order Type: Dine In, Takeout, or Delivery.
- Select Kitchen Priority: Normal or Rush.
- Choose Payment Method: Cash, Card, or E-Wallet.
- For cash: Enter the amount received. Change is calculated automatically.
- For Split Payment: Toggle the split switch, add payment rows, enter amounts per method.
- Click Complete Sale.
- The success modal shows the invoice number and change amount.
- (Optional) Click Print Receipt to print a thermal receipt.
What happens automatically
Stock is deducted from the active store's inventory. A kitchen order is created. The cashier session totals are updated. An audit log entry is recorded.
Barcode Scanning
The system supports USB and Bluetooth barcode scanners. No configuration is required.
How It Works
- The scanner types characters rapidly (faster than a human can type).
- The system detects this rapid input pattern and treats it as a barcode scan.
- It searches by: barcode match first, then SKU match, then single result.
- For variant products scanned by variant barcode, the specific variant is added directly.
Indicator
A floating indicator at the top shows scan results: green for success, red for "not found".
Hold & Recall Sales
If a customer needs to step away or you need to serve another customer, you can hold the current sale and recall it later.
To Hold a Sale
- Click the Hold button at the bottom of the cart.
- Optionally enter a note (e.g., "Table 5", "John").
- Click Hold Sale. The cart is cleared and the sale is saved locally.
To Recall a Sale
- Click the yellow Held badge in the cart header.
- In the modal, click Recall on the desired sale.
- The cart is restored with all items, customer, and discount.
Note
Held sales are stored in your browser's local storage. They are not synced to the server and are specific to the device/browser.
Offline Mode
The POS terminal continues to work even when the internet connection is lost.
How It Works
- Product data is cached in IndexedDB after every full product load.
- Product images are cached by the service worker.
- When offline, the product grid loads from the local cache with client-side filtering.
- Completed sales are queued in IndexedDB instead of being sent to the server.
- When the connection restores, queued sales are automatically synced to the server.
Visual Indicators
| Indicator | Meaning |
| Yellow "Offline Mode" | No internet connection detected. Sales will be queued locally. |
| Blue "Syncing..." | Connection restored. Queued sales are being sent to the server. |
| Orange "X pending" | There are X sales waiting to be synced. |
| No indicator | Online and all sales synced. Normal operation. |
Limitations While Offline
- Discount codes cannot be validated (requires server).
- Product variants cannot be loaded (shows offline notice).
- Receipts cannot be printed for offline sales (no server-side receipt yet).
- Stock levels shown are from the last cached data and may be stale.
Kitchen Display System (KDS)
The Kitchen Display provides a real-time view of incoming orders for kitchen staff. Access it via Kitchen Display in the sidebar.
Display Layout
- Stats Bar — Shows pending, preparing, ready, completed today, and average prep time.
- Order Grid — Cards for each active order, color-coded by status.
- Clock — Real-time clock display.
Order Cards
- Yellow border = NEW (pending, waiting to be started).
- Blue border = PREPARING (kitchen is working on it).
- Green border + pulse = READY (waiting for pickup/serving).
- Red "RUSH" badge = High priority order.
- Timer = Elapsed time since order was placed. Turns yellow at 10 min, red at 15 min.
Audio Alerts
A double-beep sound plays automatically when a new order appears on the display.
Kitchen Order Workflow
- New Order Arrives — Card appears with yellow "NEW" status. Audio alert plays.
- Click Start — Status changes to "PREPARING" (blue). Timer continues.
- Tap individual items to check them off as you prepare them (strikethrough effect).
- Click Ready — Status changes to "READY" (green pulse). This signals the server/cashier.
- Click Served — Order is marked as completed and removed from the display.
To cancel an order, click the X button on pending or preparing orders.
View past orders via Kitchen Display > History.
Products
Manage your product catalog from Products in the sidebar.
Adding a Product
- Click Add Product.
- Fill in required fields: Name, SKU, Category, Selling Price.
- Optional: Cost price, barcode, description, tax rate, stock quantity, min stock alert.
- Select Unit of Measure: Piece, kg, meter, liter, box, pack, etc.
- (Optional) Upload a Product Image (max 2MB, JPEG/PNG/GIF/WebP).
- Toggle Active to make the product available on the POS.
- Click Save Product.
Product Variants
For products with size/color options:
- Enable the "This product has variants" toggle.
- Select attribute values (e.g., Small, Medium, Large + Red, Blue).
- Click Generate Combinations to auto-create variant rows.
- Set individual SKU, barcode, prices, and stock for each variant.
- Leave price empty to inherit the base product price.
Product Images
- Images appear on the product list, POS product grid, and are cached for offline mode.
- To change an image: upload a new one (the old one is automatically deleted).
- To remove: check the "Remove image" checkbox and save.
Categories
Categories organize products and appear as filter tabs on the POS terminal.
- Name — Category display name.
- Color — Color used for the category tab on POS.
- Sort Order — Controls the tab display order (lower = first).
- Active — Inactive categories don't show on POS.
Stock Adjustments
Record inventory changes outside of sales (damage, theft, corrections, receiving).
Creating an Adjustment
- Go to Stock Adjustments > New Adjustment.
- Select the Product.
- Choose Type: Damage, Theft, Correction, or Stock In.
- Enter Quantity (supports decimal for weight/volume items).
- For Correction: choose whether to Add or Remove.
- Enter a Reason.
- Click Save Adjustment.
Multi-Store Note
Stock adjustments are always applied to the currently active store's inventory.
Units of Measure
Products can be sold by different units. The UOM is set on the product form.
| Category | Units | Decimal Qty? |
| Quantity | Piece, Unit, Box, Pack, Set, Pair, Dozen | No (whole numbers) |
| Weight | Kilogram (kg), Gram (g), Pound (lb), Ounce (oz) | Yes (e.g., 1.5 kg) |
| Length | Meter (m), Centimeter (cm), Foot (ft), Inch (in) | Yes (e.g., 2.5 m) |
| Volume | Liter (l), Milliliter (ml) | Yes (e.g., 0.75 l) |
When a decimal UOM product is added to the POS cart, a quantity input modal appears with preset quick-select buttons.
Customers
Manage your customer database from Customers in the sidebar.
Customer Profile
Click on a customer name to view their full profile including:
- Summary Stats — Total spent, transaction count, average transaction, last purchase date.
- Purchase History — Every transaction linked to this customer with invoice, date, cashier, payment, total, and status.
- Top Products — Products most frequently purchased by this customer, ranked by quantity.
- Account Info — Credit limit, balance, net spend, member since date.
Refunds & Returns
- Go to Reports > Sales History and find the sale.
- Click View, then Process Refund.
- Select items to refund and enter quantities.
- Check Restock if items should go back to inventory.
- Enter a Reason and click Process Refund.
Partial refunds are supported — you can refund individual items or partial quantities. When all items are refunded, the sale status changes to "Refunded".
Void Transactions
Voiding cancels an entire transaction.
- Find the sale in Reports > Sales History.
- Click View, then Void.
- Enter a Reason (required).
- Choose whether to Restore Stock.
- Click Void Transaction.
Warning
Voiding is permanent and cannot be undone. The cashier session totals are reversed. A fully refunded sale cannot be voided.
Discounts & Promotions
Create discount codes that cashiers can apply at the POS terminal.
- Type — Percentage or Fixed amount.
- Code — Unique code entered at checkout (e.g., SAVE10).
- Min Purchase — Minimum subtotal required.
- Usage Limit — Maximum times the code can be used.
- Date Range — Active start and end dates.
- Scope — Apply to entire cart, specific categories, or specific products.
Suppliers
Maintain a list of your product suppliers with contact information. Suppliers are linked to purchase orders for tracking where inventory comes from.
Purchase Orders
Workflow
- Create PO — Select supplier, add line items with quantities and costs.
- Mark as Ordered — Confirms the PO has been sent to the supplier.
- Receive — Record received quantities. Stock is automatically updated. Partial receiving is supported.
- Cancel — Cancels an unprocessed PO.
Cashier Sessions
Cashier sessions track the opening float, sales activity, and closing reconciliation for each shift.
Check In
- Go to Sessions > Check In.
- Select a Cash Register.
- Enter the Opening Amount (cash in the drawer).
- Click Check In. You can now process sales.
Check Out
- Go to Sessions and click Check Out on your active session.
- Enter the actual Closing Amount (cash counted in drawer).
- The system calculates the expected amount and shows any Difference (over/short).
- Add optional Notes and click Check Out.
Expenses
Track business expenses such as rent, utilities, supplies, and other operating costs.
- Each expense is assigned a Category, Amount, Date, and optional Description.
- Expenses are scoped to the active store in multi-store setups.
- Expenses appear in the Expense Report and affect the Profit & Loss report.
Reports
All reports support date range filtering and export to PDF, CSV, and Excel formats.
| Report | Shows |
| Sales Report | Daily revenue breakdown, transaction counts, tax and discount totals. |
| Sales History | Every individual transaction with invoice, cashier, customer, payment, and status. |
| Sale Detail | Line-by-line breakdown of a single transaction with payment info and refund history. |
| Product Report | Top-selling products ranked by quantity sold and revenue generated. |
| Expense Report | Expenses by category with totals and percentage distribution. |
| Profit & Loss | Revenue minus COGS minus expenses = net profit, with period comparison. |
Multi-Store Management
The system supports unlimited store locations, each with its own inventory and sales tracking.
Adding a New Store
- Go to Administration > Stores & Branches.
- Click Add Store.
- Enter: Store Name, Code (unique identifier like "BR01"), Address, Phone, Email.
- Click Save Store.
Switching Stores
Click the store name dropdown in the top navigation bar and select the desired store. All operations (sales, stock, reports) will immediately scope to the selected store.
Assigning Users to Stores
Users are assigned to stores via the store_users table. Administrators can access all stores. Regular users only see stores they are assigned to.
Per-Store Inventory
Each store has its own stock quantities. The product catalog (names, prices, descriptions) is shared globally, but stock is tracked independently per store. When you adjust stock or process a sale, it only affects the active store's inventory.
Users & Roles
User Management
Create user accounts with: First Name, Last Name, Username, Email, Password, and Role assignment.
Roles & Permissions
The system uses role-based access control (RBAC). Each role is assigned a set of permissions that control access to specific modules and actions.
Common roles:
- Admin — Full access to all modules and all stores.
- Manager — Access to most modules, can manage settings and reports.
- Cashier — POS access, cashier sessions, basic operations.
- Kitchen Staff — Kitchen display access only.
Permission format: module.action (e.g., products.view, sales.void, kitchen.manage).
Settings
Configure system-wide settings from Administration > Settings.
Settings Groups
| Tab | Settings |
| Store Information | Store name, address, phone, email, tax ID, website. |
| Receipt | Receipt header text, footer message, show/hide tax details and cashier name. |
| Point of Sale | Default order type, allow negative stock, auto-print receipt, enable kitchen orders, low stock threshold. |
| System | Currency symbol, currency position (before/after), decimal places, date format, timezone. |
Changes take effect immediately after clicking Save Settings.
Audit Trail
Every significant action in the system is logged to the audit trail, including:
- User logins and logouts
- Product, customer, and user CRUD operations
- Sales, refunds, and voids
- Stock adjustments
- Settings changes
- Kitchen order status changes
Each log entry records: user, action, entity type, entity name, description, IP address, timestamp, and before/after values where applicable.
Audit logs can be filtered by date range and exported for compliance purposes.
Backup & Restore
Creating a Backup
- Go to Administration > Backup & Restore.
- Optionally enter a Note (e.g., "Before update").
- Click Create Backup Now.
- The backup is created using mysqldump and compressed with gzip.
Downloading a Backup
Click the download button next to any backup in the list to save the .sql.gz file.
Restoring from a Backup
Warning
Restoring a backup will overwrite ALL current data in the database. A safety backup is automatically created before any restore operation.
Two restore options:
- From existing backup — Click the restore button next to a backup in the list.
- From uploaded file — Click "Restore from File", select a .sql or .sql.gz file, and upload.
Best Practices
- Create regular backups, especially before system updates.
- Download and store backups off-site (external drive, cloud storage) for disaster recovery.
- Test restores periodically in a staging environment.
Keyboard Reference
POS Terminal
The search field is auto-focused. Simply start typing to search products.
Presentation Mode
| Key | Action |
| → or Space | Next slide |
| ← | Previous slide |
| Home | First slide |
| End | Last slide |