Help Centre

ZanziPOS Documentation

Everything you need to set up, run, and grow your venue on ZanziPOS.

Venue owners
Staff
Super admin

Onboarding your venue

There are two ways to get started on ZanziPOS. You can submit the early access form at zanzipos.app and our team will contact you personally to set everything up. Or, if you prefer to set up independently, contact build@zanzipos.app and we will provision your account and guide you through the process.

Early accessAll plans include a 14-day free trial. No credit card required to start. Your venue is live within minutes of signing up.
  • 1

    Submit the form or contact us

    Provide your venue name, email, and venue type. You will receive a confirmation email within minutes.

  • 2

    Account and subdomain provisioned

    We create your isolated database and subdomain — e.g. yourvenue.zanzipos.app. This takes a few hours.

  • 3

    Build your menu

    Log in to your admin panel and add food categories, items, and prices. This typically takes 20-30 minutes.

  • 4

    Set up your space

    Add tables, invite staff with the correct roles, and configure your currency and tax settings.

  • 5

    Go live

    Display QR codes on tables, open your register, and start taking orders. ZanziPOS is ready.

Your subdomain

Every venue on ZanziPOS gets a unique, permanent subdomain in the format yourvenue.zanzipos.app. This is where your staff log in, where QR codes point customers, and where all your venue data lives.

ExampleA beach bar called "Blue Horizon" might be assigned bluehorizon.zanzipos.app. Your staff access the POS at this address and customers scan QR codes that link here.

Subdomains cannot be changed after setup. Each subdomain has its own completely isolated database — your orders, menu, and staff data are never shared with or visible to any other venue.

Custom domains (e.g. pos.yourvenue.com) are on the roadmap for the Hoteli plan.

14-day free trial

Every new venue starts on a 14-day free trial with full access to all features on their chosen plan. No credit card is required to start.

When your trial period ends, your account automatically enters read-only mode. You can still log in, view all historical orders and reports, and access your data — but you cannot process new orders until you subscribe. Nothing is deleted.

Subscription reminderYou will receive an email before your trial ends with a Pesapal payment link. Pay with Mobile Money, Visa, Mastercard, or bank transfer to activate your subscription instantly.

Menu categories

In your admin panel go to Menu → Categories. Categories group your items and appear as filter pills in the POS and sections in the QR menu. Examples: Starters, Main Course, Grills, Drinks, Cocktails, Desserts.

Tips for good categories

  • Keep names short — they appear as pill filters in the POS interface.
  • Order them logically — what customers order first (drinks, starters) should appear first.
  • You can set a sort order number for each category to control how they appear.

Menu items

Go to Menu → Items to add your food and drinks. For each item you set a name, category, price, and active status.

FieldDescription
NameShown in the POS and QR menu. Keep it clear and recognisable.
CategoryWhich section this item belongs to.
PriceIn your venue currency (TZS or USD).
ActiveInactive items are hidden from staff and customers without being deleted. Use this for sold-out items.
Out of stock?Deactivate the item rather than deleting it. You can reactivate it at any time without re-entering the details.

Currency settings

ZanziPOS actively supports TZS (Tanzania Shilling) and USD. Your venue currency is configured in Admin → Settings and applies to all prices, receipts, and ZRA submissions.

Pesapal handles currency conversion for international card payments. If your venue prices in TZS, Pesapal will convert at the live exchange rate when a guest pays in a foreign currency.

Setting up tables

Go to Admin → Tables to create your seating areas. Each table has a name and a capacity. In the POS, tables appear as cards — green means available, teal means an active order is running on that table.

Naming tips

  • Use names your staff recognise instantly: Table 1, Beach Front, VIP Deck, Bar Stool 3.
  • Capacity is used by the AI assistant for suggestions but does not restrict orders.
  • You can add as many tables as your plan allows.

QR codes

Each table automatically gets a unique QR code. Customers scan with their phone camera — no app to download — and see your full menu. QR codes are generated automatically when you add tables in your admin panel. Print them directly from the admin.

