Combine a directory, offers, chat, and reviews into one venue app

What you are building

A venue app is the flagship MAM Suite build: a browsable directory of places — restaurants, shops, parks, vendors, clinics — where each listing is more than a name and a map pin. Tap a listing and you get a full venue page that can carry special offers, a Chat button to message the venue, and reviews and ratings from other app users. By the end of this tutorial, all four features live on the same listing, sharing one detail screen.

Each of these four features comes from its own MAM Suite plugin, with mam-geodirectory acting as the hub the other three plug into:

Feature Plugin What it adds to a listing
Directory mam-geodirectory (+ GeoDirectory) The list, map, and per-listing detail screen
Offers mam-special-offers A “Special Offers” section and an “Edit Deals” button
Chat mam-chat-manager A “Chat” / “Message” button that opens a thread with the venue
Reviews mam-reviews-manager A reviews list, star ratings, and an “Add a Review” form

This is a Tutorial, so work through the parts in order. Each one stands on its own — you can stop after Part 1 with a working directory and come back for the rest later. Along the way, you’ll find links out to the per-plugin recipes for the detailed configuration of each piece.


Before you start

You need:

  • A MAM Suite install with mam-main activated, and a project/app already created (see Building Your App: create your first app).
  • The GeoDirectory third-party WordPress plugin (2.x) installed and active. GeoDirectory is what actually stores your listings; mam-geodirectory bridges that data into the app.
  • Entitlements for mam-geodirectory, mam-special-offers, mam-chat-manager, and mam-reviews-manager. Without its entitlement, a plugin simply stays quiet — no errors, just no feature.
  • For the in-app self-service flows (owners editing their own offers, submitting reviews), Gravity Forms plus MAM Gravity Forms Manager. Browsing offers and reviews needs none of that — Gravity Forms only comes into play when someone creates one from inside the app.

A note on roles. Most venue apps have two kinds of user: consumers who browse, chat, and review, and venue owners / staff / managers who manage their own listing. You’ll see several of the features below behave differently depending on who’s signed in — that’s by design, since the directory tracks ownership per listing.


Part 1 — Stand up the directory

This part is the foundation — everything else in this tutorial attaches to it.

  1. Create your listings in GeoDirectory. Use GeoDirectory’s normal admin flow (or an import) to populate the gd_place post type — or any custom GeoDirectory CPT you’ve registered. mam-geodirectory automatically picks up every registered GeoDirectory post type and turns each into a mobile content surface, with one exception: gd_event, which gets its own separate events surface.

  2. Open the Geodirectory settings page. In Mobile App Manager → Geodirectory, you get one settings tab per registered GeoDirectory post type, plus a global tab. This is where you wire up the per-post-type forms (Add/Edit Listing, etc.) and the per-app toggles. The defaults are sensible enough to leave alone — the one setting most people adjust early is the search radius. See Recipe: Configure the GeoDirectory settings page.

  3. Place the directory in your app’s navigation. The plugin registers directory content surfaces — list, map, and calendar views among them. Add the directory as a main tab bar item or a left-menu entry in App Setup, the same way you place any other content type. Most app authors put the directory front and center with its own tab.

  4. Confirm the listings appear. Open the app (or the live preview), head to the directory tab, and confirm your listings load both as a list and on the map. Tap one to open its detail screen — right now it shows just the built-in content sections: address, business hours, social links, post content, and so on. The next three parts build on this very screen.

Under the hood, the detail screen is assembled from MAM “content sections,” and each plugin below contributes its own section or button to that assembly — which is exactly why all four features can coexist without stepping on each other. For the full per-listing data the app receives, see Mobile listing data shape; for how the detail screen is built, see Listing detail content sections.


Part 2 — Add special offers to listings

Offers are short, dated promotions you attach to a listing — a single listing can carry up to four concurrent offers.

  1. Activate mam-special-offers. When it is active alongside mam-geodirectory, GeoDirectory post types automatically gain a Special Offers meta box, and a special_offers content section is registered against the directory’s listing detail payload. There’s no extra wiring — offers just appear.

  2. Add an offer to a listing. Open a listing in the WordPress admin and find the Special Offers meta box. It has four numbered tabs (Offer 1 through Offer 4). Fill in at least the Offer Title and Subtitle (both required to create a new offer), add details, an image, and start/end dates — or tick Always Available to skip dates. Save. See Recipe: Add a special offer to a listing.

  3. See where offers surface. With at least one published offer:

    • The listing’s detail screen gains a Special Offers section listing that venue’s current offers. Expired offers (end date in the past) drop off automatically the day after they end.
    • A location-aware nearby offers feed returns offers within a configurable radius (default 5 miles). Since the offer’s parent is a GeoDirectory listing, it automatically inherits that listing’s latitude and longitude.
  4. (Optional) Let venue owners manage their own offers. With Gravity Forms and MAM Gravity Forms Manager installed, listing detail screens show an Edit Deals tab bar button — but only to the listing’s owner, staff, manager, or an admin. No one else even knows it’s there. How many offer slots the owner can edit is governed by the listing’s pricing package (the no_of_deals_included package field). See Recipe: Let venue owners manage offers from the app and Integration: Special Offers.

Heads up: the radius is global. Change the offers search radius via the Geodirectory radius override, and it widens the nearby-offers search for every offer in the app — not just the GeoDirectory-parented ones.


Part 3 — Add chat to listings

