Stocky · version 5.8

Inventory, point of sale, online store & accounting

One Laravel application for the counter, the stockroom, the web shop and the books. A touch-first register that keeps selling offline, live stock across every warehouse, purchases and returns, double-entry accounting, HRM, sixty reports and a storefront with five themes. This guide covers installing it and running it.

In a hurry? Upload the files, open your domain, and follow the four-step installer. Then read Your first hour — the shortest path from an empty install to a shop that can scan a product, take cash and print a receipt.

Welcome

Stocky is one system for one business. The product the cashier scans is the same row the online shop sells, the row a WooCommerce or Shopify sync pushes, the row a purchase order restocks and the row the stock-aging report counts. Nothing is copied between screens, so nothing has to be reconciled — one catalogue, one stock figure, every channel.

/next/dashboard
The Stocky dashboard
The dashboard: today's sales, purchases, returns and dues per warehouse, with the charts and lists below.

What is in the box

Point of sale

Touch-first register with barcode and camera scanning, hold and drafts, split payments, promotions, registers, receipts, a customer display and an offline queue.

Products & stock

Single, variable, service and combo products; multi-warehouse stock with rack locations; batches and expiry; serial numbers; adjustments, transfers, counts and damages.

Buying & selling

Sales, quotations, purchases, sale and purchase returns, shipments, a customer ledger and supplier history; PDF, email, SMS and print on every document.

Online store

Five themes on one catalogue, twelve payment gateways, shipping zones, coupons, flash sales, reviews, wishlists, returns and a customer account.

Customer portal

A separate login for business customers: invoices, payments, statement, quotations, appointments, contracts and a knowledge base.

Money

Cash accounts, deposits and expenses, plus double-entry accounting that posts itself: chart of accounts, journals, trial balance, P&L, balance sheet and tax summary.

HRM

Companies, departments, shifts, employees, attendance, leave and payroll; recruitment and meetings as separate modules.

Business modules

Projects, bookings, service jobs, subscriptions, manufacturing, assets, fleet, kitchen display, documents, contracts, marketing, hospital and school — each on a switch.

Integrations

WooCommerce, Shopify, Salla, Jumia, PrestaShop, QuickBooks, Xero, Google Sheets, Mailchimp, Slack, Telegram, Google Calendar, ZATCA and Stripe.

Reports

Sixty report screens with a date range, a warehouse filter and Excel or PDF export, plus analytics, a 3D sales dashboard and question-driven AI reports.

Platform

Roles with 300+ permissions, users scoped to warehouses, 24 languages with RTL, light and dark themes, installable PWAs, a browser installer and an in-panel updater.

Mobile

A Bearer-token API for the separately sold companion app, with branding and module switches in Settings → Mobile App.

How to read this guide

Sections follow the order you will actually need them: install it, set the business up, then each module in the order the sidebar lists it. Every screen named here exists in the product — where something is deliberately absent it is listed under Deliberately not here rather than described as if it were built. Paths such as Settings → POS Settings refer to the sidebar; the address bar shows the same page under /next/….

The shape of every screen

Lists work the same way throughout: a search box and filters at the top of the card, a table, paging at the bottom, and export buttons where a list is worth exporting. Record pages open with a header — the reference, the status pills, the buttons that change its state — and then the detail. The POS is the exception: it is a full-screen application of its own, opened from the purple POS button in the header.

Server requirements

Stocky runs on ordinary PHP hosting. There is no Docker, no Node on the server and nothing to compile — the front-end assets ship already built. Cron and a queue worker are optional; see Cron & queue for what they add.

WhatNeedsNotes
PHP8.2 or newer8.2, 8.3 and 8.4 all work. The installer shows the version it found.
DatabaseMySQL 8.0+ or MariaDB 10.6+Create an empty database first; the installer fills it.
Extensionsopenssl, pdo, pdo_mysql, mbstring, curl, tokenizer, xml, ctype, fileinfo, gd, json, bcmath, zipAll standard. The installer checks each one and names the missing ones.
Web serverApache with mod_rewrite, or NginxPoint the domain at public/. The shipped .htaccess handles the rewrites.
Writable.env, storage/, bootstrap/cache/, public/images/Usually 755 on folders, 644 on files. Product images and uploads land in public/images.
HTTPSRequired for the camera scanner and PWA installBrowsers only expose the camera and the install prompt on secure origins. Everything else works over plain HTTP.
Memory256 MB PHP memory_limit recommendedLarge imports and PDF exports are the hungry operations.

Point the domain at public/, not at the folder above it. If the document root is the project folder, anyone can download your .env — which holds the database password and the application key. On cPanel this is Domains → Document Root. If your host truly will not allow it, the shipped .htaccess and server.php in the project root rewrite requests into public/; still prefer the proper document root.

Optional hardware

Nothing is bundled and nothing is proprietary. A USB or Bluetooth barcode scanner behaves as a keyboard and needs no driver. A phone or tablet camera scans in the browser. Thermal receipt printers print through the browser dialog, silently through QZ Tray on the cashier's computer, or directly to a network printer by IP address. Cash drawers kick through the receipt printer. Label printers take the barcode sheets. Digital scales that print weight-embedded barcodes are read as product plus kilograms.

Installing

Stocky installs itself in a browser. You do not need shell access, phpMyAdmin or a command line.

  1. Upload and unzip

    Put the contents of the ZIP on your server and point the domain at the public/ folder. Everything is included — you do not need to run composer install or npm.

  2. Open /setup

    Browse to https://your-domain/setup. You land on the requirements check. Every card must be green — the PHP version, the twelve extensions and the ZipArchive class. If one is not, enable it on the server and press Re-check requirements. Nothing has been written yet.

    /setup
    Installer step 1: server requirements
    Step 1 of 4. Each requirement is checked on your server and named if it is missing.
  3. Application settings

    The application name, the environment (Production for a live shop), debug mode (Off on a live server), an application key — press Generate — and the application URL, exactly as people will type it, with https://. All of this lands in .env and can be edited there later.

    /setup/step-1
    Installer step 2: application settings
    Step 2 of 4. Name, environment, debug mode, key and URL.
  4. Database

    Host, port, database name, username and password for an empty MySQL database. Press Test connection; the Continue button only appears once the test passes.

    /setup/step-2
    Installer step 3: database connection
    Step 3 of 4. Test the connection before you continue.
  5. Review and install

    Check the summary, then press Install Stocky. This writes .env, creates every table, installs the API keys and seeds the reference data: the Owner role, the permissions, the default warehouse, currencies, payment methods, settings and the translations for all 24 languages. Keep the tab open; it can take a few minutes on slow hosting.

  6. Sign in

    The finish page shows the default administrator: admin@example.com with the password 123456. Press Go to login.

Change the administrator password right after your first login. It is printed in this guide and on the installer's finish page. Open the user menu (top right) → Profile, or edit the account under User Management → Users — change the email as well.

The installer seals itself. Once it finishes, every /setup address answers 403. The seal is a file: storage/app/public/installed. Delete it to open the wizard again on a broken install — and if /setup is ever reachable when it should not be, that file is the first thing to check.

If the install fails

Message mentionsWhat to do
Access denied for userWrong database username or password. Go back a step and re-test.
Unknown databaseThe database does not exist. Create an empty one in your hosting panel and use that name.
Permission denied / failed to open stream.env, storage/ or bootstrap/cache/ is not writable. Set folders to 755 and files to 644, owned by the web server user.
Maximum execution timeRaise max_execution_time to 300 for the install, or run the command-line install.
Base table already existsA previous attempt got half-way. Drop the tables (or the database) and run the installer again.
A blank page or 500 after Install StockyTurn debug mode on in .env (APP_DEBUG=true) to see the reason, or read storage/logs/laravel.log. Turn it off again afterwards.

Your first hour

A fresh install already knows the shape of a shop — it has a default warehouse, a walk-in customer, a set of payment methods and a currency. This is the shortest route from there to a counter that sells.

  1. Company details

    Settings → System Settings. Company name, logo, phone, email and address print on every receipt and invoice. Set the default currency, the timezone, the date and price formats, and the default warehouse and customer the POS opens with.

  2. Warehouses

    Settings → Warehouses. One is enough. Add one per shop, store-room or van if stock physically lives in different places — every stock figure is per warehouse, and users can be limited to the warehouses they may see.

  3. Categories, brands and units

    Products → Categories / Brand / Units. Short lists you edit rarely. Units can convert (a carton of 12 pieces); categories can carry an icon and an image for the POS tiles and the store.

  4. Products

    Products → Create product for a few, Import products for a spreadsheet. A product needs a name, a code, a category, a unit, a cost and a price; everything else — barcode symbology, tax, images, variants, stock alerts — can come later.

  5. Opening stock

    Products → Opening Stock imports a quantity per product per warehouse. Or receive your first purchase, which is the honest way to start a stock figure with a cost behind it.

  6. Payment methods

    Settings → Payment Methods. Cash, card, bank transfer and so on are seeded; hide the ones you do not take. Add a cash account under Accounting → List accounts if you want payments to land in named accounts.

  7. The receipt

    Settings → POS Receipt. Pick the paper width (58 or 80 mm), one of the five layouts, and what prints on it — the preview on the right is live. Settings → POS Settings holds the rest: auto-print, hold sales, the cash drawer and keyboard shortcuts.

  8. Users

    User Management → Group Permissions to create a Cashier role with only the POS and sales permissions, then Users to add each person with that role and the warehouses they may see.

  9. Open the POS and sell something

    Press the purple POS button in the header. Open the register with a float, pick the warehouse, tap or scan a product, Pay Now, cash, Complete Payment. The receipt prints; the stock moved.