Bright sunlight tipZanziPOS is designed for high contrast readability in direct Zanzibar sunshine. When printing QR codes, use the largest size available and laminate them for beach or poolside tables.

Room service (hotels)

Room service ordering is planned for the Roadmap — it is not yet live. When launched, each hotel room will get a unique QR code. Guests scan, browse the menu, and order. Orders route to the kitchen with the room number attached automatically.

Payment methods

ZanziPOS currently supports the following payment methods:

MethodStatusNotes
CashLiveAlways available, no setup needed
Room billLiveCharges order to guest room account
Bank transferLiveManual recording, no gateway required
Mobile Money (M-Pesa, Airtel)Via PesapalRequires your Pesapal account connected
Visa / MastercardVia PesapalTZS and USD supported
Split paymentLiveAny combination of methods on one order

Split payments

At checkout, select Split as the payment method. A breakdown appears showing Cash, Mobile Money, Card, and Bank Transfer. Enter the amount for each method used — the remaining balance updates in real time. The Confirm button only activates when the amounts cover the full total.

ExampleTotal is TZS 95,000. The guest pays TZS 50,000 cash and TZS 45,000 mobile money. Enter both amounts, confirm the zero balance, and complete the order.

ZRA tax compliance

ZanziPOS connects directly to the Zanzibar Revenue Authority (ZRA) Virtual Fiscal Management System (VFMS) API. When ZRA is enabled for your venue, every completed order automatically submits a fiscal transaction to ZRA and receives a receipt number in return.

Tax rate and whether tax is enabled are both configurable per venue in Admin → Settings. When enabled, tax is shown as a separate line on the receipt.

Required by lawAll hospitality businesses operating in Zanzibar are required to issue ZRA fiscal receipts. ZanziPOS automates this for every transaction when ZRA is configured.

To set up ZRA, go to Admin → ZRA and enter your Integration ID, Token ID, Z-Number, TIN Number, and VRN. These credentials are issued by ZRA when you register your fiscal device.

ZRA retry queue

If the ZRA API is unavailable at the time of an order, the submission is saved as pending in the ZRA queue. The system retries automatically every 15 minutes via a background scheduler until the submission succeeds.

You can also trigger a manual retry from Admin → ZRA Queue. The queue shows all submissions with their status: Pending, Successful, or Failed. Customers can still use their receipt while ZRA status is pending — the ZRA receipt number is added to the receipt once confirmed.

Monitor the queueCheck Admin → ZRA Queue after periods of poor connectivity. Pending items clear automatically once ZRA is reachable — no action needed unless status shows Failed.

Digital receipts

Every completed order generates a digital receipt accessible at a unique URL (zanzipos.app/receipt/TOKEN). If the customer provides their email address at checkout, the receipt is emailed to them automatically via SMTP.

The receipt URL can also be shared manually — copied and sent via WhatsApp, for example. ZRA receipts include the fiscal receipt number, response number, tax breakdown, and a QR code linking to the ZRA verification portal.

Sales reports

Go to Admin → Reports to view your venue performance. The following reports are currently available:

Daily totals

Revenue, order count, and average order value by day.

Per item breakdown

Best-selling items by quantity and revenue.

Staff performance

Orders and revenue processed per staff member.

Payment methods

Revenue split by cash, mobile money, card, and bank.

ZRA reconciliation

Fiscal receipts matched to orders, pending queue status.

Revenue by order type

Dine-in vs quick sale breakdown.

AI assistant

The AI assistant is powered by Claude (Anthropic) and is available in your admin panel under Admin → AI. It has access to your order history and menu data, so you can ask venue-specific questions.

Try asking"What were my top 5 items this week?", "Which payment method is used most?", "What time is my busiest hour?", "Suggest a combo deal based on popular orders."

Plans and pricing

PlanPriceStaffTablesKey features
Mwanzo$29/moUp to 5Up to 20Cash and bank payments, ZRA, basic reports, AI assistant
Biashara$79/moUp to 20UnlimitedPesapal mobile money and card, advanced reports, loyalty (coming soon)
Hoteli$149/moUnlimitedUnlimitedMulti-branch (coming soon), custom domain (coming soon), white-label

