πŸͺ ZaarHub

← Back to Portal
⚠️ Loyalty Program β€” ZaarCash πŸ’Ž, native to the platform (no separate incentive engine). Every rate is admin-configurable.

πŸ›‘οΈ Admin Guide β€” Managing the Loyalty Platform

For SwiftSoftware and ZaarHub administrators managing the Program backend.

⬇️ Download this guide (PDF) Download the admin guide as a PDF, or read it below. Or press Ctrl+P / ⌘P for a clean printed copy.

⚑ Walkthrough β€” do this, in this order

From sign-in to a claim approved and the public pages matching your settings.

1

Sign in. Open https://zaarhub.com/admin-panel.html and sign in with your administrator credentials. This is the only admin console β€” older links such as /admin-dashboard.html or /admin-login.html now redirect straight back here.

2

Read the numbers first. Open the Admin Dashboard and look at the platform totals before touching anything β€” it tells you whether today is normal.

3

Clear the claim queue. Open the Business Claim & Verification Flow, check the claimant's evidence, then approve or reject. Approval is what gives a business its portal.

4

Manage a tenant. Use Tenant Management to inspect or adjust a directory/tenant.

5

Watch the network. Review Fraud Monitoring for suspicious earn and redeem patterns, and Audit & Logging for who changed what.

6

Configure the public face. Set the Notifications Ticker, Editor's Picks, Verification Badges and Category Management β€” these decide what every visitor sees.

7

Own the loyalty numbers. The earn rate, the redemption cap (10% of a bill), the minimum balance (100 ZaarCash) and free-item treatment are programme settings you control. Every user-facing guide quotes these numbers, so change them here and keep the guides in step.

8

See the result. Claims move, the ticker reflects real activity, and every public page matches the settings you just made.

βœ… You're done when: you have cleared at least one claim, and the ticker, Editor’s Picks and loyalty settings all match what the public pages show.

πŸͺ 1. Business Claim & Verification Flow

When a business owner claims a listing on ZaarHub, the system follows this flow:

Step 1 β€” Owner Submits Claim

Step 2 β€” Auto-Approval (Instant)

The system checks two things for automatic approval:

When auto-approved:

βœ… Auto-approval example: Owner with email john@bobsauto.com claims a business and submits website https://bobsauto.com. The domain bobsauto.com matches β†’ instant approval.

Step 3 β€” Manual Review (Admin Panel)

