POSONLY User guide

User guide

Find the steps for checkout, inventory, purchasing, reports, and account settings.

Getting started

Your workspace brings everyday tasks together. The left menu stays with you, so the next task is always one click away.

Before your first shift
  1. Sign in with your own account.

    Use the email and password your administrator gives you. Personal accounts make activity easier to trace.

  2. Choose the correct location.

    Check the location selector before selling, adjusting stock, or receiving a delivery. Stock belongs to the location shown.

  3. Check the essentials.

    Confirm the product price, available stock, and business tax setting. Test your scanner and printer before customers arrive.

Exploring the demo? The sample business contains practice products, customers, and sales. Use the demo to learn the flow. It is separate from a production setup.

Set up a new business

Register to create your own business and its Main store. As the administrator, check Settings for the tax rate and receipt text, add products and opening stock in Inventory, then add staff in Team.

Add a supplier from Purchasing → Suppliers. If you select Create order before adding one, POSONLY first asks for your supplier. Add more stores or warehouses from Settings → Add location.

Register or sign in with Google or Apple
  1. Select Continue with Google or Continue with Apple.

    Use registration for a new workspace, or the login page to return. Complete sign-in and consent on the provider’s own page. Never enter your Google or Apple password into POSONLY.

  2. For a new workspace, finish your business details.

    Confirm your name, enter your business name, and select Create my workspace. Your administrator account and Main store are created using PHP (Philippine peso). Review tax and receipt details in Settings.

  3. Use the same provider account next time.

    Select the same Continue button on the login page. If consent is canceled or sign-in expires, start again from login or registration.

Already have a company account? Sign in using your existing credentials first. Open Sign-in accounts from the sidebar. Administrators can also select Manage sign-in accounts in Settings. Choose Connect Google or Connect Apple and complete provider sign-in. Your company and role stay the same. Matching email addresses are not automatically merged, and these options do not grant developer access.

Apple’s Hide My Email can supply a private relay address. Keep using that same Apple account. Recover a forgotten provider password through Google or Apple.

A Setup required button stays unavailable until the operator configures real credentials. Email/password registration and login remain available. Simulated provider identities cannot sign in.

Open connected sign-in accounts
Operator: configure Google or Apple access

Add credentials privately to the local .env using the empty variables in .env.example. Keep secrets and Apple key contents out of chat, public folders, browser forms, and committed files. After saving, run php artisan config:clear --no-interaction.

Google: configure a Web application OAuth client, its consent screen, and test users as required. Set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REDIRECT_URI. Register the exact callback with Google; for this local app it is http://127.0.0.1:8010/auth/google/callback. Host or port changes must be reflected in both places.

Apple: configure a Services ID associated with an enabled primary App ID, then set APPLE_CLIENT_ID, APPLE_TEAM_ID, APPLE_KEY_ID, APPLE_PRIVATE_KEY_PATH, and APPLE_REDIRECT_URI. The key path points to a private .p8 file outside public, storage/app/public, and any configured public storage directory. Register the callback domain and exact return URL with Apple.

Apple requires a public HTTPS callback and cannot return directly to this app’s 127.0.0.1 address. Its callback must share the HTTPS origin configured in APP_URL. Open the application through that same registered HTTPS address before starting Apple sign-in so its session can be verified. Leave Apple unavailable until the secure test address is configured. Configuring credentials does not deploy the application.

Follow the Google OpenID Connect documentation and Apple Sign in with Apple documentation. Once configured, test consent, new workspace creation, later login, and connecting an existing account.

If an action is unavailable, your role may not have permission. Ask your administrator to check your access. Cashiers see their own sales and cannot view product costs.

Point of sale

Large product cards, one clear cart, and a payment screen that keeps the total in sight.

Complete a sale
  1. Open Point of sale and check the location.

    Choose the store where the sale is happening.

  2. Add the products.

    Tap a product card, use search, choose a category, or scan its barcode into the search field. Use + or − in the cart to change quantities.

  3. Review the cart.

    Choose Retail prices or Wholesale prices and check quantities and current prices. Every item needs a saved wholesale price for wholesale checkout. Tag a customer if needed and enter a discount percentage when your store allows it. The configured tax is added after the discount.

  4. Select Charge and choose the payment.

    Record cash, card, e-wallet, or a split payment. Enter the amount for each tender and check the change shown.

  5. Select Complete sale once.

    Wait for the success message. The sale is saved and stock is deducted together. In the receipt dialog, optionally select Preview print layout to inspect the same document used by Print receipt without starting the system dialog. Print receipt opens the normal browser print dialog.

Receipt content is at most 72 mm wide for 80 mm paper. Choose 80 mm paper in your printer driver and use 100% scale where appropriate. The preview is a layout proof; verify physical output with the actual printer.

Open Point of sale
Cash, card, e-wallet, and split payments