Everything else — the online store, accounting, HRM, the marketplaces, the business modules — can wait. Turn off what you do not use in Settings → Modules so the sidebar shows only what your business runs.

Command-line install

If you have shell access and would rather not use the wizard:

cp .env.example .env            # or write .env by hand: APP_URL, APP_KEY, DB_*
php artisan key:generate
php artisan migrate --force
php artisan passport:install     # API keys for the mobile app and the session guard
php artisan db:seed --force      # roles, permissions, warehouse, currencies, settings, translations

# tell the installer it has nothing left to do
echo 1 > storage/app/public/installed

The seeders create the Owner role and the admin@example.com / 123456 account. They are idempotent — running them twice does not duplicate anything.

Demo catalogues

Four seeders fill the store with a themed catalogue, complete with pictures, so you can see a theme with real products before entering your own. Each one switches the store to its theme and is safe to run more than once:

php artisan db:seed --class=ElectronicsDemoSeeder
php artisan db:seed --class=ToysDemoSeeder
php artisan db:seed --class=GroceryDemoSeeder
php artisan db:seed --class=RealEstateDemoSeeder

For a general set of customers, suppliers, products, sales, purchases, quotations and expenses without any theme, use the demo-data generator in Settings → System Settings — it works from the panel and needs no shell.

Demo data is a lot to delete afterwards. Seed it on a test install, not on the database you will trade with.

Around the screen

A few things sit outside the modules and are worth knowing before you start.

WhereWhat it does
POS, the purple button in the headerOpens the register full-screen. It is its own application: the sidebar disappears and comes back when you leave.
Today's summary, the pie-chart iconA drawer with today's sales, payments and stock alerts without leaving the page you are on.
Light / dark, the bulbFlips the theme for your browser. The customiser (below) also offers auto, which follows the operating system.
Full screenHides the browser chrome for a till or a wall-mounted screen.
Language, the globeSwitches the whole panel to any language enabled in Settings → Languages. Arabic flips the layout right-to-left.
The bellIn-app notifications — stock alerts, new online orders, kitchen tickets, sync results — newest first, with the unread count on the badge.
The user menuYour profile (name, email, password, avatar) and sign out.
The gear, bottom rightThe appearance customiser: sidebar layout (default, large, flat or dark), theme mode and colours. Saved for your browser; it changes nothing for anybody else.
Install appOn HTTPS, an Install App button appears in the header and installs the admin as a PWA on a desktop or a phone. The POS, the store, the customer display and the portal each have their own manifest.
/next/dashboard · dark
Dashboard in the dark theme
The dark theme, from the user menu.
/next/dashboard · العربية
Dashboard in Arabic, right-to-left
Arabic: the whole panel runs right-to-left.

The sidebar shows only the modules that are switched on and only the pages your role may open. A cashier with POS-only permissions sees a very short sidebar; that is by design. The version number in the bottom corner is what Settings → Update compares against the update server.

Dashboard on a phone
The admin on a phone.
Sales list on a phone
Lists collapse into cards.
POS on a phone
The register on a phone.

System settings

Settings → System Settings. The one page nearly every other screen reads from. It is split into tabs; each saves only its own fields.

/next/settings/system
System settings
Company details, defaults and formats. The logo set here prints on receipts, invoices and PDFs.
TabWhat lives there
CompanyName, logo, phone, email and address. Sidebar logo size. The footer line and the developed by credit.
SystemDefault currency, default language, timezone, date format and price format. Default warehouse, default customer, default payment method, default account and default tax for new documents. The offline sync switch for the POS (see Offline mode). The default dashboard date range and widget order.
SalesHow sales documents behave: the sales agent field, credit limits, minimum prices and the loyalty point-to-amount rate.
DashboardFont family and size; table density, striped rows, cell borders, sortable columns and column visibility — the feel of every list. Which dashboard widgets show and in what order.
Export, CalendarDefaults for Excel and PDF exports; Google Calendar credentials for the bookings module.
Features, Security, BackupThe feature switches, login-device rules and the cloud backup target (S3 or Google Drive) — the same forms as the dedicated pages under Settings.
POS Settings, POS Receipt, Payment Gateway, ZATCAShortcuts to those settings pages so the whole configuration is reachable from one place.
Demo dataThe generator described under Command-line install: customers, suppliers, products, sales, purchases, quotations and expenses, with a status line showing what is already in the database.

The timezone decides which day an evening sale belongs to and when the scheduled jobs run. The default currency is the base currency for every report and stock valuation — if you turn on multi-currency later, other currencies convert into this one. Set both before you trade.

Feature switches

Settings → Modules → Features (the same switches are on the Features tab of System Settings). These change how the whole system behaves, so they live together rather than hidden in the module they affect.

/next/settings/business-modules · Features
Feature switches
Each switch carries its own explanation. Press Submit after changing them.
SwitchWhat it does
3-decimal pricingPrices, costs, discounts, taxes and POS totals keep three decimals (0.066) instead of rounding to two. For currencies such as the dinar.
Kitchen displayThe POS shows Send to Kitchen / Save without sending / Send later and the Kitchen Display page appears. Also sets the preparation-time target and whether confirmed store orders create a ticket automatically.
Show barcode (GTIN)Shows the GTIN / UPC / EAN / ISBN field on the product form, separate from your own product code.
Resize product imagesDownscales uploads to the max size (default 800 px on the longest edge). Turn off to keep originals — larger files, slower pages.
Serial number / IMEI trackingLets a product require a unique serial per unit, captured at purchase and picked at sale. See Serial numbers.
Multi-pack sellingA product can be sold as single, 6-pack or case, each with its own price, while stock stays in one base unit.
Wholesale pricing by quantityProducts carry quantity breaks (10–19, 20–49, 100+) that replace the retail price in the POS and the store once the ordered quantity reaches a tier. Turning it off keeps the tiers but stops applying them.
Multi-currencyRecord sales, purchases and online orders in other currencies with manual exchange rates. Reports and stock stay in the base currency. See Multi-currency.
Change salesperson during checkoutA salesperson picker on the POS so a sale can be credited to another employee without logging out; the choice is saved on the invoice and used in the seller report.
Auto journal entriesPost an accounting journal automatically when a sale, purchase, expense, return or payment is recorded. See Accounting.

Business modules

Settings → Modules. Twenty-three optional modules, each with its own menu group, pages, permissions and reports. Switch off what your business does not do and the sidebar shrinks to match. Core commerce — products, sales, purchases, people, settings and reports — cannot be turned off.

/next/settings/business-modules
Business modules switches
Store, HRM, recruitment, meetings, marketing, accounting, e-wallet, commissions, promotions, WooCommerce, Shopify, Salla, Jumia, documents, subscriptions, manufacturing, assets, projects, bookings, service, fleet, hospital and school.

A module that is off is also off for the router: its pages answer not found even by direct address, and its permissions disappear from the role editor. Turning it back on restores everything — no data is deleted by the switch.

Settings → Module Settings is a different page: it lists add-on modules installed as packages and offers Upload Module for a ZIP supplied by the vendor. A fresh install lists none.

Warehouses & locations

Settings → Warehouses. A warehouse is any place stock physically lives: a shop, a stockroom, a van, a market stall. Every stock quantity, every alert and every sale, purchase, transfer and adjustment is tied to one.

/next/warehouses
Warehouses list
Warehouses with their contact details. Rack locations are the second tab.

Internal locations

The Locations tab holds aisle, rack and bin positions inside a warehouse. Products can be assigned to a location so the picker knows where to walk; the Internal Location report lists what sits where.

Who sees which warehouse

Each user is assigned the warehouses they may work in (User Management → Users). The POS, the lists and the reports then only offer those. A cashier in the downtown shop never sees the airport store's stock; a manager assigned to all of them can switch. The default warehouse from System Settings is where the POS opens.

Users & roles

User Management → Users. A user is anyone who signs in to the admin or the POS. Each has a role, a status (inactive users cannot sign in but keep their history), an avatar and the warehouses they may see.

/next/users
Users list
Users with role and status.
/next/users/create
Add user form
Adding a user: role, password, warehouses.

The install ships one role, Owner, which holds every permission — the administrator account has it. Create a role per job, not per person: Cashier, Stock keeper, Accountant, Store manager. Then give people the role.

Users can be signed out remotely from Settings → Login Devices, and every sign-in is listed in the Login Activity report.

Permissions

User Management → Group Permissions. A role is a named set of permissions. The editor lists more than 300 of them, grouped by module, with a search box and a select-all per group.

/next/permissions/create
The role editor
Creating a role. Groups follow the sidebar; a module that is switched off does not appear.

Most groups follow the same pattern — View, Create, Edit, Delete — with extras where a module has a sensitive action: override FEFO / sell quarantined under batches, write off, Pay due, report-level permissions, and the settings pages one by one, so a manager can be given POS Settings without Payment Gateway.

A cashier role

The minimum for somebody who only runs the till: POS, Sales → View and Create, Customers → View and Create (for quick-add at the counter), and nothing under Settings, Purchases or Reports. Add Sales → Edit only if they should be able to change a completed sale, and Cash Register Report if they close their own drawer.

Permissions apply to the API as well as the menu. A page hidden from the sidebar is also refused when typed into the address bar, and the mobile app sees the same set.

Categories, brands, units & currencies

Short reference lists under Products and Settings. Get them roughly right before importing products, because the import matches on their names.

/next/categories
Categories
Categories carry a code, an icon and an image for the POS tiles and the store.
/next/units
Units
Units and their conversions.
ListNotes
Categories and Sub-categoriesTwo levels. The POS filters by category; the store builds its menus and filters from them; kitchen stations claim categories.
BrandsA name and a logo. The POS has a brand filter; the Electronics theme shows a brand row.
UnitsA base unit (piece, kg, litre) and derived units with an operator and a value — a carton is × 12 pieces. Products have a stock unit, a purchase unit and a sale unit, so you can buy by the carton and sell by the piece.
Size guidesTables (S/M/L with measurements) attached to products and shown on the store's product page.
Vehicle fitmentMakes, models and years a part fits. The store lets a shopper pick their vehicle and filters the catalogue to what fits.
Currencies (Settings → Currencies)Code, symbol and — with multi-currency on — an exchange rate against the base currency. The store's currency switcher offers whichever you enable.

Payment methods & accounts

Settings → Payment Methods. The ways money arrives: the install seeds Cash, Credit Card, Check, TPE, Western Union, bank transfer and other. Rename, add or deactivate them; the POS payment screen and every payment form offer the active ones. Store credit and wallet are handled by the e-wallet module.

/next/settings/payment-methods
Payment methods
Payment methods. Each can be switched off without deleting the payments already recorded with it.

Accounts (Accounting → List accounts) are where the money is kept: the till, the bank account, the mobile-money float. Every payment, deposit and expense may name an account, and the account balance moves with it. The default account in System Settings is pre-selected on new payments. See Accounts, deposits & expenses.

Payment gateways are separate: Settings → Payment Gateway holds the Stripe keys the POS uses for card payments; the online store's twelve gateways are under Store → Payment Gateway.

Products

Products → All Products. The catalogue. One row per product with its image, code, category, brand, cost, price, unit and the stock across the warehouses you may see. The list filters by warehouse, category and brand, exports to Excel and PDF, and opens the Print Labels sheet for any selection.

/next/products
Products list
The product list. Quantity is per warehouse; the total is what you may see.

The product form

/next/products/create
Create product form
Creating a product. The type at the top decides which panels appear below.
Field groupWhat to put there
IdentityName, code (generated if you leave it blank), barcode symbology (Code 128, EAN-13, UPC-A, …), optional GTIN, brand, category and sub-category.
UnitsThe stock unit, and optionally different purchase and sale units with a conversion.
MoneyCost, price, tax rate with inclusive or exclusive, and a default discount. With the wholesale switch on, a table of quantity tiers; with multi-pack on, the pack sizes and prices.
StockThe stock alert quantity, opening stock per warehouse, an internal location, and whether the product tracks batches or serial numbers.
Media & textImages (upload or paste a hosted URL), a note, a warranty period, a size guide, vehicle fitment, and any custom fields defined in Settings → Custom Fields.
Online storeWhether the product is visible in the store, the collections it belongs to, the storefront description and SEO text, pre-order and quote-request options.

The product page

/next/products/1
Product details page
A product's detail page: stock per warehouse, movement history, sales and purchases.

Every product has a detail page with its stock per warehouse, a movement history — every sale, purchase, return, transfer and adjustment that touched it, in order — and the sales and purchase lines it appeared on. The Product Report under Reports is the same view with a date range and export.

Variants, combos & services

The type at the top of the product form decides how stock behaves.

Single

One code, one price, one stock figure per warehouse. Most products.

Variable

A parent with variants — size, colour, capacity. Each variant has its own code, price, cost, image and stock. The POS and the store show the parent and let you pick the variant.

Service

No stock at all. Repairs, delivery, labour, consultations. Can carry a price and a tax like any product; the store can offer request a quote instead of a price.

Combo

A bundle sold as one line at one price. Selling it deducts each component's stock; the combo itself has none.

Subscription products (their own module, see Subscriptions) add a billing cycle to any product. Packs and wholesale tiers are pricing on top of a single or variable product, switched on under Feature switches.

Importing

Every import page has the same shape: a drop zone, a Download example button that gives you a template with the right columns, a table explaining each column and which are required, and Import now. Rows that fail are reported by line number; rows that pass are saved.

/next/products/import
Import products page
Import products: one tab per product type, and the expected format underneath.
ImportWhereNotes
ProductsProducts → Import productsThree tabs — single, variant and service products — each with its own template (.xlsx). Category, brand and unit are matched by name and created when missing.
Products, update onlyProducts → Import (Update Only)Matches existing products by code and patches price, cost and stock. Never creates a product — safe for a supplier price list.
Opening stockProducts → Opening StockCode, warehouse and quantity, for single products and for variants. Recorded as an opening adjustment so the movement history starts cleanly.
Customers, suppliersPeople → Import Customers / Import SuppliersName, email, phone, address, tax number, opening balance.
Sales, purchasesSales → Import Sales, Purchases → Import PurchasesCSV with one row per line item; the reference groups rows into a document. For migrating history from another system.
/next/products/opening-stock-import
Opening stock import
Opening stock per warehouse.

Import in this order: categories, brands and units by hand; then products; then opening stock; then customers and suppliers; then history if you want it. Product codes must be unique — a duplicate code is the most common rejected row.

Barcode labels

Products → Print Labels. Pick products (or a whole purchase), set a quantity per product, choose one of the five label templates and what prints on it — shop name, product name, price, barcode number — and print. The preview is true to size.

/next/products/barcode
Print barcode labels
Label printing with a live, true-size preview. Settings such as fonts and barcode height are saved globally.

Labels go to a normal printer as a sheet, or directly — no print dialog — to a TSPL label printer over USB or the network. Products without a barcode of their own are printed with their product code, which the POS scanner reads just the same.

Batches & expiry

For food, pharmacy, cosmetics and anything with a shelf life. Turn batch tracking on per product; from then on every purchase line asks for a batch number and an expiry date, and stock is kept per batch.

/next/products/batches
Batch register
The batch register: quantity on hand, expiry and status per batch and warehouse.

Sales allocate first-expiry-first-out: the POS takes from the batch that expires soonest. Expired or quarantined batches are skipped unless the user holds the override FEFO / sell quarantined permission. Batches can be written off, and the Expiry report lists what expires in the coming days by warehouse; the Batch Register and Batch History reports show where each batch went.

/next/reports/expiry
Expiry report
The expiry report.

Serial numbers

With the Track serial number / IMEI switch on (Feature switches) a product can require one serial per unit. Receiving a purchase asks for the serials; selling asks you to pick which units leave; returns bring a specific unit back. Phones, laptops, appliances, tools with a warranty.

/next/serial-numbers
Serial numbers register
Every serial with its status — available, sold, returned — and the documents it passed through.

Four reports cover them: Available Serial Numbers, Sold Serial Numbers, Serial Movement Log and Product Serial Inventory. The Warranty & Guarantee report combines the serial with the product's warranty period to show what is still covered.

Count, adjust, transfer, damage

Four operations move stock without a sale or a purchase. Each is a document with a date, a warehouse, lines and a note, and each shows up in the product's movement history and in its own report.

/next/products/count-stock
Count stock
Count stock: a sheet per warehouse and category to count against.
/next/adjustments/create
Create adjustment
An adjustment: add or subtract per line, with a reason.
OperationWhereWhat it does
Count stockProducts → Count StockGenerates a downloadable count sheet for a warehouse (and optionally a category) with the system quantity on a given date, to be counted on paper or a tablet. Enter the differences as an adjustment.
AdjustmentStock AdjustmentAdds or subtracts a quantity per product with a reason: found, lost, sample, correction. The Stock Adjustment report totals them.
TransferStock TransfersMoves quantities from one warehouse to another, with a status (pending, sent, completed) and an optional shipping cost. Stock leaves the source at once and arrives when completed.
DamageDamagesWrites off broken or unsellable units with a note and a value, so the loss is visible in the reports rather than hidden in an adjustment.
/next/transfers/create
Create transfer
A transfer between two warehouses.
/next/damages
Damages list
Damages, with the value written off.

The Negative Stock, Quantity Alerts, Dead Stock, Zero Sales, Stock Aging and Inventory Valuation reports are the places to look for what needs counting, reordering or clearing.

The register

The purple POS button in the header opens the register full-screen. It is built for a touch screen and a scanner: large product tiles with image, code, stock and price; category and brand filters; a search box that also takes a scanner; and a cart on the left with a running total.

/next/pos
The point of sale
The register: the register status and warehouse at the top, the cart on the left, the catalogue on the right, and the status pill bottom left.

Opening the register

With registers enabled, the top-left pill reads CLOSED until you open one. Press it, enter the opening float, and the register is yours for the shift. Every sale, payment and hold is stamped with the register and the cashier. At the end of the shift press the pill again, enter the counted cash and a closing note, and the Cash Register report shows the float, the cash sales, the counted amount and the difference — per register and per cashier.

Warehouse and customer

The warehouse chip picks which stock you are selling from — the POS opens on the default warehouse from System Settings, limited to the warehouses your user may see. The customer chip defaults to walk-in-customer; search for a named customer to attach the sale to their ledger and their loyalty points, or press the person-plus icon to create one without leaving the screen.

Building the cart

/next/pos · العربية
The POS in Arabic
The register in Arabic, fully right-to-left.
/next/real-time-sales-counter
Real-time sales counter
The real-time sales counter: a live board of today's sales that pings when a new one lands.

Live sales counter

Sales → Real-time Sales Counter is a board for a back-office screen: the count and value of today's sales, refreshed by polling every few seconds with a chime when a new sale arrives. It needs no websocket server.

Taking payment

Pay Now opens the payment screen. The total is pre-filled; pick a method and press Complete Payment, or split it.

