Skip to main content

Events & Shops

How to configure the Flourish Liminal managed package for paid tickets, donations, products, and bookable time slots.

Overview

Flourish Liminal is a Salesforce managed package that gives you a flexible, lightweight way to run any of these:

  • Ticket sales for an event, with quantity limits.
  • Product purchases with stock counts.
  • Time-slot booking — visitors pick a date/time from a calendar.
  • Paid registrations with online card or bank payment via Braintree.
  • Recurring donations if you have NPSP installed.

Every purchase produces an Opportunity in Salesforce, attached to a matched or newly created Contact.

Admins also have access to two admin tools:

  • Engagement Builder — create and configure engagements, offerings, and availabilities with a guided UI.
  • Engagement Dashboard — monitor capacity, view orders, and export data across all engagement types.

This guide covers everything except the volunteer signup flow. For that, see Volunteers. The two are independent — you can use either, both, or neither.


Before You Start

You need:

  • The Flourish Liminal managed package installed.
  • A Braintree account (production or sandbox) if you want to take payments.
  • Permission to create custom metadata records, edit Lightning pages, and manage permission sets and sharing rules.
  • (Optional) NPSP for the recurring-donation features.

Step 1 — Configure the org-wide settings

Liminal reads a single custom metadata record to find its Braintree credentials and other defaults.

  1. Go to Setup > Custom Metadata Types > FL Liminal > Manage Records.
  2. Click New and fill in:
    • Label and FL Liminal Name: global (case-sensitive).
    • Braintree Token — your Braintree API key.
    • Braintree Sandbox Mode — check for testing; uncheck for production.
    • Completed Order Opp StageName — defaults to Closed Won if blank.
    • Customer Support Email — shown on checkout.
    • Payment Mailing Address — shown on checkout.
  3. Save.

Step 2 — Assign the permission set

  1. Go to Setup > Permission Sets > Liminal Admin > Manage Assignments > Add Assignments.
  2. Add yourself and anyone configuring offerings.

Note: This permission set does not grant guest user access. For public-facing pages, see Step 7.


Step 3 — Understand engagement types

Liminal supports three engagement types, set via the Engagement Type picklist on the Campaign:

TypeWhat it's forBuilder experienceDashboard experience
EventTicketed events with time slotsCalendar/list shift managementAttendee roster, no check-in
ShopE-commerce products with inventoryInventory lot management, price requiredOrder list, revenue charts
VolunteerVolunteer shifts with check-inCalendar/list shift management (same as Event)Roster with check-in/check-out

The type determines what tabs appear in the Builder's role modal, what metrics the Dashboard shows, and how CSV exports are structured.


Step 4 — Create an engagement (Campaign)

  1. Add the Liminal: Engagement Builder component to a Lightning App Page.
  2. Click + New in the left panel.
  3. Choose the engagement type (Event, Shop, or Volunteer).
  4. Fill in the name and save.
  5. Configure details, schedule, location, and appearance in the section cards.

Manual creation

  1. Campaigns tab > New.
  2. Fill in Name, Active, Description, Start Date, End Date.
  3. Set Engagement Type to the appropriate value.
  4. Fill in Event Image URL and address fields as needed.
  5. Timezone: Lim TZ Name and Lim TZ Offset are filled in automatically when you save. Defaults to US Central (America/Chicago). The offset is DST-aware — it recomputes automatically when you change the Start Date or Timezone Name.
  6. Save.

Step 5 — Create offerings and availabilities