Cash: enter the cash received and confirm the displayed change. Split: enter each part of the payment so the combined amount covers the sale.

Card and e-wallet: process the payment using your separate provider or terminal, confirm it succeeded, then record the payment in POSONLY. Recording a tender does not charge a bank card or wallet.

Connection interrupted during an online checkout? Keep this browser tab open. Select Check sale status in the payment dialog, or Check sale in Point of sale, to retry the protected original checkout. This trusted browser retains the original checkout for your account, including after a reload or reopening the workspace. Do not recreate it or add it to the offline queue while its status is unknown. Reconnect to confirm the original sale.

For planned disconnected work, enable the separate Offline mode before losing your connection.

Save a cart and resume it later
  1. Select Save cart and give it a name.

    Keep a recognizable name for the customer or task.

  2. Open Held carts in this browser and account.

    Select Resume to replace the current cart, or Delete to remove a saved cart.

  3. Review it before charging.

    Check the location, customer, price tier, current prices, quantities, and stock. Resuming uses the current catalog.

Held carts stay on this browser/device for your account. They reserve no stock and do not sync to another device. A held cart is separate from the offline sales queue. Clearing browser storage removes held carts.

Open, count, and close your cash session
  1. Open Point of sale → Cash session.

    Check the location, enter the cash already in your drawer as Opening float, and select Open cash session.

  2. Record physical drawer movements.

    Use Cash in / out, choose a direction, enter the amount, and give a reason. Cash out cannot exceed the expected balance. Record an actual cash refund separately as Cash out.

  3. Close & count at shift end.

    Count the actual drawer cash, enter Counted cash and an optional count note, then select Close cash session. Review the saved variance.

Expected cash is opening float plus this account’s cash tenders after change, plus cash in, minus cash out. Card and wallet payments do not add drawer cash. A return does not automatically remove cash. Closed sessions keep their saved count and variance; they cannot receive new movements.

Sessions belong to your account and location. Checkout works without an open session. After an interrupted update, use Check update status in the same tab before starting another cash action.

Offline mode

Save a limited catalog on a trusted device and queue walk-in cash sales when the connection is unavailable. Laravel confirms each sale when you reconnect.

Prepare your device while connected
  1. Sign in to your company and open Offline mode.

    Review the notice and select Enable on this device only on a device you trust. Select Open saved POS once while connected so its files are ready.

  2. Refresh the saved catalog before a shift.

    Check your location, current prices, tax, available stock, and cash session before going offline. Refresh again after online changes.

  3. Check the snapshot time.

    The saved catalog is valid for 24 hours. Expiry stops new offline sales; clear any unsaved cart and reconnect to refresh it. Queued receipts are kept.

The snapshot includes products, barcodes, variants, prices, location stock and reservations, tax, receipt footer, and your own cash-session references. It excludes product costs, customer/supplier contacts, team details, receipt history, billing information, and provider credentials. Local browser storage is not an encrypted backup.

Queue a walk-in cash sale
  1. Open saved POS and choose the location.

    Use the prepared device's saved catalog. Cached stock can change on other devices while you are disconnected.

  2. Add the exact products and review prices.

    Scan a barcode or choose a product. Select Retail or Wholesale prices, review quantities, discount, and tax, then enter the cash received.

  3. Save the cash sale to the queue.

    Keep the queued record until the server confirms it. It is provisional and has not yet deducted central stock or updated the server's cash drawer.

Offline mode supports cash and walk-in customers only. Card, wallet, split tender, customer tagging, purchases, returns, stock edits, billing, and cash-session changes need an online connection.

Reconnect and confirm queued sales
  1. Sign in as the same company user.

    Open Offline mode and select Sync queued sales. An offline snapshot does not replace your sign-in.

  2. Review each result.

    The server checks access, available stock excluding reservations, the original quoted prices and tax, and the same cash shift. Successful sales receive a receipt and deduct stock together.

  3. Resolve any conflict before continuing.

    If prices, tax, stock, or the cash shift changed, the original queue record stays available for review. The app does not silently change the cash collected or attach it to another shift. Ask a manager to reconcile the actual sale.

A lost response is retried with the same protected request. Do not recreate an uncertain checkout using another key. Sales recorded during a valid snapshot period can sync after its expiry. Reports use server confirmation time; the receipt also identifies the separate offline recording and sync times.

Export the queue or clear this device

Download queue backup downloads a private recovery copy. It does not confirm or delete a sale. Keep the export private because it contains business sales information.

Sync queued sales before closing their original cash session. If stock, prices, tax, or the shift changed, keep the original records and download a backup for your administrator; some conflicts need manual reconciliation. Signing out removes the saved catalog and hides unconfirmed requests, but keeps them in this browser for the original company user to recover after signing back in. The normal Clear device data action is blocked while a cash sale or online checkout still needs confirmation. Deleting browser storage outside POSONLY can lose records that have not reached the server.