/next/pos · Pay Now
POS payment screen
Payment: amount, account, method, quick-cash buttons, and Add Payment Method to split.

Completing the payment saves the sale, moves the stock, posts the journal (if auto journals are on), credits the loyalty points, prints the receipt (if auto-print is on) and, if a cash drawer is configured, kicks it open.

POS settings & receipts

Settings → POS Settings decides how the register behaves; Settings → POS Receipt decides what it prints.

/next/settings/pos
POS settings
POS settings: printing, hold sales, the cash drawer, shortcuts and the register.
SettingWhat it does
Invoice formatThermal prints the receipt layout on roll paper; A4 prints the full invoice.
Auto-print receiptPrints as soon as a sale completes instead of waiting for the button.
Enable hold salesShows or hides the Hold button and the drafts list.
Cash drawer auto-openWhen a sale completes with cash, sends an ESC/POS pulse to the receipt printer named here, which kicks the drawer connected to it. Requires QZ Tray running on the cashier's computer.
Direct network printingSends receipts straight to a printer at an IP address and port (usually 9100), bypassing the browser dialog. Good for a tablet till with a shared printer.
Barcode scanning soundA beep on every successful scan.
Products per page, show categoriesHow many tiles load at once and whether the category filter appears.
Keyboard shortcutsThe switch and the cheat sheet — see Keyboard shortcuts.

The receipt

/next/settings/pos-receipt
POS receipt settings with live preview
Five receipt layouts with a live preview. Every change on the left redraws the receipt on the right.

Paper size (58, 80 or 88 mm); one of five layouts — Standard, Compact, Detailed, Bilingual and Minimal; logo and its size; font family and size; and which blocks print: the customer, the tax breakdown, the previous dues and net balance, a note to the customer, and — with ZATCA phase 1 on — the QR code Saudi receipts require. The Bilingual layout prints each label in two languages, for Arabic and English receipts.

Printing

MethodWhen to use it
Browser printThe default. Works with any printer the operating system knows; the dialog appears each time unless the browser is set to skip it.
QZ TrayA small free program on the cashier's computer. Prints silently, raw ESC/POS, and kicks the drawer. Install it, allow the site once, and set the printer name in POS Settings.
Network printerA receipt printer with an Ethernet or Wi-Fi port. The server sends the job directly; nothing to install on the till. The server must be able to reach the printer's IP.
Label printerTSPL printers over USB or the network take the barcode sheets without a dialog.

Keyboard shortcuts

Turn them on in Settings → POS Settings; the switch is per device and saves as soon as you flip it, so a touch till can leave them off while the counter PC has them on. Press Shift + ? on the register for the cheat sheet; the same list is under View Shortcuts in POS Settings.

The shortcuts cover what a cashier does a hundred times a day: focus the search or scan box, open the payment screen, complete a cash payment, hold the sale, open the drafts, clear the cart, change the customer, open the drawer and close the register. They are ignored while you are typing in a form field, except the function keys and Esc, so a barcode typed by a scanner is never misread as a command.

Offline mode

The register keeps selling when the internet does not. Switch it on with offline sync in Settings → System Settings → System.

  1. The register caches

    While online, the POS keeps a copy of the catalogue and the customers in the browser, and refreshes it as you work. The status pill bottom left reads Online · synced.

  2. The connection drops

    The pill turns red and reads Offline. Tiles, search, the cart, holds and drafts keep working from the cache. Sales you complete are queued in the browser with their payments, and the pill shows how many are waiting. Reloading the page while offline is fine — the register comes back from the cache.

  3. It comes back

    The queue uploads itself, oldest first; each sale gets its reference and moves the stock as if it had been taken online. The pill returns to Online · synced. If a queued sale is refused — a product deleted meanwhile, say — it stays in the queue with the error so nothing is silently lost.

What offline cannot do. Opening or closing the register, card payments through Stripe, kitchen tickets, customer-display updates and anything that needs the server to answer. Stock figures on the tiles are as of the last sync, so two offline tills can both sell the last unit. The queue lives in that browser's storage — do not clear site data while sales are waiting.

Customer display

A second screen facing the customer — a tablet on a stand, a monitor, an old phone — that mirrors the cart as the cashier works: the lines, the totals, and a thank-you when the sale completes. It is a web page, so any device with a browser on the same network will do.

/next/customer-display/setup
Customer display setup
Sales → Customer Screen: generate a token, then open the URL or scan the QR code on the second device.
  1. Generate a token

    Sales → Customer Screen → Generate New Token. The page shows the display URL — /customer-display?token=… — and a QR code for it.

  2. Open it on the display device

    Scan the QR or type the URL. The page installs as a PWA and runs full-screen. It supports light and dark themes and needs no login — the token is the credential.

  3. Sell

    The display updates as items are added. Tokens expire after 24 hours; generate a new one to rotate access, and the old link stops working at once.

/customer-display?token=…
The customer display
What the customer sees.

If the display does not connect, check that the device is on the same network and uses the full URL including the token. If items stop updating, make sure the POS is still open on the cashier's side — the display shows the last cart the register broadcast.

Kitchen display

For restaurants, cafés and anywhere an order is prepared after it is taken. Switch it on under Feature switches; the POS then offers Send to Kitchen on every sale and Kitchen → Kitchen Display appears in the sidebar.

/next/kitchen-display
Kitchen display
Tickets in lanes — open, preparing, ready — with the daily token number, the elapsed time and per-item check-off.

The order-ready screen

A customer-facing board of token numbers under Preparing and Ready, with a chime when one moves. Press Order Ready Screen on the kitchen display to generate a secure link (/order-ready?token=…), open it on a screen in the collection area, and it updates on its own. The link stays valid for seven days; generating a new one replaces it.

/next/kitchen/report
Kitchen report
The kitchen report: preparation and wait times, staff performance, trends and top products, with export.

Sales

Sales → All Sales. Every invoice, from the POS or from the back office, in one list: date, reference, customer, warehouse, status, grand total, paid, due, payment status and shipping status. Filter by any of them, export, and act from the row — Pay due, print, PDF, email, SMS, edit, return, delete.

/next/sales
Sales list
The sales list with status and payment status pills.

Creating a sale in the back office

/next/sales/create
Create sale form
The sale form: the same lines as the POS, with a status, a sales agent, a note and attachments.

The form is the POS in a page: customer, warehouse, date, lines with discount, tax, unit and batch or serial, an order tax, discount and shipping, a status (pending, ordered, complete), a sales agent, a note, and a payment you can record at once. Stock moves when the sale is completed. With multi-currency on, pick the sale currency and the base-currency equivalent shows alongside.

The sale page

/next/sales/227
Sale detail page
A sale: lines, totals, payments, shipment and documents, with the print, PDF, email and SMS buttons.

Payments are recorded against the sale with a date, a method and an account; each one updates the paid and due figures and the customer's ledger. Attach a file — a signed delivery note, a purchase order from the customer — under documents. Email and SMS use the templates from Settings, merged with the sale.

Quotations

Quotations. A priced offer that moves no stock. Same form as a sale; same lines; a status of pending or sent. Print or PDF it, email it, and when the customer agrees press Create sale — the quotation's lines become a sale in one click, and the quotation is marked as converted.

/next/quotations
Quotations list
Quotations.
/next/quotations/30
Quotation detail
A quotation, ready to convert.

Business customers can also see their quotations in the client portal, accept them there, or request a new one; shoppers can send a quote request from the store for service products.

Returns

A return is always against an original document, so the stock, the money and the reports agree on what came back.

/next/sale-returns
Sale returns
Sale returns.
/next/purchase-returns
Purchase returns
Purchase returns.

The Return Ratio report shows what comes back most, by product and by customer.

Shipments

Sales → Shipments. One shipment per sale that needs delivering: the carrier, a tracking number, the delivery address and a status — packed, shipped, delivered, cancelled. The shipping status shows on the sale and on the sales list, and the store's customer account shows it to the shopper.

/next/shipments
Shipments list
Shipments and their status.

Suppliers & purchases

People → Suppliers holds who you buy from — name, contact, tax number, address, opening balance — with a detail page listing every purchase, return and payment. Purchases is how stock arrives with a cost behind it.

/next/suppliers
Suppliers list
Suppliers.
/next/purchases
Purchases list
Purchases with status and payment status.

Receiving a purchase

/next/purchases/create
Create purchase form
A purchase: supplier, warehouse, lines with cost, batch and expiry, and the payment.

Supplier, warehouse, date, lines with the unit cost, the purchase unit, a discount and a tax; per line a batch number and expiry for batch products and the serials for serial products; an order tax, discount and shipping. The status is pending, ordered or received — stock moves when it is received. Record the supplier payment at once or later from the row. A purchase can also open the label printer for everything it contains.

/next/purchases/180
Purchase detail
A purchase with its lines, payments and documents.

The product's cost is what you paid; Inventory Valuation uses it, and the profit reports subtract it from the sale price. Purchases can be imported from CSV to bring in history; see Importing.

Customers & ledger

People → Customers. Name, email, phone, address, tax number, an opening balance and a credit limit. The POS creates them on the spot; the store creates them when a shopper registers; the import brings them in bulk.

/next/customers
Customers list
Customers, with their due balance and Pay due on the row.
/next/customers/2/details
Customer details
A customer's page: totals, sales, payments, quotations and returns.

The ledger

/next/customers/2/ledger
Customer ledger
The ledger: everything owed and paid, with a PDF statement.

Every invoice, return and payment for a customer on one statement, with the opening balance, the sales due, the returns due, the payments and the outstanding total. Download PDF produces the statement you send them. Pay due takes a payment against the oldest open invoices. The credit limit — No limit by default — stops the POS and the sale form from going past it.

