Posify POS
Complete Laravel-powered Point of Sale system for retail and food businesses โ POS terminal, inventory, suppliers, purchase orders, cash register shifts, customer loyalty, expense tracking, and reports.
Introduction
Posify POS is a complete, single-application Point of Sale system built on Laravel 12. It covers every aspect of a retail or food business:
POS Terminal
Barcode scanning, split payments, thermal receipts, and cash register shifts.
Inventory & Purchasing
Products, variants, warehouses, suppliers, and purchase orders with stock receiving.
Reports & Admin
Sales, P&L, inventory valuation, expense, and product reports โ all CSV exportable.
Everything runs as one Laravel application โ no separate frontend server or mobile app required. Follow this documentation to install and configure Posify POS on your server.
System Architecture
Posify POS is a monolithic Laravel application โ one codebase, one deployment. Livewire handles reactive UI components server-side, so no separate JS build server is needed in production.
What's Included
- โ Laravel 12 full source code
- โ Web installer wizard
- โ Pre-seeded demo data (optional)
- โ Documentation
Tech Stack
- โข PHP 8.2+ / Laravel 12
- โข Livewire 3 / Alpine.js
- โข Tailwind CSS v4
- โข MySQL 5.7+ / MariaDB
- โข JsBarcode (barcode labels)
Changelog
- โ POS terminal โ products, inventory, orders, payments
- โ Customers, users, roles & permissions
- โ Multi-language, settings, REST API
- โ Web installer โ browser-based multi-step setup wizard (requirements, purchase verification, database, admin, finish)
- โ Suppliers & Purchase Orders โ supplier CRUD, PO with line items, stock receiving into inventory, supplier payments
- โ Cash register / shifts โ open & close register sessions, cash in/out movements, printable Z-Report
- โ Returns & refunds โ return items against an order with optional restock; payment status reflects partial/full refunds
- โ Customer accounts โ due/credit ledger, loyalty points (earn on sale, redeem for value), per-customer ledger view
- โ Expense management โ expense categories and expenses with date filtering
- โ Reports โ Sales, Product, Category, Profit & Loss, Inventory Valuation, and Expense reports โ each exportable to CSV
- โ Thermal receipts โ 80mm / 58mm auto-printing alongside the existing A4 PDF invoice
- โ Barcode in POS โ scan-to-search in the POS terminal, plus printable barcode label sheet (JsBarcode)
- โ Database backup & restore โ admin-initiated SQL dump/restore (no shell access required)
- โ QR code menu โ QR generation for products (menu-item scanning)
- โ Loyalty settings โ added to General Settings
Server Requirements (VPS)
Minimum recommended specs for running Posify POS (Laravel + MySQL) on a VPS.
CPU
1 vCPU minimum. 2 vCPUs recommended for production.
RAM
1 GB minimum. 2 GB recommended.
OS
Ubuntu 22.04 LTS (recommended) or Debian 12.
Important Server Documentation
Follow these notes when the application shows a server error.
500 Internal Server Error โ Common Fix
The most common cause is a missing .env file or missing Laravel app key:
Then update .env with your database credentials before continuing.
Storage Permissions
File uploads and cache will fail if storage folder permissions are wrong:
Install & Configure Nginx
1. Install Nginx
sudo apt update
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
2. Virtual host โ /etc/nginx/sites-available/yourdomain.com
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/posify-pos/public;
index index.php;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
location ~ /\.ht { deny all; }
}
3. Enable site & reload
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Install & Configure MySQL
1. Install MySQL 8
sudo apt install -y mysql-server
sudo systemctl enable mysql
sudo mysql_secure_installation
2. Create database & user
sudo mysql -u root -p
CREATE DATABASE posify CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'posify_user'@'localhost' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON posify.* TO 'posify_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
3. Update Laravel .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=posify
DB_USERNAME=posify_user
DB_PASSWORD=StrongPassword!
Install PHP & Extensions
Posify POS requires PHP 8.2 or higher. The commands below install PHP 8.3 (recommended) with all required extensions.
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring \
php8.3-xml php8.3-bcmath php8.3-curl php8.3-zip php8.3-gd php8.3-intl
sudo systemctl enable php8.3-fpm
sudo systemctl start php8.3-fpm
php -v should show PHP 8.3.x
Install Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version
Then inside your project directory:
cd /var/www/posify-pos
composer install --optimize-autoloader --no-dev
Domain & DNS Configuration
Point your domain to the VPS IP via your registrar's DNS panel.
| Type | Name / Host | Value | TTL |
|---|---|---|---|
| A | @ | YOUR_VPS_IP | Auto |
| A | www | YOUR_VPS_IP | Auto |
dig yourdomain.com.
SSL Setup with Certbot (HTTPS)
1. Install Certbot
sudo apt install -y certbot python3-certbot-nginx
2. Obtain certificate
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
3. Verify & test auto-renewal
sudo nginx -t && sudo systemctl reload nginx
sudo certbot renew --dry-run
APP_URL=https://yourdomain.com in your Laravel .env and clear cache: php artisan config:clear
Shared Hosting Requirements
Confirm your cPanel environment supports the following before deploying.
Laravel / Posify POS
- โ PHP 8.2+ via MultiPHP or PHP Selector
- โ MySQL 5.7+ or MariaDB
- โ Composer (SSH Terminal)
- โ SSH Terminal access (cPanel โ Terminal)
- โ Addon Domain / Subdomain creation
- โ File Manager or FTP access
- โ AutoSSL / Let's Encrypt SSL
Laravel Setup on cPanel
Deploy Posify POS on shared hosting step by step.
Create Domain & Point to public/
In cPanel โ Domains, add your domain and set its Document Root to the project's public/ folder:
/home/yourusername/posify-pos/public
Upload Project Files
Upload the ZIP via cPanel โ File Manager then extract:
cd ~/posify-pos unzip posify-pos.zip -d . rm posify-pos.zip
Set PHP Version to 8.2+
In cPanel โ MultiPHP Manager (or PHP Selector), select your domain and set PHP to 8.2 or newer. Enable extensions: pdo_mysql mbstring xml curl zip gd bcmath fileinfo.
Create MySQL Database
cPanel โ MySQL Databases:
- Create database:
yourusername_posify - Create user with a strong password
- Add user to database with All Privileges
Configure .env
Rename .env.example โ .env and edit:
# App APP_NAME="Posify POS" APP_ENV=production APP_DEBUG=false APP_URL=https://yourdomain.com # Database DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=yourusername_posify DB_USERNAME=yourusername_dbuser DB_PASSWORD=StrongPassword! # Mail (optional) MAIL_MAILER=smtp MAIL_HOST=mail.yourdomain.com MAIL_PORT=587 MAIL_USERNAME=no-reply@yourdomain.com MAIL_PASSWORD=your_email_password MAIL_FROM_ADDRESS=no-reply@yourdomain.com
Install Composer & Run Artisan
cd ~/posify-pos curl -sS https://getcomposer.org/installer | php php composer.phar install --optimize-autoloader --no-dev php artisan key:generate php artisan migrate --force php artisan db:seed --force php artisan storage:link php artisan optimize
Set Permissions & Enable SSL
chmod -R 755 storage bootstrap/cache
Enable SSL via cPanel โ SSL/TLS โ AutoSSL or Let's Encrypt.
Test the Installation
Visit your domain โ you should see the login page:
Server Requirements
Verify your hosting environment before installation.
PHP & Extensions
- โ PHP 8.2 or higher
- โ OpenSSL
- โ PDO + PDO_MySQL Extension
- โ Mbstring Extension
- โ Tokenizer Extension
- โ XML Extension
- โ Ctype Extension
- โ cURL Extension
- โ JSON Extension
- โ BCMath Extension
- โ Fileinfo Extension
- โ ZIP Extension
- โ GD Extension
Database & Server
- โ MySQL 5.7+ or MariaDB
- โ Composer 2.x
- โ Apache or Nginx
- โ SSL Certificate (HTTPS)
- โ 512MB+ RAM
Installation Guide
Deploy Posify POS on your VPS. You can use the web installer (no SSH needed for setup) or install manually via SSH.
Download from Envato
Log in to CodeCanyon โ Downloads โ Posify POS โ Download All Files & Documentation. Extract the ZIP.
Upload Project to Server
Option A โ SCP / FTP
scp posify-pos.zip user@YOUR_VPS_IP:/var/www/ ssh user@YOUR_VPS_IP cd /var/www && unzip posify-pos.zip -d posify-pos
Option B โ Git
sudo mkdir -p /var/www/posify-pos cd /var/www/posify-pos sudo git clone https://github.com/your-repo/posify-pos.git .
Configure .env & Choose Install Method
Copy .env.example โ .env, then visit the installer in your browser and follow the on-screen steps โ no SSH needed for the rest of the setup:
Installer Steps Preview
Copy and edit .env via SSH, then run artisan commands:
cd /var/www/posify-pos cp .env.example .env nano .env # set APP_URL, DB_* values composer install --optimize-autoloader --no-dev php artisan key:generate php artisan migrate --force php artisan db:seed --force php artisan storage:link php artisan optimize
Set Folder Permissions
chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
Test the Installation
Open your browser and visit the admin panel โ you should see the login page.
Before going live, verify:
APP_DEBUG=false- Storage symlink exists:
ls -la public/storage - Folder permissions set on
storage/andbootstrap/cache/ - SSL certificate active
Configuration
Key settings available from Admin โ Settings after installation.
General Settings
- โข Store name, logo, currency, timezone
- โข Tax rate and tax name
- โข Loyalty points rate (earn per sale amount) and redemption rate
- โข Receipt header / footer text
- โข Default language
Thermal Receipt Printer
Configure from Settings โ Receipt Settings. Choose paper width (80mm or 58mm) and enable auto-print after POS sale.
Mail (SMTP)
Set in your .env file:
MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=587 MAIL_USERNAME=your_username MAIL_PASSWORD=your_password MAIL_FROM_ADDRESS=no-reply@yourdomain.com MAIL_FROM_NAME="Posify POS"
Queue Worker & Background Jobs
Posify POS ships with QUEUE_CONNECTION=sync in .env โ emails and notifications are sent immediately during the request, so everything works out of the box with no worker process and no extra setup.
sync.
1. Enable background sending
Set the queue driver to database in your .env, then clear the config cache:
QUEUE_CONNECTION=database
php artisan config:clear
Queued jobs are now stored in the database โ but they only run while a queue worker is running. Pick one of the options below.
2a. Recommended (VPS): Supervisor
Supervisor keeps the worker alive permanently and restarts it if it crashes:
sudo apt install -y supervisor sudo nano /etc/supervisor/conf.d/posify-worker.conf
[program:posify-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/posify-pos/artisan queue:work database --sleep=3 --tries=3 --max-time=3600 autostart=true autorestart=true stopasgroup=true killasgroup=true user=www-data numprocs=1 redirect_stderr=true stdout_logfile=/var/www/posify-pos/storage/logs/worker.log stopwaitsecs=3600
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start posify-worker:*
2b. Fallback (shared hosting): Cron
No Supervisor on shared hosting? Add a cron job (cPanel โ Cron Jobs) that drains the queue every minute and exits when it's empty:
* * * * * php /home/yourusername/posify-pos/artisan queue:work --stop-when-empty
Adjust the path to your installation. Emails may be delayed by up to a minute โ acceptable for most stores.
sudo supervisorctl restart posify-worker:* or php artisan queue:restart) so it picks up the new code.
Features
All modules available in Posify POS v1.0.0.
Dashboard
Real-time overview of store performance โ today's revenue, orders, top products, and low-stock alerts.
- โ Daily, weekly, and monthly revenue charts
- โ Total orders and top-selling products
- โ Low-stock product alerts
- โ Recent order activity feed
POS Terminal
Fast checkout screen with barcode scan-to-add, split payments, discounts, and instant thermal receipt printing.
- โ Barcode scan-to-search (USB/Bluetooth scanner)
- โ Cash, card, and split payment support
- โ 80mm / 58mm thermal receipt + A4 PDF
- โ Redeem customer loyalty points at checkout
- โ Orders sync with inventory automatically
Products & Inventory
Full product catalog with categories, brands, units, variants, and warehouse-level stock tracking.
- โ Products with variants, addons, and images
- โ Categories, brands, and units of measure
- โ Per-warehouse stock levels and movements
- โ Stock transfers between warehouses
- โ Printable barcode label sheets (JsBarcode)
Suppliers & Purchase Orders
Manage supplier relationships and purchase orders from order creation through stock receiving.
- โ Supplier CRUD with contact details
- โ Purchase orders with line items and costs
- โ Receive stock into inventory from POs
- โ Track supplier payments and balances
Cash Register & Returns
Full shift management with Z-Reports and a complete returns/refund flow with restock option.
- โ Open/close register sessions with opening cash
- โ Cash in/out movements during shift
- โ Printable Z-Report on close
- โ Return items against an order (with optional restock)
- โ Payment status auto-updates to partial/full refund
Roles & Permissions
Fine-grained role-based access control โ define exactly what each staff member can see and do.
- โ Unlimited custom roles (cashier, manager, admin)
- โ Toggle individual permissions per role
- โ Assign multiple roles to one user
- โ Activity log of all admin actions
Settings & Utilities
Store settings, multi-language management, database backup/restore, and more โ all from the admin panel.
- โ Store info, currency, tax, and receipt settings
- โ Loyalty points earn/redeem rates
- โ Multi-language with admin-editable translations
- โ Database backup & restore (no shell needed)
Third-Party Licenses
Posify POS bundles open-source libraries. Most use permissive MIT/BSD-style licenses; one exception to be aware of:
vendor/mpdf/mpdf/ after composer install.
The full list of bundled third-party libraries and their licenses is in credits.txt in the application root.