Offline stock is a snapshot. Disconnected counters cannot reserve the same central stock. A queued sale is confirmed only when the server accepts it. Keep the device and original request available until reconciliation finishes.

Inventory

Use one product record for each sellable item or variant. A blue medium shirt and a blue large shirt need separate SKUs.

Add a product
  1. Open Inventory → Add product.

    Enter a clear name, a unique SKU, and a barcode if you use a scanner.

  2. Set the product details.

    Add the category, retail price, optional wholesale price, cost, and optional variant description. Use Add variants below for grouped size/color combinations. Set the low-stock threshold to the available quantity at which you want an alert.

  3. Enter opening stock and save.

    Count the actual units at the selected location. Check the saved item and its stock before selling it.

Create size/color variants
  1. Open Inventory → Add variants.

    Enter the family name, category, default retail/wholesale prices, cost, and reorder level.

  2. Enter Sizes and Colors, separated with commas.

    Use Size, Color, or both. For example: S, M, L and Blue, Black. Choose an SKU prefix and the opening-stock location.

  3. Select Generate combinations and review each row.

    Use up to 100 new rows per batch. Edit each unique SKU, optional Barcode, Selling price, and actual Opening stock. Remove combinations you do not sell. Generating again replaces row edits.

  4. Select Create variants once.

    Every combination becomes a separate sellable SKU with its own stock. Check the saved rows before checkout.

Starting from an existing product? Its Create variants action prefills the builder. The original SKU and stock remain standalone. Opening quantities are entered separately; stock is not copied.

Interrupted confirmation? Use Check update status in the same tab to retry the protected original batch, including after a reload. Do not rebuild it while its result is unknown. A retry cannot create duplicate SKUs.

Manage sibling SKUs and edit their options

Select Manage variants from a family SKU to see its siblings. Add variants uses the same fixed option types and skips existing combinations. New SKUs inherit the original family defaults; use Edit on a saved SKU to change its cost, wholesale price, or reorder level.

Edit changes that SKU’s Size/Color values and catalog details. Its name is generated from the family name and options. Keep combinations unique. Option values allow up to 30 characters; family names allow 80. Illustration color is a visual swatch, separate from the text Color option. Standalone free-text variant descriptions remain supported.

Choose the exact SKU for checkout, receiving, transfer, replenishment, and Channels. Siblings never share stock or reservations. Original labels and amounts remain on saved receipts and pending quotes after edits; a return restores only the original selected SKU.

Read on-hand, reserved, and available stock

On hand is the physical count. Reserved is held for pending local online orders. Available equals on hand minus reserved.

10 units on hand minus 8 reserved leaves 2 available to sell or transfer. Low-stock alerts and replenishment targets use available units. Inventory totals and valuation use physical stock.

Correct a count or edit a product

Use the product’s table menu → Edit to change catalog details. Use Adjust for a physical count correction, damaged stock, or another stock change.

Enter the change in units, not the final total. If the screen shows 10 units but you count 8, enter −2. Add a reason such as “monthly count” or “damaged packaging”. An adjustment is recorded in stock movement history. Physical stock cannot be reduced below reserved units. Ask a manager to review pending online orders before reconciling a shortage.

CURRENT10 unitsADJUSTMENT−2 unitsNEW STOCK8 units
Move stock between locations
  1. Select the source location.

    Open the product menu and choose Transfer.

  2. Choose the destination and quantity.

    Use a positive number no greater than the available units. Reserved stock cannot be moved. Check that it matches the units physically being moved.

  3. Confirm the transfer.

    Stock leaves the source and enters the destination together. Check both locations after the move.

Transfers are recorded immediately. There is no in-transit or delivery-confirmation stage in this version.

Stock is checked when a sale completes. A product visible in a cart is not a reservation. If another staff member sells the last unit first, update the cart when POSONLY asks you to.

A visible, idle workspace refreshes every 20 seconds. Use Refresh when you need the latest records sooner. Instant stock push between browsers is not connected.

Purchasing

Review the next order, count each delivery, and keep a clear record of what is still on the way.

Create, approve, and receive an order
  1. Open Purchasing → Create order.

    Choose the supplier and receiving location. Add products, quantities, and unit costs.

  2. Choose Draft or Approved.

    Save as Draft for review, then select Approve order when ready. Approved orders are ready to receive. Neither step adds stock.

  3. Place the order with your supplier.

    Use your normal process. POSONLY does not send supplier messages.

  4. Count this delivery and select Receive delivery.

    Enter only the units arriving now; leave undelivered products at zero. Receive all remaining fills the outstanding quantities—use it only when those units arrived.

  5. Review and select Record delivery.

    Add a delivery note. Each delivery adds its counted units once. The order stays Partially received until all units arrive.

Open Purchasing
Review delivery history or cancel outstanding units

