Modern Point of Sale (POS) software for retail shops, marts, hotels, restaurants and small businesses. Offline-first Windows desktop app with subscription licensing, inventory management, hotel reservations, customer database, and printable receipts. Built in Python (Flask) with a responsive HTML/CSS/JS UI, packaged as a native Windows installer.
⭐ If this project helps you, please star it — it helps others find it!
- Features
- Screenshots
- Who is this for?
- Quick start (run from source)
- Build the Windows installer
- Where data lives
- License server (subscription / activation)
- Project layout
- Tech stack
- Roadmap
- License
- Fast checkout — barcode scanning, SKU search, keyboard shortcuts (
F2search,F12checkout) - Multiple payment methods — cash, card, bank transfer, custom
- Discounts & taxes — per-item or whole-cart, percent or flat
- Receipt printing — printable HTML receipts, customizable footer
- Walk-in or registered customers — quick customer creation from POS
- Products with SKU, barcode, cost price, selling price, tax rate
- Categories with custom colors and icons
- Stock tracking with low-stock alerts
- Service items (no stock tracking)
- Bulk import / export ready
- Room management — types, capacity, rate per night, amenities
- Reservations with check-in / check-out workflow
- Real-time occupancy dashboard
- Extra charges (room service, mini-bar) added to folio
- Booking conflict detection
- Full contact details, loyalty points, credit balance
- Visit history and total spent
- Supplier directory with payable balance
- Daily / monthly / custom date range
- Top-selling products
- Sales by cashier
- Payment method breakdown
- Inventory valuation
- Admin, manager, cashier roles
- Per-user activity log
- Role-based access control
- Light & dark themes
- Custom accent color
- Shop logo, name, address, phone, email
- Currency code & symbol (USD, EUR, GBP, INR, PKR, etc.)
- Tax label (VAT, GST, Sales Tax)
- Multi-language ready
- Works offline once activated — license verified online once every 12 hours
- One license = one computer (hardware fingerprint binding)
- 14-day grace window if internet drops
- Subscription model via remote license server
- Same UI works on a 24-inch counter touchscreen and a 13-inch laptop
- Mobile-friendly (resize the window — try it)
- Works on all Windows 10 and 11 versions
| License activation | Login screen |
|---|---|
![]() |
![]() |
| Setup wizard | (placeholder) |
|---|---|
![]() |
| POS terminal | Inventory |
|---|---|
![]() |
![]() |
| Hotel rooms | Reports |
|---|---|
![]() |
![]() |
| Settings & themes | |
|---|---|
![]() |
- Retail shop owners wanting a modern alternative to old DOS-style POS software
- Mart / grocery / convenience store owners
- Small hotel and lodging operators who want POS + reservation in one tool
- Restaurants and cafés
- Resellers / freelance developers selling installation + customization to local businesses
- Developers evaluating Python + Flask + pywebview as a desktop-app stack
Requires Python 3.9 or newer.
git clone https://github.com/Tariqbaloch786/NovaPOS.git
cd NovaPOS
install.bat
run.batThe app opens at http://127.0.0.1:5000 in your browser.
Requires Python 3.9+ and Inno Setup 6 (free).
build.batProduces a single-file installer_output\NovaPOS-Setup-<version>.exe (~63 MB) that bundles Python, Flask, all dependencies, and the app. Customers don't need anything pre-installed — just double-click and install. Standard Start Menu shortcut, desktop icon, uninstaller in Settings → Apps.
| When | Bundled assets (read-only) | User data (database, license, config) |
|---|---|---|
Source / run.bat |
<project>/templates, <project>/static |
<project>/data/ |
Installed .exe |
Program Files\NovaPOS\_internal |
%LOCALAPPDATA%\NovaPOS\ |
Uninstalling the app removes both folders fully.
NovaPOS activates against a remote license server. The endpoint URL is XOR-base64 obfuscated in modules/license_client.py. Override at runtime with the env var:
LICENSE_SERVER_URL=https://your-license-server.example.com/activate
Endpoint contract:
POST /activate
{
"license_key": "XXXX-XXXX-XXXX-XXXX",
"device_id": "XXXX-XXXX-XXXX-XXXX-XXXX",
"machine_name": "...",
"os_name": "Windows" | "Linux" | "Darwin",
"os_version": "...",
"mac_address": "AA:BB:CC:DD:EE:FF",
"cpu": "..."
}
→ 200 {"valid": true, "message": "..."}
→ 403 {"valid": false, "detail": "..."}
First activation binds the key to that device. Re-activating the same key on the same device is treated as re-validation. Same key from a different device returns 403.
.
├── app.py # Flask app, routing, auth, license gate
├── launcher.py # PyInstaller entry — pywebview window
├── modules/
│ ├── paths.py # bundle vs user-data path resolver
│ ├── database.py # SQLite schema + connection
│ ├── system_info.py # device fingerprint
│ ├── license_client.py # remote /activate API client
│ ├── license.py # local license persistence + grace period
│ ├── pos_api.py # POS sales endpoints
│ ├── inventory_api.py
│ ├── customer_api.py
│ ├── hotel_api.py
│ ├── reports_api.py
│ └── admin_api.py
├── templates/ # Jinja2 HTML
├── static/css|js/ # frontend
├── NovaPOS.spec # PyInstaller config
├── installer.iss # Inno Setup script
├── make_icon.py # generate icon.ico
├── build.bat # one-shot build pipeline
├── run.bat # dev launcher
└── install.bat # dev dependency installer
- Backend: Python 3, Flask 3, SQLite
- Frontend: vanilla HTML / CSS / JavaScript (no build step, no npm)
- Desktop wrapper: pywebview + WebView2 (Microsoft Edge engine)
- Packaging: PyInstaller + Inno Setup 6
- Charts: custom Canvas line charts (no chart library dependency)
- Auth: PBKDF2-SHA256 password hashing, signed session cookies
- License: hardware-fingerprinted, online verification with offline grace
- Receipt thermal-printer support (ESC/POS)
- Barcode label printing
- Multi-shop / multi-location
- Cloud backup
- Mobile companion app
- Restaurant table-management module
- Kitchen display system (KDS)
- e-Invoicing / FBR integration (Pakistan)
- GST / VAT report exports
pos point-of-sale pos-system pos-software retail-software inventory-management hotel-management-system restaurant-pos windows-pos offline-pos python-pos flask-pos desktop-application pyinstaller inno-setup small-business-software subscription-licensing hardware-licensing
Proprietary — © Tariq Baloch. All rights reserved.
Source is published for portfolio and customer reference. Commercial use, redistribution, or reselling requires explicit written permission.
For inquiries, partnership, or to purchase a license, contact: tariqbalochtariq295@gmail.com








