Skip to content

Tariqbaloch786/NovaPOS

Repository files navigation

NovaPOS — Modern Point of Sale Software for Windows

Platform Python Flask Stars Last commit Issues

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!

NovaPOS Dashboard


Table of contents


Features

Point of sale terminal

  • Fast checkout — barcode scanning, SKU search, keyboard shortcuts (F2 search, F12 checkout)
  • 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

Inventory management

  • 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

Hotel & lodging module

  • 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

Customer & supplier CRM

  • Full contact details, loyalty points, credit balance
  • Visit history and total spent
  • Supplier directory with payable balance

Reports & analytics

  • Daily / monthly / custom date range
  • Top-selling products
  • Sales by cashier
  • Payment method breakdown
  • Inventory valuation

Multi-user & roles

  • Admin, manager, cashier roles
  • Per-user activity log
  • Role-based access control

Customization

  • 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

Offline-first & licensing

  • 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

Responsive design

  • 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

Screenshots

License activation Login screen
NovaPOS license activation — hardware-bound key NovaPOS login screen
Setup wizard (placeholder)
NovaPOS first-run setup wizard
POS terminal Inventory
NovaPOS point of sale terminal NovaPOS inventory management
Hotel rooms Reports
NovaPOS hotel room management NovaPOS sales reports and analytics
Settings & themes
NovaPOS settings — light and dark theme, accent colors

Who is this for?

  • 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

Quick start (run from source)

Requires Python 3.9 or newer.

git clone https://github.com/Tariqbaloch786/NovaPOS.git
cd NovaPOS
install.bat
run.bat

The app opens at http://127.0.0.1:5000 in your browser.

Build the Windows installer

Requires Python 3.9+ and Inno Setup 6 (free).

build.bat

Produces 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.


Where data lives

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.


License server (subscription / activation)

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.


Project layout

.
├── 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

Tech stack

  • 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

Roadmap

  • 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

Keywords

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


License

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

About

Modern offline-first POS software for shops, marts, hotels and restaurants. Windows desktop app built with Python, Flask, SQLite and pywebview. Subscription-licensed, hardware-bound.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages