The Basic Meeting List Toolbox

Advanced croutonjs example

Someone in Connecticut made a crouton display meetings specifically that are meeting in person separately from those that are meeting virtually.  The example shows the capability of croutonjs.  The WordPress plugin crouton actually does nothing more than render the croutonjs javascript object when a page loads where the shortcode has been embedded.

Check out the example on Codepen here:

Putting BMLT data on a Wix Site.

Putting BMLT data on a Wix site is fairly simple. Sign into your Wix account and go into the editor view.

Follow this article for adding HTML content to your Wix site:

Copy and paste into the HTML content area the following sample HTML:

Publish and view. You now have BMLT data on your Wix site. You will likely want to customize further because this is sample page. You can view a full list of parameters to do this here:

BMLT, Virtual Meetings, and the Pandemic

The lives and routines of people, organizations, and systems have been disrupted by the COVID-19 pandemic. Narcotics Anonymous and other twelve-step fellowships are no exception. We have seen the closure of most face-to-face meetings in the United States and other affected countries. Thousands of virtual meetings have popped up, seemingly overnight, to provide addicts seeking recovery with a place to connect, share, and carry the message. The sudden influx of virtual meetings in Narcotics Anonymous has created a need for increased support in the BMLT.


Broadly, we have identified two different categories of virtual meetings: those that are location-agnostic, and those that are location-centric. We believe each of these has slightly different BMLT needs.

Location-Agnostic Virtual Meetings

Location-agnostic virtual meetings are not new – such meetings have existed for many years. These meetings expect and welcome attendance from addicts all over the world. When searching for a location-agnostic virtual meeting, one is not concerned with the geographic location of the meeting. The search criteria is usually some combination of the meeting time, preferred language, and meeting format.

As the first face-to-face meetings closed in response to the COVID-19 pandemic, these long-standing virtual meetings were on the front lines. They saw a dramatic and immediate increase in attendance. We personally witnessed more than 400 addicts join a virtual meeting that typically had 10-20 attendees. To satisfy the increased demand, more location-agnostic virtual meetings popped up overnight.

Over the following weeks, hundreds (perhaps thousands?) of location-centric virtual meetings began to get their legs.

Location-Centric Virtual Meetings

Location-centric virtual meetings are a relatively new occurrence. While there are a few long-standing location-centric virtual meetings, they have become widespread as a result of the COVID-19 pandemic.

Many of the new location-centric virtual meetings were started by face-to-face home groups who wished to continue meeting in the absence of a physical meeting place. Attendees of location-centric meetings often consist of home group members and others local to its physical meeting place.

Many of these groups have a long tradition of serving a specific geographic region, and may wish to continue focusing on carrying the message to that region. That is not to say they are unwelcoming to remote attendees who happen to find the meeting, but that they wish to preserve the culture and familiarity of their meeting. We’ve seen other groups make a conscious decision to invite addicts around the world to their virtual meeting.

It is likely that many of these new virtual meetings will close when physical meeting places become available again. It is also conceivable that some will choose to keep their virtual option, forming hybrid virtual/face-to-face groups. Others may remain virtual indefinitely.

BMLT, Listing Virtual Meetings

While the BMLT has become the standard for storing, finding, and displaying face-to-face meeting data, the community has quickly discovered gaps in functionality to effectively manage both location-agnostic and location-centric virtual meetings. We have observed members filling these gaps by sharing meeting information through Facebook groups, flyers, and spreadsheets. These work well in the short-term, but quickly become a source of out-dated information.

We are beginning to address these problems by adding increased support for virtual meetings in new releases of the Root Server (2.15.1) and Crouton (3.9.0). We believe this is the first of many iterations of the BMLT for supporting virtual meetings.

Storing Virtual Meeting Data (Root Server)

Location-agnostic and location-centric virtual meetings have unique storage requirements, and therefore have unique recommendations.


Location-agnostic and location-centric data should live in separate Root Servers. The reason is purely technical – meeting searches for each are conducted using different criteria. When searching for a virtual meeting, a user may search for all English-speaking meetings, regardless of location, to find one at a convenient time. When searching for meetings near “Atlanta, GA”, it doesn’t make sense to interleave location-agnostic virtual meetings from Europe in the results.


The root server maintained by is widely recognized as the source of truth for location-agnostic virtual meetings. If you have a location-agnostic virtual meeting, you should get listed by Similarly, if you have a location-centric virtual meeting that wishes to invite attendees from all over the world, you should also get listed by