If auto-approval fails (email domain doesn't match the website), the claim goes to the admin panel for manual review:

  1. Go to https://zaarhub.com/admin/requests.html
  2. Unlock with the admin key
  3. Click the Claims tab β†’ review pending claims
  4. Verify the claimant's identity by checking email, phone, or website
  5. Click Approve or Reject

When manually approved via admin panel:

⚠️ No website = cannot claim: If a claimant submits without a website URL, the frontend blocks the submission. If a business listing has no website on file and no website is submitted, the claim goes to manual review with a "no website" flag.

What Business Owners See After Approval

πŸ“Š 2. Admin Dashboard

The admin panel is your central hub for monitoring and managing the entire ZaarHub Loyalty Program.

πŸ’‘ Tip: Pin the dashboard to your browser. It auto-refreshes every 60 seconds so you can spot issues quickly.

πŸ‘₯ 3. Tenant Management

As an admin, you have oversight of all tenant accounts. Your responsibilities include:

⚠️ Important: Never make configuration changes without documented authorization. All changes should be logged with the requesting party, reason, and approval.

πŸ” 4. Fraud Monitoring

Fraud detection is one of the most critical admin functions. The system flags suspicious transactions automatically, but you need to investigate.

What to look for:

πŸ”Ž

Review process: Open the flagged transaction β†’ review the customer history and business history β†’ check for matching IPs or account creation dates β†’ make a determination: dismiss flag, warn the party, or escalate for suspension.

🚨 Escalation: If you confirm fraud, immediately suspend the involved accounts and document everything. Notify your supervisor and the security team within 24 hours.

🎧 5. Support & Escalation

Admins handle a variety of support requests from tenants. Common scenarios:

πŸ’‘ Tip: For ZaarCash corrections, follow the policy: under 1,000 ZaarCash = admin-level approval; 1,000+ ZaarCash = supervisor authorization required.

πŸ“‹ 6. Audit & Logging

The ZaarHub Platform maintains a comprehensive audit trail. All admin actions are logged and subject to review.

⚠️ Important: Assume everything you do as an admin is auditable and visible. Never perform actions outside official channels or for personal benefit.

πŸ”’ 7. Security Best Practices

Admin accounts have elevated privileges. Follow these practices to keep the platform secure:

🚨 Non-compliance: Violations of security policies are grounds for immediate revocation of admin access, termination of employment or contract, and possible legal action.

πŸ—οΈ 8. City Requests

Visitors can request cities that aren't listed yet:

πŸ“Š 9. Micro-Polls

Create one-question polls for your directory:

πŸ“‹ 10. Booking Requests (Merchant View)

Business owners manage service bookings from their dashboard:

πŸ‘₯ 11. Referrals & ZaarCash

Admins verify and manage referrals:

πŸ† 12. Native Loyalty & Clearinghouse Architecture

The ZaarHub Loyalty Program is native to the Multi-Directory platform. Loyalty capability is built into every directory β€” there is no separate IncentiveSwift engine. Each directory admin creates and configures their own loyalty programmes, and members are visitor_accounts of the directory. The native clearinghouse handles ZaarCash billing, reimbursement, and expiry.

The programme rules the guides state as fact (ZaarHub's current settings):

⭐ Every one of those numbers is a per-programme setting, not a constant. Edit them in the admin panel's ⭐ Loyalty Programmes card: the earn rate (ZaarCash per $1 spent), the redemption cap % (max % of a bill payable), the minimum balance to redeem, whether free items earn nothing, and the currency's name and icon β€” plus the per-check-in, per-visit and per-redemption rates. A programme may be scoped to one directory or a whole network (ZaarHub runs a single network-wide programme). Another directory could call its currency something else and run different numbers β€” same code, different settings.

πŸ›‘οΈ Your ZaarCash obligations β€” the administrator's view

The settings above are more than configuration: because the programme is customer-facing, the numbers you choose are the promises customers see. Publish your terms β€” earning rates, cap, minimum and expiry β€” and keep them accurate here, in the loyalty guide, and in the panel. Promotional and gift-card style rules vary by state and country; confirm what applies to you before launch, including whether unredeemed balances must be honoured or may expire.

Read the full ZaarCash programme guide for administrators β†’

⚠️ Disclaimer β€” for administrators

You are configuring a customer-facing rewards scheme, so the settings you choose are the promises customers see. Publish your terms (earning rates, cap, minimum, expiry) and keep them accurate in this guide and in the panel.

Promotional and gift-card style rules vary by state and country β€” confirm what applies to you before launch, including whether unredeemed balances must be honoured or may expire.

The platform stores and applies your settings; it does not decide them, does not reimburse redeemed value, and gives no warranty that a particular configuration is lawful or profitable in your jurisdiction.

Loyalty Programs (per-directory):

Tiers (membership levels):

Rewards (catalog + earn + approval):

Milestones (trigger-based bonuses):

Clearinghouse (ZaarCash billing, /networks/:slug/clear):

Scanner PWA (/scanner):

Business Profile Loyalty Section: Every business detail page (/biz/:slug/:id) fetches program & tier data and, if the visitor is logged in, displays their personal tier badge, ZaarCash balance, and scannable QR code. Non-enrolled visitors see a Join button that calls POST .../loyalty/programs/:program_id/enroll.

Per-Directory Feature Toggle: The feature_config JSONB column on directories controls whether loyalty features render. Set {"loyalty_enabled": true} to enable the loyalty section on business profiles for a given directory.

πŸ’‘ Tip: All loyalty & clearinghouse endpoints require auth (JWT). Test with a valid token from POST /auth/login using the Authorization: Bearer <token> header. Bad tokens return 401. Loyalty program defaults: max_checkins_per_day=1, points_per_checkin=10, points_expire_days=365.

πŸ”Œ 13. Integration CTA Buttons

Business owners configure CTA buttons on their listing from the Integrations tab:

πŸ… 13. Verification Badges & Trust Signals

Businesses in the directory can earn verification badges that display on their listings. These badges help visitors identify trusted businesses at a glance:

Badge display: Badges appear as icons next to the business name on listing cards, search results, and the business detail page. They are controlled by the ZaarHub system and cannot be manually toggled by business owners (except Editor's Pick, which is admin-controlled).

πŸ’‘ Tip: Use verification badges strategically. The "Verified Owner" badge is automatic once a claim is approved. Top Rated badges update automatically as new reviews come in. Editor's Pick is your manual curation tool for highlighting standout businesses.

⭐ 14. Editor's Picks Configuration

Editor's Picks are featured businesses hand-selected by admins to appear in a special "Editor's Picks" section on the directory and ZaarHub frontend. They're part of the ZaarHub curation system.

⚠️ Note: Editor's Picks are purely a curation tool β€” they don't change the business's subscription tier or billing. Businesses don't pay for Editor's Pick status; it's earned through admin recognition of quality.

πŸ“‹ 15. B2B Pages Monitoring

Three server-rendered B2B pages are available for your directory network. As an admin, you should monitor their usage and content:

πŸ’‘ Tip: All three B2B pages are server-side rendered for SEO and fast loading. They use the same design system as the rest of the platform. Check each page after major deployments to ensure rendering is working correctly.

πŸ• 16. Data Freshness & Enrichment

Business listings enriched from third-party sources (Google Places, Yelp, etc.) display a Data Freshness Timestamp to visitors. For example: "Data last updated: June 2025 from Google Places."

πŸ’‘ Tip: Set up a recurring n8n workflow to auto-enrich listings older than 90 days. This keeps your directory data fresh without manual effort.

πŸ“‘ 17. Notifications Ticker

The Notifications Ticker is a scrolling bar that automatically displays recent platform activity on the directory frontend. Unlike admin-created announcements, this ticker populates automatically from real platform events β€” new businesses added, deals posted, reviews written, and claims verified.

πŸ’‘ Tip: The Notifications Ticker and the Announcement Ticker (Section 30 of the main guide) serve different purposes. The Notifications Ticker is fully automatic β€” it shows system events with no admin input. Use the Announcement Ticker when you want to publish custom messages like holiday hours or event promotions.

πŸ“‚ 18. Category Management

Categories are organized with categories that contain subcategories (e.g., Fine Dining & Cuisine contains Italian, Chinese; Food & Drink contains Coffee Shop, Pizza). A business can belong to multiple subcategories (up to 3 by default, 5 with admin override).

⚠️ Critical: Categories must be created before searching for or adding businesses. The search engine filter dropdown is populated from existing categories. If no categories exist for a directory, the category filter will be disabled.

Step 1: Create Categories First

Before populating a directory with businesses, create your categories from the Category Manager (Admin Panel β†’ Categories). Categories are organized as categories β†’ subcategories (not "groups"): e.g., Fine Dining contains Italian, Chinese; Food & Drink contains Coffee Shop, Pizza. A business can belong to multiple subcategories (up to 3 by default, 5 with admin override).

Using the Populate Businesses tab

Go to Admin Panel β†’ Populate Businesses. This is a manual, admin-driven flow (not an auto-scraper):

Franchise / big-chain detection (auto-flag)

When you publish a business, the system auto-flags likely franchises / big chains using a known-chain name list (~120 national brands) plus Google Places types heuristics. You'll see a manual override before publishing: confirm Local (small/local business) or mark Franchise. The community directory is focused on small, local businesses β€” franchises/chains (and suppliers) are excluded from the public front end and only appear in the back office where relevant.

Step 2: Search for Businesses

Go to Admin Panel β†’ Search & Import. The search engine includes a Category Filter dropdown that shows all existing categories. Select a category (or group) to narrow your search. The filter makes results highly targeted from the start β€” example: select "Coffee Shop" and the search returns coffee shops in the target city.

Step 3: Assign Categories β€” Individual or Bulk

After search results load, you have two ways to assign categories:

Individual assignment:

Bulk assignment:

πŸ’‘ Tip: Use bulk assign as an auto-categorization tool. Search by one category filter, assign those results, then search by another filter and assign again. Businesses that appear in both searches get both categories β€” giving them natural multi-category coverage.

Other Assignment Methods

Business Owner Self-Service Categories

After claiming their business, owners can manage categories through the Business Portal:

Approving Category Requests

Go to Pending Category Requests in the admin sidebar. Each request shows business name, current categories, requested category, and optional rationale. One-click Approve or Deny with optional denial reason.

Category Cleanup & Merging

Current Category Structure (61 subcategories, 15 categories)

🍽️ Fine Dining & Cuisine (7 subcategories)

Chinese, French, Indian, Italian, Japanese, Mediterranean, Steakhouse

πŸ₯€ Food & Drink (7 subcategories)

Bars & Breweries, Breakfast, Catering, Coffee Shop, Food Trucks, Pizza, Seafood

πŸ›οΈ Hyper-Local Retail & Specialty Food (10 categories)

Artisan & Handmade Goods, Bakeries & Dessert Shops, Books/Music/Hobby, Boutiques & Vintage Thrift, Electronics Repair & Resale, Farmers Market, Florists & Garden Shops, Gifts & Stationery, Home & Decor, Specialty Grocery & Gourmet

πŸ”§ Home & Outdoor (10 categories)

Cleaning Services, Electrician, HVAC, Landscaping, Maintenance & Handyman, Plumber, Pool Service, Roofing, Screen Enclosures, Tree Service

πŸ₯ Health & Wellness (7 categories)

Chiropractor, Dentist, Medical & Health Services, Medical Spa, Pet Groomer, Physical Therapy, Veterinarian

πŸ’Ό Professional (5 categories)

Accountant, Business & Professional Services, Personal Injury Lawyer, Property Management, Real Estate Agent

🎭 Entertainment & Events (4 categories)

Family Entertainment, Live Music & Bars, Local Attractions & Tours, Special Events & Party Planning

βœ‚οΈ Personal Care (5 categories)

Boat Charter, Day Spa, Fitness Studio, Hair Salon, Tattoo Parlor

πŸš— Automotive (3 categories)

Auto Repair, Car Detailing & Wash, Tire Shops & Oil Change

🐾 Pet Services (1 category)

Dog Daycare & Boarding

πŸ“š Education & Family (1 category)

Child Care & Education

πŸ“Œ Other (1 category)

Other

πŸ”‘ 19. Google API keys β€” two different keys, two different jobs

Google does not give you one key. It gives you a key per API, and the mistake we see most often is using the wrong one β€” which is what breaks business discovery. There are two, and they are not interchangeable.

πŸ”’ Places API (New) β€” the SERVER key. This is the key that powers business search, discovery and the data-enrichment cycle inside the app. Those calls are made by the server, so in the Google Cloud console this key must be restricted by server IP address β€” never by website referrer. Google's console may list the API as Places API or Places API (New): enable the Places API, and if both names appear, both.
πŸ—ΊοΈ Maps JavaScript API β€” the BROWSER key. Only needed if a map is actually drawn on a page in the visitor's browser. Because that key travels to the browser and is visible in the page source, it must be restricted by website / HTTP referrer to your own domains (*.zaarhub.com plus any custom domains). It cannot do the server-side search job β€” a Maps JavaScript key sitting in the Places field is the single most common cause of "The provided API key is invalid".
🚫 Do not use one "master" key with both APIs enabled. It is convenient and it is the least safe option. A key that has to work from both a browser and a server cannot be tightened to either, so one leak exposes everything β€” and the browser copy is public by nature. Create two keys, each properly restricted, and never a combined one. (David deleted his combined key for exactly this reason β€” don't add one back.)

Where each key goes β€” exact screens and fields

Set it once β€” not once per city

A key is scoped: platform-wide, to one network, or to one directory. A key saved at network level is inherited by every city in that network, so the ZaarHub Google Places key is pasted once and all cities use it β€” do not paste the same key into every city. A standalone directory that is not inside a network keeps its own key. Pick the scope in the Scope dropdown in the row (platform-wide / a network / one directory) before pressing οΌ‹ Add key; the πŸ”Ž Which key is in force for a directory panel below it then shows, per provider, whether the winning key is the directory's own, inherited from its network, or the platform key β€” always masked.

Changing a key β€” you do not need the old value

Never paste a key into a chat, a ticket, a document or a code file

Keys are entered in the panel, full stop. If a key has ever been shared anywhere β€” a chat, an email, a doc, a screenshot, in source code β€” treat it as leaked and rotate it: create a new key in Google Cloud, save it in the panel, then delete the old one in Google Cloud.

Wrong key type, or restricted wrong β€” the symptom and the fix

πŸ“˜ Full detail: the API Keys Setup Guide β€” "Which Google key for which job", and the click-by-click Cloud-console steps under Google Places.

βœ… 20. What only you can do β€” the setup checklist

Everything below needs something a machine can't supply: a key from a provider console, a business decision (which gateway, which CRM account), or a DNS record. None of it is done yet, and none of it can be done from code. Tick each line as it's finished β€” every line names the exact panel screen, so a VA can work straight down the list.

The panel lives at https://zaarhub.com/admin-panel.html. Each screen below is a section on that page, in the order the links appear at the top.

1


Why: the keys were shared in a chat/message, so treat them as seen and replace them.
How: Google Cloud console β†’ Credentials β†’ create a new key β†’ restrict it (Places API (New) by server IP address; Maps JavaScript by website / HTTP referrer) β†’ paste it into the matching labelled field below β†’ then delete the old key in Google Cloud. Which key is which is section 19 above.
Where: the server key goes in Admin Panel β†’ πŸ”‘ Provider API Keys β†’ the "Google Places" row β†’ "Paste API key" β†’ οΌ‹ Add key; the browser key goes in the directory's SEO settings β†’ "Google Maps API Key".
Rule: keys are entered in the panel β€” never in a chat, ticket, document or code file. The panel only ever shows a masked preview (first 4 + last 4 characters), and an empty box never means "no key"; the row itself says when a key is stored and when it last changed.

2


Why: no gateway is set, so checkout refuses and payouts stay pending.
Where: Admin Panel β†’ πŸ’³ Payment Gateways β€” connect Stripe and/or PayPal. A gateway cannot be switched on without its webhook verification value, and the receiver refuses any event it can't verify, so enter that too.

3


Why: with none set, statement emails and reminders are skipped β€” the panel reports the service as "not configured".
Where: Admin Panel β†’ βœ‰οΈ Email / SMTP β€” choose the directory, fill From name, From email, Reply-to and the transport credentials, then press Send test email and confirm it arrives.

4


Why: the ZaarCash-per-redemption rate is still 0, so customers earn nothing when they redeem.
Where: Admin Panel β†’ ⭐ Loyalty Programmes β€” set the units per redemption (and per check-in and visit if you use them). A rate of 0 switches that source off, so a 0 here is a deliberate "no earning", not a default.

5


Where: Admin Panel β†’ 🏦 Clearinghouse Settlement β€” set Settlement enabled, Cycle day (1–28), the issue/redeem rates, minimum payout and ZaarCash expiry (days), then Save settlement settings.
Note: with no payment provider configured (item 2) a settlement run cannot pay out β€” it stays pending, by design.

6


Where: Admin Panel β†’ ✍️ Onboarding Questionnaires β€” write the questions for each audience (customer, supplier, business), then Publish it: a draft never reaches the public. Finally walk each onboarding flow end to end yourself.
What it does: completing a questionnaire credits the network currency (100 units = US$1) through the native loyalty programme and pushes the answers to CoreSwift; if the CRM is unreachable the answers and the currency still land, and the reason is recorded on the response.

7


Decision (do this now): from the candidates in the audit, choose the one CoreSwift account the ZaarHub network should own its leads in.
Connect (wait for the screen): the server already exposes the connection endpoints (/api/v1/integrations/coreswift/connection, …/connection/targets, …/connection/test) but there is no admin screen for them yet β€” the "Integration settings β†’" button on the panel leads to a section that does not exist. Until that screen ships, the connection cannot be made from the panel. This is written down here as pending rather than sending you to a screen that is not there; an endpoint with no UI control is a defect to close, and this line is the reminder.

8


Where: Admin Panel β†’ 🌐 Domains, Subdomains & Subfolders β€” choose a subdomain of the network (e.g. palm-bay.zaarhub.com), its own custom domain, or a subfolder of a host (e.g. zaarhub.com/palm-bay), then οΌ‹ Add mapping.
Why it needs you: the code side can be done from the panel, but a mapping only goes live once DNS resolves. After creating the record, press Check live β€” a host whose DNS still resolves elsewhere is reported not live, never as working.

βœ… How to use this list: items 1–6 are panel-only work a VA can complete with a provider login. Item 7 needs your decision first (and a screen that doesn't exist yet). Item 8 needs the domain's DNS access. Nothing below item 1 is optional β€” until each is done, the matching feature is silent, refusing, or earning zero.
← Back to All Guides