Open View details to review ordered, received, and remaining units. Delivery history shows each receipt, staff member, time, quantities, and note.

Choose Cancel outstanding if the rest will not arrive. Received stock and history stay intact. A fully received order cannot be cancelled, and cancelled orders cannot receive new deliveries.

Set a replenishment rule and generate drafts
  1. Select the location, then Replenishment rules → Add rule.

    Choose the product and supplier. Set a target of available units above the product’s low-stock threshold and enable the rule.

  2. Select Generate drafts.

    This checks enabled rules across all locations. Background stock checks and the five-minute schedule can also generate drafts.

  3. Review and approve each draft.

    Generation counts available stock plus remaining units on draft, approved, and partially received orders from all suppliers. It drafts only the units needed to reach the target when available stock is at or below its threshold. Pending online reservations can trigger drafts before import.

Use Edit rule to change the target, or Pause / Enable to control generation. Cancelling an order can allow an enabled rule to draft again; pause the rule too if replenishment should stop. Turning alerts off does not pause rules. Expired subscription write access blocks new drafts while alerts continue.

Order or delivery response interrupted? Keep the same browser tab and select Check update status. Reloading that tab can recover the original order or delivery request. The same request is confirmed once; do not create another order or delivery while its result is unknown. Drafts and approvals send nothing to suppliers.

Returns

Managers and administrators can return selected items or all remaining items. Start with the original receipt.

Return selected items or the remaining sale
  1. Open Reports and find the sale.

    Check the receipt number, items, and total.

  2. Select Return and set quantities.

    Use zero for items you are keeping. Return all remaining selects every unit that has not already been returned. Check that each selected item can go back into saleable stock.

  3. Enter a reason and review the refund preview.

    The refund uses the original price, discount, tax, and rounding allocations. Current catalog prices do not change it.

  4. Select Record return once.

    Only selected units return to the original location. Partial returns retain their history; returning all remaining units marks the sale returned. Previous returns cannot be repeated.

  5. Handle the actual refund.

    Use cash or your external payment provider. POSONLY records the return; it does not transfer money. Record an actual cash refund separately as Cash out in your cash session.

Confirmation interrupted? Use Check update status in the same tab to retry the protected original request. A retry cannot restock twice. Damaged-item disposition is not integrated; ask a manager before restoring items that cannot be sold.

Customers

Add and tag a customer
  1. Open Customers and add the customer.

    Enter their name and any contact details they agree to share. Check for an existing record first.

  2. Tag them at checkout.

    Choose the customer in Point of sale before completing the sale. A customer is optional; walk-in sales work too.

  3. Review the customer list when needed.

    Use the available customer information to recognize returning customers and connect their sales.

Customer records do not send marketing messages, create loyalty points, or subscribe anyone to email.

Reports

Review sales and stock activity
  1. Start with Overview.

    Check the sales, stock, and low-stock summaries. Use the location selector where shown.

  2. Open Reports for the detail.

    Choose your filters, then read Busy hours and Your best sellers, by SKU. Open Receipt under Matching receipts & returns to inspect a transaction or print a copy.

  3. Review stock movement history in Inventory.

    Compare sale, return, adjustment, receipt, and transfer movements when investigating a stock difference.

  4. Reconcile your shift.

    Compare recorded tenders with counted cash and your external card or wallet reports. Ask your manager to investigate differences before changing stock.

Find busy hours and best-selling products
  1. Choose a date range in Reports.

    Use Today, Last 7 days, Last 30 days, This month, All time, or Custom range. Custom dates need both From and Through; both dates are included in Manila time.

  2. Choose the location and source.

    Report location can include All locations. Sales source offers All sources, Point of sale, or Simulated channels. Cashiers see their own sales; managers and administrators see the business's sales.

  3. Choose your ranking and apply it.

    Rank best sellers by Net units sold or Net recorded sales, then select Apply filters. Refresh report reloads the applied selection. Reset filters restores the initial selection.

  4. Read the pattern, then check the receipts.

    Busy hours counts receipts in each of the 24 hours across your selected dates. Every hour tied for the highest traffic is a peak; returned receipts still count. Best sellers show up to ten SKUs with positive net units. Each size/color variant ranks separately, using the latest matching receipt's label and SKU.

Returns follow the original sale. Net recorded sales includes the original discount and tax, less all recorded returns. A later return reduces the original sale's period and hour. Net units means sold units less returned units. Changing current catalog prices never changes old sales.

Imported channel sales are labeled simulated and process no real payment. Pending or canceled channel orders are not sales. Administrators can select Export sales CSV for the full history matching the applied date, location, and source.