Because is already serving as the source of truth for location-agnostic virtual meetings, the changes in Root Server 2.15.1 and Crouton 3.9.0 are designed primarily to serve the needs of location-centric virtual meetings, allowing users to search for virtual meetings near them.

New Fields – Virtual Meeting Link, Phone Meeting Dial-in Number

We have added two new fields to the Meeting Editor: “Virtual Meeting Link” and “Phone Meeting Dial-in Number”. The “Virtual Meeting Link” field is designed to hold the join link for video-capable virtual meetings software such as Zoom and BlueJeans. The “Phone Meeting Dial-in Number” field is designed to hold a phone number that can be used to join the meeting. These fields have been added to the NAWS Export, ensuring NAWS has the most up-to-date information about these new location-centric virtual meetings.

New Formats – VM (Virtual Meeting), TC (Temporarily Closed)

We have also added two additional formats: VM (Virtual Meeting) and TC (Temporarily Closed). The VM format is used to denote that a meeting offers a virtual option. The TC format is used to denote that this meeting’s physical meeting place is temporarily closed.


For meetings that were previously face-to-face but are now providing a virtual option, it is our recommendation that BMLT administrators fill in the new “Virtual Meeting Link” and “Phone Meeting Dial-in Number” fields, and then assign the VM and TC formats. When the face-to-face meeting reopens, the TC format should be removed. If the meeting decides to remove its virtual option upon reopening, the VM format should also be removed.

For meetings that are temporarily closed and do not have a virtual option, it is fine to either unpublish the meeting or assign the TC format. Unpublishing will remove the meeting from meeting lists entirely, while the TC format keeps the meeting in the list, but clearly marks it as being Temporarily Closed.

For meetings that have never had a physical meeting place, but are still location-centric, assign the VM format. Additionally, it is important to provide some geographic information for such meetings in the Root Server. For example, if the virtual meeting primarily provides services to members in Seattle, just enter “Seattle, WA” for the city and state, leaving all of its other location fields empty.

Displaying Virtual Meeting Data (Crouton)

Crouton 3.9.0’s introduces a new default Meeting Data Template and Metadata Template, making use of the new Root Server fields and the VM (Virtual Meeting) and TC (Temporarily Closed) formats.


To use Crouton to display location-agnostic meetings from on your website, please see this blog post:


Crouton’s default Meeting Data Template and Metadata Template now supports displaying location-centric virtual meeting information out of the box.

When a meeting is assigned the TC format, Crouton will clearly mark the meeting with the text “Facility is temporarily closed”. When a meeting is assigned the VM format, Crouton will clearly mark the meeting with the text “Meets Virtually”, and display the Virtual Meeting Link and/or Phone Meeting Dial-in Number. A meeting may have both the TC and VM format assigned, indicating both that the facility is closed but that a virtual option is available.

Meeting with the TC format, but no VM format

Meeting with both the TC and VM format

Existing Crouton installations may need to reset templates

If you have an existing Crouton installation that has customized the Meeting Data template or Metadata Template, you may need to reset to the default templates to take advantage of the new functionality. This can be done by clicking the “RESET TO DEFAULT” buttons in the Crouton plugin settings in the WordPress admin.


We recommend upgrading to Crouton 3.9.0, and resetting to the default templates to display location-centric meeting information on your websites. Note that this functionality depends on your root server administrator having upgraded to Root Server 2.15.1, and on meetings having leveraged the new Root Server fields and formats.

Excluding a custom format from a Yap query.

It’s possible to exclude a result from Yap results by using a custom format. For example say you made a Temporary Closure format that had an ID of 2069. You could set in your config.php a custom query, which would exclude those in the response.

static $custom_query="&sort_results_by_distance=1&long_val={LONGITUDE}&lat_val={LATITUDE}&geo_width={SETTING_MEETING_SEARCH_RADIUS}&weekdays={DAY}&formats=-2069";

Displaying both virtual meetings and face-to-face meetings on the same page in Crouton.

This approach allows you to use Crouton to show both virtual and face-to-face meetings on the same page using Crouton.

It requires using the “Bus Lines” and “Train Lines” fields (which are rarely used extra fields, but any could be used theoretically). This uses the Meeting Data Template and Metadata Template features in the Crouton configuration in administration portal as seen below.

Meeting Data Template