Two further lists under People split customers by store access: Customers with Login can sign in to the online store; Customers without Login cannot. The Client Portal link under People opens the portal itself; access to it is granted per customer from this list.

Client portal

A separate front door at /portal for business customers — the ones who buy on account, ask for quotations and want their statement without phoning. It is not the online store: no cart, no checkout, no catalogue.

/portal/login
Portal login
The portal sign-in.
/portal/dashboard
Portal dashboard
What a client sees after signing in.

Inviting a customer

People → Customers. Open the row's actions and choose Portal Client. Confirm the email address the invitation goes to and press Enable: an email with a set-password link is sent, and until they use it the customer shows as invitation pending. Disable revokes access without deleting anything.

/portal/invoices
Portal invoices
Invoices with PDF download.
/portal/statement
Portal statement
The statement.
Portal pageWhat the client can do
DashboardOutstanding balance, recent invoices and payments.
InvoicesEvery sale, with status, paid and due, and a PDF of each.
Payments, StatementPayments received and the running statement.
QuotationsRead the quotations you sent, and request a new one.
AppointmentsBook an appointment (with the bookings module).
ContractsRead their contracts and download attachments (with the contracts module).
Knowledge baseThe articles you publish (with the knowledge-base module).
ProfileChange the password, switch language, or delete the account.
Portal on a phone
The portal on a phone; it installs as a PWA.

Loyalty & promotions

Loyalty points

Settings → Loyalty Rewards. Customers earn points on what they spend at the rate you set (points per amount, a minimum sale, an expiry). Points show on the customer's page, on the POS when the customer is picked, and in the store account. They are spent two ways: converted into a discount at the point-to-amount rate, or redeemed for a reward from the catalogue on this page — a discount amount, a gift card or a product, each with a points cost, a stock and a per-customer limit. Redemptions are listed with their status and fulfilled from here; points can be credited or deducted by hand with a note.

/next/loyalty/rewards
Loyalty rewards
The rewards catalogue and redemptions.

Promotions

Promotions. Rules that apply themselves at the POS checkout: a percentage or a fixed amount off, on chosen products, categories or the whole cart, within a date range, optionally behind a promo code, with a usage limit. The register lists the promotions that matched; the Promotion Usage report shows what each one cost.

/next/promotions
Promotions
Promotions with their type, period and usage.

The online store has its own coupons and flash sales; they are separate from POS promotions on purpose, because a web coupon and a counter promotion rarely have the same rules.

E-wallet & commissions

E-wallet

E-Wallet. A prepaid balance per customer. Top it up in the admin or let shoppers do it in the store; spend it as a payment method at the POS and at checkout; refund to it instead of to cash. Wallet Items are the products or amounts on offer; the dashboard shows balances, top-ups and spend; the settings decide minimums and whether withdrawals are allowed.

/next/ewallet/dashboard
E-wallet dashboard
The e-wallet dashboard.

Commissions

Commissions. For salespeople paid on what they sell. A program sets the rule — a percentage of the sale, of the profit, or a fixed amount per line — and which products it covers; agents are the users or employees in it; rules add tiers and exceptions. Every sale with a sales agent accrues, receipts record what was paid out, and the report reconciles the two.

/next/commissions/programs
Commission programs
Commission programs.

Setting up the store

The online store sells the products you mark visible, from the warehouses you choose, with the same prices, stock and customers as the counter. It is switched on per install under Settings → Modules → Store, then configured from Store → Settings.

/next/store/settings
Store settings
Store settings: one tab per concern, and one per theme with the blocks that theme draws.
  1. Basics

    Store name, the theme, the warehouses it sells from (or all), the default language and the display currency. Online store enabled is the master switch; off, the storefront answers with a closed page.

  2. Address

    By default the store lives at /online_store. Set a custom URL path such as /shop, or tick use the root domain so the shop is your home page and the admin stays at /login and /next. On the root domain the shop's sign-in and register pages move under /customer/…. Old links are redirected.

  3. Stock behaviour

    Show stock or not, hide out-of-stock products, allow or prevent overselling, hide prices for guests (a wholesale catalogue that shows prices only after sign-in).

  4. Registration

    Public registration on or off; require an invite code, admin approval, email verification, or any combination. See Customer accounts.

  5. Returns and reviews

    The return window in days, whether shoppers may cancel unshipped orders, and whether reviews publish at once or wait for moderation.

  6. Make products visible

    A product appears in the store only when its online store switch is on. Set it per product, or in bulk from the product list.

Real estate

With the Real Estate theme the store becomes a listings site: Store → Real Estate holds properties (for sale or rent, price, beds, baths, area, photos, map), their categories and the inquiries the form sends. Products and the cart are not used.

Themes

Five themes on one catalogue. Switching is a dropdown in Store → Settings → Basics; each theme has a tab of its own for the blocks it draws, and every theme shares the same product page, cart, checkout and account.

/online_store · Default
Default theme home page
Default — collections and homepage blocks you arrange yourself.
/online_store · Electronics
Electronics theme home page
Electronics — hero slider, promo banners, category tiles, top picks / best rated / on sale tabs, brand row, testimonials.
/online_store · Toys & Baby
Toys theme home page
Toys & Baby — playful palette, four promo tiles, a welcome coupon bar.
/online_store · Grocery
Grocery theme home page
Grocery — delivery-time badge, weekly deals with a countdown, category circles, popular-now row, aisles.
/online_store · Real Estate
Real estate theme home page
Real Estate — listings with sale/rent, price, beds, baths, area, a map and an inquiry form.

Each theme tab holds its own slides, tiles, banners, section headings, featured products per tab, deals and testimonials. What you fill in for Electronics is kept when you try Grocery, so switching back loses nothing. The demo seeders described under Command-line install fill each theme with a matching catalogue.

/online_store/shop
Shop page with filters
The shop page: search with suggestions, filters by category, collection and price, sort.
/online_store/product/…
Product page
The product page: gallery, variants, reviews, questions and answers, related products, wishlist, compare, size guide.
Grocery theme on a phone
Grocery on a phone.
Toys product page on a phone
A product page on a phone.
Property page on a phone
A property listing on a phone.

Collections, banners, pages & menus

Everything a shopper sees that is not a product is managed under Store.

PageWhat it is for
CollectionsNamed groups of products — New arrivals, Gifts under 20, Summer — with an image and a slug. The Default theme's home page is built from them; every theme offers them as a filter.
BannersImages with a title, a link and a position for the hero and promo slots.
PagesStatic content — about, delivery, terms, privacy — with a rich-text editor and a slug at /pages/….
MenusThe header and footer navigation: links to pages, collections, categories or any URL, in the order you drag them.
Popup messagesA one-time announcement or newsletter prompt, with a schedule.
Product reviewsRatings and text left by verified buyers; approve, reply or hide. Auto-approval is a store setting.
Subscribers, MessagesNewsletter sign-ups from the footer form, and what the contact page sends.
/next/store/collections
Collections
Collections.
/next/store/banners
Banners
Banners.
/next/store/pages
Pages
Pages.
/next/store/menus
Menus
Menus.

Shipping, tax & payment

Checkout quotes are computed on the server from these three lists, so the shopper's total is the same one that lands on the sale.

/next/store/shipping-methods
Shipping methods
Shipping methods.
/next/store/tax-rates
Tax rates
Tax rates.
/next/store/coupons
Coupons
Coupons.
/online_store/flash-sales
Flash sales page
Flash sales with a countdown.

Payment gateways

/next/store/payment-gateway
Store payment gateways
Store payment gateways, each with its keys and a sandbox switch.
KindMethodsNotes
OfflineCash on delivery, cash on pickup, bank transfer, mobile money, GCashNo keys. Bank transfer lets the shopper upload a proof of payment; you confirm the order when the money arrives.
Card & walletStripe, PayPal, Paystack, Flutterwave, RazorpayPublic and secret keys, an optional webhook secret, and a sandbox switch for testing. The order is marked paid when the gateway confirms.
RegionalbKash, SSLCommerzBangladesh. App key, secret, username and password (bKash); store ID and password (SSLCommerz).
/online_store/checkout
Checkout
Checkout: address, shipping method, payment method, coupon and a running summary.

Orders & requests

Store → Online Orders. A web order is a sale with a source of online: it appears here and in Sales, moves stock from the store's warehouse, and can be shipped, returned and refunded like any other. Confirm it, set the shipping status, print the invoice; with the kitchen on, confirmed orders can become tickets.

/next/store/orders
Online orders
Online orders with payment and shipping status.
PageWhat arrives there
Returns requestsA shopper's request to return or cancel, from their account, within the return window. Approve to create a sale return; refuse with a reason.
Quote requestsA shopper's request for a price on a service or quote-only product. Answer with a quotation.
MessagesThe contact form.
Product reviewsRatings awaiting moderation.
Pending customersRegistrations awaiting your approval, when approval is required.
/next/store/returns
Return requests
Return requests from the store.

Customer accounts

A shopper can check out as a guest or with an account. The account is the same customer row the POS and the ledger use — sign in at the counter with the same email and the loyalty points are there.

/online_store/account
Store account page
My account: orders, returns, wallet, rewards, wishlist, addresses, questions, preferences.
/online_store/account/orders
Store account orders
Orders with invoice PDF, tracking and the return button.

Who may register

Store → Settings → Basics → Registration access control. Four switches that combine:

Sign-in, registration, password reset and verification pages live under the store's address (/online_store/login, or /customer/login on the root domain).

Branding, SEO & PWA

