Home / Help Center / pos-app / Online Channels / Online Portal
🏪 Online Channels

Online Portal

Online Portal is your shop's own ordering website — a shareable link where customers browse and place advance orders without installing an app — split into an Orders tab for managing incoming requests and a Settings tab for branding, order rules and domain setup.

📍 Menu path: Online Channels → Online Portal
👤 Who uses it: All roles with Online Channels access can view/manage the Orders tab; branding, domain and order-rule Settings are typically configured by the Owner/Admin

Overview

A Customer Portal Link (/#/portal/:tenantId) is generated automatically per store; it can be opened or copied straight from the Settings tab and shared with customers on WhatsApp, social media or a shop sign.

If a public SEO storefront has been provisioned for your store, its own separate URL is shown in a second box — this is the address search engines and browsers see, distinct from the in-app portal link above it.

If that storefront address looks like it was generated from your phone number (because no business name was set at signup), an amber warning appears with a one-click "Update address from Business Name" button once you have set a real name under Settings → Shop Info.

A Custom Domain card lets you bring your own domain (e.g. www.myshop.com); after entering it, the domain shows "Pending setup" until you point its DNS at BazaarPOS and contact support to finish HTTPS activation, after which it shows "Live".

The Storefront Theme block controls the accent colour, an optional logo URL, whether the welcome message and category grid show on the storefront home page, and the display order of those home-page sections (reorder with up/down arrows).

Order Rules set a minimum lead time (in days) customers must order ahead of, and a daily cut-off time after which an order counts as next-day; a master Portal Active toggle takes the whole portal offline (customers see a "not available" message) without deleting any settings.

The Orders tab lists every advance order with a status pill (Pending → Confirmed → Preparing → Ready → Completed, or Cancelled), and expands to show line items, tax breakdown, payment method/status and any linked POS Sale number.

Before You Start

Step-by-Step Guide

1 Share your ordering link with customers

  1. Open the Settings tab and find the indigo "Customer Portal Link" box.
  2. Click Copy to copy the link, or Open ↗ to preview it yourself in a new tab.
  3. Share the link anywhere customers already are — WhatsApp broadcast, Instagram bio, a printed QR code at the counter — so they can place advance orders without an app.

2 Fix a phone-number-based storefront address

  1. Set your real shop name under Settings → Shop Info if you have not already.
  2. Return to Online Portal → Settings; the emerald "Your Online Store" box shows the amber warning if the address still looks like digits only.
  3. Click Update address from Business Name (or the plain "Regenerate from Business Name" link once it no longer looks like a phone number) to refresh the public URL.

3 Connect a custom domain

  1. In the Custom Domain card, type your domain (e.g. www.myshop.com) and click Connect Domain.
  2. The domain shows an amber "Pending setup" badge — point that domain's DNS records at BazaarPOS and contact support to finish HTTPS activation.
  3. Once activated it switches to a green "Live" badge; click Remove domain at any time to detach it (confirmation required).

4 Customise the storefront theme

  1. Pick an Accent Color with the colour swatch or by typing a hex code, and optionally paste a Logo URL.
  2. Toggle "Show welcome message on home page" and "Show category grid on home page" on or off.
  3. Reorder the Welcome Banner and Category Grid sections with the ↑/↓ arrows next to each row.
  4. Click Save Settings at the bottom of the page — theme changes are saved together with the rest of the Settings form, not separately.

5 Set order rules and take the portal on/off

  1. Set Portal Title and Welcome Message under Branding to whatever you want customers to see.
  2. Set Minimum Lead Time (days) and Daily Cut-off Time under Order Rules so orders placed too late automatically count as next-day.
  3. Use the Portal Active toggle to take the whole portal offline temporarily (customers then see a "Portal not available" message) without losing any of the settings above.
  4. Click Save Settings to apply everything on this tab at once.

6 Process an incoming portal order

  1. Switch to the Orders tab and filter by status if needed (All/Pending/Confirmed/Preparing/Ready/Completed/Cancelled).
  2. Click an order row to expand it and see the item list, subtotal, CGST/SGST/IGST, total, payment method/status/channel and any linked Sale number.
  3. Click the status button (its label changes contextually — Confirm, Start Preparing, Mark Ready, Complete) to advance the order one step at a time.
  4. Click the ✕ icon to cancel an active order, or to permanently delete an already Cancelled/Completed order from the list.

Every Field & Button, Explained

Field / ButtonWhat it does
Customer Portal LinkAuto-generated /#/portal/:tenantId link with Open and Copy buttons — the in-app ordering page customers use.
Your Online StoreThe separate public SEO storefront URL (only shown once provisioned) with its own Open/Copy buttons and a Regenerate/Update-from-Business-Name action.
Custom Domain cardInput to connect a bring-your-own domain; shows Live (green) once DNS + support activation is complete, or Pending setup (amber) until then; Remove domain link to detach it.
Accent ColorHex colour (with swatch picker) used across the public storefront home page.
Logo URLPublic image URL shown as the storefront logo.
Show welcome message / Show category gridToggles that hide or show the Welcome Banner and Category Grid sections on the storefront home page.
Home Page Section OrderUp/down arrows reordering the Welcome Banner and Category Grid sections on the public home page.
Portal ActiveMaster on/off switch — when off, customers visiting the portal see a "Portal not available" message instead of the store.
Portal Title / Welcome MessageBranding text shown at the top of the customer-facing portal.
Minimum Lead Time (days)How many days ahead a customer must place their order for.
Daily Cut-off TimeOrders placed after this time each day automatically count as the next day's order.
Save SettingsPersists everything on the Settings tab — branding, theme, order rules and the Active toggle — in one request.
Orders tab status filterAll / Pending / Confirmed / Preparing / Ready / Completed / Cancelled chips filtering the order list.
Order status action buttonAdvances an order exactly one step along Pending → Confirmed → Preparing → Ready → Completed; label changes to match the next step (Confirm, Start Preparing, Mark Ready, Complete).
Cancel / Delete (✕)Cancels an active order, or permanently deletes an already Cancelled/Completed order from the list.

Tips & Best Practices

Troubleshooting & FAQ

My storefront address is just a string of numbers.
That address was auto-generated from your phone number because no Business Name was set at signup. Set a real name under Settings → Shop Info, then click "Update address from Business Name".
My custom domain has said "Pending setup" for days.
The domain only goes Live after its DNS is pointed at BazaarPOS and support has finished HTTPS activation on their side — connecting it here is only the first step.
Customers say the portal is "not available".
Check the Portal Active toggle on the Settings tab — it may have been switched off, which blocks the whole storefront regardless of other settings.
An order's displayed total doesn't match the line items.
Expand the order to see the full breakdown — subtotal plus CGST/SGST/IGST are shown separately above the final total, so the item lines alone will look lower than the Total figure.
I can't skip an order straight from Pending to Ready.
The status button only advances one step at a time (Pending → Confirmed → Preparing → Ready → Completed) — click it repeatedly, or use Cancel if the order should not proceed at all.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/OnlinePortalPage.jsx

Backend endpoints used:

  • GET /online-portal/settings
  • PUT /online-portal/settings
  • PUT /online-portal/domain/regenerate
  • GET /online-portal/domain/custom
  • POST /online-portal/domain/custom
  • DELETE /online-portal/domain/custom
  • GET /online-portal/orders
  • PATCH /online-portal/orders/:id/status
  • DELETE /online-portal/orders/:id

Related tables (db-core repositories):

  • OnlinePortalSettings
  • OnlinePortalOrder
  • CustomDomain

Feature flag key: integrations (requires advanced plan tier or above)

Theme settings are stored server-side as a JSON string (themeConfig) and parsed client-side by parseThemeConfig(), which merges saved values over sensible defaults (accentColor, logoUrl, showWelcomeMessage, showCategoryGrid, sectionOrder) so older stores without a theme configured still render correctly. The tenant ID used to build the portal link is read directly from localStorage (selectedBusinessId, falling back to the stored user object's businessId/tenantId) rather than Redux state.