<div class="meeting-name">{{this.meeting_name}}</div>
{{#if this.train_lines}}
<div class="location-text">{{this.train_lines}}</div>
<div class="location-text">{{this.location_text}}</div>
<div class="meeting-address">{{this.formatted_address}}</div>
<div class="location-information">{{this.formatted_location_info}}</div>

Metadata Template

{{#if this.bus_lines}}
<div>{{formatLink this.bus_lines}}</div>
{{else}}<a id="map-button" class="btn btn-primary btn-xs" href=";query={{this.latitude}},{{this.longitude}}&amp;q={{this.latitude}},{{this.longitude}}" target="_blank" rel="noopener noreferrer"> {{this.map_word}}</a>
<div class="geo hide">{{this.latitude}},{{this.longitude}}</div>

The end result is the below with both face-to-face and a temporarily closed meeting that is now meeting virtually (in this case by phone).

Here is what it looks like in the root server.

Displaying meetings on your site using Crouton.

Use this shortcode with crouton to display virtual meetings from the root server.

[bmlt_tabs root_server="" service_body_parent="4" include_city_button="0" has_zip_codes="0" has_cities="0" has_locations="0" has_languages="1" has_areas="0" base_tz="UTC" filter_tabs="1" auto_tz_adjust="1" default_filter_dropdown="languages=english-speaking" metadata_template="&amp;lt;div class='bmlt-comments'&amp;gt;{{formatLink this.formatted_comments}}&amp;lt;/div&amp;gt;&amp;lt;img style='display: inline-block; text-align: center;' src=';amp;cht=qr&amp;amp;chl={{ this.formatted_comments }}&amp;amp;choe=UTF-8' /&amp;gt;"]

Merging a Regional Yap Server into a Zonal Yap Server

Since Yap 3.0.0 (released in March 2019), it’s been possible to use a single Yap server with multiple Twilio accounts.  What this means is that a service body can handle the overhead of server management while another service body retains the management of phone numbers and billing.

Yap 3 also introduced the concept of configuration precedence (  This creates the ability to manifest all kinds of powerful capability without requiring access to the config.php on the server (critical for this situation where server management is handled by someone else).  It also has the ability to set a value at regional level while the hierarchy of the BMLT automatically cascades down to the member areas.

Recently I had to migrate my regional yap server to the zonal server.  Below is the process I followed, feel free to send an email to if you’d like more details.

Consider whether you may want to take a backup and overwrite your existing Yap database, or make a copy with a new install and config to do side by side testing.  You may also want to consider setting in the database config ahead of time or afterward.  You may also want to transfer any other settings in your top level config.php to the Config settings in the admin portal.  Keep in mind that service bodies will use the hierarchy, so if you set this as a regional level all the service bodies connected will inherit them.

1) Delete any configuration from the target yap server, use the server body IDs that would be the IDs that would be the query below:

DELETE FROM config where service_body_id in (x [,x]);

2) Begin an export from your source yap server, select only data and exclude the flags table.  See the screenshot below.  (Use a self-contained file)

Pasted Graphic.png

3) After the file has been exported run the below on your system.  In the below example, “export.sql” is the file exported from Step 2 above.

cat export.sql | sed -e “s/([0-9]*,/(NULL,/g” > export-mod.sql

4) Import export-mod.sql into the target yap server.  “export-mod.sql” is the output from the command run locally in Step 3 above.

5) Your phone numbers must have explicit service body overrides in order to pull configuration values from the database (you can use either override_service_body_id or override_service_body_config_id).  One changes your service body for call routing and the other selects configuration, respectively.

Customize the CSS of Crouton

Here is a sample of the CSS that was used to customize the Volunteer Region crouton.  Utilizing the recent feature released with crouton 2.1.0, you can fully customize the colors.  I thought this might be useful to assist in making it easy to reuse.  (Note: this may become incompatible very quickly) 

You can also submit your theme design to crouton to be included:

Read more

Study on Statewide Meeting Schedules

Service bodies tend to not necessarily follow boundaries that make sense to someone who does not understand it’s organizational makeup.  By using the Tomato server, it’s entirely possible to create a schedule that follows geopolitical boundaries without much effort.  For this study, I decided to use the 50 states of the United States.  This study could have easily been other such designations, perhaps provinces in Canada.  I’m also going to make use of the recent feature released in bread 1.6.x (see the blog post on “Reusable Templates w/Bread 1.6.x“)

Read more