Store → Settings → Branding, Contact, SEO, Social. Logo and tagline, favicon, primary and secondary colours, font family, whether shoppers get a dark-mode toggle, the top bar and footer text, contact details, social links, and the cookie-consent banner.

SEO: a title template ({product} — {store}), a default description, per-product and per-page SEO fields, an automatic sitemap.xml and robots.txt. Languages and currency: the store switcher offers the languages enabled in Settings and shows prices in the display currencies you enable; orders are still recorded in the base currency unless multi-currency is on.

PWA: Settings → PWA holds the name, icons and colours for each installable surface — the admin, the store, the customer display and the portal. On HTTPS the store shows an install prompt and works as an app on a phone's home screen.

/next/settings/pwa
PWA settings
PWA settings: one manifest per surface.

Accounts, deposits & expenses

The simple books most shops start with, under Accounting. They work with or without the double-entry ledger described in the next section.

/next/accounts
Accounts
Accounts and their balances.
/next/expenses
Expenses
Expenses by category, with attachments.
PageWhat it records
List accountsThe till, the bank, the mobile-money float — each with a number, an opening balance and a running balance moved by every payment, deposit, expense and transfer that names it.
DepositsMoney in that is not a sale: an owner's injection, a refund from a supplier, interest. Categorised under Deposit Category.
ExpensesMoney out that is not a purchase: rent, wages, electricity, fuel. A category, an account, a date, an amount, a note and a receipt attachment. The Expense Report totals them by category and period.
Transfer moneyMoves a balance between two accounts — banking the till, funding the float.
/next/expenses/create
Create expense
Recording an expense.
/next/deposits
Deposits
Deposits.

The Cash Flow report reads all four together with sales and purchase payments to show what came in and went out of each account over a period.

Accounting

Accounting → Dashboard, Chart of Accounts, Journal Entries and the financial reports. Proper double-entry books that post themselves: with the auto journal entries switch on (Feature switches), every sale, purchase, return, payment, expense, deposit and money transfer writes a balanced journal against the chart of accounts. Nothing has to be keyed twice.

/next/accounting-v2/dashboard
Accounting dashboard
The accounting dashboard: revenue, expenses, receivables, payables and the recent journals.

Chart of accounts

/next/accounting-v2/chart-of-accounts
Chart of accounts
Assets, liabilities, equity, income and expenses, numbered and nested.

A standard chart is created for you — cash and bank, receivables, inventory, payables, sales, cost of goods sold, expense accounts, tax accounts. Rename, renumber or add accounts to match your accountant's chart; the automatic journals map onto the accounts you mark for each purpose.

Journal entries

/next/accounting-v2/journal-entries
Journal entries
Journals: automatic ones reference the document they came from; manual ones can be drafted and posted.

Automatic journals are posted as the document is saved and carry its reference. Manual journals — an accrual, a depreciation charge, an owner's drawing — are entered as draft, must balance, and are posted when you are sure. Posted journals are not edited; reverse them with a new entry.

The statements

/next/accounting-v2/reports/trial-balance
Trial balance
Trial balance.
/next/accounting-v2/reports/profit-and-loss
Profit and loss
Profit and loss.
/next/accounting-v2/reports/balance-sheet
Balance sheet
Balance sheet.
/next/accounting-v2/reports/tax-report
Tax summary
Tax summary: tax collected on sales against tax paid on purchases.

Trial balance, profit and loss, balance sheet and tax summary, each for any period, each exportable to Excel and PDF. If you began trading before turning the switch on, the journals for existing documents are not created retroactively — post an opening-balance journal as of the start date instead. QuickBooks and Xero can take the invoices and payments if your accountant works there.

Multi-currency

Off by default. Turn it on under Feature switches, then give each currency in Settings → Currencies an exchange rate against the base currency. From then on a sale, a purchase or an online order can be recorded in another currency: the document keeps its own currency, rate and totals, and the base-currency equivalent is shown alongside and used everywhere else.

Rates are manual — you type them and update them; nothing is fetched. Reports, stock valuation, the ledger and the accounting journals stay in the base currency, so a euro sale and a dollar sale add up in one figure. The store's currency switcher is a separate, display-only feature that works even with this switch off.

ZATCA e-invoicing

For businesses in Saudi Arabia. Settings → ZATCA E-Invoicing.

/next/settings/zatca
ZATCA settings
ZATCA: phase 1 QR, phase 2 onboarding, and the documents submitted.

Changing the environment resets the credentials and requires onboarding again. Test in the sandbox with a test OTP before touching production.

Company structure

The HRM module (Settings → Modules → HRM) starts with the shape of the organisation, under HRM:

/next/hrm/departments
Departments
Departments, with their head and company.
ListNotes
CompaniesOne or more legal entities; employees belong to one.
Departments, DesignationsThe org tree and the job titles.
Office shiftsWorking hours per weekday. Attendance is measured against the employee's shift.
HolidaysPublic holidays per company; attendance and leave skip them.
Leave typesAnnual, sick, unpaid and so on, with the days allowed per year.

Employees, attendance & leave

/next/hrm/employees
Employees
Employees.
/next/hrm/attendance
Attendance
Attendance: clock-in, clock-out, late and hours per day.

Employees carry personal details, the company, department, designation and shift, the joining date, documents with expiry, and the basic salary the payroll starts from. An employee may or may not be a system user — a warehouse picker without a login is still on the payroll.

Attendance is a row per employee per day: clock in, clock out, the hours and whether they were late against the shift. Enter it by hand, import it, or let staff record it. The Attendance Summary report totals days, hours and lateness per employee for a month.

/next/hrm/leaves
Leave requests
Leave requests and their status.

Leave requests name a type, a period and a reason, and wait for approval. Approved leave counts against the type's allowance and shows on the attendance grid.

Payroll

/next/hrm/payrolls
Payroll
Payroll runs per month with the net pay and the payment status.

HRM → Payroll. A payroll entry is a payment to an employee: the employee, the date, the amount (pre-filled from the basic salary on their record), the account it is paid from, the payment method, a reference and a status. The list is the record of what was paid to whom and when, filterable by month and exportable. Stocky does not compute income tax or social contributions for you, because those differ by country and year — enter the net amount you actually pay.

Because a payroll names an account, it moves that account's balance and reaches the cash-flow report; with auto journals on it is posted to the ledger as well.

Recruitment & meetings

Two small modules of their own, each with a switch under Settings → Modules.

/next/recruit/dashboard
Recruitment dashboard
Recruitment: jobs, candidates, applications and interviews.
/next/meeting/dashboard
Meetings dashboard
Meetings with a calendar and reminders.

Recruits and Jobs: job openings by category, candidates, their applications with a status, interviews with a date and an interviewer, and a report of the funnel. Meetings: a meeting with attendees, an agenda and a time, on a calendar, with reminders sent by the scheduler (see Cron & queue) and a report of attendance.

Projects & tasks

Projects Management. Projects with a client, a budget, dates and members; tasks with an assignee, a priority, a due date and a status, in a list or on a drag-and-drop board; milestones; timesheets of hours per task; and reports of hours and progress per project.

/next/projects/dashboard
Projects dashboard
The projects dashboard.
/next/tasks/board
Task board
The task board.

Bookings

Booking Management. Appointments and reservations: a customer, a service or a resource, a date and time, a status and a note, in a list and on a calendar. Trays hold the items prepared for a booking — a hamper, a cake, a hire kit — so the shop knows what to have ready. With the Google Calendar connection in System Settings, bookings appear in a Google calendar too; portal clients can book their own appointments.

/next/bookings
Bookings list
Bookings.
/next/bookings/calendar
Booking calendar
The calendar view.

Service & maintenance

Service & Maintenance. For repair shops, phone and computer clinics, appliance servicing, workshops. A service job is a device or an item brought in by a customer, and it moves through a fixed path:

intake → diagnostic → quoted → in progress → ready → delivered

/next/service/jobs
Service jobs
Service jobs with their status; the sidebar filters Awaiting approval, Ready for pickup and Awaiting payment.
/next/service/jobs/details/2
Service job details
A job: the item, the fault, the technician, the checklist, photos, parts and labour, payments and the printable job card.
/next/service/technicians
Technicians
Technicians.
/next/service/checklists
Checklist items
Checklist items.

Subscriptions

Subscription Product. Recurring sales of a product or service: a customer, the product, a billing cycle (weekly, monthly, yearly), a start date and the next billing date. Each cycle produces a sale; the list shows what is due next and what has lapsed. For water deliveries, maintenance contracts, memberships and software seats.

/next/subscriptions
Subscriptions
Subscriptions with cycle and next billing date.

Manufacturing

Manufacturing (MRP). For businesses that make what they sell. A bill of materials lists the components and quantities that make one unit of a finished product; a production order asks for a quantity of it, reserves the components, and on completion consumes them from stock and adds the finished goods. Work centres are the machines or stations; the shop floor page is the work orders in progress; quality control records inspections and rejects; planning compares demand with stock and open orders to say what to make and buy; the reports cover output, cost and yield.

/next/mrp
Manufacturing dashboard
The manufacturing dashboard.

Assets & fleet

/next/assets/dashboard
Asset dashboard
Assets: what the business owns and who has it.
/next/fleet/dashboard
Fleet dashboard
Fleet: vehicles, fuel and maintenance.

Asset Management: the things the business owns and does not sell — laptops, tills, tools, furniture — by category, with a purchase date and value, assignments to employees, transfers between locations, maintenance, depreciation schedules, and a Due Assets list of what needs returning or checking. A daily scheduled task flags assets whose validation is due.