All plans include the 14-day free trial. Early access venues receive 3 additional months at no charge.

Billing and renewal

Subscriptions are billed monthly via Pesapal. When payment is due you receive an email with a secure Pesapal payment link. Pay with Mobile Money, Visa, Mastercard, or bank transfer.

If payment lapses, your account enters read-only mode — you can view all historical data but cannot process new orders. Full access restores immediately upon payment confirmation.

To cancel your subscription, email build@zanzipos.app. Your data is retained for 12 months after cancellation in compliance with Tanzanian tax record-keeping requirements.

Contact support

ZanziPOS support is based in Zanzibar. We speak both English and Swahili.

ChannelContactBest for
Emailbuild@zanzipos.appSetup, billing, account questions
WhatsAppAvailable on requestUrgent operational issues

Coming soon — roadmap

The following features are actively planned and will be released in upcoming updates:

FeatureStatus
Kitchen Display System (KDS)Roadmap
Offline PWA mode (local order queuing)Roadmap
Loyalty points and vouchersRoadmap
Reservations and table bookingsRoadmap
Room service orderingRoadmap
Delivery managementRoadmap
Multi-branch and multi-locationRoadmap
Custom domain per venueRoadmap
WhatsApp receipt deliveryRoadmap
Inventory managementRoadmap

Want to request a feature or vote on priorities? Email build@zanzipos.app.

Logging in

Open any browser on your phone, tablet, or laptop and go to your venue subdomain — for example yourvenue.zanzipos.app. You will see the ZanziPOS login screen with your venue name. Enter your email and password, then tap Sign in.

First time?Your venue owner creates staff accounts from the admin panel under Staff Management. Each staff member receives login details by email.

ZanziPOS works on Android phones, iPhones, Android tablets, iPads, and laptops. No app installation is required — it runs entirely in the browser.

Your role

ZanziPOS has six staff roles. Your role determines what you can see and do:

RolePOS accessAdmin access
WaiterTake orders, view menuNone
CashierTake orders, process paymentsNone
Bar staffTake orders, view menuNone
Kitchen staffView ordersNone
ManagerFull POSMenu, tables, staff, reports
AdminFull POSAll settings including ZRA and billing

Selecting a table

After logging in, you land on the Tables view. All venue tables appear as cards. An occupied table (one with an active order) shows a green dot and is labelled Occupied. Tap any table to select it — the Menu tab opens automatically and your order sidebar appears on the right.

Quick sale (no table)

For takeaway customers or walk-ins not seated at a table, tap + Quick sale at the top of the Tables screen. This starts an order without a table assignment. Quick sale orders appear separately in reports and do not affect table availability.

Adding items to an order

On the Menu tab, tap any item card to add it to the current order. Tap again to add another of the same item. Use the category pills along the top to filter by section, or type in the search bar to find items by name.

In the order sidebar on the right, use the + and - buttons to adjust quantities. Reducing a quantity to zero removes the item from the order.

Fastest methodOn a busy night, use the search bar — type the first 2-3 letters of any item name to find it instantly without scrolling through categories.

Open orders

The Open orders tab shows all active orders across all tables in real time. Tap any order card to load it into the sidebar — you can then add more items or proceed to checkout. Orders remain open until payment is processed.

Processing payment

When the customer is ready to pay, tap Checkout in the order sidebar. The checkout screen opens showing the total and payment method options. Select the method used and optionally enter the customer name and email to send a receipt.

MethodWhat to do
CashSelect Cash, record the amount received, confirm.
Room billSelect Room Bill, the order charges to the guest room.
Bank transferSelect Bank Transfer, note the reference, confirm.
Mobile MoneyCustomer pays on their phone via M-Pesa or Airtel, then confirm.
CardCustomer taps or inserts on the Pesapal device, then confirm.
SplitSee split payment section below.

Tap Confirm payment to complete. The table is freed automatically and the receipt is generated.

Split payment

