About this software
About Sundial POS
Sundial POS is a framework-free PHP 8 application using mysqli, jQuery and Bootstrap 4, with every write routed through a single ajax.php controller. It covers barcode billing (Code-128), colour and size variant stock, dues and held bills, vendor purchases, salesman reports and profit and loss. A setup wizard creates the tables and the first Admin login, and three roles (Admin, Manager, Saler/cashier) are enforced through a route permission table. It runs on a shop PC (XAMPP), a VPS, shared hosting or Docker (docker-compose.yml with Apache/PHP 8.2 and MariaDB 10.11). The package ships with CLI smoke and billing tests, deployment and role docs, and a commercial single-shop licence.
Why Sundial POS
What makes it better
than the alternatives
- 01
Colour × size stock grid
Enter a product once, tick colours and sizes, type quantities, and every variant gets its own 9-digit barcode with a movement log.
- 02
Server-side security basics
CSRF token on every write, bound-parameter DB helpers, bcrypt, per-username login lockout and a role check on every action.
- 03
Record ownership for cashiers
A Saler sees only the bills, payments, held bills and petty cash their own login created.
- 04
Profit tracking with cost at sale
Profit & Loss uses the cost price saved at the time of sale, plus salesman-wise sales, dues and gross profit.
- 05
Zero third-party PHP dependencies
No framework, no npm, no build step (composer.lock locks no packages), so it is simple to host and audit.
Billing (Take Orders)
- Product tiles by category and scan-to-add Code-128 barcodes
- Discount by amount or percentage
- Payment method per sale and printed receipt
- Server-side recompute of totals and stock deduction/restore (covered by billing_test.php)
Held Bills & Dues
- One-click Hold to park a bill and resume later
- Pay-later and part-paid bills with customer name and phone
- Due collection and due ageing
Products & Stock
- Colour × size variant entry with per-variant barcodes
- Live stock with movement log
- Barcode sticker printing by category
- Category and product image uploads
Vendors
- Purchases that add stock and set cost price
- Vendor payments and dues
- Returns to vendor that reduce due or refund
- Admin-only access
Reports & Accounts
- Salesman-wise sales
- dues and gross profit
- Sales report with date-range filter and grouping
- Profit & Loss (Admin only)
- Cash & Bank book and petty cash
Users, Roles & Audit
- Admin
- Manager and Saler roles
- User management restricted to Admin
- Audit log
- Manager/Admin can unlock locked accounts early
Setup & Administration
- First-run setup wizard that writes config and creates the Admin
- Settings and payment method management
- Database backup and import
- Configurable session timeout and lockout via .env
Deployment
- XAMPP
- VPS
- shared host or Docker with docker-compose
- Production mode refuses DB root user or empty password
- HowToSetup
- deployment and roles documentation
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| CSS | — | — | Styling | 36.4% |
| JavaScript | — | — | Front-end | 30.4% |
| PHP | — | — | Web, API | 23.7% |
| SCSS | — | — | Styling | 7.4% |
| SQL | — | — | Database | 2.1% |
- Primary language
- PHP 8.2 (min PHP 8.0)
- Framework
- None: plain PHP with mysqli, no framework and no third-party packages
- Database
- MySQL 8 / MariaDB 10.4+ (Docker image uses MariaDB 10.11)
- Authentication
- Session login with bcrypt password hashing, CSRF tokens on every write, role checks, and per-username login lockout
- Licence
- Single-site
- Screens
- 50
- Database tables
- 20
- Supported languages
- English UI only; no multi-language support or RTL layout evidenced
- Browser support
- Modern desktop browsers; front end uses jQuery 3.7.1, Bootstrap 4.6.2, DataTables 1.13.11
| Minimum | Recommended | |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB RAM | 2 GB RAM |
| OS | Linux, Windows (XAMPP) or Docker; PHP 8.0+ with mysqli, mbstring, fileinfo and json; MariaDB 10.4+ or MySQL 8 | Linux, Windows (XAMPP) or Docker; PHP 8.0+ with mysqli, mbstring, fileinfo and json; MariaDB 10.4+ or MySQL 8 |
| Est. monthly hosting | $10 | $10 |
``` cp .env.example .env # set DB_PASS and DB_ROOT_PASS in .env docker compose up -d --build ``` Open http://localhost:8080 and complete the setup wizard to create the tables and the Admin login.
``` cp .env.example "PHP POS App/config/.env" cd "PHP POS App" php -S 127.0.0.1:8000 ``` Open http://127.0.0.1:8000 and run the setup wizard. On a live server set APP_ENV=production and use a dedicated database user, not root.
Install PHP 8 with mysqli, mbstring, fileinfo and json, plus MariaDB. Copy the "PHP POS App" folder to the web root, point the site at it, and run the setup wizard. Keep config/ and backups/ outside public access (the bundled .htaccess files deny it on Apache).
Quality report
Manually reviewedHow to read the quality report
What this is. Every project on Vibe96 goes through an automated audit of its source code before a reviewer in Dubai checks it by hand. The score is out of 100; 75 is the minimum to be listed, and any single failing check blocks a listing regardless of the score.
- Security
- No real credentials in the code, every data-changing route protected, admin areas role-gated, no SQL built from user input.
- Code structure
- A developer can navigate and extend it: clear module boundaries, no giant files, little copy-paste.
- Docs & completeness
- The setup guide, example config, schema and required files the builder committed to are actually in the archive.
- Dependency health
- Packages pinned, no known critical vulnerabilities, no abandoned libraries in production paths.
- Build & deploy
- A clean machine can restore, build and start it by following the shipped instructions.
Warnings are problems that didn't block the listing; they stay visible here until a later version clears them. The audit reads the code — it does not run it — so always try the live demo before you buy. Lines of code are counted from the same audited archive.
Reviewer notes (6 minor)
Small improvements the developer has been told about. None of them stop the software from working.
Versions & updates
No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.
What you get
- </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
- ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
- ↻One year of updatesEvery new version the builder publishes, free for 12 months.
- ♧30 days of supportInstallation and defect support through Vibe96 tickets.