Chat lets a consumer message a venue right from inside the app, routing that message to the venue’s owner and staff.

  1. Activate mam-chat-manager. This turns on the app’s chat surfaces generally: a Chat tab bar button (the user’s thread list), unread badges, and the chat API the mobile client talks to.

  2. Enable the per-listing Chat button. When chat-manager is active, mam-geodirectory can attach a Chat button to a listing’s detail screen so a consumer can message that specific venue. Whether that button actually shows depends on a few rules, the biggest one being the listing’s pricing package: it needs Chat With Venue enabled. If that package option is off, the listing shows no Chat button — even when everything else is set up right. See Recipe: Pricing package fields and Integration: Chat Manager.

  3. Understand who can chat with whom. The Chat button is consumer-facing, and it’s intentionally hidden from the people who are the venue — the listing’s author, owner, and staff don’t get a “message this venue” button on their own listing. Behind the scenes, each listing has its own chat group: the owner and any accepted staff or managers are the recipients on the venue side, so one thread reaches the whole team. Staff get added to (and removed from) that group automatically as they join or leave the listing.

  4. (Optional) Configure admin support chat. Separate from venue chat, chat-manager also offers a support chat channel connecting users to a chosen group of WordPress administrators. Set the support display name, avatar, and member admins under Mobile App Manager → Chat Settings. See Recipe: Configure the admin support chat.

  5. Confirm it works. Sign in as a consumer (not the listing owner), open a listing that has at least one staff member and a chat-enabled package, and confirm the Chat / Message button appears and opens a thread.


Part 4 — Add reviews and ratings to listings

Reviews and star ratings let app users rate and review each venue.

  1. Activate mam-reviews-manager. When active, it registers reviews content sections — a reviews list, a reviews header, and an Add a Review section — against the directory’s listing detail payload (local_app_geodirectory). Like offers, reviews attach to the directory automatically — just switch the plugin on.

  2. Turn reviews on for listings. In the listings app settings, enable the reviews toggle (the Enable Reviews? setting, listing_show_reviews). This is the on/off switch for the reviews section and star ratings on listing detail screens. There are companion settings for showing reviews on the home screen, showing likes, and hiding stars — see the listings app-setting reference.

  3. Choose the review submission form. Submitting a review from inside the app uses a Gravity Forms form, selected in the Review Form setting (gravity_review_form). Pick the form app users fill in to leave a review. This is the path that needs Gravity Forms + MAM Gravity Forms Manager.

  4. Decide on moderation. Reviews can be auto-approved or held for moderation (the automatically approve reviews setting). If you hold them, app users see a “pending” confirmation message after submitting; the wording of the pending and confirmed messages is configurable in the reviews app settings. See the reviews_pending_message and reviews_confirmed_message app-setting docs.

  5. (Optional) Tune the appearance. Reviews have their own layout (review_layout_id), custom star images (ratings_custom_star_image_map), and category options. These live in the listings/reviews app-setting sections, and it’s perfectly fine to leave them at their defaults for your first launch.

  6. Confirm it works. Open a listing detail screen and confirm the Reviews section and star rating appear, and that the Add a Review entry opens your chosen review form.


Putting it together — one listing, four features

Once you’ve worked through all four parts, a single listing detail screen carries:

  • The core listing content (address, hours, social, content) from the directory.
  • A Special Offers section (Part 2), plus an Edit Deals button for owners.
  • A Chat / Message button (Part 3) for consumers, routed to the venue’s team.
  • A Reviews section with star ratings and an Add a Review form (Part 4).

Two things make this layering clean rather than chaotic:

  1. The directory is the hub. Offers, chat, and reviews all register their sections and buttons against the GeoDirectory listing payload. They don’t each define their own venue screen — they decorate the one the directory already builds.

  2. Visibility is role-aware. Owner/staff buttons (Edit Deals) and consumer buttons (Chat) are shown to different people on the same screen. You don’t have to build two apps; the same listing renders the right controls for whoever is signed in.


Part Requires Optional add-on
1 — Directory GeoDirectory, mam-geodirectory
2 — Offers mam-special-offers + Part 1 Gravity Forms (owner self-service)
3 — Chat mam-chat-manager + Part 1
4 — Reviews mam-reviews-manager + Part 1 Gravity Forms (in-app submission)

Build Part 1 first, and confirm your listings load before adding anything else. After that, offers, chat, and reviews can go in any order — each stands independent of the other two.


Troubleshooting

  • Listings don’t appear at all. Confirm GeoDirectory is active and has published places, and that the mam-geodirectory entitlement is not blocked. The plugin no-ops silently if GeoDirectory is missing.
  • Offers meta box is missing on a listing. Confirm mam-special-offers is active. The meta box is added to GeoDirectory post types only when both plugins are on.
  • Edit Deals or Chat button not showing for an owner / consumer. These are role- and package-gated. Check the listing’s pricing package (deal allowance for Edit Deals; Chat With Venue for chat) and confirm you are signed in as the right kind of user. Owners don’t see the Chat button on their own listing — that is expected.
  • Reviews section not rendering. Confirm the Enable Reviews? setting is on and mam-reviews-manager is active.
  • Can’t submit an offer or review from the app. In-app creation needs Gravity Forms + MAM Gravity Forms Manager and a form selected (Review Form for reviews; the auto-registered offers form for deals). Browsing works without them; creating does not.

  • Plugin: mam-geodirectory
  • Plugin: mam-special-offers
  • Plugin: mam-chat-manager
  • Recipe: Configure the GeoDirectory settings page
  • Recipe: Pricing package fields
  • Recipe: Add a special offer to a listing
  • Recipe: Let venue owners manage offers from the app
  • Recipe: Enable chat
  • Recipe: Configure the admin support chat
  • Integration: Special Offers
  • Integration: Chat Manager
  • Listing detail content sections
  • Mobile listing data shape
Was this article helpful?
Contents

    Need Support?

    Can't find the answer you're looking for? Don't worry we're here to help!