Select Split at checkout. Enter how much is being paid by each method. The remaining balance updates live. When the balance reaches zero, the Confirm button activates.

ExampleTotal TZS 120,000. Guest pays TZS 80,000 cash and TZS 40,000 room bill. Enter both, balance reaches zero, confirm.

Sending a receipt

At the checkout screen, enter the customer email in the Email field before confirming payment. After the order completes, a receipt is emailed to them automatically. It includes order details, ZRA fiscal number (if enabled), and a QR code.

If no email was provided, the receipt is still generated at a unique URL that can be shared manually — copy and send it via WhatsApp if needed.

Connection indicator

A small coloured dot in the top navigation bar shows your connection status. Green means the POS is connected to the server and orders will submit normally. Red means the connection is lost — wait for it to turn green before submitting an order.

The system checks connectivity every 10 seconds and reconnects automatically when internet is restored. On slow connections, allow a moment for the order to process — do not tap Confirm multiple times.

Offline mode coming soonFull offline support with local order queuing is on the ZanziPOS roadmap. Currently an internet connection is required to process orders.

Supported devices

ZanziPOS runs in any modern browser with no installation. Tested and supported on:

  • Android phones (Chrome, Samsung Internet)
  • iPhones (Safari, Chrome)
  • Android tablets and iPads
  • Laptops and desktop computers (Chrome, Firefox, Edge, Safari)
Add to home screenOn mobile, open ZanziPOS in your browser and use "Add to Home Screen" for a faster app-like experience without going through the browser each time.

Super admin panel overview

The super admin panel at admin.zanzipos.app is the central control plane for the entire ZanziPOS platform. From here, the Zanziholics team can create and manage all tenant venues, monitor subscriptions, configure ZRA per venue, and access system settings.

Restricted accessThe super admin panel is for Zanziholics staff only. Venue owners manage their own venue via their subdomain admin panel — not this panel.

Accessing the panel

Navigate to admin.zanzipos.app. Log in with your super admin credentials. The panel is built on Laravel and uses session-based authentication with bcrypt password hashing.

Primary super adminAugustine — operations@zanziholics.com. Additional admin accounts can be created from within the panel.

Managing tenants

The dashboard shows all registered venues. For each tenant you can see their plan, subscription status, trial expiry, and last activity. Subscription status values:

StatusMeaningAccess level
trialWithin 14-day free trialFull access
activePaying subscriberFull access
readonlyTrial or payment lapsedView only, cannot take orders
suspendedManually suspendedRedirected to subscribe page
cancelledAccount closedRedirected to subscribe page

To manually activate a venue (e.g. for early access), update their subscription_status to "active" directly in the zanzipos_main database tenants table.

Creating a new venue

New venues are currently created manually via the database. Insert a record into the zanzipos_main.tenants table with the following required fields:

FieldValue
slugSubdomain slug — lowercase, no spaces, hyphens allowed (e.g. "bluehorizon")
business_nameVenue display name
emailOwner email for billing and notifications
venue_typerestaurant, bar, hotel, resort, cafe, rooftop, food_truck, or other
planmwanzo, biashara, or hoteli
monthly_price29, 79, or 149 (USD)
subscription_statusSet to "trial" for new venues
trial_ends_at14 days from today (DATETIME)

Then create the tenant database zanzipos_tenant_{slug} and run the tenant schema to create all required tables: staff, orders, food_categories, food_items, service_tables, settings, and zra_receipts.

ZRA configuration per venue

Each venue requiring ZRA compliance needs these fields set in their tenants record:

FieldDescription
zra_enabled1 to enable, 0 to disable ZRA submission
zra_integration_idIssued by ZRA on fiscal device registration
zra_token_idAPI authentication token from ZRA
zra_znumberFiscal device Z number
zra_tin_numberVenue TIN from TRA
zra_vrn_numberVAT registration number (if applicable)
zra_streetVenue street address for fiscal receipts
zra_test_mode1 for ZRA sandbox, 0 for live ZRA API