Find an older receipt
  1. Open Reports → Sales analytics.

    Choose the date range, location, and source, then Apply filters. Use All time if you do not know the sale date.

  2. Find Matching receipts & returns.

    Enter the full receipt number and select Search, or browse with Previous and Next. Clear search returns to all receipts within the applied filters.

  3. Open Receipt to inspect or print it.

    Managers and administrators can select Return. Cashiers see only their own sales. The receipt is fetched again so it includes the latest recorded returns.

Read sales, refunds, tax, and margin estimates
  1. Open Reports → Financial reports.

    Administrators and managers can use this tab. Cashiers keep their own Sales analytics.

  2. Choose your dates, location, source, and report basis.

    Dates include both From and Through in Manila time. Select Apply filters. Each tab keeps its own filters; Refresh report reloads the last applied financial selection.

  3. Read the totals and open the detail you need.

    Review Net sales excluding tax, Net recorded tax, Recorded refunds, and Total after refunds. Expand Daily movement, By location, By sales source, Tax breakdown, or Original payment records. Administrators can use Export financial CSV for every section with the last successfully applied filters and basis.

Sales & refund dates is the default: sales follow their sale dates and returns follow their recorded dates. A return-only period can be negative. Original sale dates includes all returns for sales made in the selected period, including later returns. For a sale on October 10 returned on October 11, the first basis reports the return on October 11; the second reduces October 10's sales.

Estimated gross margin needs original costs. New POS sales capture cost at checkout. New simulated channel orders capture it when quoted and retain it on import. Returns use the original sale cost. Old sales and existing pending orders are not backfilled. Known cost totals cover only units with snapshots; margin stays Unavailable if any included sold or returned units lack costs. Zero cost is valid. Current catalog costs are never substituted, and operating expenses are excluded.

Original payment records are before refunds. Cash change is deducted from cash only. Refund payment destinations remain unallocated; reconcile actual refunds, cash movement, and provider settlement separately. Simulated channel records move no real money.

Check Historical record coverage. Older returns use their recorded return timestamp when available. Undated returns are disclosed and excluded from Sales & refund dates, including All time; Original sale dates includes them with their sale. Coverage notes for unknown dates follow the selected location and source. These figures do not establish net profit, supplier payments, or statutory tax liability.

Use the right figures. Analytics and the paged receipt search include the full matching history. Overview charts and customer cards use the latest 500 permitted receipts. These figures describe operations; they do not represent profit, payment settlement, or refunds paid during the selected dates.

Full accounting, settlement reconciliation, and statutory tax filing are not integrated. Reconcile actual cash, card, and wallet movement separately.

Team and settings

Give staff their own accounts
  1. Open Team as an administrator.

    Add the staff member’s name, email, temporary password, and role.

  2. Choose only the access they need.

    Cashiers handle checkout and customer tasks. Managers handle stock and purchasing as well as sales. Administrators also manage the team, business settings, and sales CSV exports.

  3. Share credentials privately.

    The Team form creates the account directly. It does not send an invitation email. Give the password to that staff member using your organization’s secure process.

Change a role, pause access, or reactivate staff
  1. Open Team → Edit access.

    Change the staff member’s name or permission level, review it, and select Save team member. Role changes apply to their next workspace request.

  2. Use Pause access when they should stop working.

    Review the confirmation and select Pause access. Their sales and activity records stay available.

  3. Use Reactivate when they should return.

    Confirm Reactivate access. This restores access with their existing role and password; it does not reset their password.

Keep at least one active administrator. Another administrator must change your own role or pause your access. You can edit your own name.

Review staff activity
  1. Open Activity as an administrator.

    The log covers all locations in your business.

  2. Choose filters and select Apply filters.

    Filter by team member, action, and From/To dates. Check the time, staff member, action, and record reference.

  3. Browse or refresh the record.

    Use Previous / Next for other pages, Refresh activity for new entries, or Reset to clear filters.

Only successful workspace actions since logging was enabled are listed. Older history, failed actions, sign-ins, and page views are not backfilled. Repeated checkout, return, or delivery confirmations can appear more than once; this does not mean stock changed twice. The log excludes passwords, payment details, request contents, and recovery tokens.

Open Activity
Check system health
  1. Open System health as an administrator.

    Select Refresh health to read actual database, cache, private storage, and log-directory checks. Worker and scheduler readings use shared infrastructure heartbeats. Notices and diagnostic records belong to your business.

  2. Run a background check when needed.

    Select Run background check to confirm a harmless diagnostic job runs, then refresh for the result. An existing pending check is reused; new attempts are limited to one per 60 seconds. Use Check diagnostic status if the request result is uncertain. A long wait stays pending. Ask the operator to check the worker before assuming failure or repeating a business action.

  3. Review and acknowledge a local incident.

    Investigate the cause, then select Acknowledge incident. This marks the notice as reviewed; it does not repair an error, delete a failed job, or retry one.

