Skip to main content
Loading your quote…
Loading your team's catalog and quotes…
🎉 Halal Tourism
🎉
Halal Tourism
All changes saved
XupaFin v
✓ You're on the latest version v3.43
› › › ›

Quote / Proposal for

—
Client's WhatsApp photo
NO CLIENT SELECTED
Title, first name and surname are required.
ID number
Mobile number
That doesn't look like a valid mobile number.
Email address
Travel date
Pick-up / hotel address
Home / residential address (where the client stays)
Delivery & extra services
R
R
R
Number of travellers (pax)
Enter a number, or leave this blank.
Notes
Discount (optional)

List a few named package options at different price points — the items above become the standard breakdown shown alongside them.

No items selected yet — tap + on anything in the list.

Quote history (this computer)

Quotes anyone on the team generates will appear here.

Recent activity

Catalog and quote changes show up here.

📥 New WhatsApp enquiries

Customer travel enquiries from WhatsApp land here automatically. Click “Build quote” to turn one into a quote — the customer and their trip details fill in for you. Groups, greetings and status updates are filtered out so you only see real leads.

📢 Announcements

Post updates for the team. Everyone signed in sees them, newest first.

New announcement

Recent

Loading…

✅ Tasks

Issue tasks to the team, set who and when, track to done.

Issue a task

Task list

Loading…

🗄️ Inventory archive

Items you removed from inventory. Restore one back to your stock, or delete it permanently.

Loading…

🗺️ Itineraries

Build a day-by-day trip itinerary and share it with the client via a link.

Build itinerary

✈️ Flights

Saved itineraries

Loading…

🧳 Trip departures

Scheduled group departures with seat capacity and an automatic waitlist when full.

Add / edit departure

Scheduled departures

Loading…

📆 Payment plans

Split a trip into a deposit and instalments, and track what's paid.

Create / edit plan

Quick split
into from

Payment plans

Loading…

🤝 Partners

Travel-agent accounts with commission tracking, plus promo codes for campaigns.

Travel agents

Loading…

Promo codes

Loading…

🧩 Add-ons

Optional extras travellers can choose on the public booking page (transfers, excursions, insurance…).

Create / edit add-on

Add-ons

Loading…

💱 Currencies

Exchange rates against the Rand, and a quick converter. Used for multi-currency pricing.

Add / edit currency

Quick converter
= R 0.00

Currencies

Loading…

💸 Payouts

Money going out — payments to suppliers and payouts to agents/organisers, with what's still owed.

Record a payment

Payments

Loading…

⚖️ Procurement

Tender to contract, with the controls enforced on the server: segregation of duties, declarations of interest, quorum, tax & CSD compliance, preference points, and a deviation register the system writes itself.

New tender

Whoever writes the specification is recorded — and cannot later evaluate bids on it.

Capture a bid

Tax compliance and CSD registration are gates, not notes. Without both, the server refuses to award — because that is precisely where irregular expenditure begins.

Score a bid

Scoring . Your score is write-once: a revision needs a reason, keeps the original beside it, and raises a deviation. Silently changing a score after seeing everyone else's is the most common way an evaluation gets steered.

Record a sitting

Minuted as it happened. If it was not quorate, that is recorded, a critical deviation is raised automatically, and an award on the resolution will be refused.

Raise the contract

Only possible after an award. The server refuses a contract on a tender that has not been awarded.

📈 Executive dashboard

Every figure aggregated in SQL at read time. Nothing cached, nothing seeded.

🗂️ Projects

Every trip run as a project. The AI writes the plan; arithmetic guards the deadlines. You have no project manager — this is one.

New trip project

Every task is dated backwards from departure, so the departure date is required.

The AI reads this to write trip-specific tasks. The more you say, the better the plan.

🤖 Assistant

Reads your real catalog, bookings and inventory. Won't quote a price it hasn't looked up. Drafts — never sends.

📦 Inventory

What you actually own, and how much of it is available right now. Click any column header to sort, or type in the row below it to filter.

🧑‍💼 HR — Staff Registry

Everyone appointed at Halal Tourism South Africa, whether or not they use this system. Click any column header to sort, or type in the row below it to filter.

🗂️ Org chart

Reporting structure, based on each employee's manager.

🌴 Leave

Requests and balances across all staff.

Request leave

Create system access

This creates a real login for . Every employee is registered here whether or not they get one — most casual/event staff won't need one.

🏭 Suppliers

Vendors for equipment, consumables, maintenance, and third-party delivery/setup/collection services.

Add supplier

Banking (for payment)
Performance

📦 Purchase orders

Every order placed with a supplier, and where it stands.

New purchase order

Line items
Total: R0

Receive goods

Enter the quantity actually received for each line — stock updates automatically.

🔁 Reorder suggestions

Items at or below their low-stock threshold with a preferred supplier set. Refreshed each time this opens — not a live background process.

💰 Supplier budget

Monthly spend against budget, per supplier.

🧾 All quotes

Every quote your team has generated. Click any column header to sort, or type in the row below it to filter.

📋 Proposals

Richer, multi-option proposals your team has put together — build a new one from the Proposal Builder tab using the "Package tiers" section, then Generate proposal.

📅 Bookings calendar

Every confirmed and tentative event, at a glance.

🖨 Booking sheet

What the team needs to prepare — client, goods, date, and payment status.

👥 Contacts

Every customer and company you've dealt with, in one place. Click any column header to sort, or filter using the row below it.

Add contact

Address

✨ AI Quote Assistant

Paste any customer request — a WhatsApp message, an email, notes from a phone call, however it arrived — and AI will read it, match items against your catalog, and draft a quote for you to review. Nothing gets created until you check it over and generate the quote yourself. Add an Anthropic API key in Business Details to turn this on.