Fleet Management: vehicles with registration and documents, fuel logs with cost per litre and consumption, maintenance with reminders, assignments to drivers, and reports of cost per vehicle.

Documents, contracts & knowledge base

/next/documents
Document archive
The document archive.
/next/contracts
Contracts
Contracts.
/next/kb
Knowledge base
The knowledge base.

Marketing

Marketing. Campaigns by email, SMS or WhatsApp to a customer segment — everyone, top spenders, inactive for 90 days, a loyalty tier — using a template with placeholders, sent now or scheduled. The dashboard and the reports show sends, deliveries and the sales attributed to a campaign. Templates for each channel and the gateway defaults live under Marketing Settings.

/next/marketing/dashboard
Marketing dashboard
The marketing dashboard.
/next/marketing/campaigns
Campaigns
Campaigns.

Scheduled campaigns are sent by the scheduler every minute — they need the cron entry from Cron & queue. Sending thousands of emails from a shared host is how a domain gets blacklisted; for large lists connect Mailchimp and let it do the sending.

Hospital & school

Two vertical modules for businesses that also run a clinic or a school alongside the shop — a pharmacy with a consulting room, an academy with a bookshop. Both are switched on under Settings → Modules and use the same customers, users and accounting.

/next/hospital/dashboard
Hospital dashboard
Hospital: patients, appointments, consultations, admissions, lab and billing.
/next/school/dashboard
School dashboard
School: students, enrolment, attendance, timetable, exams and fees.

Hospital Management: patients, doctors and departments, appointments, consultations, admissions with wards and beds, a lab test catalogue with orders, billing and reports. School Management: students, teachers, academic setup (classes, sections, subjects), enrolment, attendance, a timetable, exams and results, fees and reports.

WooCommerce

Ecommerce Platforms → WooCommerce (switch the module on first). Two-way sync between Stocky and a WordPress shop: products, stock, orders, categories, brands and customers. Stocky stays the source of truth for stock; WooCommerce sends the orders.

/next/woocommerce
WooCommerce integration
The WooCommerce hub: status, settings, and a tab per entity with its sync buttons and logs.
  1. Create API keys in WooCommerce

    WooCommerce → Settings → Advanced → REST API → Add key, read/write. Copy the consumer key and secret. For categories, brands and media you also need a WordPress application password for an administrator (Users → Profile → Application Passwords).

  2. Connect

    On the Settings tab enter the store URL, the consumer key and secret, the WordPress username and application password, and press Test connection. The status tile turns Connected.

  3. Sync

    Each tab — Products, Stock, Orders, Categories, Brands, Customers — shows what is unsynced and offers a push or a pull. Run categories and brands first, then products, then stock; orders pull on their own from then on. Batch sizes are tunable on the Settings tab for slow hosts.

With the cron entry in place the scheduler pushes unsynced products nightly, stock hourly, pulls orders every fifteen minutes and customers and product changes nightly (see Cron & queue). Without cron, the queued sync jobs drain inline while somebody uses the admin, so a small shop still syncs. The Logs tab keeps every run with its outcome.

Shopify

Ecommerce Platforms → Shopify. One or more Shopify stores, each connected with an Admin API access token from a custom app in the Shopify admin. The Sync Centre pushes products and stock and pulls orders; Mappings pairs Stocky products, locations and customers with their Shopify counterparts when the codes differ; Logs keeps the history.

/next/shopify
Shopify dashboard
The Shopify dashboard.

Salla, Jumia & PrestaShop

Integrations. The hub lists every connector with its state; each has a page of its own.

/next/integrations
Integrations hub
The integrations hub.
ConnectorWhat it syncsHow it connects
SallaProducts, stock and orders with a Salla store (Saudi Arabia and the Gulf).OAuth: press Connect, sign in to Salla, approve. A daily keep-alive refreshes the token.
JumiaPrice and stock push, order import from the Jumia marketplace (Africa).Seller Center API user and key.
PrestaShopProducts, stock and orders with a PrestaShop store.The store URL and a webservice key.
/next/integrations/salla
Salla integration
Salla: connection, sync scopes and the log.

QuickBooks & Xero

If your accountant works in QuickBooks Online or Xero, push the books there instead of exporting spreadsheets.

/next/settings/quickbooks
QuickBooks sync
QuickBooks Sync.
/next/integrations/xero
Xero integration
Xero.

Google Sheets, Mailchimp, Slack & Telegram

ConnectorWhat it does
Google SheetsExports sales, products, customers and stock to a spreadsheet you own. Connect with OAuth, pick the sheet, export on demand; with cron, a nightly auto-export at 02:30.
MailchimpPushes customers to an audience. Auto-sync adds each new customer as they are created.
SlackPosts alerts to a channel through an incoming webhook: new sales, low stock, new online orders.
TelegramThe same alerts to a Telegram chat through a bot token and chat ID.
Google CalendarMirrors bookings into a calendar. Credentials in System Settings, then connect.
StripeCard payments on the POS (Settings → Payment Gateway) and in the store.

Webhooks

Settings → Webhooks. For systems this guide has not heard of. A webhook is a URL of yours that Stocky calls with a JSON payload whenever a chosen event happens, signed with a secret so your side can verify it came from Stocky.

/next/settings/webhooks
Webhooks
Webhooks with their events and the delivery log — payload, headers, response and status.

Events cover the documents: sale.created / updated / deleted, sale_return.*, purchase.*, purchase_return.*, expense.*, payment.created / deleted and the payment events for purchases and returns, plus product.updated / deleted, client.created and order.created / updated from the store. Each delivery is logged with the payload, the headers, the response body and a status — pending, retrying, success, failed — so a failed call can be read and resent. Deliveries go through the queue; see Cron & queue.

Mobile app & API

Stocky's admin, POS, store, customer display and portal are all installable web apps (PWAs). A native companion app is sold separately; this package holds its server side.

/next/settings/mobile-app
Mobile app settings
Mobile app settings: switch, branding, modules and behaviour.

Settings → Mobile App: enable or disable sign-in from the app (with a maintenance message when it is off), the app name, logo, primary colour and theme mode, which modules it shows, whether the scanner, offline data and price editing are allowed, the minimum app version that may connect, and support contacts.

The API

The app authenticates at POST /api/mobile/login with an email and password and receives a Laravel Passport personal access token, sent on every later call as Authorization: Bearer …. GET /api/mobile/ping lets a client validate a server URL before signing in. The token carries the user's role, so the app sees exactly what the browser would.

The rest of the API — the endpoints the admin itself uses under /api/… — accepts the same Bearer token, which is how your own integrations read products, create sales or pull reports. Tokens issued to devices are listed, and can be revoked, under Settings → Login Devices.

Dashboard

The first page after sign-in. A date range — today, 7 days, this month, this year or a custom period — and a warehouse filter at the top; everything below follows them.

/next/dashboard
Dashboard
The dashboard for the current month.

Which widgets show and in what order is set in System Settings → Dashboard, and the default range too, so a stock keeper can open on alerts and a manager on profit. The Today's summary drawer in the header is the short version, available from any page.

Reports

Reports. Sixty screens, each the same shape: a date range with quick picks (today, 7 days, 30 days, 90 days, this year), a warehouse filter where it applies, a chart where one helps, a table, and Excel and PDF export. Reports default to today; pick a range first.

/next/reports/sales
Sales report
The sales report: payment status, sales over time and the invoice table under one date range.
GroupReports
Sales & purchasesSales, Purchases, Sales Return, Purchases Return, Product Sales, Products Sold Summary, Product Purchases, Sales by Category, Sales by Brand, Discount Summary, Draft Invoices, Return Ratio, Transactions.
PaymentsPayments on sales, purchases, sales returns and purchases returns; Cash Flow; Cash Register.
ProfitProfit and Loss; profit by product, category, unit, customer, date and warehouse.
StockStock, Stock Detail, Warehouse, Quantity Alerts, Negative Stock, Dead Stock, Zero Sales, Stock Aging, Inventory Valuation (summary and detail), Stock Transfer, Stock Adjustment, Internal Location, Expiry, Batch Register, Batch History, the four serial reports, Warranty & Guarantee.
PeopleCustomers, Top Customers, Inactive Customers, Loyalty Points, Suppliers, Top Suppliers, Sellers, Users, Login Activity; per-customer, per-supplier and per-user detail reports.
MoneyExpenses, Deposits, Tax Summary.
ModulesAttendance Summary, Service Jobs, Checklist Completion, Customer Maintenance History, Kitchen, and the reports inside each business module.
SystemError Logs — the application log, readable without a shell.
/next/reports/profit-and-loss
Profit and loss report
Profit and loss.
/next/reports/stock-aging
Stock aging report
Stock aging.
/next/reports/inventory-valuation-summary
Inventory valuation
Inventory valuation.
/next/reports/top-selling-products
Top selling products
Top-selling products.

Analytics, 3D & AI reports

/next/reports/analytics
Analytics report
Analytics: the business in one page.
/next/reports/sales-3d-dashboard
3D sales dashboard
The 3D sales dashboard.

Analytics is a one-page summary — revenue, margin, growth against the previous period, best sellers, best customers — for a manager who wants one screen. The 3D sales dashboard is the same data drawn for a wall screen.

/next/reports/ai-reports
AI reports
AI reports: pick a question, get the answer from your own data.

AI Reports answers a fixed list of business questions — what sells best on weekends, which customers are slipping, which products are about to run out — from your own database. Nothing is sent to a third-party model and no API key is needed; the name describes the questions, not a chatbot. See Deliberately not here.

Email, SMS & notifications

Mail

/next/settings/mail
Mail settings
Mail settings with a test button.