Missing or stale heartbeats need investigation. A fresh heartbeat confirms recent activity, not that every job succeeded. A synchronous queue has no separate worker pulse to verify. Recent lists show up to 50 notices and 50 checks. Notices and completed checks use 30-day retention; outstanding pending checks remain visible until completed.

System health remains available after subscription access expires. It shows sanitized notices without raw logs, exception messages, paths, or request secrets, and sends no email, SMS, or push alerts.

Open System health
Check the business settings

Open Settings as an administrator. Set the business’s tax rate, receipt footer, and stock-alert preference, then save. Review the settings before processing live sales.

Customize company receipts. Enter your company’s receipt address and contact number. Upload a local PNG, JPEG, or WebP logo up to 1 MB, with each dimension no larger than 2,000 pixels, or remove the current logo. Select Save settings, then preview or print a receipt.

These details apply only to your company; only administrators can edit them. The logo is kept in private local storage. Blank optional fields are omitted, and the company name remains its registered name. All receipts use the latest saved profile, including previews and reprints of earlier sales; branding is not frozen at checkout.

Use Billing & plans for plan, invoice, and access-period management. Check the displayed payment mode before opening hosted checkout: live mode collects real money, while test and local simulations do not. An operator configures payment credentials privately outside this screen. A single configured tax rate is used for checkout. Product-specific tax rules and regional tax engines are not included.

Keep access personal. Avoid shared cashier logins and sign out at the end of a shift. Contact your administrator if you cannot sign in or need a different role.

Billing and plans

Administrators can review plans, invoices, and payment history. PayMongo live mode collects real payments through hosted checkout.

Choose a plan and review payment
  1. Open Billing & plans.

    Review the trial, access dates, locations, and active staff usage.

  2. Choose Monthly or Annual and review the plan.

    Select Choose this plan. During an active paid period, Schedule this plan applies the change at the next renewal. A plan must fit your current locations and active staff.

  3. Create an invoice when available.

    Select Create invoice, then View invoice. Review the amount and payment-mode label. Enabled PayMongo checkout opens a hosted payment page; local simulation offers Simulate payment only in a testing environment.

Renewals create individual invoices and do not collect payments automatically. The invoice list shows the latest 100 records; Export invoice CSV includes the full history with provider/mode and safe payment references. Live confirmations, PayMongo test records, and local simulations retain separate source labels. Test and simulated records do not establish a live payment.

Use PayMongo hosted checkout

Review the mode displayed on the invoice before paying. Live mode collects real money. Test mode is for local testing and collects no real money. Payment methods shown on the hosted page depend on the operator’s active PayMongo configuration.

Configured methods: QR Ph. The provider account must also have these methods activated.

  1. Prepare and open the hosted page.

    From View invoice, select Pay with PayMongo (live), then Open PayMongo checkout. Review the invoice amount before continuing.

  2. Complete payment on PayMongo’s page.

    Follow the hosted page’s instructions for an available payment method. Enter payment details only on PayMongo’s page. Do not use test card details in live mode.

  3. Recheck payment after returning.

    Use Recheck payment. Only server verification can confirm payment and start the invoice period. A success URL or closing the checkout tab does not prove payment or cancel the invoice. Rechecking a confirmed payment keeps the existing paid-period dates.

  4. Recover an uncertain creation.

    If the session is known, use Recheck payment. If creation is uncertain and no session ID was saved, do not create it again. Select Recover checkout and enter the Checkout session ID copied from the matching live or test PayMongo dashboard. The server checks the saved invoice reference, amount, PHP currency, and payment mode before accepting its link or payment.

Repeating uncertain creation can produce another session, even with the same reference. If you cannot locate the session, leave the attempt unresolved and reconcile it with the provider. A confirmed failed or expired attempt may offer Start checkout again, or Start test checkout again in test mode, after server validation. Needs review requires operator reconciliation before further payment.

Records retain their original labels: PayMongo · live, PayMongo · test, or Simulated · paid. An attempt from another mode stays visible, but cannot be opened, recovered, or rechecked under the current mode. Payment confirmation may arrive through a configured webhook; otherwise use Recheck payment.

Checkout history shows the latest 100 attempts independently of the invoice list. View attempt opens the record, including a recent attempt for an older invoice. Resolve outstanding checkouts before changing plans or canceling renewal. Payments cover one invoice at a time. Card vaulting, automatic renewal debits, and provider refunds are not offered by this screen.

Cancel renewal or understand paused access

Cancel renewal keeps access until the stated trial or paid-period end. Resume renewal clears cancellation and does not collect payment. Your records are preserved.

A missed renewal or expired trial has seven days of grace. Afterwards, sales and core catalog/stock changes pause, including new replenishment drafts. Records, permitted returns, exports, order cancellation, and billing stay available. Voluntary cancellation has no extra grace period.

Plan limits count all locations and active staff, including administrators. Paused staff do not count; reactivation needs room in the plan. Changing a trial plan does not restart the original trial clock.