The ZRA API endpoint is http://102.223.7.131:6060/vfms/api for both sandbox and live. Failed submissions queue automatically and retry every 15 minutes via the Laravel scheduler cron (* * * * *). Venue admins can monitor and manually retry from Admin → ZRA Queue.

Subscription and billing

Subscriptions are processed via Pesapal live API (pay.pesapal.com). When a venue pays, the Pesapal IPN callback at zanzipos.app/pesapal/callback.php updates their subscription status to "active" and creates a record in the subscriptions table.

The subscribe page at zanzipos.app/subscribe/?slug={slug} handles Pesapal payment link generation automatically — it authenticates with Pesapal, submits the order request, and embeds the Pesapal payment iframe. The page polls every 8 seconds for payment confirmation.

Pesapal Consumer Key and Secret are embedded in the subscribe page. Keep these credentials secure.

Database architecture

ZanziPOS uses a database-per-tenant architecture on MariaDB:

DatabasePurpose
zanzipos_mainShared — tenants, receipts, subscriptions, early_access signups
zanzipos_tenant_{slug}One per venue — staff, orders, menu, tables, settings, ZRA receipts

Tenant identification uses the HTTP_HOST header — the bootstrap.php extracts the slug from the subdomain and loads the correct tenant database. A data issue in one tenant database cannot affect others.

Server detailsHetzner VPS, Ubuntu 24.04 LTS, MariaDB, PHP 8.3-FPM, Nginx. IP: 204.168.180.194. Laravel scheduler cron runs every minute for ZRA retry and other scheduled jobs.

Email configuration

All transactional email (welcome, receipts, order notifications, override alerts) uses PHPMailer via SMTP:

SettingValue
SMTP Hostserver1.cloudzanzibar.com
Port587 (STARTTLS)
From addressbuild@zanzipos.app
Notify addressoperations@zanziholics.com

Mail config lives at /var/www/zanzipos/config/mail.php. The admin Laravel panel uses its own .env mail settings. Email sending is fire-and-forget (silent fail) so a mail error never blocks an order from completing.

Claude AI integration

The AI assistant uses the Anthropic Claude API. Config at /var/www/zanzipos/config/ai.php:

SettingValue
Modelclaude-sonnet-4-20250514
Max tokens1024 per request
Endpoint/admin/api/ai-chat.php (tenant) and /admin/ai (admin panel)

Each AI request includes context from the tenant database — order history, menu data, and sales figures — to enable venue-specific insights. Monitor API usage in the Anthropic console to control costs.

Google Sheets webhook

Early access form submissions are logged to a private Google Sheet via an Apps Script webhook. Config at /var/www/zanzipos/config/app.php under google_sheet_webhook.

The webhook receives venue_name, email, venue_type, and source. If the Sheets request fails (timeout or error), the signup is still saved to zanzipos_main.early_access — the Sheets sync is a secondary notification only and never blocks the signup flow.

SSL certificates and Nginx

SSL is managed via Let us Encrypt (Certbot). A wildcard certificate covers zanzipos.app and all *.zanzipos.app subdomains, meaning new tenant subdomains are automatically covered with no additional cert work.

Three Nginx server blocks handle all routing:

  • zanzipos.app — serves the public landing page and static pages from /var/www/zanzipos/public. Clean URL routes (/about, /privacy-policy, /docs, /blog) map to their .php files via exact location blocks.
  • *.zanzipos.app (wildcard) — serves the tenant POS from /var/www/zanzipos/tenant. The slug is extracted from HTTP_HOST and passed to PHP as HTTP_X_TENANT.
  • admin.zanzipos.app — serves the Laravel super admin panel from /var/www/zanzipos/admin/public.

Backups

Database backups are currently handled via daily automated backups for the ZanziPOS databases. In addition, Hetzner VPS snapshots provide server-level recovery points.

Recommended backup approach: daily mysqldump of zanzipos_main and all zanzipos_tenant_* databases, stored off-server (e.g. Hetzner Object Storage or a remote location). Test restores periodically.

ZRA recordsZRA fiscal receipt data must be retained under Tanzanian tax regulations. Ensure backup retention covers at least 5 years for ZRA-related tables.