5.1 Stock-style offering (tickets, products — especially Shop type)

  1. Create a Liminal Offering linked to your Campaign (via the Builder's offerings table or manually).
  2. Set Price — required for Shop type, optional for others.
  3. Create a Liminal Availability with record type Stock:
    • Quantity — total available.
    • Price Override — optional, overrides the offering's base price for this lot.
    • Available From / Until — optional date window.
  4. Save.

The Builder's Inventory tab (Shop type) provides a clean table for managing stock lots.

5.2 Slot-style offering (appointments, events, volunteer shifts)

  1. Create the offering. The Builder auto-sets Slot_Value_Type__c = 'Datetime' for Event/Volunteer types.
  2. Create Liminal Availability records with record type Slot:
    • Start Datetime / End Datetime.
    • Max Bookings — per-slot capacity.
    • Slot Open/Close — must be Open. The Builder sets this automatically.

The Builder's Shifts tab provides:

  • Calendar view: click a date, click "Add Shift", fill in the form.
  • List view: grouped by date, click any slot to edit.
  • Shift form: separate Start Date/Time and End Date/Time rows with Max Bookings.

Warning: Shifts created without Slot Open/Close = Open won't be counted in capacity rollups. Always use the Builder or set this field manually.

5.3 Hybrid offering

Create an Availability with record type Hybrid and fill in both Quantity__c and the slot Start/End times.


Step 6 — Publish the storefront page

Liminal ships three main public components:

ComponentUse forRequired properties
Liminal: Ticket StorefrontStock-style purchasingengagementId, orderId
Liminal: CalendarSlot-style bookingofferingId, orderId
Liminal: CheckoutPayment + customer detailsorderId

Drag these onto a Lightning page, set the shared orderId, save, and activate.


Step 7 — Configure Experience Cloud (public sites)

  1. Site published with the page hosting Liminal components.
  2. Guest User Profile grants appropriate read/create/edit permissions.
  3. Sharing rules expose active Campaigns and child records.
  4. Remote Site Settings for Braintree are active.

Step 8 — Use the admin tools

Engagement Builder

The Liminal: Engagement Builder provides a guided admin interface:

  • Left panel: lists all engagements with a flavor picker for new ones.
  • Main area: section cards for Details, Schedule, Location, Appearance, and Offerings.
  • Role modal: click an offering to open a modal with type-specific tabs.

For Shop type, the modal shows "Product Details" (with required Price) and "Inventory" (stock lot table). For Event/Volunteer, it shows "Basic Details" and "Shifts" (calendar/list with shift form).

Engagement Dashboard

The Liminal: Engagement Dashboard provides operational monitoring:

  • Overview page: stat cards and charts across all engagements.
  • Left panel: collapsible sections for Events, Shops, and Volunteers.
  • Type-specific detail views: tailored metrics and rosters per engagement type.
  • CSV export: type-aware columns.

Step 9 — How payments work

Credit card payments via Braintree, ACH bank transfers, pay-later mode, and NPSP recurring donations are all supported.

When a customer completes checkout, Liminal matches or creates their Contact, creates an Opportunity for the order, and marks each line item as Ordered.

If payment succeeds but Salesforce fails to record it afterward, the checkout shows a recovery message asking the customer to email support with their order ID. The charge stands — your team can finish updating the Salesforce side manually.


Step 10 — What records show up after a sale

RecordWhere to find it
ContactMatched or created by the fuzzy lookup.
AccountIf NPSP, household Account auto-created.
OpportunityNamed Liminal Order #<orderId>. Amount = total paid. Carries customer details in Lim Order First Name/Last Name/Email/Phone/Organization fields.
Liminal SelectionsOne per line item. Contact Id field links to the Contact.

Step 11 — How capacity is calculated

Liminal keeps running totals on each Offering so you can see what's available at a glance. These update automatically as orders come in.

For stock-style offerings (tickets, products):

  • Quantity Provided — total stock you've added across all Availabilities.
  • Quantity Claimed — items in someone's cart but not yet paid.
  • Quantity Ordered — items that have been paid for.
  • Quantity Available — Provided minus Claimed and Ordered.

For slot-style offerings (events, shifts):

  • Slots Provided — total capacity across all shifts.
  • Slots Claimed — slots reserved but not yet confirmed.
  • Slots Ordered — confirmed bookings.
  • Slots Available — Provided minus Claimed and Ordered.

Note: A shift's capacity only counts toward Slots Provided if its Slot Open/Close field is set to Open. The Engagement Builder sets this for you; if you create Availabilities manually, set it yourself or capacity will show as 0.


Step 12 — Customizing what the customer sees

Branding

Replace images and fonts in the liminal_static static resource bundle. Adjust theme colors and fonts at the community level.

Customer detail form

The set of fields shown on checkout is driven by Campaign.Lim_Customer_Detail_Template__c.

Confirmation email

Build a record-triggered Flow on Opportunity (for paid orders) or Liminal Selection (for volunteer signups).


Common questions

Can a single page combine tickets and slot booking? Yes — use the same orderId across both components.

What about timezones? The Campaign trigger auto-populates timezone name and DST-aware offset. The Builder and Dashboard use these for correct datetime display. The consumer slot picker still uses the browser's timezone (known gap for multi-timezone audiences).

Why does the dashboard show 0 slots? Check Slot Open/Close = Open on your Availability records.

How do I clean up abandoned carts? Schedule a batch job or Flow to delete stale Claimed Selections.

What are the Lim Order fields on Opportunity? Five fields (First Name, Last Name, Email, Phone, Organization) that carry customer/volunteer contact details. Populated by the volunteer signup and available for e-commerce flows.


Quick setup checklist

  • FL Liminal custom metadata record named global created with Braintree credentials.
  • Liminal Admin permission set assigned.
  • Remote Site Settings active.
  • Campaign created, Active, with Engagement Type, Start/End dates, and Event Image URL.
  • Offerings created with correct pricing and configuration.
  • Availabilities created with correct record type, Slot Open/Close set to Open for slots, and capacity values.
  • Storefront page built with the appropriate components sharing one orderId.
  • Engagement Builder and Engagement Dashboard placed on admin pages.
  • Guest user permissions and sharing rules in place (if public).
  • Confirmation email Flow configured.
  • End-to-end smoke test in incognito with a Braintree sandbox card.
  • Production cutover: flip Braintree Sandbox Mode off.