Paste or type the customer's request
Incoming requests — WhatsApp, Facebook & Instagram (auto-collected via webhook)
Optional: send this template to make replies easier to read

💰 Invoices

Every invoice your team has generated.

📝 Signed agreements

Every hire agreement signed for your team — whether signed in person on a staff device, or remotely by the customer via an e-signature link.

👤 Users

Only administrators can create accounts or change roles. Staff accounts can generate quotes, book events, generate invoices, and send them to clients — nothing else.

🔧 System status

Checks which version of each backend file is actually live on this server — catches "the fix is built but never got uploaded" before it causes confusion.

❓ Help

Modules and licence, your compliance evidence register, and the assistant.

Help needs an Anthropic API key to work. Add one under 🏢 Business → "Anthropic API key", then come back here.

📣 Advertising

Ready-to-use Facebook & Instagram ad content. Pick what you want to advertise, then copy it straight into Meta Ads Manager.

⏳ Pending Approval

Every quote and proposal that hasn't been signed yet — nothing here has a completed agreement.

🔍 Audit Trail

Every recorded action across the app — who did what, and when. Administrators only.

Add a user

Edit access

📊 Business Dashboard

Everything below is computed from your quotes, bookings, and invoices — nothing is sent anywhere unless you use the AI sections.

Revenue by month
Booking status
Top items quoted
Top themes
🤖 AI summary
💬 Ask about your business

🎨 Themes

The themes customers can pick on a quote. Link catalog and inventory items to a theme so they're easy to find together.

Add theme

Linked items

Check any inventory item that belongs to this theme. Changes save immediately.

New booking

Reserves equipment for a specific date. Confirms automatically once the deposit threshold is received.

Defaults to the following Monday after the event — adjust if needed.

Add inventory item

Linking to a catalog item keeps price and stock in sync both ways. Leave the link blank to create a brand-new catalog item automatically from this one.

Click to upload, or copy an image and paste here (Ctrl/Cmd+V)

Add employee

Identity
Contact details
Employment
Leave balances
Banking (for payroll)
ID verification

A copy of ID/passport and a selfie, for verification — same standard used for client hiring agreements.

Click to upload, or paste (Ctrl/Cmd+V)
Click to upload, or paste (Ctrl/Cmd+V)
Click to upload, or paste (Ctrl/Cmd+V)
Other documents (contracts, qualifications, work permits)
System access

My account

Change password (optional)
Two-factor authentication
Checking…
Scan this in Google Authenticator, Authy, or your password manager. No code? Type the setup key in by hand.
Setup key
⚠️ Save these recovery codes now
They are shown once. Only the hashes are kept, so nobody — not even an administrator — can show them to you again. Without them, and without your phone, you cannot get in.

Business details

Shown on every quote. Saved on this computer.

Click to upload, or copy an image and paste here (Ctrl/Cmd+V)
Delivery & extra-service fees
Charged on the straight-line distance from your address (above) to the event address. Set it a little higher than your true per-km cost to account for the round trip.
Where incoming enquiries are read from. Defaults to this site's whatsapp-inbox-api.php — leave the default for the laptop auto-grab below.
Turns on the automatic grab of WhatsApp enquiries from the office laptop. Click Generate, Save, then paste the same value into the bridge's config.json. New enquiries then appear in the smart sheet under the Proposal Builder.
💾 Save a PDF copy on this computer
On this computer only: every quote and invoice you generate is also saved as a PDF into a folder you choose (e.g. Halal Tourism Quotes and Invoices), named by number and client. Nothing is uploaded — it stays on this machine.
Not set up yet.
💬 WhatsApp — where to get it
Go to developers.facebook.com → My Apps → Create App → choose "Business" as the type → add the "WhatsApp" product. Meta gives you a free test number automatically to try this with before connecting your real business number. Under WhatsApp → Configuration, set the Callback URL to the Inbox URL above and pick your own Verify Token (also set in whatsapp-webhook.php).
📘 Facebook — where to get it
In the same Meta app used for WhatsApp above, add the "Messenger" product. You'll need to connect a Facebook Page you manage (Halal Tourism's page). Under Messenger → Settings, subscribe the page to webhook events, using the same Callback URL and Verify Token as WhatsApp.
📷 Instagram — where to get it
Also in the same Meta app, add the "Instagram" product. Your Instagram account needs to be a Business or Creator account, linked to the same Facebook Page used above — Meta requires that link for messaging access. Same Callback URL and Verify Token again once it's connected.
Without this, WhatsApp messages must roughly follow the template. With your own key, messy free-text messages get understood too. Stored only on this device, sent only to Anthropic. Get one at console.anthropic.com — it's billed separately from any Claude subscription, a few cents per message.
Both come from setting up push notifications on the webhook — see PUSH-NOTIFICATIONS-SETUP.txt. Once set, "Notify me instantly" appears next to Check Inbox in the WhatsApp import screen.
Both come from setting up email sending — see EMAIL-SETUP.txt. Once set, an "📧 Email" button appears on quotes and invoices, sent from pcharacters@gmail.com.
Field names shown here follow PayFast's convention as a starting point — if you pick a different provider, let me know and I'll adjust the labels and connect the actual payment flow. For now this only stores your credentials for when you're ready to go live.

Add a new item

Adding an item here also creates a matching Inventory record automatically, so it's immediately usable on quotes.

Are you sure?

Add

Record a payment

💰 Finance

Receipts, expenses, receivables, banking, refunds, damage recovery and reports — every figure tied back to your bookings and invoices.

Record receipt

Record expense

New refund

New damage charge

Add account

This is a standard account — its code and type are locked, but you can rename it or set it inactive.
✨ Assistant
Ask about your business