Open Billing & plans

Sales channels

Managers and administrators can practice catalog sync and online orders locally. No external storefront, webhook, or payment provider is connected.

Add a channel and simulate an order
  1. Open Channels at the correct location.

    Select Add channel, enter a name, choose Web store, Marketplace, or Social shop, and confirm the shared stock location. Type and location stay fixed afterwards.

  2. Review Catalog.

    Central products map by SKU. Healthy local copies publish available units and refresh after catalog edits, stock changes, and reservations.

  3. Select Simulate paid order.

    Enter a unique External order reference and choose products and quantities. The server saves a quote with current retail prices and tax. Pending units are reserved immediately; physical stock is unchanged.

Import or cancel a pending order

In Orders → View order, review the original quote. Select Import order to create its sale once. Reserved units are released as the same units leave physical stock; the original prices and tax stay fixed.

For example, importing 8 reserved units from 10 on hand leaves 2 on hand, zero reserved, and 2 available. It does not deduct twice.

Cancel pending order releases availability without reducing physical stock. Imported orders use the sale return workflow in Reports. Sale receipts and exports identify the simulated channel source; these practice payments must not be collected or refunded with real money.

Pause a channel or check its sync history

Pause channel publishes zero and stops new orders. Existing pending orders stay reserved; importing or cancelling them is still possible while paused when the action’s subscription access allows it. Resume channel refreshes availability and enables new orders.

Select Sync catalog to record a manual snapshot in Sync history. Automatic stock/catalog updates do not flood the history. Published counts may be stale, but every order still checks central availability.

For failure practice, open Manage channel, enable Practice a sync failure, save, and sync. The previous published copy stays visible with a failed/stale status. Turn that setting off, save, and choose Retry sync for a new attempt. Healthy channels continue updating; paused channels stay at zero.

Action interrupted? Keep the same browser tab and select Check update status. Reloading that tab recovers the original request. Do not change it or start the next stage while the result is unknown. A confirmed sync failure needs a new attempt after fixing the setting.

The order view includes all pending and the latest 200 handled orders; Sync history shows the latest 200 attempts. Pending reservations protect stock from POS, other channels, transfers, and negative adjustments. After subscription writes pause, records, channel pausing, and pending cancellations remain available; new orders and imports pause.

Open Channels

Counter setup

Screen & connection

Use a computer or tablet with a current browser and a reliable connection. Check the touch layout at your normal screen size.

Barcode scanner

Use a scanner in keyboard mode. Pair or connect it, focus the POS search field, and scan a barcode already saved on a product. Check the result before adding it.

Receipt printer

Install the manufacturer’s driver and print a test page. Choose the receipt printer in the browser’s print dialog and check the paper size, margins, and scale.

Cash drawer & card terminal

Open the drawer manually or through your printer’s own configuration. Process card and contactless payments on a separate approved terminal.

Direct printer commands, automatic cash-drawer opening, and integrated chip, swipe, or contactless card processing are not included. Hardware compatibility should be tested with your actual devices.

Troubleshooting

A sale did not finish or the connection dropped

Keep the same browser tab open and reconnect. Select Check sale status in the payment dialog, or Check sale in Point of sale. This retries the original cart and payment: it retrieves the saved receipt, or completes the original checkout once if it was not saved. After reloading or reopening the workspace in this trusted browser, sign in as the original user to recover that protected checkout.

Do not change or recreate the checkout while its result is unknown, and do not charge the customer's card or wallet again. If POSONLY confirms that no sale was saved and displays a validation error, close the dialog, fix the reported issue, and review the cart before trying again. For separate disconnected cash sales, prepare Offline mode first. Never add an uncertain online checkout to that queue.

A barcode does not find the product

Check that the scanner is in keyboard mode and the POS search field has focus. Compare the scanned value with the barcode in Inventory, including leading zeroes. You can search by product name or SKU while your manager corrects the barcode.

The stock figure looks wrong

Check the selected location first. Count the physical items and review recent sales, receipts, returns, adjustments, and transfers. Ask a manager to enter a reasoned adjustment only after the difference is understood.

A receipt will not print

Check the printer’s power, connection, paper, and operating-system print queue. Print a test page, then choose the correct printer in the browser dialog. Reopen the saved sale in Reports to print another copy.

I cannot see a button or complete an action

Read the validation message and check required fields. Your role may not allow the action. If sales or stock changes are paused, ask your administrator to review Billing & plans and its access end date. If the message says operations were paused by the platform administrator, ask the platform owner to review Companies. Existing records stay available.

I forgot my password or cannot sign in
  1. Select Forgot password? on the login page.

    Enter your work email and select Send reset link.

  2. Open the reset email.

    Follow the link within 60 minutes. Enter and confirm a new password of at least 10 characters, then select Save new password.

  3. Sign in with your new password.

    Your previous sessions on other devices are invalidated. Use your own account to continue.

