A complete Point of Sale and inventory management system that runs on your local network. Access it from any device (desktop, mobile, tablet) connected to your Wi-Fi.
- Python 3.9 or higher
- pip (Python package manager)
# Clone the repository or download the source code
git clone
# Install dependencies
pip install -r requirements.txt
# Clone or extract the project folder
cd zenstore
# Run the setup script (installs all dependencies)
python setup.py
# Start the server
python run.pyAfter starting, open your browser and go to:
- This computer: http://127.0.0.1:5000
- Other devices on same Wi-Fi: http://YOUR_LOCAL_IP:5000
Default login: admin / admin123
| Loging Page | Home pagel |
|---|---|
![]() |
![]() |
| Inventory Page | Settings pagel |
|---|---|
![]() |
![]() |
- Welcome message with shop name and logo
- Real-time sales, profit, and transaction stats
- 30-day sales trend chart (Chart.js)
- Revenue by category pie chart
- Low stock alerts with progress indicators
- Recent transactions list
- Visual product grid with images
- Real-time search and category filtering
- Shopping cart with quantity controls
- Customer information capture
- Discount & payment method support
- Tax calculation
- One-click checkout
- Instant receipt generation (PDF + WhatsApp link)
- Sales recording in database
- Daily sales summary email (optional)
- Add, edit, delete products (soft-delete)
- Auto-image fetching (Google Search / Unsplash)
- Category management
- Stock quantity tracking
- Low stock threshold alerts
- Profit margin calculator
- SKU/barcode support
- Built-in PDF invoice generation (ReportLab)
- Custom Word (.docx) template support (docxtpl)
- Multiple template management
- Direct invoice download from receipts
- Customer details on invoices
- Invoice numbering system
- Invoice notes section
- Auto-generated WhatsApp link after each sale
- Customizable message templates
- Pre-filled customer phone number
- One-click send via WhatsApp Web
- Manual one-click backup
- Automatic daily backup at 2:00 AM
- Organized in "ZenStore POS Backups" Drive folder
- Retention policy: Keep last 30 backups, auto-delete older ones
- All-time revenue and profit totals
- Monthly revenue chart (12 months)
- Top 10 best-selling products
- CSV export (all time or date range)
- Shop branding (name, logo, address, contact)
- API key management (Google Search, Google Drive)
- Feature toggles (on/off switches)
- WhatsApp template customization
- Database backup management
- Admin password change
- Data purge options
- System logs viewer
- User management (add/remove staff accounts)
- Go to https://programmablesearchengine.google.com
- Create a Custom Search Engine
- Enable "Image search"
- Get your API key from Google Cloud Console
- Enter both in Settings β API & Integrations
- Go to https://console.cloud.google.com
- Create a project and enable the Drive API
- Create OAuth 2.0 credentials
- Get your Client ID, Client Secret, and Refresh Token
- Enter them in Settings β API & Integrations
Create a Word (.docx) file with these placeholders:
{{invoice_number}} {{customer_name}} {{customer_phone}}
{{date}} {{time}} {{total_amount}}
{{subtotal}} {{tax_amount}} {{discount_amount}}
{{payment_method}} {{shop_name}} {{shop_address}}
{{shop_phone}} {{currency}} {{notes}}
Upload in Invoices β Upload Template, then set as Active.
zenstore/
βββ run.py # Server entry point
βββ setup.py # Installation script
βββ requirements.txt # Python dependencies
βββ app/
β βββ __init__.py # App factory
β βββ models.py # Database models
β βββ routes/ # Route blueprints
β β βββ auth.py
β β βββ dashboard.py
β β βββ inventory.py
β β βββ sales.py
β β βββ invoices.py
β β βββ settings.py
β β βββ reports.py
β β βββ api.py
β βββ services/ # Business logic
β β βββ image_service.py
β β βββ invoice_service.py
β β βββ backup_service.py
β βββ static/
β β βββ css/main.css
β β βββ js/main.js
β βββ templates/ # HTML templates
βββ instance/
βββ zenstore.db # SQLite database
The server binds to 0.0.0.0:5000 automatically.
Find your local IP with:
- Windows:
ipconfig(look for IPv4 Address) - Linux/Mac:
ifconfigorip addr
All devices on the same Wi-Fi can then access: http://YOUR_IP:5000
- Change the default admin password immediately after first login
- The system is designed for local network use only
- Do not expose port 5000 to the internet
- API keys are stored in the local SQLite database
- Use strong, unique passwords for admin accounts
- Regularly back up your data (Google Drive integration or manual)
- Flask 3.0 β Web framework
- Flask-SQLAlchemy β Database ORM
- Flask-Login β User authentication
- SQLite β Local database
- ReportLab β PDF generation
- docxtpl β Word template rendering
- APScheduler β Scheduled backups
- google-api-python-client β Google Drive API
- Pillow β Image processing
- requests β HTTP client
- python-dotenv β Environment variable management
- Werkzeug β Security utilities
- Chart.js β Frontend charts
- Bootstrap 5 β Frontend styling
- Font Awesome β Icons
- jQuery β Frontend scripting
- DataTables β Interactive tables
- SweetAlert2 β Beautiful alerts
Port already in use:
# Change port in run.py
app.run(host='0.0.0.0', port=5001)Database reset:
Delete instance/zenstore.db and restart. A fresh database will be created.
Image fetch not working: Configure Google Search API keys in Settings, or it will use Unsplash as fallback.
ZenStore POS β Built for local retail businesses Powered by Flask + SQLite + Chart.js