Settings → Mail Settings. Mailer (SMTP), host, port, encryption, username, password, sender name and address. Send a test before relying on it. Everything Stocky emails — invoices and quotations from a document, portal invitations, store verification and password resets, order confirmations — goes through this.

SMS and WhatsApp

Settings → SMS Settings: Twilio, Termii, Infobip or a custom HTTP gateway (URL, method, parameter names), with the default gateway in System Settings. SMS Templates hold the text sent for a sale, a purchase, a quotation, a return and a payment, with placeholders such as the customer name, the reference and the amount. WhatsApp templates live under Marketing and use the same placeholders.

/next/settings/sms-templates
SMS templates
SMS templates.
/next/settings/email-templates
Email templates
Email templates for sales, purchases and quotations.

In-app

The bell in the header collects stock alerts, new online orders, kitchen tickets, sync results and approvals. Slack and Telegram can receive the same alerts (see integrations). Settings → Custom Fields adds your own fields to products, customers, suppliers and documents, and they appear on the forms, the PDFs and the templates.

Languages & translations

Settings → Languages. Twenty-four languages ship: English, French, Arabic, Turkish, Thai, Hindi, German, Spanish, Italian, Indonesian, Simplified and Traditional Chinese, Russian, Vietnamese, Korean, Bangla, Portuguese, Danish, Japanese, Polish, Swahili, Hausa, Yoruba and Amharic. Enable the ones you want offered; set the default in System Settings. Arabic runs the admin, the POS and the store right-to-left.

/next/settings/languages
Languages
Languages: enable, set a flag, add a new one.
/next/settings/translations/fr
Translation editor
The translation editor.

Strings live in the database, not in files, so Translations edits them from the panel: search a key or a phrase, type the translation, save. A language you add from the panel starts as a copy of English and is translated the same way. Product names and descriptions can be translated per language on the product form for the store; the customer portal and the store each have their own language switcher.

Appearance & PWA

Settings → Appearance: the login page and sidebar branding, the accent colours, the sidebar style — default, large, flat or dark — the default theme mode, and the sidebar menu manager, which hides, renames and reorders entries for everyone (permissions still apply on top). Reset to default undoes it.

/next/settings/appearance
Appearance settings
Appearance.

Each user's own choice — light or dark, sidebar layout — is the gear button bottom right and is saved in their browser. Settings → PWA holds the install manifests described under Branding, SEO & PWA.

Backups

Settings → Backup. Generate backup dumps the database to storage/app/public/backup/; the list shows every dump with its date and size, to download or delete. With the cron entry in place the database:backup command runs on the schedule as well.

/next/settings/backup
Backup page
Backups: generate, download, delete; cloud backup to S3 or Google Drive.

Cloud backup copies each dump off the server: Amazon S3 (or any S3-compatible bucket — key, secret, region, bucket, endpoint, path) or Google Drive (client ID and secret, refresh token, folder ID). A backup that lives only on the server it protects is not a backup.

The dump is the database only. Product images, attachments and documents live in public/images/ and storage/app/ — include those folders in your file backup. To restore, import the SQL into an empty database with phpMyAdmin or mysql, and copy the folders back. There is no restore button in the panel, on purpose: restoring overwrites everything.

System health & security

/next/settings/system-health
System health
System health.
/next/settings/login-devices
Login devices
Login devices.

System Health: PHP and Laravel versions, environment, database size, storage usage, the queue status (pending jobs — a growing number means the scheduler is not running), the last backup date, and a PDF of it all for a support ticket.

Login Devices: every active session and API token with its device, address and last activity; sign out any of them, or all but this one. The Login Activity report keeps the history. Passwords are reset from the login page by email; the storefront's request-safety middleware rate-limits and screens form submissions.

Cron & queue

Stocky works without either — sales, stock, receipts, the store and the reports need nothing in the background. A single cron entry unlocks the scheduled work:

* * * * * cd /path/to/stocky && php artisan schedule:run >> /dev/null 2>&1

On cPanel this is Cron Jobs; use the full path to PHP 8.2+ if php is older. What the scheduler then runs:

WhenWhat
Every minuteMeeting reminders; scheduled marketing campaigns; the queue worker — one pass over the default, webhooks and sync queues (emails, webhooks, marketplace syncs, Xero and Mailchimp auto-sync).
Every 15 minutesWooCommerce: pull orders.
HourlyWooCommerce: push stock.
DailyDatabase backup; assets due for validation; keep-alive for Salla and Xero connections; WooCommerce: push unsynced products (02:00), pull product changes (03:00), customers (03:30); Google Sheets auto-export (02:30).

The queue driver is database, so there is nothing to install and no Redis. Because the scheduler drains the queue each minute, you do not need a separate queue:work process; if you run one anyway (Supervisor, a systemd unit), the scheduler's pass simply finds nothing to do. Without any cron, queued jobs drain inline while somebody uses the admin, which is enough for a small shop but delays webhooks and syncs until the next visit.

Updating

Settings → Update. Three tabs: Automatic Update, Manual Update and the Update Guide. The installed version is shown against the latest one published on the update server.

/next/settings/update
Update settings
Automatic update: upload the ZIP, pass the pre-update checks, install. The history and the update backups sit below.

Automatic update

  1. Back up

    The updater takes its own backup of the files and the database, but take a database backup of your own first anyway.

  2. Upload the ZIP

    Download the new version from CodeCanyon and drop the full application ZIP onto the page. Nothing is touched yet: the pre-update checks validate the archive, its structure, the version, PHP requirements, permissions, disk space and the database connection.

  3. Install

    Press Install. Stocky backs up the files and the database to storage/app/updater/backups, puts the site into maintenance mode, replaces the files, runs the migrations and permission sync, and comes back. Keep the tab open; a bypass link is shown in case you lose the page.

  4. Reload

    Hard-refresh the browser (Ctrl + Shift + R) so it loads the new admin files. Check the version number in the footer.

If anything fails the previous version is restored automatically. If the rollback itself cannot finish, the page says Recovery required and offers Open Recovery Console — a standalone page at /system-update/recovery that works even in maintenance mode, where you can continue where it stopped, roll back, or discard the run. The pre-update backup stays intact until you resolve it. Update backups keeps the last few (three by default); the only remaining complete one can never be deleted.

Manual update

For hosts where the automatic updater cannot write, or if you prefer to see each step. The Manual Update tab describes it; in short:

  1. Back up the database and the public/images and storage/app folders.
  2. Upload the new files over the old ones — keep your .env, public/images/ and storage/.
  3. Open https://your-domain/update. The page runs the last step: clear the configuration cache, run the migrations (existing data is untouched), sync roles and permissions.
  4. Hard-refresh the browser.

Code changes are overwritten by an update. If you or a developer changed files, keep the changes in a patch and re-apply them, or ask us about extending through modules instead.

Troubleshooting

SymptomCause and fix
A blank or broken page after an updateThe browser is serving old files. Hard-refresh (Ctrl + Shift + R) or clear the site's cache. If the admin is installed as a PWA, close and reopen it.
500 error or a white pageRead storage/logs/laravel.log or Reports → Error Logs. Usually a permission on storage/ or bootstrap/cache/, or a missing PHP extension after a hosting change.
/setup is reachable on a live siteThe seal file storage/app/public/installed is missing. Recreate it (any content) and check the folder's permissions.
Images do not upload or showpublic/images/ is not writable, or upload_max_filesize / post_max_size in PHP is below the file size. Product images default to a maximum of 800 px unless resizing is off.
Emails are not sentSettings → Mail Settings → Send test. Most hosts require the sender address to be on your own domain and port 587 with TLS.
The camera scanner or the install prompt does not appearThe site is not on HTTPS. Browsers only allow both on a secure origin.
The POS says Offline while the internet worksThe server is not answering the POS heartbeat — a firewall, a proxy timeout or maintenance mode. Check that the admin loads in another tab. The offline switch itself is in System Settings.
Queued jobs pile up in System Health; webhooks and syncs are lateThe cron entry is missing or points at the wrong PHP. See Cron & queue.
Receipts print with a dialog every timeThat is browser printing. Use QZ Tray or direct network printing for silent printing; see POS settings.
The customer display does not updateThe token expired (24 hours) — generate a new one — or the POS tab is not open on the cashier's side.
Stock differs between the store and the POSThe store sells from the warehouses chosen in Store Settings; the POS from the warehouse selected on the register. Compare the same warehouse.
WooCommerce shows DisconnectedRe-test the connection. The application password may have been revoked, or the WordPress site blocks the REST API for non-logged-in requests.
The wrong day on evening salesThe timezone in System Settings does not match the shop. Change it; existing documents keep their stored time.

Deliberately not here

Every link in the sidebar opens a real screen. A few things a system like this could plausibly do are absent on purpose, and this guide would rather name them than let you find out:

Changelog

5.8

5.7

The full history back to 1.0 is in README.md in the package.

Credits & support

Stocky is built on Laravel with Laravel Passport for API tokens; the admin, POS, customer display and portal are Vue 3 applications with Vue Router, Pinia and Ant Design Vue, charts by ApexCharts and ECharts, icons by Lucide, built with Vite; the storefront is Blade with Alpine.js and Tailwind CSS; silent printing through QZ Tray. Thanks to everyone who maintains them.

Getting help

When you write in, three things turn a slow answer into a fast one: the version and the PDF from Settings → System Health, the exact steps that produced the problem, and the last few lines of storage/logs/laravel.log (or the Error Logs report). A screenshot of the screen you were on helps more than a description of it. Support runs for six months from purchase; updates are free for life.

Stocky documentation · version 5.8
Thank you for buying it.