The request message does not confirm whether an account exists or an email was delivered. Check spam and ask your administrator if the email does not arrive. Paused accounts must be reactivated by an administrator. Sample-business accounts cannot use password recovery.

Request a reset link
What is connected in this version?

Sales, product records, retail/wholesale prices, location stock/reservations, simulated channel orders, partial returns, delivery history, replenishment drafts, cash sessions, billing records, customer records, team roles, and business settings use the Laravel database. Offline mode can cache a limited catalog and queue cash sales for later server confirmation. A versioned secure API is prepared for a future mobile client.

External e-commerce sync/webhooks, offline stock changes/purchases/returns, integrated POS card or wallet charging/refunds, automatic subscription debits, supplier messaging, email invitations, and complete accounting integration are not connected. Held and offline POS carts reserve no central stock. Enabled PayMongo subscription checkout and payment verification contact its API in the configured mode. Live mode collects real payments; test confirmations and local simulations do not. Simulated channel payments contact no provider.

Developer portal

The developer portal uses its own account and login. Company registration and staff Administrator roles do not grant this access.

Set up a developer account privately

The application's operator runs this command locally from the project directory, replacing the example email and name:

php artisan platform:invite owner@example.com --name="Platform owner" --no-interaction

  1. Open the generated private file locally.

    Use storage/app/private/developer-setup.html and follow its setup link within 24 hours.

  2. Choose and confirm a password.

    Use at least 12 characters. Then sign in at /developer/login; setup does not sign you in automatically.

  3. Delete the private setup file.

    The link works once. Keep the file and link out of chat, public folders, and shared repositories. No invitation email is sent.

Reinviting a pending account replaces its previous link. An activated account cannot be overwritten this way. Developer and company sessions can coexist; signing out of one preserves the other.

Review company access and billing records
  1. Open Companies and select View company.

    Review Company overview, Invoices, or Payment attempts for the business.

  2. Choose the needed action.

    Pause operations / Resume operations, Change plan, Cancel renewal / Resume renewal, or Create invoice. Review the affected company and enter a reason of 3–300 characters before confirming.

  3. Check the result and Platform activity.

    Successful changes record the developer, company, reason, and before/after state.

Pausing stops new sales and core stock changes while preserving records, reports, permitted returns, and billing/reconciliation access. It does not reset a trial or change paid-period dates. Resuming removes the platform pause; subscription expiry and plan limits still apply.

Plans must fit all locations and active staff. Paid-period changes start at the next renewal. Resolve outstanding PayMongo checkouts in the company workspace before a conflicting billing change.

Subscriptions & invoices separates live PayMongo confirmations, test records, and local simulations. Create invoice adds an open record without collecting payment or activating a paid period. Renewal actions update records without debiting a card. The portal cannot start/recheck provider payments or manually mark an invoice paid; its totals are invoice confirmations, not settlement figures or MRR. Reading lists and company details does not change billing records.

Save, preview, and publish website text

Open Website content and edit the available title, description, hero text, button label, footer tagline, and support email. Select Save draft with a reason, then Preview saved draft. Select Publish to website with a reason to show the saved draft on this running website; it does not deploy the application.

Save typed changes before publishing. If another session changed the draft, your typed text stays available. Use Review saved version and confirm any discard/reload before replacing it. Plan pricing and page layout stay controlled by the application.

Developer portal

Mobile API preparation

The Laravel application remains the central database and authority. A native mobile interface can connect through the versioned /api/v1 API.

Connect a future mobile client

The initial device login uses an existing company account's email, password, and device name at POST /api/v1/auth/token. It returns a finite device token and its expiry. The native client stores the token in its secure credential store and sends it in an Authorization bearer header over HTTPS. Do not send credentials or tokens in URLs or share them in screenshots.

The API provides company-scoped catalog/variants, stock, checkout/receipts, contacts, purchasing, cash sessions, reports, and the offline snapshot/cash sync protocol. The current staff role and token abilities apply to every request. Developer administration and subscription payment collection are not mobile API endpoints.

The native app itself and native Google/Apple login are not included. Web Google sign-in is a separate flow. The repository README contains the endpoint and payload reference for the app developer.

Manage device access and interrupted requests

A client can list its account's devices at GET /api/v1/devices, revoke an owned token at DELETE /api/v1/devices/{token}, or sign out its current token at DELETE /api/v1/auth/token. Tokens expire after the configured lifetime and require a new sign-in; there is no automatic refresh endpoint.

Stock, checkout, receiving, cash, return, and offline sync requests use a stable idempotency key. The client keeps the original key and payload until confirmation so retrying an interrupted request cannot apply the same operation twice. Conflicts need review rather than a replacement key. Synchronize the native app’s entire cash outbox before closing its original cash session; a closed or changed shift cannot accept a new offline confirmation.