A modern, feature-rich Point of Sale system designed for retail and hospitality businesses with real-time synchronization, customer display, and intuitive interface.
SynkPOS helps businesses manage sales transactions efficiently:
- Point of Sale - Fast product selection and checkout process
- Customer Display - Real-time order display with advertisement slideshow
- Payment Processing - Accept multiple payment methods (cash, cards, e-wallets)
- Discount Management - Apply line-item or total discounts with senior/PWD support
- Shift Management - Track cashier shifts with opening/closing reports
- Inventory Tracking - Real-time stock updates with every sale
- Sales Analytics - View daily, weekly, and monthly sales reports
- Receipt Printing - BIR-compliant receipts with detailed transaction info
- Web server (XAMPP, WAMP, or MAMP)
- PHP 5.6 or newer (works with 7.x and 8.x)
- MySQL 5.7 or MariaDB 10.3+
1. Download and Extract
git clone https://github.com/paulaxisabel/synkpos.git
cd synkposOr extract to your web server folder:
- XAMPP:
C:/xampp/htdocs/synkpos/ - WAMP:
C:/wamp64/www/synkpos/ - Linux:
/var/www/html/synkpos/
2. Create Database
- Open phpMyAdmin at
http://localhost/phpmyadmin - Create database named
pos_database - Import
pos_database.sql
3. Configure
Edit config.php:
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'pos_database';4. Create Upload Directories Create the following folders for customer display images:
synkpos/
βββ uploads/
βββ ads/
5. Access
- Main POS:
http://localhost/synkpos/ - Customer Display (Cashier):
http://localhost/synkpos/cashier/customer_display.php - Customer Display (Backoffice):
http://localhost/synkpos/backoffice/customer_display.php - Login with default credentials below
| User Type | Username | Password |
|---|---|---|
| Super Admin | superadmin | password |
| Admin | admin1 | password |
| Manager | manager1 | password |
| Cashier | cashier1 | password |
Highest level access: all admin privileges plus system-critical configurations, database management, and role permissions control.
Full system control: manage users, configure settings, view all reports, manage products/categories/discounts/payments, configure customer display.
Business operations: view sales reports, manage products, configure discounts, oversee daily operations, manage customer display content.
Sales operations: process transactions, open/close shifts, generate X/Z readings, handle customer payments, view customer display.
Fast product selection, order management, discount application, multi-payment support, and real-time calculations with customer display integration.
Dual-screen experience with advertisement slideshow and real-time order display. Upload images to uploads/ads/, open on second screen, and enjoy automatic sync with smooth transitions.
Support for cash, cards (Visa, Mastercard, Amex), e-wallets (GCash, PayMaya), and third-party payments (FoodPanda, GrabFood) with visual feedback and automatic change calculation.
Open/close shifts with cash declaration, X-reading (mid-shift), and Z-reading (end-of-day) reports for complete cashier accountability.
Line-item and total discounts including senior/PWD support with VAT exemption, ID capture, and custom percentage or fixed amount discounts.
Dashboard with sales metrics, product and category management, payment configuration, user management, customer display settings, and activity logs.
BIR-compliant receipts with complete transaction details, discounts, VAT breakdown, payment methods, and store information.
- Check MySQL is running in XAMPP/WAMP control panel
- Verify credentials in
config.php - Ensure
pos_databasewas created and imported
- Verify
get_current_order.phpis accessible - Check browser console for JavaScript errors
- Ensure shift is open in cashier interface
- Clear browser cache and reload customer display
- Verify
uploads/ads/folder exists and has proper permissions - Check images are in supported formats (JPG, PNG, GIF)
- Ensure file names don't contain special characters
- Verify web server can read the uploads directory
- Check browser console for JavaScript errors
- Verify
payment_typestable has data - Clear browser cache and reload
- Verify user has 'cashier' role
- Check no active shift exists for that user
- Ensure
shiftstable is accessible
- Ensure shift is open before processing
- Check product stock availability
- Verify all required fields are filled
- Check browser pop-up blocker settings
- Enable pop-ups for localhost
- Try different browser if issue persists
synkpos/
βββ backoffice/ # Management interface
β βββ activity_logs.php # System activity tracking
β βββ categories.php # Category management
β βββ customer_display.php # Customer display settings & preview
β βββ dashboard.php # Main dashboard
β βββ discounts.php # Discount configuration
β βββ index.php # Main backoffice layout
β βββ inventory_report.php # Stock reports
β βββ payment_types.php # Payment method config
β βββ products.php # Product management
β βββ reset_data.php # Data reset utility
β βββ roles.php # Role management
β βββ sales_report.php # Sales analytics
β βββ settings.php # System settings
β βββ users.php # User management
βββ cashier/ # Cashier interface
β βββ check_images.php # Check for new ad images
β βββ check_shift.php # Verify active shift
β βββ customer_display.php # Customer-facing display
β βββ get_current_order.php # Real-time order data API
β βββ get_payment_types.php # Payment methods API
β βββ get_products.php # Products API
β βββ index.php # Main POS screen
β βββ open_shift.php # Shift opening
β βββ print_receipt.php # Receipt generation
β βββ process_transaction.php # Transaction processing
β βββ search_products.php # Product search API
β βββ update_customer_display.php # Update display data
β βββ x_reading.php # X-reading report
β βββ z_reading.php # Z-reading report
βββ includes/ # Helper functions
β βββ rbac.php # Access control
β βββ shift_helper.php # Shift functions
βββ uploads/ # User uploads
β βββ ads/ # Advertisement images
βββ config.php # Database configuration
βββ login.php # Authentication
βββ pos_database.sql # Database schema
- Password Hashing - Bcrypt encryption for all passwords
- SQL Injection Prevention - Prepared statements throughout
- Session Management - Secure session handling with timeout
- Role-Based Access - Strict permission controls
- Transaction Integrity - Database transactions for data consistency
- Input Validation - Server and client-side validation
- File Upload Security - Restricted file types and directory access
- Backend: Pure PHP 5.6+ (compatible with 7.x and 8.x), MySQL
- Frontend: HTML5, CSS3, JavaScript (Vanilla)
- UI Framework: Custom responsive design
- Icons: Unicode symbols and custom CSS
- Real-time Updates: AJAX polling for customer display
Key tables:
users- Authentication and rolesshifts- Cashier shift trackingtransactions- Sales recordstransaction_items- Line itemstransaction_discounts- Applied discountspayments- Payment detailsproducts- Product catalogcategories- Category hierarchydiscount_types- Discount configurationspayment_types- Payment method settingsstore_settings- Store configuration and display settings
Real-time Sync Flow:
- Cashier adds item β Updates session cart
update_customer_display.phpcalled via AJAX- Customer display polls
get_current_order.phpevery second - Display updates with smooth animations
- Full-screen mode when cart is empty
Advertisement System:
- Images stored in
uploads/ads/ - Auto-scanned on page load
- 5-second rotation interval
check_images.phpmonitors for new uploads- Page auto-refreshes when images change
1. Add a New Payment Method
INSERT INTO payment_types (code, name, parent_id, sort_order, status)
VALUES ('NEWMETHOD', 'New Method', NULL, 5, 'active');2. Create a New Discount Type
INSERT INTO discount_types (name, type, value, requires_vat_exempt, status)
VALUES ('Holiday Sale', 'percentage', 15, 0, 'active');3. Add Product Category
INSERT INTO categories (name, parent_id, status)
VALUES ('Beverages', NULL, 'active');4. Upload Advertisement Images
- Place JPG, PNG, or GIF files in
uploads/ads/ - Customer display auto-detects within 30 seconds
- No restart required
get_products.php- Fetch products by categorysearch_products.php- Search products by nameget_payment_types.php- Load payment methodsprocess_transaction.php- Process sales transactioncheck_shift.php- Verify active shiftget_current_order.php- Real-time cart data for customer displayupdate_customer_display.php- Trigger display updatecheck_images.php- Monitor advertisement images
- π§ Email receipts to customers
- π± Mobile cashier app
- π Cloud sync and backup
- π Advanced analytics and forecasting
- πͺ Multi-branch support
- π¦ Inventory reorder alerts
- π Customer loyalty program
- π Third-party integrations (accounting software)
- π¬ Video advertisement support for customer display
- πΊ Multi-display management
- π¨ Custom display themes and layouts
We welcome contributions! Here's how you can help:
-
Fork the Repository
git clone https://github.com/paulaxisabel/synkpos.git cd synkpos -
Create a Feature Branch
git checkout -b feature/AmazingFeature
-
Make Your Changes
- Follow existing code style
- Test thoroughly with all user roles
- Add comments for complex logic
- Test customer display functionality
-
Commit Your Changes
git add . git commit -m "Add: Brief description of changes"
-
Push to Your Fork
git push origin feature/AmazingFeature
-
Create a Pull Request
- Go to original repository
- Click "New Pull Request"
- Describe changes clearly
- Write clean, readable code
- Follow PHP PSR standards
- Test on different screen sizes
- Update documentation for new features
- One feature per pull request
- Include screenshots for UI changes
- Test customer display on actual dual-screen setup
Found a bug? Create an issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots or error messages
- PHP/MySQL versions
- Browser and screen configuration (for display issues)
Have an idea? Open an issue with "enhancement" label and describe your feature request.
- Email: picsigno@gmail.com
- GitHub: Report issues
- Portfolio: paula.vercel.app
MIT License - Free to use, modify, and distribute for personal and commercial projects.
See LICENSE file for details.
Created by: Paula Isabel Signo (@paulaxisabel)
Built with: Pure PHP, MySQL, and lots of πͺ
Special Features: Real-time customer display with advertisement slideshow
SynkPOS - Stay in Synk with Your Business π
Made with β€οΈ by paula